// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "tools/gn/command_format.h"

#include "base/files/file_util.h"
#include "base/strings/string_util.h"
#include "tools/gn/commands.h"
#include "tools/gn/setup.h"
#include "tools/gn/test_with_scheduler.h"
#include "util/exe_path.h"
#include "util/test/test.h"

using FormatTest = TestWithScheduler;

#define FORMAT_TEST(n)                                                      \
  TEST_F(FormatTest, n) {                                                   \
    ::Setup setup;                                                          \
    std::string out;                                                        \
    std::string expected;                                                   \
    base::FilePath src_dir =                                                \
        GetExePath().DirName().Append(FILE_PATH_LITERAL(".."));             \
    base::SetCurrentDirectory(src_dir);                                     \
    EXPECT_TRUE(commands::FormatFileToString(                               \
        &setup, SourceFile("//tools/gn/format_test_data/" #n ".gn"),        \
        commands::TreeDumpMode::kInactive, &out));                          \
    ASSERT_TRUE(base::ReadFileToString(                                     \
        base::FilePath(FILE_PATH_LITERAL("tools/gn/format_test_data/")      \
                           FILE_PATH_LITERAL(#n)                            \
                               FILE_PATH_LITERAL(".golden")),               \
        &expected));                                                        \
    EXPECT_EQ(expected, out);                                               \
    /* Make sure formatting the output doesn't cause further changes. */    \
    std::string out_again;                                                  \
    EXPECT_TRUE(commands::FormatStringToString(out,                         \
        commands::TreeDumpMode::kInactive, &out_again));                    \
    ASSERT_EQ(out, out_again);                                              \
  }

// These are expanded out this way rather than a runtime loop so that
// --gtest_filter works as expected for individual test running.
FORMAT_TEST(001)
FORMAT_TEST(002)
FORMAT_TEST(003)
FORMAT_TEST(004)
FORMAT_TEST(005)
FORMAT_TEST(006)
FORMAT_TEST(007)
FORMAT_TEST(008)
FORMAT_TEST(009)
FORMAT_TEST(010)
FORMAT_TEST(011)
FORMAT_TEST(012)
FORMAT_TEST(013)
FORMAT_TEST(014)
FORMAT_TEST(015)
FORMAT_TEST(016)
FORMAT_TEST(017)
FORMAT_TEST(018)
FORMAT_TEST(019)
FORMAT_TEST(020)
FORMAT_TEST(021)
FORMAT_TEST(022)
FORMAT_TEST(023)
FORMAT_TEST(024)
FORMAT_TEST(025)
FORMAT_TEST(026)
FORMAT_TEST(027)
FORMAT_TEST(028)
FORMAT_TEST(029)
FORMAT_TEST(030)
FORMAT_TEST(031)
FORMAT_TEST(032)
FORMAT_TEST(033)
// TODO(scottmg): args+rebase_path unnecessarily split: FORMAT_TEST(034)
FORMAT_TEST(035)
FORMAT_TEST(036)
FORMAT_TEST(037)
FORMAT_TEST(038)
FORMAT_TEST(039)
// TODO(scottmg): Bad break, exceeding 80 col: FORMAT_TEST(040)
FORMAT_TEST(041)
FORMAT_TEST(042)
FORMAT_TEST(043)
// TODO(scottmg): Dewrapped caused exceeding 80 col: FORMAT_TEST(044)
FORMAT_TEST(045)
FORMAT_TEST(046)
FORMAT_TEST(047)
FORMAT_TEST(048)
// TODO(scottmg): Eval is broken (!) and comment output might have extra ,
//                FORMAT_TEST(049)
FORMAT_TEST(050)
FORMAT_TEST(051)
FORMAT_TEST(052)
FORMAT_TEST(053)
FORMAT_TEST(054)
FORMAT_TEST(055)
FORMAT_TEST(056)
FORMAT_TEST(057)
FORMAT_TEST(058)
FORMAT_TEST(059)
FORMAT_TEST(060)
FORMAT_TEST(061)
FORMAT_TEST(062)
FORMAT_TEST(063)
FORMAT_TEST(064)
FORMAT_TEST(065)
FORMAT_TEST(066)
FORMAT_TEST(067)
FORMAT_TEST(068)
FORMAT_TEST(069)
FORMAT_TEST(070)
FORMAT_TEST(071)
FORMAT_TEST(072)
FORMAT_TEST(073)
FORMAT_TEST(074)
FORMAT_TEST(075)
