diff options
Diffstat (limited to 'deps/v8/test/cctest/test-flags.cc')
-rw-r--r-- | deps/v8/test/cctest/test-flags.cc | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/deps/v8/test/cctest/test-flags.cc b/deps/v8/test/cctest/test-flags.cc new file mode 100644 index 0000000000..9019a89ef4 --- /dev/null +++ b/deps/v8/test/cctest/test-flags.cc @@ -0,0 +1,234 @@ +// Copyright 2006-2008 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <stdlib.h> + +#include "v8.h" +#include "cctest.h" + +using namespace v8::internal; + +// This test must be executed first! +TEST(Default) { + CHECK(FLAG_testing_bool_flag); + CHECK_EQ(13, FLAG_testing_int_flag); + CHECK_EQ(2.5, FLAG_testing_float_flag); + CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "Hello, world!")); +} + + +static void SetFlagsToDefault() { + FlagList::ResetAllFlags(); + TestDefault(); +} + + +TEST(Flags1) { + FlagList::PrintHelp(); +} + + +TEST(Flags2) { + SetFlagsToDefault(); + int argc = 7; + const char* argv[] = { "Test2", "-notesting-bool-flag", "notaflag", + "--testing_int_flag=77", "-testing_float_flag=.25", + "--testing_string_flag", "no way!" }; + CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc, + const_cast<char **>(argv), + false)); + CHECK_EQ(7, argc); + CHECK(!FLAG_testing_bool_flag); + CHECK_EQ(77, FLAG_testing_int_flag); + CHECK_EQ(.25, FLAG_testing_float_flag); + CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "no way!")); +} + + +TEST(Flags2b) { + SetFlagsToDefault(); + const char* str = + " -notesting-bool-flag notaflag --testing_int_flag=77 " + "-testing_float_flag=.25 " + "--testing_string_flag no_way! "; + CHECK_EQ(0, FlagList::SetFlagsFromString(str, strlen(str))); + CHECK(!FLAG_testing_bool_flag); + CHECK_EQ(77, FLAG_testing_int_flag); + CHECK_EQ(.25, FLAG_testing_float_flag); + CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "no_way!")); +} + + +TEST(Flags3) { + SetFlagsToDefault(); + int argc = 8; + const char* argv[] = + { "Test3", "--testing_bool_flag", "notaflag", + "--testing_int_flag", "-666", + "--testing_float_flag", "-12E10", "-testing-string-flag=foo-bar" }; + CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc, + const_cast<char **>(argv), + true)); + CHECK_EQ(2, argc); + CHECK(FLAG_testing_bool_flag); + CHECK_EQ(-666, FLAG_testing_int_flag); + CHECK_EQ(-12E10, FLAG_testing_float_flag); + CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "foo-bar")); +} + + +TEST(Flags3b) { + SetFlagsToDefault(); + const char* str = + "--testing_bool_flag notaflag --testing_int_flag -666 " + "--testing_float_flag -12E10 " + "-testing-string-flag=foo-bar"; + CHECK_EQ(0, FlagList::SetFlagsFromString(str, strlen(str))); + CHECK(FLAG_testing_bool_flag); + CHECK_EQ(-666, FLAG_testing_int_flag); + CHECK_EQ(-12E10, FLAG_testing_float_flag); + CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "foo-bar")); +} + + +TEST(Flags4) { + SetFlagsToDefault(); + int argc = 3; + const char* argv[] = { "Test4", "--testing_bool_flag", "--foo" }; + CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc, + const_cast<char **>(argv), + true)); + CHECK_EQ(2, argc); +} + + +TEST(Flags4b) { + SetFlagsToDefault(); + const char* str = "--testing_bool_flag --foo"; + CHECK_EQ(2, FlagList::SetFlagsFromString(str, strlen(str))); +} + + +TEST(Flags5) { + SetFlagsToDefault(); + int argc = 2; + const char* argv[] = { "Test5", "--testing_int_flag=\"foobar\"" }; + CHECK_EQ(1, FlagList::SetFlagsFromCommandLine(&argc, + const_cast<char **>(argv), + true)); + CHECK_EQ(2, argc); +} + + +TEST(Flags5b) { + SetFlagsToDefault(); + const char* str = " --testing_int_flag=\"foobar\""; + CHECK_EQ(1, FlagList::SetFlagsFromString(str, strlen(str))); +} + + +TEST(Flags6) { + SetFlagsToDefault(); + int argc = 4; + const char* argv[] = { "Test5", "--testing-int-flag", "0", + "--testing_float_flag" }; + CHECK_EQ(3, FlagList::SetFlagsFromCommandLine(&argc, + const_cast<char **>(argv), + true)); + CHECK_EQ(4, argc); +} + + +TEST(Flags6b) { + SetFlagsToDefault(); + const char* str = " --testing-int-flag 0 --testing_float_flag "; + CHECK_EQ(3, FlagList::SetFlagsFromString(str, strlen(str))); +} + + +TEST(FlagsJSArguments1) { + SetFlagsToDefault(); + int argc = 6; + const char* argv[] = {"TestJSArgs1", + "--testing-int-flag", "42", + "--", "testing-float-flag", "7"}; + CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc, + const_cast<char **>(argv), + true)); + CHECK_EQ(42, FLAG_testing_int_flag); + CHECK_EQ(2.5, FLAG_testing_float_flag); + CHECK_EQ(2, FLAG_js_arguments.argc()); + CHECK_EQ(0, strcmp(FLAG_js_arguments[0], "testing-float-flag")); + CHECK_EQ(0, strcmp(FLAG_js_arguments[1], "7")); + CHECK_EQ(1, argc); +} + + +TEST(FlagsJSArguments1b) { + SetFlagsToDefault(); + const char* str = "--testing-int-flag 42 -- testing-float-flag 7"; + CHECK_EQ(0, FlagList::SetFlagsFromString(str, strlen(str))); + CHECK_EQ(42, FLAG_testing_int_flag); + CHECK_EQ(2.5, FLAG_testing_float_flag); + CHECK_EQ(2, FLAG_js_arguments.argc()); + CHECK_EQ(0, strcmp(FLAG_js_arguments[0], "testing-float-flag")); + CHECK_EQ(0, strcmp(FLAG_js_arguments[1], "7")); +} + + +TEST(FlagsJSArguments2) { + SetFlagsToDefault(); + const char* str = "--testing-int-flag 42 --js-arguments testing-float-flag 7"; + CHECK_EQ(0, FlagList::SetFlagsFromString(str, strlen(str))); + CHECK_EQ(42, FLAG_testing_int_flag); + CHECK_EQ(2.5, FLAG_testing_float_flag); + CHECK_EQ(2, FLAG_js_arguments.argc()); + CHECK_EQ(0, strcmp(FLAG_js_arguments[0], "testing-float-flag")); + CHECK_EQ(0, strcmp(FLAG_js_arguments[1], "7")); +} + + +TEST(FlagsJSArguments3) { + SetFlagsToDefault(); + const char* str = "--testing-int-flag 42 --js-arguments=testing-float-flag 7"; + CHECK_EQ(0, FlagList::SetFlagsFromString(str, strlen(str))); + CHECK_EQ(42, FLAG_testing_int_flag); + CHECK_EQ(2.5, FLAG_testing_float_flag); + CHECK_EQ(2, FLAG_js_arguments.argc()); + CHECK_EQ(0, strcmp(FLAG_js_arguments[0], "testing-float-flag")); + CHECK_EQ(0, strcmp(FLAG_js_arguments[1], "7")); +} + + +TEST(FlagsJSArguments4) { + SetFlagsToDefault(); + const char* str = "--testing-int-flag 42 --"; + CHECK_EQ(0, FlagList::SetFlagsFromString(str, strlen(str))); + CHECK_EQ(42, FLAG_testing_int_flag); + CHECK_EQ(0, FLAG_js_arguments.argc()); +} + |