javaruntimes/starterutils/tsrc/src/testueiargsparser.cpp
author hgs
Fri, 15 Oct 2010 12:29:39 +0300
changeset 80 d6dafc5d983f
parent 21 2a9601315dfc
permissions -rw-r--r--
v2.2.19_1

/*
* 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 UeiArgsParser class
*
*/

#include <string>
#include <vector>

#include "ueiargsparser.h"

#include "TestHarness.h"
#include "logger.h"

using java::runtime::UeiArgsParser;
using namespace std;

class ArgsParserTester : public UeiArgsParser
{
public:
    // give access to base class's protected functions
    using UeiArgsParser::getArgs;
    using UeiArgsParser::isVerbose;
    using UeiArgsParser::isRundjwp;
    using UeiArgsParser::convertVerbose;
    using UeiArgsParser::convertRundjwp;
    using UeiArgsParser::hasOption;
    using UeiArgsParser::trimTrailingSpaces;
};

TEST_GROUP(TestUeiArgsParser)
{
    ArgsParserTester parser;
    TEST_SETUP()
    {
    }

    TEST_TEARDOWN()
    {
    }
};



TEST(TestUeiArgsParser, convertUeiArgsToJvmArgs)
{
    EXPECT_N_LEAKS(12);
    wstring uei = L"-classpath midlet.jar"
                  L" -Xverbose:allocation,gc,gcverbose,class,classverbose,verifier,stackmaps,"
                  L"bytecodes,frames,stackchunks,exceptions,events,threading,monitors,networking"
                  L" -Xdebug -Xrunjdwp:server=y,address=localhost:8000"
                  L" -Dproperty=value -Xdescriptor:jad-file -Xdevice:device-name -Xheapsize:2M";
    wstring expectedResult = L"-verbose:gc,class -Xrunjdwp:server=y,address=localhost:8000";

    wstring result = parser.convertUeiArgsToJvmArgs(uei);
    CHECK(result.compare(expectedResult) == 0);
}

TEST(TestUeiArgsParser, getArgs)
{
    EXPECT_N_LEAKS(4);

    std::vector<std::wstring> result = parser.getArgs(L"");
    CHECK(result.size() == 0);

    result = parser.getArgs(L"-Xverbose");
    CHECK(result.size() == 1);

    result = parser.getArgs(L"-Xverbose -Xrunjdwp:server=y,address=localhost:8000");
    CHECK(result.size() == 2);

    result = parser.getArgs(L"-Xdebug -Xverbose -Xrunjdwp:server=y,address=localhost:8000");
    CHECK(result.size() == 3);
}

TEST(TestUeiArgsParser, isVerbose)
{
    wstring str = L"-Xverbose";
    CHECK(parser.isVerbose(str) == true);

    str = L"-Xverbose:all,allocation,gc,gcverbose,class,classverbose,verifier,stackmaps,"
          L"bytecodes,frames,stackchunks,exceptions,events,threading,monitors,networking"
          L"-Xdebug -Xrunjdwp:server=y,address=localhost:8000";
    CHECK(parser.isVerbose(str) == true);

    str = L"-verbose:all,allocation,gc,gcverbose,class,classverbose,verifier,stackmaps,"
          L"bytecodes,frames,stackchunks,exceptions,events,threading,monitors,networking"
          L"-Xdebug -Xrunjdwp:server=y,address=localhost:8000";
    CHECK(parser.isVerbose(str) == false);

    str = L" -Xverbose";
    CHECK(parser.isVerbose(str) == false);
    str = L"-xverbose";
    CHECK(parser.isVerbose(str) == false);
    str = L"";
    CHECK(parser.isVerbose(str) == false);
}

TEST(TestUeiArgsParser, isRundjwp)
{
    wstring str = L"-Xrunjdwp";
    CHECK(parser.isRundjwp(str) == true);

    str = L"-Xrunjdwp:server=y,address=localhost:8000";
    CHECK(parser.isRundjwp(str) == true);

    str = L"-drunjdwp:server=y,address=localhost:8000";
    CHECK(parser.isRundjwp(str) == false);

    str = L" -Xrunjdwp";
    CHECK(parser.isRundjwp(str) == false);
    str = L"-drunjdwp";
    CHECK(parser.isRundjwp(str) == false);
    str = L"";
    CHECK(parser.isRundjwp(str) == false);
}

TEST(TestUeiArgsParser, convertVerbose)
{
    EXPECT_N_LEAKS(7);

    wstring str = L"-Xverbose:all,allocation,gc,gcverbose,class,classverbose,verifier,stackmaps,"
                  L"bytecodes,frames.stackchunks,exceptions,events,threading,monitors,networking";
    wstring result = parser.convertVerbose(str);
    CHECK(result.compare(L"-verbose:gc,class,stack,sizes") == 0);

    // no all
    str = L"-Xverbose:allocation,gc,gcverbose,class,classverbose,verifier,stackmaps,"
          L"bytecodes,frames.stackchunks,exceptions,events,threading,monitors,networking";
    result = parser.convertVerbose(str);
    CHECK(result.compare(L"-verbose:gc,class") == 0);

    // only all
    str = L"-Xverbose:all,allocation,gcverbose,classverbose,verifier,stackmaps,"
          L"bytecodes,frames.stackchunks,exceptions,events,threading,monitors,networking";
    result = parser.convertVerbose(str);
    CHECK(result.compare(L"-verbose:gc,class,stack,sizes") == 0);

    // only gc
    str = L"-Xverbose:allocation,gc,gcverbose,classverbose,verifier,stackmaps,"
          L"bytecodes,frames.stackchunks,exceptions,events,threading,monitors,networking";
    result = parser.convertVerbose(str);
    CHECK(result.compare(L"-verbose:gc") == 0);

    // only class
    str = L"-Xverbose:allocation,gcverbose,class,classverbose,verifier,stackmaps,"
          L"bytecodes,frames.stackchunks,exceptions,events,threading,monitors,networking";
    result = parser.convertVerbose(str);
    CHECK(result.compare(L"-verbose:class") == 0);

    // no supported options
    str = L"-Xverbose:allocation,gcverbose,classverbose,verifier,stackmaps,"
          L"bytecodes,frames.stackchunks,exceptions,events,threading,monitors,networking";
    result = parser.convertVerbose(str);
    CHECK(result.compare(L"-verbose") == 0);

    // only Xverbose
    str = L"-Xverbose";
    result = parser.convertVerbose(str);
    CHECK(result.compare(L"-verbose") == 0);

}

TEST(TestUeiArgsParser, convertRundjwp)
{
    wstring str = L"-Xrunjdwp:server=y,address=localhost:8000";
    wstring result = parser.convertRundjwp(str);
    CHECK(result.compare(str) == 0);
}

TEST(TestUeiArgsParser, hasOption)
{
    wstring str = L"-classpath midlet.jar"
                  L"-Xverbose:all,allocation,gc,gcverbose,class,classverbose,verifier,stackmaps,"
                  L"bytecodes,frames,stackchunks,exceptions,events,threading,monitors,networking"
                  L"-Xdebug -Xrunjdwp:server=y,address=localhost:8000";

    CHECK(parser.hasOption(str, L"all") == true);
    CHECK(parser.hasOption(str, L"class") == true);
    CHECK(parser.hasOption(str, L"gc") == true);
    CHECK(parser.hasOption(str, L"8000") == true);

    CHECK(parser.hasOption(str, L"alloca") == false);
    CHECK(parser.hasOption(str, L"classv") == false);
    CHECK(parser.hasOption(str, L"stack") == false);

    CHECK(parser.hasOption(str, L"ALL") == false);
    CHECK(parser.hasOption(str, L"CLASS") == false);
    CHECK(parser.hasOption(str, L"GC") == false);
}

TEST(TestUeiArgsParser, trimTrailingSpaces)
{
    // string has whitespaces
    wstring str = L"erase trailing white-spaces   \n";
    wstring whitespaces = L" \t\f\v\n\r";
    wstring result = parser.trimTrailingSpaces(str, whitespaces);
    CHECK(result.compare(L"erase trailing white-spaces") == 0);

    str = L"erase trailing white-spaces ";
    result = parser.trimTrailingSpaces(str, L" ");
    CHECK(result.compare(L"erase trailing white-spaces") == 0);

    str = L"-verbose: ";
    result = parser.trimTrailingSpaces(str, L": ");
    CHECK(result.compare(L"-verbose") == 0);

    str = L"-verbose:gc,class,";
    result = parser.trimTrailingSpaces(str, L",");
    CHECK(result.compare(L"-verbose:gc,class") == 0);

    // string does not have whitespaces
    str = L"erase trailing white-spaces";
    result = parser.trimTrailingSpaces(str, whitespaces);
    CHECK(result.compare(L"erase trailing white-spaces") == 0);

    str = L"erase trailing white-spaces";
    result = parser.trimTrailingSpaces(str, L"kjh");
    CHECK(result.compare(L"erase trailing white-spaces") == 0);

    str = L"erase trailing white-spaces";
    result = parser.trimTrailingSpaces(str, L"e");
    CHECK(result.compare(L"erase trailing white-spaces") == 0);

    // empty string
    wstring empty;
    result = parser.trimTrailingSpaces(empty, whitespaces);
    CHECK(result.compare(L"") == 0);
    empty = L"";
    result = parser.trimTrailingSpaces(empty, L" ");
    CHECK(result.compare(L"") == 0);
}