The data contained in this repository can be downloaded to your computer using one of several clients.
Please see the documentation of your version control software client for more information.

Please select the desired protocol below to get the URL.

This URL has Read-Only access.

Statistics
| Branch: | Revision:

main_repo / deps / v8 / test / cctest / test-flags.cc @ f230a1cf

History | View | Annotate | Download (8.92 KB)

1
// Copyright 2006-2008 the V8 project authors. All rights reserved.
2
// Redistribution and use in source and binary forms, with or without
3
// modification, are permitted provided that the following conditions are
4
// met:
5
//
6
//     * Redistributions of source code must retain the above copyright
7
//       notice, this list of conditions and the following disclaimer.
8
//     * Redistributions in binary form must reproduce the above
9
//       copyright notice, this list of conditions and the following
10
//       disclaimer in the documentation and/or other materials provided
11
//       with the distribution.
12
//     * Neither the name of Google Inc. nor the names of its
13
//       contributors may be used to endorse or promote products derived
14
//       from this software without specific prior written permission.
15
//
16
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27

    
28
#include <stdlib.h>
29

    
30
#include "v8.h"
31
#include "cctest.h"
32

    
33
using namespace v8::internal;
34

    
35
// This test must be executed first!
36
TEST(Default) {
37
  CHECK(FLAG_testing_bool_flag);
38
  CHECK_EQ(13, FLAG_testing_int_flag);
39
  CHECK_EQ(2.5, FLAG_testing_float_flag);
40
  CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "Hello, world!"));
41
}
42

    
43

    
44
static void SetFlagsToDefault() {
45
  FlagList::ResetAllFlags();
46
  TestDefault();
47
}
48

    
49

    
50
TEST(Flags1) {
51
  FlagList::PrintHelp();
52
}
53

    
54

    
55
TEST(Flags2) {
56
  SetFlagsToDefault();
57
  int argc = 8;
58
  const char* argv[] = { "Test2", "-notesting-bool-flag",
59
                         "--notesting-maybe-bool-flag", "notaflag",
60
                         "--testing_int_flag=77", "-testing_float_flag=.25",
61
                         "--testing_string_flag", "no way!" };
62
  CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc,
63
                                                const_cast<char **>(argv),
64
                                                false));
65
  CHECK_EQ(8, argc);
66
  CHECK(!FLAG_testing_bool_flag);
67
  CHECK(FLAG_testing_maybe_bool_flag.has_value);
68
  CHECK(!FLAG_testing_maybe_bool_flag.value);
69
  CHECK_EQ(77, FLAG_testing_int_flag);
70
  CHECK_EQ(.25, FLAG_testing_float_flag);
71
  CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "no way!"));
72
}
73

    
74

    
75
TEST(Flags2b) {
76
  SetFlagsToDefault();
77
  const char* str =
78
      " -notesting-bool-flag notaflag   --testing_int_flag=77 "
79
      "-notesting-maybe-bool-flag   "
80
      "-testing_float_flag=.25  "
81
      "--testing_string_flag   no_way!  ";
82
  CHECK_EQ(0, FlagList::SetFlagsFromString(str, StrLength(str)));
83
  CHECK(!FLAG_testing_bool_flag);
84
  CHECK(FLAG_testing_maybe_bool_flag.has_value);
85
  CHECK(!FLAG_testing_maybe_bool_flag.value);
86
  CHECK_EQ(77, FLAG_testing_int_flag);
87
  CHECK_EQ(.25, FLAG_testing_float_flag);
88
  CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "no_way!"));
89
}
90

    
91

    
92
TEST(Flags3) {
93
  SetFlagsToDefault();
94
  int argc = 9;
95
  const char* argv[] =
96
      { "Test3", "--testing_bool_flag", "--testing-maybe-bool-flag", "notaflag",
97
        "--testing_int_flag", "-666",
98
        "--testing_float_flag", "-12E10", "-testing-string-flag=foo-bar" };
99
  CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc,
100
                                                const_cast<char **>(argv),
101
                                                true));
102
  CHECK_EQ(2, argc);
103
  CHECK(FLAG_testing_bool_flag);
104
  CHECK(FLAG_testing_maybe_bool_flag.has_value);
105
  CHECK(FLAG_testing_maybe_bool_flag.value);
106
  CHECK_EQ(-666, FLAG_testing_int_flag);
107
  CHECK_EQ(-12E10, FLAG_testing_float_flag);
108
  CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "foo-bar"));
109
}
110

    
111

    
112
TEST(Flags3b) {
113
  SetFlagsToDefault();
114
  const char* str =
115
      "--testing_bool_flag --testing-maybe-bool-flag notaflag "
116
      "--testing_int_flag -666 "
117
      "--testing_float_flag -12E10 "
118
      "-testing-string-flag=foo-bar";
119
  CHECK_EQ(0, FlagList::SetFlagsFromString(str, StrLength(str)));
120
  CHECK(FLAG_testing_bool_flag);
121
  CHECK(FLAG_testing_maybe_bool_flag.has_value);
122
  CHECK(FLAG_testing_maybe_bool_flag.value);
123
  CHECK_EQ(-666, FLAG_testing_int_flag);
124
  CHECK_EQ(-12E10, FLAG_testing_float_flag);
125
  CHECK_EQ(0, strcmp(FLAG_testing_string_flag, "foo-bar"));
126
}
127

    
128

    
129
TEST(Flags4) {
130
  SetFlagsToDefault();
131
  int argc = 3;
132
  const char* argv[] = { "Test4", "--testing_bool_flag", "--foo" };
133
  CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc,
134
                                                const_cast<char **>(argv),
135
                                                true));
136
  CHECK_EQ(2, argc);
137
  CHECK(!FLAG_testing_maybe_bool_flag.has_value);
138
}
139

    
140

    
141
TEST(Flags4b) {
142
  SetFlagsToDefault();
143
  const char* str = "--testing_bool_flag --foo";
144
  CHECK_EQ(2, FlagList::SetFlagsFromString(str, StrLength(str)));
145
  CHECK(!FLAG_testing_maybe_bool_flag.has_value);
146
}
147

    
148

    
149
TEST(Flags5) {
150
  SetFlagsToDefault();
151
  int argc = 2;
152
  const char* argv[] = { "Test5", "--testing_int_flag=\"foobar\"" };
153
  CHECK_EQ(1, FlagList::SetFlagsFromCommandLine(&argc,
154
                                                const_cast<char **>(argv),
155
                                                true));
156
  CHECK_EQ(2, argc);
157
}
158

    
159

    
160
TEST(Flags5b) {
161
  SetFlagsToDefault();
162
  const char* str = "                     --testing_int_flag=\"foobar\"";
163
  CHECK_EQ(1, FlagList::SetFlagsFromString(str, StrLength(str)));
164
}
165

    
166

    
167
TEST(Flags6) {
168
  SetFlagsToDefault();
169
  int argc = 4;
170
  const char* argv[] = { "Test5", "--testing-int-flag", "0",
171
                         "--testing_float_flag" };
172
  CHECK_EQ(3, FlagList::SetFlagsFromCommandLine(&argc,
173
                                                const_cast<char **>(argv),
174
                                                true));
175
  CHECK_EQ(2, argc);
176
}
177

    
178

    
179
TEST(Flags6b) {
180
  SetFlagsToDefault();
181
  const char* str = "       --testing-int-flag 0      --testing_float_flag    ";
182
  CHECK_EQ(3, FlagList::SetFlagsFromString(str, StrLength(str)));
183
}
184

    
185

    
186
TEST(FlagsJSArguments1) {
187
  SetFlagsToDefault();
188
  int argc = 6;
189
  const char* argv[] = {"TestJSArgs1",
190
                        "--testing-int-flag", "42",
191
                        "--", "testing-float-flag", "7"};
192
  CHECK_EQ(0, FlagList::SetFlagsFromCommandLine(&argc,
193
                                                const_cast<char **>(argv),
194
                                                true));
195
  CHECK_EQ(42, FLAG_testing_int_flag);
196
  CHECK_EQ(2.5, FLAG_testing_float_flag);
197
  CHECK_EQ(2, FLAG_js_arguments.argc);
198
  CHECK_EQ(0, strcmp(FLAG_js_arguments[0], "testing-float-flag"));
199
  CHECK_EQ(0, strcmp(FLAG_js_arguments[1], "7"));
200
  CHECK_EQ(1, argc);
201
}
202

    
203

    
204
TEST(FlagsJSArguments1b) {
205
  SetFlagsToDefault();
206
  const char* str = "--testing-int-flag 42 -- testing-float-flag 7";
207
  CHECK_EQ(0, FlagList::SetFlagsFromString(str, StrLength(str)));
208
  CHECK_EQ(42, FLAG_testing_int_flag);
209
  CHECK_EQ(2.5, FLAG_testing_float_flag);
210
  CHECK_EQ(2, FLAG_js_arguments.argc);
211
  CHECK_EQ(0, strcmp(FLAG_js_arguments[0], "testing-float-flag"));
212
  CHECK_EQ(0, strcmp(FLAG_js_arguments[1], "7"));
213
}
214

    
215

    
216
TEST(FlagsJSArguments2) {
217
  SetFlagsToDefault();
218
  const char* str = "--testing-int-flag 42 --js-arguments testing-float-flag 7";
219
  CHECK_EQ(0, FlagList::SetFlagsFromString(str, StrLength(str)));
220
  CHECK_EQ(42, FLAG_testing_int_flag);
221
  CHECK_EQ(2.5, FLAG_testing_float_flag);
222
  CHECK_EQ(2, FLAG_js_arguments.argc);
223
  CHECK_EQ(0, strcmp(FLAG_js_arguments[0], "testing-float-flag"));
224
  CHECK_EQ(0, strcmp(FLAG_js_arguments[1], "7"));
225
}
226

    
227

    
228
TEST(FlagsJSArguments3) {
229
  SetFlagsToDefault();
230
  const char* str = "--testing-int-flag 42 --js-arguments=testing-float-flag 7";
231
  CHECK_EQ(0, FlagList::SetFlagsFromString(str, StrLength(str)));
232
  CHECK_EQ(42, FLAG_testing_int_flag);
233
  CHECK_EQ(2.5, FLAG_testing_float_flag);
234
  CHECK_EQ(2, FLAG_js_arguments.argc);
235
  CHECK_EQ(0, strcmp(FLAG_js_arguments[0], "testing-float-flag"));
236
  CHECK_EQ(0, strcmp(FLAG_js_arguments[1], "7"));
237
}
238

    
239

    
240
TEST(FlagsJSArguments4) {
241
  SetFlagsToDefault();
242
  const char* str = "--testing-int-flag 42 --";
243
  CHECK_EQ(0, FlagList::SetFlagsFromString(str, StrLength(str)));
244
  CHECK_EQ(42, FLAG_testing_int_flag);
245
  CHECK_EQ(0, FLAG_js_arguments.argc);
246
}
247

    
248

    
249
TEST(FlagsRemoveIncomplete) {
250
  // Test that processed command line arguments are removed, even
251
  // if the list of arguments ends unexpectedly.
252
  SetFlagsToDefault();
253
  int argc = 3;
254
  const char* argv[] = { "", "--crankshaft", "--expose-debug-as" };
255
  CHECK_EQ(2, FlagList::SetFlagsFromCommandLine(&argc,
256
                                                const_cast<char **>(argv),
257
                                                true));
258
  CHECK_NE(NULL, argv[1]);
259
  CHECK_EQ(argc, 2);
260
}