Adding instrumentation to locate the source of jankiness
[chromium-blink-merge.git] / chrome / browser / chromeos / extensions / default_app_order_unittest.cc
blob50651d3e66a6828baf68de1e543146babf77e4b1
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/chromeos/extensions/default_app_order.h"
7 #include <string>
8 #include <vector>
10 #include "base/files/file_path.h"
11 #include "base/files/file_util.h"
12 #include "base/files/scoped_temp_dir.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/path_service.h"
15 #include "base/test/scoped_path_override.h"
16 #include "chrome/common/extensions/extension_constants.h"
17 #include "chromeos/chromeos_paths.h"
18 #include "testing/gtest/include/gtest/gtest.h"
20 namespace chromeos {
22 namespace {
24 const base::FilePath::CharType kTestFile[] =
25 FILE_PATH_LITERAL("test_default_app_order.json");
28 class DefaultAppOrderTest : public testing::Test {
29 public:
30 DefaultAppOrderTest() {}
31 virtual ~DefaultAppOrderTest() {}
33 // testing::Test overrides:
34 virtual void SetUp() override {
35 default_app_order::Get(&built_in_default_);
37 virtual void TearDown() override {
40 bool IsBuiltInDefault(const std::vector<std::string>& apps) {
41 if (apps.size() != built_in_default_.size())
42 return false;
44 for (size_t i = 0; i < built_in_default_.size(); ++i) {
45 if (built_in_default_[i] != apps[i])
46 return false;
49 return true;
52 void SetExternalFile(const base::FilePath& path) {
53 path_override_.reset(new base::ScopedPathOverride(
54 chromeos::FILE_DEFAULT_APP_ORDER, path));
57 void CreateExternalOrderFile(const std::string& content) {
58 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
59 base::FilePath external_file = temp_dir_.path().Append(kTestFile);
60 base::WriteFile(external_file, content.c_str(), content.size());
61 SetExternalFile(external_file);
64 private:
65 std::vector<std::string> built_in_default_;
67 base::ScopedTempDir temp_dir_;
68 scoped_ptr<base::ScopedPathOverride> path_override_;
70 DISALLOW_COPY_AND_ASSIGN(DefaultAppOrderTest);
73 // Tests that the built-in default order is returned when ExternalLoader is not
74 // created.
75 TEST_F(DefaultAppOrderTest, BuiltInDefault) {
76 std::vector<std::string> apps;
77 default_app_order::Get(&apps);
78 EXPECT_TRUE(IsBuiltInDefault(apps));
81 // Tests external order file overrides built-in default.
82 TEST_F(DefaultAppOrderTest, ExternalOrder) {
83 const char kExternalOrder[] = "[\"app1\",\"app2\",\"app3\","
84 "{ \"oem_apps_folder\": true,\"localized_content\": {"
85 " \"default\": {\"name\": \"OEM name\"}}}]";
86 CreateExternalOrderFile(std::string(kExternalOrder));
88 scoped_ptr<default_app_order::ExternalLoader> loader(
89 new default_app_order::ExternalLoader(false));
91 std::vector<std::string> apps;
92 default_app_order::Get(&apps);
93 EXPECT_EQ(3u, apps.size());
94 EXPECT_EQ(std::string("app1"), apps[0]);
95 EXPECT_EQ(std::string("app2"), apps[1]);
96 EXPECT_EQ(std::string("app3"), apps[2]);
97 EXPECT_EQ(std::string("OEM name"), default_app_order::GetOemAppsFolderName());
100 // Tests none-existent order file gives built-in default.
101 TEST_F(DefaultAppOrderTest, NoExternalFile) {
102 base::ScopedTempDir scoped_tmp_dir;
103 ASSERT_TRUE(scoped_tmp_dir.CreateUniqueTempDir());
105 base::FilePath none_existent_file =
106 scoped_tmp_dir.path().AppendASCII("none_existent_file");
107 ASSERT_FALSE(base::PathExists(none_existent_file));
108 SetExternalFile(none_existent_file);
110 scoped_ptr<default_app_order::ExternalLoader> loader(
111 new default_app_order::ExternalLoader(false));
113 std::vector<std::string> apps;
114 default_app_order::Get(&apps);
115 EXPECT_TRUE(IsBuiltInDefault(apps));
118 // Tests bad json file gives built-in default.
119 TEST_F(DefaultAppOrderTest, BadExternalFile) {
120 const char kExternalOrder[] = "This is not a valid json.";
121 CreateExternalOrderFile(std::string(kExternalOrder));
123 scoped_ptr<default_app_order::ExternalLoader> loader(
124 new default_app_order::ExternalLoader(false));
126 std::vector<std::string> apps;
127 default_app_order::Get(&apps);
128 EXPECT_TRUE(IsBuiltInDefault(apps));
131 TEST_F(DefaultAppOrderTest, ImportDefault) {
132 const char kExternalOrder[] =
133 "[\"app1\","
134 "{ \"import_default_order\": true }, \"app2\"]";
135 CreateExternalOrderFile(std::string(kExternalOrder));
137 scoped_ptr<default_app_order::ExternalLoader> loader(
138 new default_app_order::ExternalLoader(false));
140 std::vector<std::string> apps;
141 default_app_order::Get(&apps);
142 EXPECT_EQ(default_app_order::kDefaultAppOrderCount + 2, apps.size());
143 EXPECT_EQ(std::string("app1"), apps[0]);
144 EXPECT_EQ(extension_misc::kChromeAppId, apps[1]);
145 EXPECT_EQ(std::string("app2"),
146 apps[default_app_order::kDefaultAppOrderCount + 1]);
149 } // namespace chromeos