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 "base/file_util.h" 6 #include "base/files/scoped_temp_dir.h" 7 #include "base/memory/scoped_ptr.h" 8 #include "chrome/browser/extensions/extension_creator_filter.h" 9 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/platform_test.h" 11 12 namespace { 13 14 class ExtensionCreatorFilterTest : public PlatformTest { 15 protected: 16 virtual void SetUp() { 17 PlatformTest::SetUp(); 18 19 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 20 test_dir_ = temp_dir_.path(); 21 22 filter_ = new extensions::ExtensionCreatorFilter(); 23 } 24 25 base::FilePath CreateEmptyTestFile(const base::FilePath& file_path) { 26 base::FilePath test_file(test_dir_.Append(file_path)); 27 base::FilePath temp_file; 28 EXPECT_TRUE(file_util::CreateTemporaryFileInDir(test_dir_, &temp_file)); 29 EXPECT_TRUE(base::Move(temp_file, test_file)); 30 return test_file; 31 } 32 33 scoped_refptr<extensions::ExtensionCreatorFilter> filter_; 34 35 base::ScopedTempDir temp_dir_; 36 37 base::FilePath test_dir_; 38 }; 39 40 struct UnaryBooleanTestData { 41 const base::FilePath::CharType* input; 42 bool expected; 43 }; 44 45 TEST_F(ExtensionCreatorFilterTest, NormalCases) { 46 const struct UnaryBooleanTestData cases[] = { 47 { FILE_PATH_LITERAL("foo"), true }, 48 { FILE_PATH_LITERAL(".foo"), false }, 49 { FILE_PATH_LITERAL("~foo"), true }, 50 { FILE_PATH_LITERAL("foo~"), false }, 51 { FILE_PATH_LITERAL("#foo"), true }, 52 { FILE_PATH_LITERAL("foo#"), true }, 53 { FILE_PATH_LITERAL("#foo#"), false }, 54 { FILE_PATH_LITERAL(".svn"), false }, 55 { FILE_PATH_LITERAL("__MACOSX"), false }, 56 }; 57 58 for (size_t i = 0; i < arraysize(cases); ++i) { 59 base::FilePath input(cases[i].input); 60 base::FilePath test_file(CreateEmptyTestFile(input)); 61 bool observed = filter_->ShouldPackageFile(test_file); 62 63 EXPECT_EQ(cases[i].expected, observed) << 64 "i: " << i << ", input: " << test_file.value(); 65 } 66 } 67 68 #if defined(OS_WIN) 69 struct StringBooleanWithBooleanTestData { 70 const base::FilePath::CharType* input_char; 71 bool input_bool; 72 bool expected; 73 }; 74 75 TEST_F(ExtensionCreatorFilterTest, WindowsHiddenFiles) { 76 const struct StringBooleanWithBooleanTestData cases[] = { 77 { FILE_PATH_LITERAL("a-normal-file"), false, true }, 78 { FILE_PATH_LITERAL(".a-dot-file"), false, false }, 79 { FILE_PATH_LITERAL(".a-dot-file-that-we-have-set-to-hidden"), 80 true, false }, 81 { FILE_PATH_LITERAL("a-file-that-we-have-set-to-hidden"), true, false }, 82 { FILE_PATH_LITERAL("a-file-that-we-have-not-set-to-hidden"), 83 false, true }, 84 }; 85 86 for (size_t i = 0; i < arraysize(cases); ++i) { 87 base::FilePath input(cases[i].input_char); 88 bool should_hide = cases[i].input_bool; 89 base::FilePath test_file(CreateEmptyTestFile(input)); 90 91 if (should_hide) { 92 SetFileAttributes(test_file.value().c_str(), FILE_ATTRIBUTE_HIDDEN); 93 } 94 bool observed = filter_->ShouldPackageFile(test_file); 95 EXPECT_EQ(cases[i].expected, observed) << 96 "i: " << i << ", input: " << test_file.value(); 97 } 98 } 99 #endif 100 101 } // namespace 102