javauis/coreui/tsrc/src/testcoreui.cpp
changeset 76 4ad59aaee882
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/coreui/tsrc/src/testcoreui.cpp	Fri Sep 17 08:28:21 2010 +0300
@@ -0,0 +1,285 @@
+/*
+* Copyright (c) 2010 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 JvmStarter class
+*
+*/
+
+#include <string>
+#include <vector>
+#include <memory>
+
+#include "coreuitestimpl.h"
+#include "dynamiclibloader.h"
+
+#include "TestHarness.h"
+#include "testutils.h"
+#include "javaoslayer.h"
+#include "logger.h"
+
+using namespace java::util;
+using namespace java::ui;
+
+
+class CoreUiTestHandlerImpl : public CoreUiTestHandler
+{
+public:
+    CoreUiTestHandlerImpl() : mUiParams(0)
+    {
+        reset();
+    }
+    ~CoreUiTestHandlerImpl()
+    {
+        delete mUiParams;
+        mUiParams = 0;
+    }
+
+    virtual void startCalled(const Uid& midletUid, CoreUiParams* uiParams)
+    {
+        mMidletUid = midletUid;
+        if (mUiParams)
+        {
+            delete mUiParams;
+            mUiParams = 0;
+        }
+        if (uiParams)
+        {
+            mUiParams = new CoreUiParams();
+            *mUiParams = *uiParams;
+        }
+        mStartCalledCount++;
+    }
+    virtual void releaseCalled()
+    {
+        mReleaseCalledCount++;
+    }
+    virtual void error(const std::string& info)
+    {
+        CHECKWITHNOTE(false, info)
+    }
+
+    void reset()
+    {
+        mStartCalledCount = 0;
+        mReleaseCalledCount = 0;
+    }
+    int  mStartCalledCount;
+    int  mReleaseCalledCount;
+    CoreUiParams* mUiParams;
+    Uid  mMidletUid;
+};
+
+#define UIPARAMSCHECK(check1, check2, fname, info) \
+    CHECKWITHNOTE(check1 == check2, info << ": " << fname << " failed: 1=" << check1 << " 2=" << check2);
+
+
+void compare(const CoreUiParams* uiParams1, const CoreUiParams* uiParams2, const std::string& info)
+{
+    bool pass = false;
+    if ((uiParams1 == 0 && uiParams2 != 0) || (uiParams1 != 0 && uiParams2 == 0))
+    {
+        CHECKWITHNOTE(false, info << ": pointer mismatch 1=" << std::hex << uiParams1  << ", 2=" << std::hex << uiParams2);
+        return;
+    }
+
+    if (uiParams1 == 0 && uiParams2 == 0)
+    {
+        return;
+    }
+    else if (uiParams1 != uiParams2)
+    {
+        pass = true;
+    }
+    CHECKWITHNOTE(pass, info << ": pointer mismatch 1=" << std::hex << uiParams1  << ", 2=" << std::hex << uiParams2);
+    UIPARAMSCHECK(uiParams1->getOrientation(), uiParams2->getOrientation(), "getOrientation", info);
+    UIPARAMSCHECK(uiParams1->getScreenMode(), uiParams2->getScreenMode(), "getScreenMode", info);
+    UIPARAMSCHECK(uiParams1->getImagePath(), uiParams2->getImagePath(), "getImagePath", info);
+    UIPARAMSCHECK(uiParams1->isBackgroundStart(), uiParams2->isBackgroundStart(), "isBackgroundStart", info);
+
+}
+
+void checkCallCounts(const CoreUiTestHandlerImpl& testHandler, int start, int release, const std::string& info)
+{
+    CHECKWITHNOTE(testHandler.mStartCalledCount == start, info <<". Start call count incorrect: " << testHandler.mStartCalledCount
+                  <<", expecting: "<<start);
+    CHECKWITHNOTE(testHandler.mReleaseCalledCount == release, info << "Release call count incorrect: " << testHandler.mReleaseCalledCount
+                  <<", expecting: "<<release);
+}
+
+typedef void (*SetTestHandler)(CoreUiTestHandler*);
+
+// Run these tests with tst.bat. These tests require that the test version of the
+// javacoreui.dll is compiled
+TEST_GROUP(TestCoreUi)
+{
+    CoreUiTestHandlerImpl testHandler;
+    CoreUiParams uiParams;
+    Uid uid;
+    std::auto_ptr<java::util::DynamicLibLoader> basicCoreUiLoader;
+    TEST_SETUP()
+    {
+        basicCoreUiLoader.reset(new java::util::DynamicLibLoader(COREUI_LIB_NAME));
+        SetTestHandler setTestHandler =
+            reinterpret_cast<SetTestHandler>(basicCoreUiLoader->getFunction("setTestHandler",
+                                             true));
+        setTestHandler(&testHandler);
+    }
+
+    TEST_TEARDOWN()
+    {
+    }
+};
+
+
+// Run these tests with tst2.bat. These tests require that the javacoreui.dll
+// doesn't exist at all.
+TEST_GROUP(NoDllCoreUiTest)
+{
+    Uid uid;
+    TEST_SETUP()
+    {
+    }
+
+    TEST_TEARDOWN()
+    {
+    }
+};
+
+TEST(TestCoreUi, testBasic)
+{
+    std::auto_ptr<java::util::DynamicLibLoader> coreUiLoader;
+    // __BREAKPOINT();
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testBasic, start");
+    checkCallCounts(testHandler, 1, 0, "Before release");
+    CHECKWITHNOTE(CoreUi::releaseUi(coreUiLoader), "testBasic release");
+    checkCallCounts(testHandler, 1, 1, "After release");
+    compare(testHandler.mUiParams, &uiParams, "Final check basic");
+}
+
+TEST(TestCoreUi, testNullUiParams)
+{
+    std::auto_ptr<java::util::DynamicLibLoader> coreUiLoader;
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid), "testNullUiParams, start");
+    checkCallCounts(testHandler, 1, 0, "Before release");
+    CHECKWITHNOTE(CoreUi::releaseUi(coreUiLoader), "testNullUiParams release");
+    checkCallCounts(testHandler, 1, 1, "After release");
+    compare(testHandler.mUiParams, 0, "Final check Null ui");
+}
+
+TEST(TestCoreUi, testModifiedOrientationArgs)
+{
+    std::auto_ptr<java::util::DynamicLibLoader> coreUiLoader;
+
+    uiParams.setOrientation(UNDEFINED);
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testModifiedOrientationArgs, start1");
+    checkCallCounts(testHandler, 1, 0, "Before release");
+    compare(testHandler.mUiParams, &uiParams, "OrientationArgs UNDEFINED");
+
+    uiParams.setOrientation(LANDSCAPE);
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testModifiedOrientationArgs, start2");
+    checkCallCounts(testHandler, 2, 0, "Before release");
+    compare(testHandler.mUiParams, &uiParams, "OrientationArgs LANDSCAPE");
+
+    uiParams.setOrientation(PORTRAIT);
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testModifiedOrientationArgs, start3");
+    checkCallCounts(testHandler, 3, 0, "Before release");
+    compare(testHandler.mUiParams, &uiParams, "OrientationArgs PORTRAIT");
+
+    CHECKWITHNOTE(CoreUi::releaseUi(coreUiLoader), "testModifiedOrientationArgs release");
+    checkCallCounts(testHandler, 3, 1, "After release");
+}
+
+TEST(TestCoreUi, testModifiedScreenModeArgs)
+{
+    std::auto_ptr<java::util::DynamicLibLoader> coreUiLoader;
+
+    uiParams.setScreenMode(NO_START_SCREEN);
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testModifiedScreenModeArgs, start1");
+    checkCallCounts(testHandler, 1, 0, "Before release");
+    compare(testHandler.mUiParams, &uiParams, "ScreenModeArgs NO_START_SCREEN");
+
+    uiParams.setScreenMode(DEFAULT_START_SCREEN);
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testModifiedScreenModeArgs, start2");
+    checkCallCounts(testHandler, 2, 0, "Before release");
+    compare(testHandler.mUiParams, &uiParams, "ScreenModeArgs DEFAULT_START_SCREEN");
+
+    uiParams.setScreenMode(MIDLET_DEFINED_SCREEN);
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testModifiedScreenModeArgs, start3");
+    checkCallCounts(testHandler, 3, 0, "Before release");
+    compare(testHandler.mUiParams, &uiParams, "ScreenModeArgs MIDLET_DEFINED_SCREEN");
+
+    uiParams.setScreenMode(USER_DEFINED_SCREEN);
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testModifiedScreenModeArgs, start4");
+    checkCallCounts(testHandler, 4, 0, "Before release");
+    compare(testHandler.mUiParams, &uiParams, "ScreenModeArgs USER_DEFINED_SCREEN");
+
+    CHECKWITHNOTE(CoreUi::releaseUi(coreUiLoader), "testModifiedScreenModeArgs release");
+    checkCallCounts(testHandler, 4, 1, "After release");
+}
+
+TEST(TestCoreUi, testModifiedImagePathArgs)
+{
+    std::auto_ptr<java::util::DynamicLibLoader> coreUiLoader;
+
+    uiParams.setImagePath(L"c:\\logs\\java\\");
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testModifiedImagePathArgs start");
+    checkCallCounts(testHandler, 1, 0, "Before release");
+    compare(testHandler.mUiParams, &uiParams, "ImagePathArgs");
+
+    CHECKWITHNOTE(CoreUi::releaseUi(coreUiLoader), "testModifiedImagePathArgs release");
+    checkCallCounts(testHandler, 1, 1, "After release");
+}
+
+TEST(TestCoreUi, testModifiedForeGroundArgs)
+{
+    std::auto_ptr<java::util::DynamicLibLoader> coreUiLoader;
+
+    uiParams.setBackgroundStart(true);
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testModifiedForeGroundArgs start1");
+    checkCallCounts(testHandler, 1, 0, "Before release");
+    compare(testHandler.mUiParams, &uiParams, "ForeGround");
+
+    uiParams.setBackgroundStart(false);
+    CHECKWITHNOTE(CoreUi::start(coreUiLoader, uid, &uiParams), "testModifiedForeGroundArgs start2");
+    checkCallCounts(testHandler, 2, 0, "Before release");
+    compare(testHandler.mUiParams, &uiParams, "ForeGround");
+
+    CHECKWITHNOTE(CoreUi::releaseUi(coreUiLoader), "testModifiedForeGroundArgs release");
+    checkCallCounts(testHandler, 2, 1, "After release");
+}
+
+TEST(TestCoreUi, testNoStartCall)
+{
+    std::auto_ptr<java::util::DynamicLibLoader> coreUiLoader;
+    CHECKWITHNOTE(CoreUi::releaseUi(coreUiLoader), "testNoStartCall release");
+    checkCallCounts(testHandler, 0, 1, "After release");
+}
+
+TEST(NoDllCoreUiTest, testBasic)
+{
+    std::auto_ptr<java::util::DynamicLibLoader> coreUiLoader;
+    CHECKWITHNOTE(!CoreUi::start(coreUiLoader, uid), "testBasic NO_DLL start");
+    CHECKWITHNOTE(!CoreUi::releaseUi(coreUiLoader), "testBasic NO_DLL release");
+}
+
+TEST(NoDllCoreUiTest, testOnlyStart)
+{
+    std::auto_ptr<java::util::DynamicLibLoader> coreUiLoader;
+    CHECKWITHNOTE(!CoreUi::start(coreUiLoader, uid), "testOnlyStart NO_DLL start");
+}
+
+TEST(NoDllCoreUiTest, testOnlyRelease)
+{
+    std::auto_ptr<java::util::DynamicLibLoader> coreUiLoader;
+    CHECKWITHNOTE(!CoreUi::releaseUi(coreUiLoader), "testOnlyRelease NO_DLL release");
+}