diff -r f5050f1da672 -r 04becd199f91 javamanager/debugapi/tsrc/src.s60/testjavadiagnostic.cpp --- /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 +#include + +#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 jd(JavaDiagnostic::createInstance()); + CHECK(jd.get()); +} + +TEST(TestJavaDiagnostic, setRemoveListener) +{ + std::auto_ptr jd(JavaDiagnostic::createInstance()); + CHECK(jd.get()); + + TestListener listener; + TInt rc = jd->setDiagnosticListener(listener); + CHECK(rc == KErrNone); + jd->removeDiagnosticListener(); +} + +TEST(TestJavaDiagnostic, setRemoveListenerTwice) +{ + std::auto_ptr 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 jd(JavaDiagnostic::createInstance()); + CHECK(jd.get()); + + TestListener listener; + jd->setDiagnosticListener(listener); +} + +TEST(TestJavaDiagnostic, noSetListener) +{ + std::auto_ptr 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 jd1(JavaDiagnostic::createInstance()); + CHECK(jd1.get()); + + TestListener listener; + TInt rc = jd1->setDiagnosticListener(listener); + CHECK(rc == KErrNone); + + std::auto_ptr jd2(JavaDiagnostic::createInstance()); + CHECK(jd2.get()); + + rc = jd2->setDiagnosticListener(listener); + CHECK(rc != KErrNone); +} + + +TEST(TestJavaDiagnostic, systemOut) +{ + std::auto_ptr 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 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 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 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 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 d((DiagnosticImplTester*)JavaDiagnostic::createInstance()); + + d->DoCancel(); + TInt rc = d->RunError(KErrGeneral); + CHECK(rc == KErrNone); +}