javauis/coreui/tsrc/src/testcoreui.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 17 Sep 2010 08:28:21 +0300
changeset 76 4ad59aaee882
permissions -rw-r--r--
Revision: v2.2.13 Kit: 201037

/*
* 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");
}