// Copyright (c) 2011 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 "chrome/browser/chromeos/customization_document.h" #include "chromeos/system/mock_statistics_provider.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace { const char kGoodStartupManifest[] = "{" " \"version\": \"1.0\"," " \"initial_locale\" : \"en-US\"," " \"initial_timezone\" : \"US/Pacific\"," " \"keyboard_layout\" : \"xkb:us::eng\"," " \"registration_url\" : \"http://www.google.com\"," " \"setup_content\" : {" " \"en-US\" : {" " \"help_page\" : \"file:///opt/oem/help/en-US/help.html\"," " \"eula_page\" : \"file:///opt/oem/eula/en-US/eula.html\"," " }," " \"ru-RU\" : {" " \"help_page\" : \"file:///opt/oem/help/ru-RU/help.html\"," " \"eula_page\" : \"file:///opt/oem/eula/ru-RU/eula.html\"," " }," " \"default\" : {" " \"help_page\" : \"file:///opt/oem/help/en/help.html\"," " \"eula_page\" : \"file:///opt/oem/eula/en/eula.html\"," " }," " }," " \"hwid_map\" : [" " {" " \"hwid_mask\": \"ZGA*34\"," " \"initial_locale\" : \"ja\"," " \"initial_timezone\" : \"Asia/Tokyo\"," " \"keyboard_layout\" : \"mozc-jp\"," " }," " {" " \"hwid_mask\": \"Mario 1?3*\"," " \"initial_locale\" : \"ru-RU\"," " \"initial_timezone\" : \"Europe/Moscow\"," " \"keyboard_layout\" : \"xkb:ru::rus\"," " }," " ]," "}"; const char kBadManifest[] = "{\"version\": \"1\"}"; const char kGoodServicesManifest[] = "{" " \"version\": \"1.0\"," " \"app_content\" : {" " \"en-US\" : {" " \"initial_start_page\": \"http://mario/promo\"," " \"support_page\": \"http://mario/us\"," " }," " \"ru-RU\" : {" " \"initial_start_page\": \"http://mario/ru/promo\"," " \"support_page\": \"http://mario/ru\"," " }," " \"default\" : {" " \"initial_start_page\": \"http://mario/global/promo\"," " \"support_page\": \"http://mario/global\"," " }," " }," "}"; } // anonymous namespace namespace chromeos { using ::testing::_; using ::testing::DoAll; using ::testing::NotNull; using ::testing::Return; using ::testing::SetArgumentPointee; TEST(StartupCustomizationDocumentTest, Basic) { system::MockStatisticsProvider mock_statistics_provider; EXPECT_CALL(mock_statistics_provider, GetMachineStatistic(_, NotNull())) .WillRepeatedly(Return(false)); EXPECT_CALL(mock_statistics_provider, GetMachineStatistic(std::string("hardware_class"), NotNull())) .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Mario 12345")), Return(true))); StartupCustomizationDocument customization(&mock_statistics_provider, kGoodStartupManifest); EXPECT_EQ("ru-RU", customization.initial_locale()); EXPECT_EQ("Europe/Moscow", customization.initial_timezone()); EXPECT_EQ("xkb:ru::rus", customization.keyboard_layout()); EXPECT_EQ("http://www.google.com", customization.registration_url()); EXPECT_EQ("file:///opt/oem/help/en-US/help.html", customization.GetHelpPage("en-US")); EXPECT_EQ("file:///opt/oem/help/ru-RU/help.html", customization.GetHelpPage("ru-RU")); EXPECT_EQ("file:///opt/oem/help/en/help.html", customization.GetHelpPage("ja")); EXPECT_EQ("file:///opt/oem/eula/en-US/eula.html", customization.GetEULAPage("en-US")); EXPECT_EQ("file:///opt/oem/eula/ru-RU/eula.html", customization.GetEULAPage("ru-RU")); EXPECT_EQ("file:///opt/oem/eula/en/eula.html", customization.GetEULAPage("ja")); } TEST(StartupCustomizationDocumentTest, VPD) { system::MockStatisticsProvider mock_statistics_provider; EXPECT_CALL(mock_statistics_provider, GetMachineStatistic(std::string("hardware_class"), NotNull())) .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Mario 12345")), Return(true))); EXPECT_CALL(mock_statistics_provider, GetMachineStatistic(std::string("initial_locale"), NotNull())) .WillOnce(DoAll(SetArgumentPointee<1>(std::string("ja")), Return(true))); EXPECT_CALL(mock_statistics_provider, GetMachineStatistic(std::string("initial_timezone"), NotNull())) .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Asia/Tokyo")), Return(true))); EXPECT_CALL(mock_statistics_provider, GetMachineStatistic(std::string("keyboard_layout"), NotNull())) .WillOnce(DoAll(SetArgumentPointee<1>(std::string("mozc-jp")), Return(true))); StartupCustomizationDocument customization(&mock_statistics_provider, kGoodStartupManifest); EXPECT_TRUE(customization.IsReady()); EXPECT_EQ("ja", customization.initial_locale()); EXPECT_EQ("Asia/Tokyo", customization.initial_timezone()); EXPECT_EQ("mozc-jp", customization.keyboard_layout()); } TEST(StartupCustomizationDocumentTest, BadManifest) { system::MockStatisticsProvider mock_statistics_provider; StartupCustomizationDocument customization(&mock_statistics_provider, kBadManifest); EXPECT_FALSE(customization.IsReady()); } TEST(ServicesCustomizationDocumentTest, Basic) { ServicesCustomizationDocument customization(kGoodServicesManifest); EXPECT_TRUE(customization.IsReady()); EXPECT_EQ("http://mario/promo", customization.GetInitialStartPage("en-US")); EXPECT_EQ("http://mario/ru/promo", customization.GetInitialStartPage("ru-RU")); EXPECT_EQ("http://mario/global/promo", customization.GetInitialStartPage("ja")); EXPECT_EQ("http://mario/us", customization.GetSupportPage("en-US")); EXPECT_EQ("http://mario/ru", customization.GetSupportPage("ru-RU")); EXPECT_EQ("http://mario/global", customization.GetSupportPage("ja")); } TEST(ServicesCustomizationDocumentTest, BadManifest) { ServicesCustomizationDocument customization(kBadManifest); EXPECT_FALSE(customization.IsReady()); } } // namespace chromeos