| // Copyright 2017 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/installer/util/l10n_string_util.h" |
| |
| #include "base/macros.h" |
| #include "chrome/install_static/install_modes.h" |
| #include "chrome/install_static/test/scoped_install_details.h" |
| #include "chrome/installer/util/installer_util_strings.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace installer { |
| |
| // Test that each mode-specific string has a distinct value among the brand's |
| // install modes. |
| TEST(GetLocalizedStringTest, DistinctStrings) { |
| static constexpr int kStringIds[] = { |
| // Generate the list of mode-specific string IDs. |
| #define HANDLE_MODE_STRING(id, ...) id, |
| DO_MODE_STRINGS |
| #undef HANDLE_MODE_STRING |
| }; |
| for (int string_id : kStringIds) { |
| SCOPED_TRACE(testing::Message() << "message id: " << string_id); |
| std::set<base::string16> the_strings; |
| for (int mode_index = 0; mode_index < install_static::NUM_INSTALL_MODES; |
| ++mode_index) { |
| SCOPED_TRACE(testing::Message() << "install mode index: " << mode_index); |
| install_static::ScopedInstallDetails install_details(false, mode_index); |
| base::string16 the_string = GetLocalizedString(string_id); |
| ASSERT_FALSE(the_string.empty()); |
| EXPECT_TRUE(the_strings.insert(the_string).second) |
| << the_string << " is found in more than one install mode."; |
| } |
| } |
| } |
| |
| #if defined(GOOGLE_CHROME_BUILD) |
| // Test that the mode-specific string mappings are correct for Google Chrome |
| // builds. |
| TEST(GetBaseMessageIdForMode, GoogleStringIds) { |
| // The list of string ids that are mapped based on the install mode. This |
| // matches the top-level identifiers in create_string_rc.py's |
| // MODE_SPECIFIC_STRINGS data structure. |
| std::vector<int> input_ids({IDS_APP_SHORTCUTS_SUBDIR_NAME_BASE, |
| IDS_INBOUND_MDNS_RULE_DESCRIPTION_BASE, |
| IDS_INBOUND_MDNS_RULE_NAME_BASE, |
| IDS_PRODUCT_NAME_BASE}); |
| |
| // A map from an install mode index to its mode-specific string identifiers. |
| std::map<int, std::vector<int>> mode_to_strings; |
| mode_to_strings[install_static::STABLE_INDEX] = std::vector<int>( |
| {IDS_APP_SHORTCUTS_SUBDIR_NAME_BASE, |
| IDS_INBOUND_MDNS_RULE_DESCRIPTION_BASE, IDS_INBOUND_MDNS_RULE_NAME_BASE, |
| IDS_PRODUCT_NAME_BASE}); |
| mode_to_strings[install_static::BETA_INDEX] = std::vector<int>( |
| {IDS_APP_SHORTCUTS_SUBDIR_NAME_BETA_BASE, |
| IDS_INBOUND_MDNS_RULE_DESCRIPTION_BETA_BASE, |
| IDS_INBOUND_MDNS_RULE_NAME_BETA_BASE, IDS_SHORTCUT_NAME_BETA_BASE}); |
| mode_to_strings[install_static::DEV_INDEX] = std::vector<int>( |
| {IDS_APP_SHORTCUTS_SUBDIR_NAME_DEV_BASE, |
| IDS_INBOUND_MDNS_RULE_DESCRIPTION_DEV_BASE, |
| IDS_INBOUND_MDNS_RULE_NAME_DEV_BASE, IDS_SHORTCUT_NAME_DEV_BASE}); |
| mode_to_strings[install_static::CANARY_INDEX] = std::vector<int>( |
| {IDS_APP_SHORTCUTS_SUBDIR_NAME_CANARY_BASE, |
| IDS_INBOUND_MDNS_RULE_DESCRIPTION_CANARY_BASE, |
| IDS_INBOUND_MDNS_RULE_NAME_CANARY_BASE, IDS_SXS_SHORTCUT_NAME_BASE}); |
| |
| // Run through all install modes, checking that the mode-specific strings are |
| // mapped properly by GetBaseMessageIdForMode. |
| ASSERT_EQ(static_cast<size_t>(install_static::NUM_INSTALL_MODES), |
| mode_to_strings.size()); |
| for (int mode_index = 0; mode_index < install_static::NUM_INSTALL_MODES; |
| ++mode_index) { |
| SCOPED_TRACE(testing::Message() << "install mode index: " << mode_index); |
| ASSERT_EQ(1U, mode_to_strings.count(mode_index)); |
| const auto& mode_strings = mode_to_strings[mode_index]; |
| ASSERT_EQ(mode_strings.size(), input_ids.size()); |
| |
| install_static::ScopedInstallDetails install_details(false, mode_index); |
| for (size_t i = 0; i < input_ids.size(); ++i) |
| EXPECT_EQ(mode_strings[i], GetBaseMessageIdForMode(input_ids[i])); |
| } |
| } |
| #endif // defined(GOOGLE_CHROME_BUILD) |
| |
| } // namespace installer |