// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include <utility> #include "base/basictypes.h" #include "chrome/installer/util/channel_info.h" #include "chrome/installer/util/util_constants.h" #include "testing/gtest/include/gtest/gtest.h" using installer::ChannelInfo; namespace { const std::wstring kChannelStable(installer::kChromeChannelStable); const std::wstring kChannelBeta(installer::kChromeChannelBeta); const std::wstring kChannelDev(installer::kChromeChannelDev); } // namespace TEST(ChannelInfoTest, Channels) { ChannelInfo ci; std::wstring channel; ci.set_value(L""); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelStable, channel); ci.set_value(L"-full"); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelStable, channel); ci.set_value(L"2.0-beta"); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelBeta, channel); ci.set_value(L"2.0-beta-spam"); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelBeta, channel); ci.set_value(L"2.0-spam-beta"); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelBeta, channel); ci.set_value(L"2.0-dev"); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelDev, channel); ci.set_value(L"2.0-kinda-dev"); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelDev, channel); ci.set_value(L"2.0-dev-eloper"); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelDev, channel); ci.set_value(L"x64-dev"); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelDev, channel); ci.set_value(L"x64-beta"); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelBeta, channel); ci.set_value(L"x64-stable"); EXPECT_TRUE(ci.GetChannelName(&channel)); EXPECT_EQ(kChannelStable, channel); ci.set_value(L"fuzzy"); EXPECT_FALSE(ci.GetChannelName(&channel)); } TEST(ChannelInfoTest, FullInstall) { ChannelInfo ci; ci.set_value(L""); EXPECT_TRUE(ci.SetFullSuffix(true)); EXPECT_TRUE(ci.HasFullSuffix()); EXPECT_EQ(L"-full", ci.value()); EXPECT_FALSE(ci.SetFullSuffix(true)); EXPECT_TRUE(ci.HasFullSuffix()); EXPECT_EQ(L"-full", ci.value()); EXPECT_TRUE(ci.SetFullSuffix(false)); EXPECT_FALSE(ci.HasFullSuffix()); EXPECT_EQ(L"", ci.value()); EXPECT_FALSE(ci.SetFullSuffix(false)); EXPECT_FALSE(ci.HasFullSuffix()); EXPECT_EQ(L"", ci.value()); ci.set_value(L"2.0-beta"); EXPECT_TRUE(ci.SetFullSuffix(true)); EXPECT_TRUE(ci.HasFullSuffix()); EXPECT_EQ(L"2.0-beta-full", ci.value()); EXPECT_FALSE(ci.SetFullSuffix(true)); EXPECT_TRUE(ci.HasFullSuffix()); EXPECT_EQ(L"2.0-beta-full", ci.value()); EXPECT_TRUE(ci.SetFullSuffix(false)); EXPECT_FALSE(ci.HasFullSuffix()); EXPECT_EQ(L"2.0-beta", ci.value()); EXPECT_FALSE(ci.SetFullSuffix(false)); EXPECT_FALSE(ci.HasFullSuffix()); EXPECT_EQ(L"2.0-beta", ci.value()); } TEST(ChannelInfoTest, MultiInstall) { ChannelInfo ci; ci.set_value(L""); EXPECT_TRUE(ci.SetMultiInstall(true)); EXPECT_TRUE(ci.IsMultiInstall()); EXPECT_EQ(L"-multi", ci.value()); EXPECT_FALSE(ci.SetMultiInstall(true)); EXPECT_TRUE(ci.IsMultiInstall()); EXPECT_EQ(L"-multi", ci.value()); EXPECT_TRUE(ci.SetMultiInstall(false)); EXPECT_FALSE(ci.IsMultiInstall()); EXPECT_EQ(L"", ci.value()); EXPECT_FALSE(ci.SetMultiInstall(false)); EXPECT_FALSE(ci.IsMultiInstall()); EXPECT_EQ(L"", ci.value()); ci.set_value(L"2.0-beta"); EXPECT_TRUE(ci.SetMultiInstall(true)); EXPECT_TRUE(ci.IsMultiInstall()); EXPECT_EQ(L"2.0-beta-multi", ci.value()); EXPECT_FALSE(ci.SetMultiInstall(true)); EXPECT_TRUE(ci.IsMultiInstall()); EXPECT_EQ(L"2.0-beta-multi", ci.value()); EXPECT_TRUE(ci.SetMultiInstall(false)); EXPECT_FALSE(ci.IsMultiInstall()); EXPECT_EQ(L"2.0-beta", ci.value()); EXPECT_FALSE(ci.SetMultiInstall(false)); EXPECT_FALSE(ci.IsMultiInstall()); EXPECT_EQ(L"2.0-beta", ci.value()); } TEST(ChannelInfoTest, Migration) { ChannelInfo ci; ci.set_value(L""); EXPECT_TRUE(ci.SetMigratingSuffix(true)); EXPECT_TRUE(ci.HasMigratingSuffix()); EXPECT_EQ(L"-migrating", ci.value()); EXPECT_FALSE(ci.SetMigratingSuffix(true)); EXPECT_TRUE(ci.HasMigratingSuffix()); EXPECT_EQ(L"-migrating", ci.value()); EXPECT_TRUE(ci.SetMigratingSuffix(false)); EXPECT_FALSE(ci.HasMigratingSuffix()); EXPECT_EQ(L"", ci.value()); EXPECT_FALSE(ci.SetMigratingSuffix(false)); EXPECT_FALSE(ci.HasMigratingSuffix()); EXPECT_EQ(L"", ci.value()); ci.set_value(L"2.0-beta"); EXPECT_TRUE(ci.SetMigratingSuffix(true)); EXPECT_TRUE(ci.HasMigratingSuffix()); EXPECT_EQ(L"2.0-beta-migrating", ci.value()); EXPECT_FALSE(ci.SetMigratingSuffix(true)); EXPECT_TRUE(ci.HasMigratingSuffix()); EXPECT_EQ(L"2.0-beta-migrating", ci.value()); EXPECT_TRUE(ci.SetMigratingSuffix(false)); EXPECT_FALSE(ci.HasMigratingSuffix()); EXPECT_EQ(L"2.0-beta", ci.value()); EXPECT_FALSE(ci.SetMigratingSuffix(false)); EXPECT_FALSE(ci.HasMigratingSuffix()); EXPECT_EQ(L"2.0-beta", ci.value()); } TEST(ChannelInfoTest, Combinations) { ChannelInfo ci; ci.set_value(L"2.0-beta-chromeframe"); EXPECT_FALSE(ci.IsChrome()); ci.set_value(L"2.0-beta-chromeframe-chrome"); EXPECT_TRUE(ci.IsChrome()); } TEST(ChannelInfoTest, GetStage) { ChannelInfo ci; ci.set_value(L""); EXPECT_EQ(L"", ci.GetStage()); ci.set_value(L"-stage"); EXPECT_EQ(L"", ci.GetStage()); ci.set_value(L"-stage:"); EXPECT_EQ(L"", ci.GetStage()); ci.set_value(L"-stage:spammy"); EXPECT_EQ(L"spammy", ci.GetStage()); ci.set_value(L"-multi"); EXPECT_EQ(L"", ci.GetStage()); ci.set_value(L"-stage-multi"); EXPECT_EQ(L"", ci.GetStage()); ci.set_value(L"-stage:-multi"); EXPECT_EQ(L"", ci.GetStage()); ci.set_value(L"-stage:spammy-multi"); EXPECT_EQ(L"spammy", ci.GetStage()); ci.set_value(L"2.0-beta-multi"); EXPECT_EQ(L"", ci.GetStage()); ci.set_value(L"2.0-beta-stage-multi"); EXPECT_EQ(L"", ci.GetStage()); ci.set_value(L"2.0-beta-stage:-multi"); EXPECT_EQ(L"", ci.GetStage()); ci.set_value(L"2.0-beta-stage:spammy-multi"); EXPECT_EQ(L"spammy", ci.GetStage()); } TEST(ChannelInfoTest, SetStage) { ChannelInfo ci; ci.set_value(L""); EXPECT_FALSE(ci.SetStage(NULL)); EXPECT_EQ(L"", ci.value()); EXPECT_TRUE(ci.SetStage(L"spammy")); EXPECT_EQ(L"-stage:spammy", ci.value()); EXPECT_FALSE(ci.SetStage(L"spammy")); EXPECT_EQ(L"-stage:spammy", ci.value()); EXPECT_TRUE(ci.SetStage(NULL)); EXPECT_EQ(L"", ci.value()); EXPECT_TRUE(ci.SetStage(L"spammy")); EXPECT_TRUE(ci.SetStage(L"")); EXPECT_EQ(L"", ci.value()); ci.set_value(L"-multi"); EXPECT_FALSE(ci.SetStage(NULL)); EXPECT_EQ(L"-multi", ci.value()); EXPECT_TRUE(ci.SetStage(L"spammy")); EXPECT_EQ(L"-stage:spammy-multi", ci.value()); EXPECT_FALSE(ci.SetStage(L"spammy")); EXPECT_EQ(L"-stage:spammy-multi", ci.value()); EXPECT_TRUE(ci.SetStage(NULL)); EXPECT_EQ(L"-multi", ci.value()); EXPECT_TRUE(ci.SetStage(L"spammy")); EXPECT_TRUE(ci.SetStage(L"")); EXPECT_EQ(L"-multi", ci.value()); ci.set_value(L"2.0-beta-multi"); EXPECT_FALSE(ci.SetStage(NULL)); EXPECT_EQ(L"2.0-beta-multi", ci.value()); EXPECT_TRUE(ci.SetStage(L"spammy")); EXPECT_EQ(L"2.0-beta-stage:spammy-multi", ci.value()); EXPECT_FALSE(ci.SetStage(L"spammy")); EXPECT_EQ(L"2.0-beta-stage:spammy-multi", ci.value()); EXPECT_TRUE(ci.SetStage(NULL)); EXPECT_EQ(L"2.0-beta-multi", ci.value()); EXPECT_TRUE(ci.SetStage(L"spammy")); EXPECT_TRUE(ci.SetStage(L"")); EXPECT_EQ(L"2.0-beta-multi", ci.value()); ci.set_value(L"2.0-beta-stage:-multi"); EXPECT_TRUE(ci.SetStage(NULL)); EXPECT_EQ(L"2.0-beta-multi", ci.value()); } TEST(ChannelInfoTest, RemoveAllModifiersAndSuffixes) { ChannelInfo ci; ci.set_value(L""); EXPECT_FALSE(ci.RemoveAllModifiersAndSuffixes()); EXPECT_EQ(L"", ci.value()); ci.set_value(L"2.0-dev-multi-chrome-chromeframe-migrating"); EXPECT_TRUE(ci.RemoveAllModifiersAndSuffixes()); EXPECT_EQ(L"2.0-dev", ci.value()); }