OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/autofill/core/browser/data_driven_test.h" | 5 #include "components/autofill/core/browser/data_driven_test.h" |
6 | 6 |
7 #include "base/files/file_enumerator.h" | 7 #include "base/files/file_enumerator.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
| 10 #include "base/threading/thread_restrictions.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
11 | 12 |
12 namespace autofill { | 13 namespace autofill { |
13 namespace { | 14 namespace { |
14 | 15 |
15 // Reads |file| into |content|, and converts Windows line-endings to Unix ones. | 16 // Reads |file| into |content|, and converts Windows line-endings to Unix ones. |
16 // Returns true on success. | 17 // Returns true on success. |
17 bool ReadFile(const base::FilePath& file, std::string* content) { | 18 bool ReadFile(const base::FilePath& file, std::string* content) { |
18 if (!base::ReadFileToString(file, content)) | 19 if (!base::ReadFileToString(file, content)) |
19 return false; | 20 return false; |
20 | 21 |
21 base::ReplaceSubstringsAfterOffset(content, 0, "\r\n", "\n"); | 22 base::ReplaceSubstringsAfterOffset(content, 0, "\r\n", "\n"); |
22 return true; | 23 return true; |
23 } | 24 } |
24 | 25 |
25 // Write |content| to |file|. Returns true on success. | 26 // Write |content| to |file|. Returns true on success. |
26 bool WriteFile(const base::FilePath& file, const std::string& content) { | 27 bool WriteFile(const base::FilePath& file, const std::string& content) { |
27 int write_size = base::WriteFile(file, content.c_str(), | 28 int write_size = base::WriteFile(file, content.c_str(), |
28 static_cast<int>(content.length())); | 29 static_cast<int>(content.length())); |
29 return write_size == static_cast<int>(content.length()); | 30 return write_size == static_cast<int>(content.length()); |
30 } | 31 } |
31 | 32 |
32 } // namespace | 33 } // namespace |
33 | 34 |
34 void DataDrivenTest::RunDataDrivenTest( | 35 void DataDrivenTest::RunDataDrivenTest( |
35 const base::FilePath& input_directory, | 36 const base::FilePath& input_directory, |
36 const base::FilePath& output_directory, | 37 const base::FilePath& output_directory, |
37 const base::FilePath::StringType& file_name_pattern) { | 38 const base::FilePath::StringType& file_name_pattern) { |
| 39 base::ThreadRestrictions::ScopedAllowIO allow_io; |
38 ASSERT_TRUE(base::DirectoryExists(input_directory)); | 40 ASSERT_TRUE(base::DirectoryExists(input_directory)); |
39 ASSERT_TRUE(base::DirectoryExists(output_directory)); | 41 ASSERT_TRUE(base::DirectoryExists(output_directory)); |
40 base::FileEnumerator input_files(input_directory, | 42 base::FileEnumerator input_files(input_directory, |
41 false, | 43 false, |
42 base::FileEnumerator::FILES, | 44 base::FileEnumerator::FILES, |
43 file_name_pattern); | 45 file_name_pattern); |
44 | 46 |
45 for (base::FilePath input_file = input_files.Next(); | 47 for (base::FilePath input_file = input_files.Next(); |
46 !input_file.empty(); | 48 !input_file.empty(); |
47 input_file = input_files.Next()) { | 49 input_file = input_files.Next()) { |
48 RunOneDataDrivenTest(input_file, output_directory); | 50 RunOneDataDrivenTest(input_file, output_directory); |
49 } | 51 } |
50 } | 52 } |
51 | 53 |
52 void DataDrivenTest::RunOneDataDrivenTest( | 54 void DataDrivenTest::RunOneDataDrivenTest( |
53 const base::FilePath& test_file_name, | 55 const base::FilePath& test_file_name, |
54 const base::FilePath& output_directory) { | 56 const base::FilePath& output_directory) { |
| 57 base::ThreadRestrictions::ScopedAllowIO allow_io; |
55 // iOS doesn't get rid of removed test files. TODO(estade): remove this after | 58 // iOS doesn't get rid of removed test files. TODO(estade): remove this after |
56 // all iOS bots are clobbered. | 59 // all iOS bots are clobbered. |
57 if (test_file_name.BaseName().value() == FILE_PATH_LITERAL("multimerge.in")) | 60 if (test_file_name.BaseName().value() == FILE_PATH_LITERAL("multimerge.in")) |
58 return; | 61 return; |
59 | 62 |
60 ASSERT_TRUE(base::DirectoryExists(output_directory)); | 63 ASSERT_TRUE(base::DirectoryExists(output_directory)); |
61 SCOPED_TRACE(test_file_name.BaseName().value()); | 64 SCOPED_TRACE(test_file_name.BaseName().value()); |
62 | 65 |
63 std::string input; | 66 std::string input; |
64 ReadFile(test_file_name, &input); | 67 ReadFile(test_file_name, &input); |
65 | 68 |
66 std::string output; | 69 std::string output; |
| 70 base::ThreadRestrictions::SetIOAllowed(false); |
67 GenerateResults(input, &output); | 71 GenerateResults(input, &output); |
| 72 base::ThreadRestrictions::SetIOAllowed(true); |
68 | 73 |
69 base::FilePath output_file = output_directory.Append( | 74 base::FilePath output_file = output_directory.Append( |
70 test_file_name.BaseName().StripTrailingSeparators().ReplaceExtension( | 75 test_file_name.BaseName().StripTrailingSeparators().ReplaceExtension( |
71 FILE_PATH_LITERAL(".out"))); | 76 FILE_PATH_LITERAL(".out"))); |
72 | 77 |
73 std::string output_file_contents; | 78 std::string output_file_contents; |
74 if (ReadFile(output_file, &output_file_contents)) | 79 if (ReadFile(output_file, &output_file_contents)) |
75 EXPECT_EQ(output_file_contents, output); | 80 EXPECT_EQ(output_file_contents, output); |
76 else | 81 else |
77 ASSERT_TRUE(WriteFile(output_file, output)); | 82 ASSERT_TRUE(WriteFile(output_file, output)); |
(...skipping 18 matching lines...) Expand all Loading... |
96 } | 101 } |
97 | 102 |
98 DataDrivenTest::DataDrivenTest(const base::FilePath& test_data_directory) | 103 DataDrivenTest::DataDrivenTest(const base::FilePath& test_data_directory) |
99 : test_data_directory_(test_data_directory) { | 104 : test_data_directory_(test_data_directory) { |
100 } | 105 } |
101 | 106 |
102 DataDrivenTest::~DataDrivenTest() { | 107 DataDrivenTest::~DataDrivenTest() { |
103 } | 108 } |
104 | 109 |
105 } // namespace autofill | 110 } // namespace autofill |
OLD | NEW |