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
3 // found in the LICENSE file.
5 #include "components/autofill/core/browser/data_driven_test.h"
7 #include "base/files/file_enumerator.h"
8 #include "base/files/file_util.h"
9 #include "base/strings/string_util.h"
10 #include "testing/gtest/include/gtest/gtest.h"
15 // Reads |file| into |content|, and converts Windows line-endings to Unix ones.
16 // Returns true on success.
17 bool ReadFile(const base::FilePath
& file
, std::string
* content
) {
18 if (!base::ReadFileToString(file
, content
))
21 base::ReplaceSubstringsAfterOffset(content
, 0, "\r\n", "\n");
25 // Write |content| to |file|. Returns true on success.
26 bool WriteFile(const base::FilePath
& file
, const std::string
& content
) {
27 int write_size
= base::WriteFile(file
, content
.c_str(),
28 static_cast<int>(content
.length()));
29 return write_size
== static_cast<int>(content
.length());
34 void DataDrivenTest::RunDataDrivenTest(
35 const base::FilePath
& input_directory
,
36 const base::FilePath
& output_directory
,
37 const base::FilePath::StringType
& file_name_pattern
) {
38 ASSERT_TRUE(base::DirectoryExists(input_directory
));
39 ASSERT_TRUE(base::DirectoryExists(output_directory
));
40 base::FileEnumerator
input_files(input_directory
,
42 base::FileEnumerator::FILES
,
45 for (base::FilePath input_file
= input_files
.Next();
47 input_file
= input_files
.Next()) {
48 RunOneDataDrivenTest(input_file
, output_directory
);
52 void DataDrivenTest::RunOneDataDrivenTest(
53 const base::FilePath
& test_file_name
,
54 const base::FilePath
& output_directory
) {
55 // iOS doesn't get rid of removed test files. TODO(estade): remove this after
56 // all iOS bots are clobbered.
57 if (test_file_name
.BaseName().value() == FILE_PATH_LITERAL("multimerge.in"))
60 ASSERT_TRUE(base::DirectoryExists(output_directory
));
61 SCOPED_TRACE(test_file_name
.BaseName().value());
64 ReadFile(test_file_name
, &input
);
67 GenerateResults(input
, &output
);
69 base::FilePath output_file
= output_directory
.Append(
70 test_file_name
.BaseName().StripTrailingSeparators().ReplaceExtension(
71 FILE_PATH_LITERAL(".out")));
73 std::string output_file_contents
;
74 if (ReadFile(output_file
, &output_file_contents
))
75 EXPECT_EQ(output_file_contents
, output
);
77 ASSERT_TRUE(WriteFile(output_file
, output
));
80 base::FilePath
DataDrivenTest::GetInputDirectory(
81 const base::FilePath::StringType
& test_name
) {
83 dir
= test_data_directory_
.AppendASCII("autofill")
85 .AppendASCII("input");
89 base::FilePath
DataDrivenTest::GetOutputDirectory(
90 const base::FilePath::StringType
& test_name
) {
92 dir
= test_data_directory_
.AppendASCII("autofill")
94 .AppendASCII("output");
98 DataDrivenTest::DataDrivenTest(const base::FilePath
& test_data_directory
)
99 : test_data_directory_(test_data_directory
) {
102 DataDrivenTest::~DataDrivenTest() {
105 } // namespace autofill