1 // Copyright 2014 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 "gn/command_format.h" 6 7 #include "base/files/file_util.h" 8 #include "base/strings/string_util.h" 9 #include "gn/commands.h" 10 #include "gn/setup.h" 11 #include "gn/test_with_scheduler.h" 12 #include "util/exe_path.h" 13 #include "util/test/test.h" 14 15 using FormatTest = TestWithScheduler; 16 17 #define FORMAT_TEST(n) \ 18 TEST_F(FormatTest, n) { \ 19 ::Setup setup; \ 20 std::string input; \ 21 std::string out; \ 22 std::string expected; \ 23 base::FilePath src_dir = \ 24 GetExePath().DirName().Append(FILE_PATH_LITERAL("..")); \ 25 base::SetCurrentDirectory(src_dir); \ 26 ASSERT_TRUE(base::ReadFileToString( \ 27 base::FilePath(FILE_PATH_LITERAL("src/gn/format_test_data/") \ 28 FILE_PATH_LITERAL(#n) FILE_PATH_LITERAL(".gn")), \ 29 &input)); \ 30 ASSERT_TRUE(base::ReadFileToString( \ 31 base::FilePath(FILE_PATH_LITERAL("src/gn/format_test_data/") \ 32 FILE_PATH_LITERAL(#n) \ 33 FILE_PATH_LITERAL(".golden")), \ 34 &expected)); \ 35 EXPECT_TRUE(commands::FormatStringToString( \ 36 input, commands::TreeDumpMode::kInactive, &out, nullptr)); \ 37 EXPECT_EQ(expected, out); \ 38 /* Make sure formatting the output doesn't cause further changes. */ \ 39 std::string out_again; \ 40 EXPECT_TRUE(commands::FormatStringToString( \ 41 out, commands::TreeDumpMode::kInactive, &out_again, nullptr)); \ 42 ASSERT_EQ(out, out_again); \ 43 /* Make sure we can roundtrip to json without any changes. */ \ 44 std::string as_json; \ 45 std::string unused; \ 46 EXPECT_TRUE(commands::FormatStringToString( \ 47 out_again, commands::TreeDumpMode::kJSON, &unused, &as_json)); \ 48 std::string rewritten; \ 49 EXPECT_TRUE(commands::FormatJsonToString(as_json, &rewritten)); \ 50 ASSERT_EQ(out, rewritten); \ 51 } 52 53 // These are expanded out this way rather than a runtime loop so that 54 // --gtest_filter works as expected for individual test running. 55 FORMAT_TEST(001) 56 FORMAT_TEST(002) 57 FORMAT_TEST(003) 58 FORMAT_TEST(004) 59 FORMAT_TEST(005) 60 FORMAT_TEST(006) 61 FORMAT_TEST(007) 62 FORMAT_TEST(008) 63 FORMAT_TEST(009) 64 FORMAT_TEST(010) 65 FORMAT_TEST(011) 66 FORMAT_TEST(012) 67 FORMAT_TEST(013) 68 FORMAT_TEST(014) 69 FORMAT_TEST(015) 70 FORMAT_TEST(016) 71 FORMAT_TEST(017) 72 FORMAT_TEST(018) 73 FORMAT_TEST(019) 74 FORMAT_TEST(020) 75 FORMAT_TEST(021) 76 FORMAT_TEST(022) 77 FORMAT_TEST(023) 78 FORMAT_TEST(024) 79 FORMAT_TEST(025) 80 FORMAT_TEST(026) 81 FORMAT_TEST(027) 82 FORMAT_TEST(028) 83 FORMAT_TEST(029) 84 FORMAT_TEST(030) 85 FORMAT_TEST(031) 86 FORMAT_TEST(032) 87 FORMAT_TEST(033) 88 // TODO(scottmg): args+rebase_path unnecessarily split: FORMAT_TEST(034) 89 FORMAT_TEST(035) 90 FORMAT_TEST(036) 91 FORMAT_TEST(037) 92 FORMAT_TEST(038) 93 FORMAT_TEST(039) 94 FORMAT_TEST(040) 95 FORMAT_TEST(041) 96 FORMAT_TEST(042) 97 FORMAT_TEST(043) 98 FORMAT_TEST(044) 99 FORMAT_TEST(045) 100 FORMAT_TEST(046) 101 FORMAT_TEST(047) 102 FORMAT_TEST(048) 103 // TODO(scottmg): Eval is broken (!) and comment output might have extra , 104 // FORMAT_TEST(049) 105 FORMAT_TEST(050) 106 FORMAT_TEST(051) 107 FORMAT_TEST(052) 108 FORMAT_TEST(053) 109 FORMAT_TEST(054) 110 FORMAT_TEST(055) 111 FORMAT_TEST(056) 112 FORMAT_TEST(057) 113 FORMAT_TEST(058) 114 FORMAT_TEST(059) 115 FORMAT_TEST(060) 116 FORMAT_TEST(061) 117 FORMAT_TEST(062) 118 FORMAT_TEST(063) 119 FORMAT_TEST(064) 120 FORMAT_TEST(065) 121 FORMAT_TEST(066) 122 FORMAT_TEST(067) 123 FORMAT_TEST(068) 124 FORMAT_TEST(069) 125 FORMAT_TEST(070) 126 FORMAT_TEST(071) 127 FORMAT_TEST(072) 128 FORMAT_TEST(073) 129 FORMAT_TEST(074) 130 FORMAT_TEST(075) 131 FORMAT_TEST(076) 132 FORMAT_TEST(077) 133 FORMAT_TEST(078) 134 FORMAT_TEST(079) 135 FORMAT_TEST(080) 136 FORMAT_TEST(081) 137 FORMAT_TEST(082) 138 FORMAT_TEST(083) 139 FORMAT_TEST(084) 140