// 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