default_app_order_unittest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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. 4 5#include "chrome/browser/chromeos/extensions/default_app_order.h" 6 7#include <string> 8#include <vector> 9 10#include "base/file_util.h" 11#include "base/files/file_path.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 "chromeos/chromeos_paths.h" 17#include "testing/gtest/include/gtest/gtest.h" 18 19namespace chromeos { 20 21namespace { 22 23const base::FilePath::CharType kTestFile[] = 24 FILE_PATH_LITERAL("test_default_app_order.json"); 25} 26 27class DefaultAppOrderTest : public testing::Test { 28 public: 29 DefaultAppOrderTest() {} 30 virtual ~DefaultAppOrderTest() {} 31 32 // testing::Test overrides: 33 virtual void SetUp() OVERRIDE { 34 default_app_order::Get(&built_in_default_); 35 } 36 virtual void TearDown() OVERRIDE { 37 } 38 39 bool IsBuiltInDefault(const std::vector<std::string>& apps) { 40 if (apps.size() != built_in_default_.size()) 41 return false; 42 43 for (size_t i = 0; i < built_in_default_.size(); ++i) { 44 if (built_in_default_[i] != apps[i]) 45 return false; 46 } 47 48 return true; 49 } 50 51 void SetExternalFile(const base::FilePath& path) { 52 path_override_.reset(new base::ScopedPathOverride( 53 chromeos::FILE_DEFAULT_APP_ORDER, path)); 54 } 55 56 void CreateExternalOrderFile(const std::string& content) { 57 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 58 base::FilePath external_file = temp_dir_.path().Append(kTestFile); 59 file_util::WriteFile(external_file, content.c_str(), content.size()); 60 SetExternalFile(external_file); 61 } 62 63 private: 64 std::vector<std::string> built_in_default_; 65 66 base::ScopedTempDir temp_dir_; 67 scoped_ptr<base::ScopedPathOverride> path_override_; 68 69 DISALLOW_COPY_AND_ASSIGN(DefaultAppOrderTest); 70}; 71 72// Tests that the built-in default order is returned when ExternalLoader is not 73// created. 74TEST_F(DefaultAppOrderTest, BuiltInDefault) { 75 std::vector<std::string> apps; 76 default_app_order::Get(&apps); 77 EXPECT_TRUE(IsBuiltInDefault(apps)); 78} 79 80// Tests external order file overrides built-in default. 81TEST_F(DefaultAppOrderTest, ExternalOrder) { 82 const char kExternalOrder[] = "[\"app1\",\"app2\",\"app3\"]"; 83 CreateExternalOrderFile(std::string(kExternalOrder)); 84 85 scoped_ptr<default_app_order::ExternalLoader> loader( 86 new default_app_order::ExternalLoader(false)); 87 88 std::vector<std::string> apps; 89 default_app_order::Get(&apps); 90 EXPECT_EQ(3u, apps.size()); 91 EXPECT_EQ(std::string("app1"), apps[0]); 92 EXPECT_EQ(std::string("app2"), apps[1]); 93 EXPECT_EQ(std::string("app3"), apps[2]); 94} 95 96// Tests none-existent order file gives built-in default. 97TEST_F(DefaultAppOrderTest, NoExternalFile) { 98 base::ScopedTempDir scoped_tmp_dir; 99 ASSERT_TRUE(scoped_tmp_dir.CreateUniqueTempDir()); 100 101 base::FilePath none_existent_file = 102 scoped_tmp_dir.path().AppendASCII("none_existent_file"); 103 ASSERT_FALSE(base::PathExists(none_existent_file)); 104 SetExternalFile(none_existent_file); 105 106 scoped_ptr<default_app_order::ExternalLoader> loader( 107 new default_app_order::ExternalLoader(false)); 108 109 std::vector<std::string> apps; 110 default_app_order::Get(&apps); 111 EXPECT_TRUE(IsBuiltInDefault(apps)); 112} 113 114// Tests bad json file gives built-in default. 115TEST_F(DefaultAppOrderTest, BadExternalFile) { 116 const char kExternalOrder[] = "This is not a valid json."; 117 CreateExternalOrderFile(std::string(kExternalOrder)); 118 119 scoped_ptr<default_app_order::ExternalLoader> loader( 120 new default_app_order::ExternalLoader(false)); 121 122 std::vector<std::string> apps; 123 default_app_order::Get(&apps); 124 EXPECT_TRUE(IsBuiltInDefault(apps)); 125} 126 127} // namespace chromeos 128