--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/debugapi/tsrc/src.s60/testjavadiagnostic.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,447 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Tests for Java Debug API
+*
+*/
+
+#include <memory>
+#include <flogger.h>
+
+#include "TestHarness.h"
+#include "javadiagnostic.h"
+#include "javaredirector.h"
+#include "diagnosticimpl.h"
+
+#include "logger.h"
+
+using namespace java::debug;
+using namespace java::util;
+
+_LIT8(KText1,"");
+_LIT8(KText2," ");
+_LIT8(KText3,"\n");
+_LIT8(KText4,"hello world\r\n");
+_LIT8(KText5,"this is\r\n multiline\r\n example string with\t tabs\r\n");
+_LIT8(KText6,"very long string indeed\r\n");
+_LIT8(KText7,"0123456789abcdefghijklmnopqrstyvwxyz\r\n");
+_LIT8(KText8,"*-.,/\"%&()=?\r\n");
+
+class TestListener: public DiagnosticListener
+{
+public:
+ TestListener() : mSystemOutCount(0), mSystemErrCount(0), mLogCount(0)
+ {
+ mData = HBufC8::New(2000);
+ };
+ ~TestListener()
+ {
+ delete mData;
+ };
+
+ virtual void systemOut(const TDesC8& aData)
+ {
+ *mData = aData;
+ mSystemOutCount++;
+ };
+ virtual void systemErr(const TDesC8& aData)
+ {
+ *mData = aData;
+ mSystemErrCount++;
+ };
+ virtual void log(const TDesC8 &aData)
+ {
+ *mData = aData;
+ mLogCount++;
+ };
+
+ bool operator==(const TDesC8& aRhs) const
+ {
+ if (aRhs.Compare(mData->Des()) == 0)
+ return true;
+ return false;
+ };
+
+ TInt mSystemOutCount;
+ TInt mSystemErrCount;
+ TInt mLogCount;
+
+private:
+ HBufC8* mData;
+};
+
+class LoggingListener : public TestListener
+{
+public:
+ virtual void systemOut(const TDesC8& aData)
+ {
+ flog(aData);
+ TestListener::systemOut(aData);
+ };
+ virtual void systemErr(const TDesC8& aData)
+ {
+ flog(aData);
+ TestListener::systemErr(aData);
+ };
+ virtual void log(const TDesC8& aData)
+ {
+ flog(aData);
+ TestListener::log(aData);
+ };
+
+protected:
+ virtual void flog(const TDesC8& aData)
+ {
+ _LIT(KLogDirectory, "debug"); // create e.g. c:\logs\java to get logs
+ _LIT(KLogFileName, "javadiagnostic.txt");
+ RFileLogger::Write(KLogDirectory, KLogFileName, EFileLoggingModeAppendRaw, aData);
+ };
+};
+
+class DiagnosticImplTester : public DiagnosticImpl
+{
+public:
+ using DiagnosticImpl::DoCancel;
+ using DiagnosticImpl::RunError;
+};
+
+TEST_GROUP(TestJavaDiagnostic)
+{
+ TEST_SETUP()
+ {
+ }
+
+ TEST_TEARDOWN()
+ {
+ }
+};
+
+
+TEST(TestJavaDiagnostic, createInstance)
+{
+ std::auto_ptr<JavaDiagnostic> jd(JavaDiagnostic::createInstance());
+ CHECK(jd.get());
+}
+
+TEST(TestJavaDiagnostic, setRemoveListener)
+{
+ std::auto_ptr<JavaDiagnostic> jd(JavaDiagnostic::createInstance());
+ CHECK(jd.get());
+
+ TestListener listener;
+ TInt rc = jd->setDiagnosticListener(listener);
+ CHECK(rc == KErrNone);
+ jd->removeDiagnosticListener();
+}
+
+TEST(TestJavaDiagnostic, setRemoveListenerTwice)
+{
+ std::auto_ptr<JavaDiagnostic> jd(JavaDiagnostic::createInstance());
+ CHECK(jd.get());
+
+ TestListener listener;
+ TInt rc = jd->setDiagnosticListener(listener);
+ CHECK(rc == KErrNone);
+ TestListener listener2;
+ rc = jd->setDiagnosticListener(listener2);
+ CHECK(rc == KErrAlreadyExists);
+
+ jd->removeDiagnosticListener();
+ jd->removeDiagnosticListener();
+}
+
+TEST(TestJavaDiagnostic, noRemoveListener)
+{
+ std::auto_ptr<JavaDiagnostic> jd(JavaDiagnostic::createInstance());
+ CHECK(jd.get());
+
+ TestListener listener;
+ jd->setDiagnosticListener(listener);
+}
+
+TEST(TestJavaDiagnostic, noSetListener)
+{
+ std::auto_ptr<JavaDiagnostic> jd(JavaDiagnostic::createInstance());
+ CHECK(jd.get());
+
+ jd->removeDiagnosticListener();
+}
+
+TEST(TestJavaDiagnostic, serverNotRunning)
+{
+ Redirector r;
+ TInt rc = r.connect();
+ CHECK(rc != KErrNone);
+
+ rc = r.systemOut(KText1);
+ CHECK(rc != KErrNone);
+ rc = r.systemErr(KText1);
+ CHECK(rc != KErrNone);
+ rc = Redirector::log(KText1);
+ CHECK(rc != KErrNone);
+
+ r.close();
+}
+
+TEST(TestJavaDiagnostic, redirectorNotConnected)
+{
+ Redirector r;
+
+ TInt rc = r.systemOut(KText1);
+ CHECK(rc != KErrNone);
+ rc = r.systemErr(KText1);
+ CHECK(rc != KErrNone);
+ rc = Redirector::log(KText1);
+ CHECK(rc != KErrNone);
+
+ r.close();
+}
+
+TEST(TestJavaDiagnostic, alreadyRunning)
+{
+ std::auto_ptr<JavaDiagnostic> jd1(JavaDiagnostic::createInstance());
+ CHECK(jd1.get());
+
+ TestListener listener;
+ TInt rc = jd1->setDiagnosticListener(listener);
+ CHECK(rc == KErrNone);
+
+ std::auto_ptr<JavaDiagnostic> jd2(JavaDiagnostic::createInstance());
+ CHECK(jd2.get());
+
+ rc = jd2->setDiagnosticListener(listener);
+ CHECK(rc != KErrNone);
+}
+
+
+TEST(TestJavaDiagnostic, systemOut)
+{
+ std::auto_ptr<JavaDiagnostic> jd(JavaDiagnostic::createInstance());
+ CHECK(jd.get());
+
+ TestListener listener;
+ jd->setDiagnosticListener(listener);
+
+ Redirector r;
+ TInt rc = r.connect();
+ CHECK(rc == KErrNone);
+
+ rc = r.systemOut(KText1);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText1);
+ CHECK(listener.mSystemOutCount == 1);
+
+ rc = r.systemOut(KText2);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText2);
+ CHECK(listener.mSystemOutCount == 2);
+
+ rc = r.systemOut(KText3);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText3);
+ CHECK(listener.mSystemOutCount == 3);
+
+ rc = r.systemOut(KText4);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText4);
+ CHECK(listener.mSystemOutCount == 4);
+
+ rc = r.systemOut(KText5);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText5);
+ CHECK(listener.mSystemOutCount == 5);
+
+ rc = r.systemOut(KText6);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText6);
+ CHECK(listener.mSystemOutCount == 6);
+
+ rc = r.systemOut(KText7);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText7);
+ CHECK(listener.mSystemOutCount == 7);
+
+ rc = r.systemOut(KText8);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText8);
+ CHECK(listener.mSystemOutCount == 8);
+
+ r.close();
+ jd->removeDiagnosticListener();
+}
+
+TEST(TestJavaDiagnostic, systemErr)
+{
+ std::auto_ptr<JavaDiagnostic> jd(JavaDiagnostic::createInstance());
+ CHECK(jd.get());
+
+ TestListener listener;
+ jd->setDiagnosticListener(listener);
+
+ Redirector r;
+ TInt rc = r.connect();
+ CHECK(rc == KErrNone);
+
+ rc = r.systemErr(KText1);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText1);
+ CHECK(listener.mSystemErrCount == 1);
+
+ rc = r.systemErr(KText2);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText2);
+ CHECK(listener.mSystemErrCount == 2);
+
+ rc = r.systemErr(KText3);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText3);
+ CHECK(listener.mSystemErrCount == 3);
+
+ rc = r.systemErr(KText4);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText4);
+ CHECK(listener.mSystemErrCount == 4);
+
+ rc = r.systemErr(KText5);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText5);
+ CHECK(listener.mSystemErrCount == 5);
+
+ rc = r.systemErr(KText6);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText6);
+ CHECK(listener.mSystemErrCount == 6);
+
+ rc = r.systemErr(KText7);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText7);
+ CHECK(listener.mSystemErrCount == 7);
+
+ rc = r.systemErr(KText8);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText8);
+ CHECK(listener.mSystemErrCount == 8);
+
+ jd->removeDiagnosticListener();
+}
+
+TEST(TestJavaDiagnostic, log)
+{
+ std::auto_ptr<JavaDiagnostic> jd(JavaDiagnostic::createInstance());
+ CHECK(jd.get());
+
+ LoggingListener listener;
+ jd->setDiagnosticListener(listener);
+
+ TInt rc = Redirector::log(KText1);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText1);
+ CHECK(listener.mLogCount == 1);
+
+ rc = Redirector::log(KText2);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText2);
+ CHECK(listener.mLogCount == 2);
+
+ rc = Redirector::log(KText3);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText3);
+ CHECK(listener.mLogCount == 3);
+
+ rc = Redirector::log(KText4);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText4);
+ CHECK(listener.mLogCount == 4);
+
+ rc = Redirector::log(KText5);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText5);
+ CHECK(listener.mLogCount == 5);
+
+ rc = Redirector::log(KText6);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText6);
+ CHECK(listener.mLogCount == 6);
+
+ rc = Redirector::log(KText7);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText7);
+ CHECK(listener.mLogCount == 7);
+
+ rc = Redirector::log(KText8);
+ CHECK(rc == KErrNone);
+ CHECK(listener == KText8);
+ CHECK(listener.mLogCount == 8);
+
+ jd->removeDiagnosticListener();
+}
+
+
+TEST(TestJavaDiagnostic, loadTest)
+{
+ std::auto_ptr<JavaDiagnostic> jd(JavaDiagnostic::createInstance());
+ CHECK(jd.get());
+
+ TestListener listener;
+ jd->setDiagnosticListener(listener);
+
+ Redirector r;
+ TInt rc = r.connect();
+ CHECK(rc == KErrNone);
+
+ for (int i = 0; i< 1000; i++)
+ {
+ rc = r.systemOut(KText1);
+ CHECK(rc == KErrNone);
+ rc = r.systemErr(KText1);
+ CHECK(rc == KErrNone);
+ rc = Redirector::log(KText1);
+ CHECK(rc == KErrNone);
+ }
+ CHECK(listener.mSystemOutCount == 1000);
+ CHECK(listener.mSystemErrCount == 1000);
+ CHECK(listener.mLogCount == 1000);
+
+ r.close();
+ jd->removeDiagnosticListener();
+}
+
+
+TEST(TestJavaDiagnostic, logger)
+{
+ std::auto_ptr<JavaDiagnostic> jd(JavaDiagnostic::createInstance());
+ CHECK(jd.get());
+
+ LoggingListener listener;
+ jd->setDiagnosticListener(listener);
+
+ ELOG(EDebugApi, "error level text");
+ CHECK(listener.mLogCount == 1);
+
+ WLOG(EDebugApi, "warning level text");
+ CHECK(listener.mLogCount == 2);
+
+ LOG(EDebugApi, EInfo, "info level text");
+ CHECK(listener.mLogCount == 2);
+
+ jd->removeDiagnosticListener();
+}
+
+TEST(TestJavaDiagnostic, unusedMethods)
+{
+ std::auto_ptr<DiagnosticImplTester> d((DiagnosticImplTester*)JavaDiagnostic::createInstance());
+
+ d->DoCancel();
+ TInt rc = d->RunError(KErrGeneral);
+ CHECK(rc == KErrNone);
+}