1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <utility>
6
7#include "base/basictypes.h"
8#include "chrome/installer/util/channel_info.h"
9#include "chrome/installer/util/util_constants.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12using installer::ChannelInfo;
13
14namespace {
15
16const std::wstring kChannelStable(installer::kChromeChannelStable);
17const std::wstring kChannelBeta(installer::kChromeChannelBeta);
18const std::wstring kChannelDev(installer::kChromeChannelDev);
19
20}  // namespace
21
22TEST(ChannelInfoTest, Channels) {
23  ChannelInfo ci;
24  std::wstring channel;
25
26  ci.set_value(L"");
27  EXPECT_TRUE(ci.GetChannelName(&channel));
28  EXPECT_EQ(kChannelStable, channel);
29  ci.set_value(L"-full");
30  EXPECT_TRUE(ci.GetChannelName(&channel));
31  EXPECT_EQ(kChannelStable, channel);
32
33  ci.set_value(L"2.0-beta");
34  EXPECT_TRUE(ci.GetChannelName(&channel));
35  EXPECT_EQ(kChannelBeta, channel);
36  ci.set_value(L"2.0-beta-spam");
37  EXPECT_TRUE(ci.GetChannelName(&channel));
38  EXPECT_EQ(kChannelBeta, channel);
39  ci.set_value(L"2.0-spam-beta");
40  EXPECT_TRUE(ci.GetChannelName(&channel));
41  EXPECT_EQ(kChannelBeta, channel);
42
43  ci.set_value(L"2.0-dev");
44  EXPECT_TRUE(ci.GetChannelName(&channel));
45  EXPECT_EQ(kChannelDev, channel);
46  ci.set_value(L"2.0-kinda-dev");
47  EXPECT_TRUE(ci.GetChannelName(&channel));
48  EXPECT_EQ(kChannelDev, channel);
49  ci.set_value(L"2.0-dev-eloper");
50  EXPECT_TRUE(ci.GetChannelName(&channel));
51  EXPECT_EQ(kChannelDev, channel);
52
53  ci.set_value(L"x64-dev");
54  EXPECT_TRUE(ci.GetChannelName(&channel));
55  EXPECT_EQ(kChannelDev, channel);
56  ci.set_value(L"x64-beta");
57  EXPECT_TRUE(ci.GetChannelName(&channel));
58  EXPECT_EQ(kChannelBeta, channel);
59  ci.set_value(L"x64-stable");
60  EXPECT_TRUE(ci.GetChannelName(&channel));
61  EXPECT_EQ(kChannelStable, channel);
62
63  ci.set_value(L"fuzzy");
64  EXPECT_FALSE(ci.GetChannelName(&channel));
65}
66
67TEST(ChannelInfoTest, FullInstall) {
68  ChannelInfo ci;
69
70  ci.set_value(L"");
71  EXPECT_TRUE(ci.SetFullSuffix(true));
72  EXPECT_TRUE(ci.HasFullSuffix());
73  EXPECT_EQ(L"-full", ci.value());
74  EXPECT_FALSE(ci.SetFullSuffix(true));
75  EXPECT_TRUE(ci.HasFullSuffix());
76  EXPECT_EQ(L"-full", ci.value());
77  EXPECT_TRUE(ci.SetFullSuffix(false));
78  EXPECT_FALSE(ci.HasFullSuffix());
79  EXPECT_EQ(L"", ci.value());
80  EXPECT_FALSE(ci.SetFullSuffix(false));
81  EXPECT_FALSE(ci.HasFullSuffix());
82  EXPECT_EQ(L"", ci.value());
83
84  ci.set_value(L"2.0-beta");
85  EXPECT_TRUE(ci.SetFullSuffix(true));
86  EXPECT_TRUE(ci.HasFullSuffix());
87  EXPECT_EQ(L"2.0-beta-full", ci.value());
88  EXPECT_FALSE(ci.SetFullSuffix(true));
89  EXPECT_TRUE(ci.HasFullSuffix());
90  EXPECT_EQ(L"2.0-beta-full", ci.value());
91  EXPECT_TRUE(ci.SetFullSuffix(false));
92  EXPECT_FALSE(ci.HasFullSuffix());
93  EXPECT_EQ(L"2.0-beta", ci.value());
94  EXPECT_FALSE(ci.SetFullSuffix(false));
95  EXPECT_FALSE(ci.HasFullSuffix());
96  EXPECT_EQ(L"2.0-beta", ci.value());
97}
98
99TEST(ChannelInfoTest, MultiInstall) {
100  ChannelInfo ci;
101
102  ci.set_value(L"");
103  EXPECT_TRUE(ci.SetMultiInstall(true));
104  EXPECT_TRUE(ci.IsMultiInstall());
105  EXPECT_EQ(L"-multi", ci.value());
106  EXPECT_FALSE(ci.SetMultiInstall(true));
107  EXPECT_TRUE(ci.IsMultiInstall());
108  EXPECT_EQ(L"-multi", ci.value());
109  EXPECT_TRUE(ci.SetMultiInstall(false));
110  EXPECT_FALSE(ci.IsMultiInstall());
111  EXPECT_EQ(L"", ci.value());
112  EXPECT_FALSE(ci.SetMultiInstall(false));
113  EXPECT_FALSE(ci.IsMultiInstall());
114  EXPECT_EQ(L"", ci.value());
115
116  ci.set_value(L"2.0-beta");
117  EXPECT_TRUE(ci.SetMultiInstall(true));
118  EXPECT_TRUE(ci.IsMultiInstall());
119  EXPECT_EQ(L"2.0-beta-multi", ci.value());
120  EXPECT_FALSE(ci.SetMultiInstall(true));
121  EXPECT_TRUE(ci.IsMultiInstall());
122  EXPECT_EQ(L"2.0-beta-multi", ci.value());
123  EXPECT_TRUE(ci.SetMultiInstall(false));
124  EXPECT_FALSE(ci.IsMultiInstall());
125  EXPECT_EQ(L"2.0-beta", ci.value());
126  EXPECT_FALSE(ci.SetMultiInstall(false));
127  EXPECT_FALSE(ci.IsMultiInstall());
128  EXPECT_EQ(L"2.0-beta", ci.value());
129}
130
131TEST(ChannelInfoTest, Migration) {
132  ChannelInfo ci;
133
134  ci.set_value(L"");
135  EXPECT_TRUE(ci.SetMigratingSuffix(true));
136  EXPECT_TRUE(ci.HasMigratingSuffix());
137  EXPECT_EQ(L"-migrating", ci.value());
138  EXPECT_FALSE(ci.SetMigratingSuffix(true));
139  EXPECT_TRUE(ci.HasMigratingSuffix());
140  EXPECT_EQ(L"-migrating", ci.value());
141  EXPECT_TRUE(ci.SetMigratingSuffix(false));
142  EXPECT_FALSE(ci.HasMigratingSuffix());
143  EXPECT_EQ(L"", ci.value());
144  EXPECT_FALSE(ci.SetMigratingSuffix(false));
145  EXPECT_FALSE(ci.HasMigratingSuffix());
146  EXPECT_EQ(L"", ci.value());
147
148  ci.set_value(L"2.0-beta");
149  EXPECT_TRUE(ci.SetMigratingSuffix(true));
150  EXPECT_TRUE(ci.HasMigratingSuffix());
151  EXPECT_EQ(L"2.0-beta-migrating", ci.value());
152  EXPECT_FALSE(ci.SetMigratingSuffix(true));
153  EXPECT_TRUE(ci.HasMigratingSuffix());
154  EXPECT_EQ(L"2.0-beta-migrating", ci.value());
155  EXPECT_TRUE(ci.SetMigratingSuffix(false));
156  EXPECT_FALSE(ci.HasMigratingSuffix());
157  EXPECT_EQ(L"2.0-beta", ci.value());
158  EXPECT_FALSE(ci.SetMigratingSuffix(false));
159  EXPECT_FALSE(ci.HasMigratingSuffix());
160  EXPECT_EQ(L"2.0-beta", ci.value());
161}
162
163TEST(ChannelInfoTest, Combinations) {
164  ChannelInfo ci;
165
166  ci.set_value(L"2.0-beta-chromeframe");
167  EXPECT_FALSE(ci.IsChrome());
168  ci.set_value(L"2.0-beta-chromeframe-chrome");
169  EXPECT_TRUE(ci.IsChrome());
170}
171
172TEST(ChannelInfoTest, GetStage) {
173  ChannelInfo ci;
174
175  ci.set_value(L"");
176  EXPECT_EQ(L"", ci.GetStage());
177  ci.set_value(L"-stage");
178  EXPECT_EQ(L"", ci.GetStage());
179  ci.set_value(L"-stage:");
180  EXPECT_EQ(L"", ci.GetStage());
181  ci.set_value(L"-stage:spammy");
182  EXPECT_EQ(L"spammy", ci.GetStage());
183
184  ci.set_value(L"-multi");
185  EXPECT_EQ(L"", ci.GetStage());
186  ci.set_value(L"-stage-multi");
187  EXPECT_EQ(L"", ci.GetStage());
188  ci.set_value(L"-stage:-multi");
189  EXPECT_EQ(L"", ci.GetStage());
190  ci.set_value(L"-stage:spammy-multi");
191  EXPECT_EQ(L"spammy", ci.GetStage());
192
193  ci.set_value(L"2.0-beta-multi");
194  EXPECT_EQ(L"", ci.GetStage());
195  ci.set_value(L"2.0-beta-stage-multi");
196  EXPECT_EQ(L"", ci.GetStage());
197  ci.set_value(L"2.0-beta-stage:-multi");
198  EXPECT_EQ(L"", ci.GetStage());
199  ci.set_value(L"2.0-beta-stage:spammy-multi");
200  EXPECT_EQ(L"spammy", ci.GetStage());
201}
202
203TEST(ChannelInfoTest, SetStage) {
204  ChannelInfo ci;
205
206  ci.set_value(L"");
207  EXPECT_FALSE(ci.SetStage(NULL));
208  EXPECT_EQ(L"", ci.value());
209  EXPECT_TRUE(ci.SetStage(L"spammy"));
210  EXPECT_EQ(L"-stage:spammy", ci.value());
211  EXPECT_FALSE(ci.SetStage(L"spammy"));
212  EXPECT_EQ(L"-stage:spammy", ci.value());
213  EXPECT_TRUE(ci.SetStage(NULL));
214  EXPECT_EQ(L"", ci.value());
215  EXPECT_TRUE(ci.SetStage(L"spammy"));
216  EXPECT_TRUE(ci.SetStage(L""));
217  EXPECT_EQ(L"", ci.value());
218
219  ci.set_value(L"-multi");
220  EXPECT_FALSE(ci.SetStage(NULL));
221  EXPECT_EQ(L"-multi", ci.value());
222  EXPECT_TRUE(ci.SetStage(L"spammy"));
223  EXPECT_EQ(L"-stage:spammy-multi", ci.value());
224  EXPECT_FALSE(ci.SetStage(L"spammy"));
225  EXPECT_EQ(L"-stage:spammy-multi", ci.value());
226  EXPECT_TRUE(ci.SetStage(NULL));
227  EXPECT_EQ(L"-multi", ci.value());
228  EXPECT_TRUE(ci.SetStage(L"spammy"));
229  EXPECT_TRUE(ci.SetStage(L""));
230  EXPECT_EQ(L"-multi", ci.value());
231
232  ci.set_value(L"2.0-beta-multi");
233  EXPECT_FALSE(ci.SetStage(NULL));
234  EXPECT_EQ(L"2.0-beta-multi", ci.value());
235  EXPECT_TRUE(ci.SetStage(L"spammy"));
236  EXPECT_EQ(L"2.0-beta-stage:spammy-multi", ci.value());
237  EXPECT_FALSE(ci.SetStage(L"spammy"));
238  EXPECT_EQ(L"2.0-beta-stage:spammy-multi", ci.value());
239  EXPECT_TRUE(ci.SetStage(NULL));
240  EXPECT_EQ(L"2.0-beta-multi", ci.value());
241  EXPECT_TRUE(ci.SetStage(L"spammy"));
242  EXPECT_TRUE(ci.SetStage(L""));
243  EXPECT_EQ(L"2.0-beta-multi", ci.value());
244
245  ci.set_value(L"2.0-beta-stage:-multi");
246  EXPECT_TRUE(ci.SetStage(NULL));
247  EXPECT_EQ(L"2.0-beta-multi", ci.value());
248}
249
250TEST(ChannelInfoTest, RemoveAllModifiersAndSuffixes) {
251  ChannelInfo ci;
252
253  ci.set_value(L"");
254  EXPECT_FALSE(ci.RemoveAllModifiersAndSuffixes());
255  EXPECT_EQ(L"", ci.value());
256
257  ci.set_value(L"2.0-dev-multi-chrome-chromeframe-migrating");
258  EXPECT_TRUE(ci.RemoveAllModifiersAndSuffixes());
259  EXPECT_EQ(L"2.0-dev", ci.value());
260}
261