OLD | NEW |
| (Empty) |
1 // Copyright 2008-2009 Google Inc. | |
2 // | |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
4 // you may not use this file except in compliance with the License. | |
5 // You may obtain a copy of the License at | |
6 // | |
7 // http://www.apache.org/licenses/LICENSE-2.0 | |
8 // | |
9 // Unless required by applicable law or agreed to in writing, software | |
10 // distributed under the License is distributed on an "AS IS" BASIS, | |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 // See the License for the specific language governing permissions and | |
13 // limitations under the License. | |
14 // ======================================================================== | |
15 | |
16 #include "omaha/base/command_line_parser.h" | |
17 #include "omaha/testing/unit_test.h" | |
18 | |
19 namespace omaha { | |
20 | |
21 // This will succeed since the CommandLineToArgvW function returns the | |
22 // path to the current executable file if it's passed the empty string. | |
23 TEST(CommandLineParserTest, ParseFromString_NullString) { | |
24 CommandLineParser parser; | |
25 EXPECT_SUCCEEDED(parser.ParseFromString(NULL)); | |
26 EXPECT_EQ(0, parser.GetSwitchCount()); | |
27 } | |
28 | |
29 // This will succeed since the CommandLineToArgvW function returns the | |
30 // path to the current executable file if it's passed the empty string. | |
31 TEST(CommandLineParserTest, ParseFromString_EmptyString) { | |
32 CommandLineParser parser; | |
33 EXPECT_SUCCEEDED(parser.ParseFromString(_T(""))); | |
34 EXPECT_EQ(0, parser.GetSwitchCount()); | |
35 } | |
36 | |
37 // This will succeed since the CommandLineToArgvW function returns the | |
38 // path to the current executable file if it's passed the empty string. | |
39 TEST(CommandLineParserTest, ParseFromString_SpacesOnlyString) { | |
40 CommandLineParser parser; | |
41 EXPECT_SUCCEEDED(parser.ParseFromString(_T(" "))); | |
42 } | |
43 | |
44 TEST(CommandLineParserTest, ParseFromArgv_NullArgv) { | |
45 CommandLineParser parser; | |
46 EXPECT_FAILED(parser.ParseFromArgv(0, NULL)); | |
47 } | |
48 | |
49 TEST(CommandLineParserTest, CallFunctionsBeforeParse) { | |
50 CommandLineParser parser; | |
51 int arg_count = 0; | |
52 CString arg_value; | |
53 EXPECT_FALSE(parser.HasSwitch(_T("foo"))); | |
54 EXPECT_EQ(0, parser.GetSwitchCount()); | |
55 EXPECT_FAILED(parser.GetSwitchArgumentCount(_T("foo"), &arg_count)); | |
56 EXPECT_FAILED(parser.GetSwitchArgumentValue(_T("foo"), 0, &arg_value)); | |
57 } | |
58 | |
59 TEST(CommandLineParserTest, ParseFromString_ProgramNameOnly) { | |
60 CommandLineParser parser; | |
61 EXPECT_SUCCEEDED(parser.ParseFromString(_T("myprog.exe"))); | |
62 EXPECT_EQ(0, parser.GetSwitchCount()); | |
63 } | |
64 | |
65 TEST(CommandLineParserTest, ValidateSwitchMixedCase) { | |
66 CommandLineParser parser; | |
67 EXPECT_SUCCEEDED(parser.ParseFromString(_T("myprog.exe /FooP"))); | |
68 EXPECT_EQ(1, parser.GetSwitchCount()); | |
69 EXPECT_TRUE(parser.HasSwitch(_T("foop"))); | |
70 EXPECT_TRUE(parser.HasSwitch(_T("FooP"))); | |
71 EXPECT_TRUE(parser.HasSwitch(_T("fOOp"))); | |
72 EXPECT_TRUE(parser.HasSwitch(_T("FOOP"))); | |
73 EXPECT_FALSE(parser.HasSwitch(_T("blAH"))); | |
74 } | |
75 | |
76 TEST(CommandLineParserTest, ParseFromString_OneSwitchNoArgs) { | |
77 CommandLineParser parser; | |
78 int arg_count = 0; | |
79 EXPECT_SUCCEEDED(parser.ParseFromString(_T("myprog.exe /foo"))); | |
80 EXPECT_EQ(1, parser.GetSwitchCount()); | |
81 EXPECT_TRUE(parser.HasSwitch(_T("foo"))); | |
82 EXPECT_SUCCEEDED(parser.GetSwitchArgumentCount(_T("foo"), &arg_count)); | |
83 EXPECT_EQ(0, arg_count); | |
84 } | |
85 | |
86 TEST(CommandLineParserTest, ParseFromString_OneSwitchOneArg) { | |
87 CommandLineParser parser; | |
88 int arg_count = 0; | |
89 CString arg_value; | |
90 EXPECT_SUCCEEDED(parser.ParseFromString(_T("myprog.exe /foo bar"))); | |
91 EXPECT_EQ(1, parser.GetSwitchCount()); | |
92 EXPECT_TRUE(parser.HasSwitch(_T("foo"))); | |
93 EXPECT_SUCCEEDED(parser.GetSwitchArgumentCount(_T("foo"), &arg_count)); | |
94 EXPECT_EQ(1, arg_count); | |
95 EXPECT_SUCCEEDED(parser.GetSwitchArgumentValue(_T("foo"), 0, &arg_value)); | |
96 EXPECT_STREQ(_T("bar"), arg_value); | |
97 } | |
98 | |
99 TEST(CommandLineParserTest, ParseFromString_OneSwitchTwoArgs) { | |
100 CommandLineParser parser; | |
101 int arg_count = 0; | |
102 CString arg_value; | |
103 EXPECT_SUCCEEDED(parser.ParseFromString(_T("myprog.exe /foo bar baz"))); | |
104 EXPECT_EQ(1, parser.GetSwitchCount()); | |
105 EXPECT_TRUE(parser.HasSwitch(_T("foo"))); | |
106 EXPECT_SUCCEEDED(parser.GetSwitchArgumentCount(_T("foo"), &arg_count)); | |
107 EXPECT_EQ(2, arg_count); | |
108 EXPECT_SUCCEEDED(parser.GetSwitchArgumentValue(_T("foo"), 0, &arg_value)); | |
109 EXPECT_STREQ(_T("bar"), arg_value); | |
110 EXPECT_SUCCEEDED(parser.GetSwitchArgumentValue(_T("foo"), 1, &arg_value)); | |
111 EXPECT_STREQ(_T("baz"), arg_value); | |
112 } | |
113 | |
114 TEST(CommandLineParserTest, ParseFromString_TwoSwitchesNoArgs) { | |
115 CommandLineParser parser; | |
116 int arg_count = 0; | |
117 CString arg_value; | |
118 EXPECT_SUCCEEDED(parser.ParseFromString(_T("myprog.exe /foo /bar"))); | |
119 EXPECT_EQ(2, parser.GetSwitchCount()); | |
120 EXPECT_TRUE(parser.HasSwitch(_T("foo"))); | |
121 EXPECT_TRUE(parser.HasSwitch(_T("bar"))); | |
122 EXPECT_SUCCEEDED(parser.GetSwitchArgumentCount(_T("foo"), &arg_count)); | |
123 EXPECT_EQ(0, arg_count); | |
124 EXPECT_SUCCEEDED(parser.GetSwitchArgumentCount(_T("bar"), &arg_count)); | |
125 EXPECT_EQ(0, arg_count); | |
126 } | |
127 | |
128 TEST(CommandLineParserTest, ParseFromString_TwoSwitchesOneArgNoArg) { | |
129 CommandLineParser parser; | |
130 int arg_count = 0; | |
131 CString arg_value; | |
132 EXPECT_SUCCEEDED(parser.ParseFromString(_T("myprog.exe /foo blech /bar"))); | |
133 EXPECT_EQ(2, parser.GetSwitchCount()); | |
134 EXPECT_TRUE(parser.HasSwitch(_T("foo"))); | |
135 EXPECT_TRUE(parser.HasSwitch(_T("bar"))); | |
136 EXPECT_SUCCEEDED(parser.GetSwitchArgumentCount(_T("foo"), &arg_count)); | |
137 EXPECT_EQ(1, arg_count); | |
138 EXPECT_SUCCEEDED(parser.GetSwitchArgumentValue(_T("foo"), 0, &arg_value)); | |
139 EXPECT_STREQ(_T("blech"), arg_value); | |
140 EXPECT_SUCCEEDED(parser.GetSwitchArgumentCount(_T("bar"), &arg_count)); | |
141 EXPECT_EQ(0, arg_count); | |
142 } | |
143 | |
144 TEST(CommandLineParserTest, ParseFromString_ArgInQuotesWithLeadingSlash) { | |
145 CommandLineParser parser; | |
146 int arg_count = 0; | |
147 CString arg_value; | |
148 EXPECT_SUCCEEDED(parser.ParseFromString(_T("f.exe /pi \"arg\" \"/sw x\""))); | |
149 EXPECT_EQ(1, parser.GetSwitchCount()); | |
150 EXPECT_TRUE(parser.HasSwitch(_T("pi"))); | |
151 EXPECT_SUCCEEDED(parser.GetSwitchArgumentCount(_T("pi"), &arg_count)); | |
152 EXPECT_EQ(2, arg_count); | |
153 EXPECT_SUCCEEDED(parser.GetSwitchArgumentValue(_T("pi"), 0, &arg_value)); | |
154 EXPECT_STREQ(_T("arg"), arg_value); | |
155 EXPECT_SUCCEEDED(parser.GetSwitchArgumentValue(_T("pi"), 1, &arg_value)); | |
156 EXPECT_STREQ(_T("/sw x"), arg_value); | |
157 } | |
158 | |
159 // Paths with spaces and no enclosing quotes is not supported. Thus, there is | |
160 // no test for it. | |
161 TEST(CommandLineParserTest, ParseFromString_SpaceInPathWithQuotes) { | |
162 CommandLineParser parser; | |
163 int arg_count = 0; | |
164 CString arg_value; | |
165 EXPECT_SUCCEEDED( | |
166 parser.ParseFromString(_T("\"C:\\Space In Path\\myprog.exe\" /foo bar"))); | |
167 EXPECT_EQ(1, parser.GetSwitchCount()); | |
168 EXPECT_TRUE(parser.HasSwitch(_T("foo"))); | |
169 EXPECT_SUCCEEDED(parser.GetSwitchArgumentCount(_T("foo"), &arg_count)); | |
170 EXPECT_EQ(1, arg_count); | |
171 EXPECT_SUCCEEDED(parser.GetSwitchArgumentValue(_T("foo"), 0, &arg_value)); | |
172 EXPECT_STREQ(_T("bar"), arg_value); | |
173 } | |
174 | |
175 } // namespace omaha | |
OLD | NEW |