summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/options/language_config_model_unittest.cc
blob: e9b593d6cf728ac883f936e2c5f729211f305f89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Copyright (c) 2010 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 <map>
#include <string>
#include <utility>
#include <vector>

#include "app/l10n_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/chromeos/options/language_config_model.h"
#include "grit/generated_resources.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace chromeos {

TEST(AddLanguageComboboxModelTest, AddLanguageComboboxModel) {
  std::vector<std::string> language_codes;
  language_codes.push_back("de");
  language_codes.push_back("fr");
  language_codes.push_back("ko");
  AddLanguageComboboxModel model(NULL, language_codes);

  // GetItemCount() should return 4 ("Add language" + 3 language codes).
  ASSERT_EQ(4, model.GetItemCount());

  // The first item should be "Add language" labe.
  EXPECT_EQ(l10n_util::GetString(
      IDS_OPTIONS_SETTINGS_LANGUAGES_ADD_LANGUAGE_COMBOBOX),
            model.GetItemAt(0));
  // Other items should be sorted language display names for UI (hence
  // French comes before German).  Note that the returned display names
  // are followed by their native representations. To simplify matching,
  // use StartsWith() here.
  EXPECT_TRUE(StartsWith(model.GetItemAt(1), L"French", true))
      << model.GetItemAt(1);
  EXPECT_TRUE(StartsWith(model.GetItemAt(2), L"German", true))
      << model.GetItemAt(2);
  EXPECT_TRUE(StartsWith(model.GetItemAt(3), L"Korean", true))
      << model.GetItemAt(3);

  // GetLanguageIndex() returns the given index -1 to offset "Add language".
  EXPECT_EQ(0, model.GetLanguageIndex(1));
  EXPECT_EQ(1, model.GetLanguageIndex(2));
  EXPECT_EQ(2, model.GetLanguageIndex(3));

  // The returned index can be used for GetLocaleFromIndex().
  EXPECT_EQ("fr", model.GetLocaleFromIndex(model.GetLanguageIndex(1)));
  EXPECT_EQ("de", model.GetLocaleFromIndex(model.GetLanguageIndex(2)));
  EXPECT_EQ("ko", model.GetLocaleFromIndex(model.GetLanguageIndex(3)));

  // GetIndexFromLocale() returns the language index.
  EXPECT_EQ(0, model.GetIndexFromLocale("fr"));
  EXPECT_EQ(1, model.GetIndexFromLocale("de"));
  EXPECT_EQ(2, model.GetIndexFromLocale("ko"));
  EXPECT_EQ(-1, model.GetIndexFromLocale("ja"));  // Not in the model.

  // Mark "de" to be ignored, and check if it's gone.
  model.SetIgnored("de", true);
  ASSERT_EQ(3, model.GetItemCount());
  EXPECT_EQ("fr", model.GetLocaleFromIndex(model.GetLanguageIndex(1)));
  EXPECT_EQ("ko", model.GetLocaleFromIndex(model.GetLanguageIndex(2)));

  // Mark "ko" to be ignored, and check if it's gone.
  model.SetIgnored("ko", true);
  ASSERT_EQ(2, model.GetItemCount());
  EXPECT_EQ("fr", model.GetLocaleFromIndex(model.GetLanguageIndex(1)));

  // Mark "fr" to be ignored, and check if it's gone.
  model.SetIgnored("fr", true);
  ASSERT_EQ(1, model.GetItemCount());

  // Mark "de" not to be ignored, and see if it's back.
  model.SetIgnored("de", false);
  ASSERT_EQ(2, model.GetItemCount());
  EXPECT_EQ("de", model.GetLocaleFromIndex(model.GetLanguageIndex(1)));

  // Mark "fr" not to be ignored, and see if it's back.
  model.SetIgnored("fr", false);
  ASSERT_EQ(3, model.GetItemCount());
  EXPECT_EQ("fr", model.GetLocaleFromIndex(model.GetLanguageIndex(1)));
  EXPECT_EQ("de", model.GetLocaleFromIndex(model.GetLanguageIndex(2)));

  // Mark "ko" not to be ignored, and see if it's back.
  model.SetIgnored("ko", false);
  ASSERT_EQ(4, model.GetItemCount());
  EXPECT_EQ("fr", model.GetLocaleFromIndex(model.GetLanguageIndex(1)));
  EXPECT_EQ("de", model.GetLocaleFromIndex(model.GetLanguageIndex(2)));
  EXPECT_EQ("ko", model.GetLocaleFromIndex(model.GetLanguageIndex(3)));

  // Mark "ja" (not in the model) to be ignored.
  model.SetIgnored("ja", true);
  // The GetItemCount() should not be changed.
  ASSERT_EQ(4, model.GetItemCount());
}

}  // namespace chromeos