javamanager/debugapi/tsrc/src.s60/testjavadiagnostic.cpp
branchRCL_3
changeset 19 04becd199f91
--- /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);
+}