// 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 "base/time.h" #include "chrome/browser/chromeos/mock_system_access.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\"," " }," " }," " \"carrier_deals\" : {" " \"Carrier (country)\" : {" " \"deal_locale\" : \"en-US\"," " \"top_up_url\" : \"http://www.carrier.com/\"," " \"notification_count\" : 1,\n" " \"expire_date\" : \"31/12/12 0:00\"," " \"localized_content\" : {" " \"en-US\" : {" " \"notification_text\" : \"3G connectivity : Carrier.\"," " }," " \"default\" : {" " \"notification_text\" : \"default_text.\"," " }," " }," " }," " }," "}"; const char kOldDealServicesManifest[] = "{" " \"version\": \"1.0\"," " \"carrier_deals\" : {" " \"Carrier (country)\" : {" " \"deal_locale\" : \"en-US\"," " \"top_up_url\" : \"http://www.carrier.com/\"," " \"notification_count\" : 1," " \"expire_date\" : \"01/01/01 0:00\"," " \"localized_content\" : {" " \"en-US\" : {" " \"notification_text\" : \"en-US text.\"," " }," " \"default\" : {" " \"notification_text\" : \"default_text.\"," " }," " }," " }," " }," "}"; } // anonymous namespace namespace chromeos { using ::testing::_; using ::testing::DoAll; using ::testing::NotNull; using ::testing::Return; using ::testing::SetArgumentPointee; TEST(StartupCustomizationDocumentTest, Basic) { MockSystemAccess mock_system_access; EXPECT_CALL(mock_system_access, GetMachineStatistic(_, NotNull())) .WillRepeatedly(Return(false)); EXPECT_CALL(mock_system_access, GetMachineStatistic(std::string("hwid"), NotNull())) .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Mario 12345")), Return(true))); StartupCustomizationDocument customization(&mock_system_access, 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) { MockSystemAccess mock_system_access; EXPECT_CALL(mock_system_access, GetMachineStatistic(std::string("hwid"), NotNull())) .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Mario 12345")), Return(true))); EXPECT_CALL(mock_system_access, GetMachineStatistic(std::string("initial_locale"), NotNull())) .WillOnce(DoAll(SetArgumentPointee<1>(std::string("ja")), Return(true))); EXPECT_CALL(mock_system_access, GetMachineStatistic(std::string("initial_timezone"), NotNull())) .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Asia/Tokyo")), Return(true))); EXPECT_CALL(mock_system_access, GetMachineStatistic(std::string("keyboard_layout"), NotNull())) .WillOnce(DoAll(SetArgumentPointee<1>(std::string("mozc-jp")), Return(true))); StartupCustomizationDocument customization(&mock_system_access, 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) { MockSystemAccess mock_system_access; StartupCustomizationDocument customization(&mock_system_access, kBadManifest); EXPECT_FALSE(customization.IsReady()); } TEST(ServicesCustomizationDocumentTest, Basic) { ServicesCustomizationDocument customization(kGoodServicesManifest, "en-US"); 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")); const ServicesCustomizationDocument::CarrierDeal* deal; deal = customization.GetCarrierDeal("Carrier (country)", true); EXPECT_TRUE(deal != NULL); EXPECT_EQ("en-US", deal->deal_locale); EXPECT_EQ("http://www.carrier.com/", deal->top_up_url); EXPECT_EQ(1, deal->notification_count); EXPECT_EQ("3G connectivity : Carrier.", deal->GetLocalizedString("en-US", "notification_text")); EXPECT_EQ("default_text.", deal->GetLocalizedString("en", "notification_text")); base::Time reference_time; base::Time::FromString(L"31/12/12 0:00", &reference_time); EXPECT_EQ(reference_time, deal->expire_date); } TEST(ServicesCustomizationDocumentTest, OldDeal) { ServicesCustomizationDocument customization(kOldDealServicesManifest, "en-US"); EXPECT_TRUE(customization.IsReady()); const ServicesCustomizationDocument::CarrierDeal* deal; // TODO(nkostylev): Pass fixed time instead of relying on Time::Now(). deal = customization.GetCarrierDeal("Carrier (country)", true); EXPECT_TRUE(deal == NULL); } TEST(ServicesCustomizationDocumentTest, DealOtherLocale) { ServicesCustomizationDocument customization(kGoodServicesManifest, "en-GB"); EXPECT_TRUE(customization.IsReady()); const ServicesCustomizationDocument::CarrierDeal* deal; deal = customization.GetCarrierDeal("Carrier (country)", true); EXPECT_TRUE(deal == NULL); } TEST(ServicesCustomizationDocumentTest, BadManifest) { ServicesCustomizationDocument customization(kBadManifest, "en-US"); EXPECT_FALSE(customization.IsReady()); } TEST(ServicesCustomizationDocumentTest, NoDealRestrictions) { ServicesCustomizationDocument customization_oth_locale(kGoodServicesManifest, "en-GB"); EXPECT_TRUE(customization_oth_locale.IsReady()); const ServicesCustomizationDocument::CarrierDeal* deal; deal = customization_oth_locale.GetCarrierDeal("Carrier (country)", false); EXPECT_TRUE(deal != NULL); ServicesCustomizationDocument customization_old_deal(kOldDealServicesManifest, "en-US"); EXPECT_TRUE(customization_old_deal.IsReady()); deal = customization_old_deal.GetCarrierDeal("Carrier (country)", false); EXPECT_TRUE(deal != NULL); } } // namespace chromeos