• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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/autofill/data_driven_test.h"
6 
7 #include "base/file_util.h"
8 #include "base/path_service.h"
9 #include "base/string_util.h"
10 #include "chrome/common/chrome_paths.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 
13 namespace {
14 
15 // Reads |file| into |content|, and converts Windows line-endings to Unix ones.
16 // Returns true on success.
ReadFile(const FilePath & file,std::string * content)17 bool ReadFile(const FilePath& file, std::string* content) {
18   if (!file_util::ReadFileToString(file, content))
19     return false;
20 
21   ReplaceSubstringsAfterOffset(content, 0, "\r\n", "\n");
22   return true;
23 }
24 
25 // Write |content| to |file|. Returns true on success.
WriteFile(const FilePath & file,const std::string & content)26 bool WriteFile(const FilePath& file, const std::string& content) {
27   int write_size = file_util::WriteFile(file, content.c_str(),
28                                         content.length());
29   return write_size == static_cast<int>(content.length());
30 }
31 
32 }  // namespace
33 
RunDataDrivenTest(const FilePath & input_directory,const FilePath & output_directory,const FilePath::StringType & file_name_pattern)34 void DataDrivenTest::RunDataDrivenTest(
35     const FilePath& input_directory,
36     const FilePath& output_directory,
37     const FilePath::StringType& file_name_pattern) {
38   file_util::FileEnumerator input_files(input_directory,
39                                         false,
40                                         file_util::FileEnumerator::FILES,
41                                         file_name_pattern);
42 
43   for (FilePath input_file = input_files.Next();
44        !input_file.empty();
45        input_file = input_files.Next()) {
46     SCOPED_TRACE(input_file.BaseName().value());
47 
48     std::string input;
49     ASSERT_TRUE(ReadFile(input_file, &input));
50 
51     std::string output;
52     GenerateResults(input, &output);
53 
54     FilePath output_file = output_directory.Append(
55         input_file.BaseName().StripTrailingSeparators().ReplaceExtension(
56             FILE_PATH_LITERAL(".out")));
57 
58     std::string output_file_contents;
59     if (ReadFile(output_file, &output_file_contents))
60       EXPECT_EQ(output_file_contents, output);
61     else
62       ASSERT_TRUE(WriteFile(output_file, output));
63   }
64 }
65 
GetInputDirectory(const FilePath::StringType & test_name)66 FilePath DataDrivenTest::GetInputDirectory(
67     const FilePath::StringType& test_name) {
68   FilePath test_data_dir_;
69   PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_);
70   test_data_dir_ = test_data_dir_.AppendASCII("autofill")
71                                  .Append(test_name)
72                                  .AppendASCII("input");
73   return test_data_dir_;
74 }
75 
GetOutputDirectory(const FilePath::StringType & test_name)76 FilePath DataDrivenTest::GetOutputDirectory(
77     const FilePath::StringType& test_name) {
78   FilePath test_data_dir_;
79   PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_);
80   test_data_dir_ = test_data_dir_.AppendASCII("autofill")
81                                  .Append(test_name)
82                                  .AppendASCII("output");
83   return test_data_dir_;
84 }
85 
DataDrivenTest()86 DataDrivenTest::DataDrivenTest() {
87 }
88 
~DataDrivenTest()89 DataDrivenTest::~DataDrivenTest() {
90 }
91