// Copyright 2026 The GN 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 "gn/edit_command.h"

#include <string>
#include <string_view>
#include <vector>

#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "gn/err.h"
#include "gn/filesystem_utils.h"
#include "gn/setup.h"
#include "gn/test_with_scheduler.h"
#include "util/test/test.h"

namespace commands {
namespace {
struct Edited;
std::string Pretty(const Edited& edited);

struct Edited {
  Edited(std::string_view contents, EditState edit_state = EditState())
      : contents_(contents.starts_with('\n') ? contents.substr(1) : contents),
        edit_state_(std::move(edit_state)) {}

  bool operator==(const Edited& other) const {
    return Pretty(*this) == Pretty(other);
  }

  std::string contents_;
  EditState edit_state_;
};

std::string Pretty(const Edited& edited) {
  std::string res = edited.contents_;
  if (!edited.edit_state_.needs_manual_review.empty()) {
    res += "\nNeeds manual review: " +
           testing::Pretty(edited.edit_state_.needs_manual_review);
  }
  if (!edited.edit_state_.warnings.empty()) {
    res += "\nWarnings: " + testing::Pretty(edited.edit_state_.warnings);
  }
  if (!edited.edit_state_.needs_fix_deps.empty()) {
    res += "\nNeeds check --fix: " +
           testing::Pretty(edited.edit_state_.needs_fix_deps);
  }
  return res;
}

// Runs an edit command on matching the given target
// patterns, and returns the formatted output file contents.
Result<Edited> DoEdit(std::string command,
                      std::vector<std::string> patterns,
                      const std::string& before) {
  base::ScopedTempDir temp_dir;
  if (!temp_dir.CreateUniqueTempDir()) {
    return Err(Location(), "Failed to create temp dir");
  }
  base::FilePath root_path = base::MakeAbsoluteFilePath(temp_dir.GetPath());

  base::FilePath build_gn_path = root_path.AppendASCII("BUILD.gn");
  if (!WriteFile(build_gn_path, before, nullptr)) {
    return Err(Location(), "Failed to write BUILD.gn");
  }
  base::FilePath dot_gn_path = root_path.AppendASCII(".gn");
  if (!WriteFile(dot_gn_path, "", nullptr)) {
    return Err(Location(), "Failed to write .gn");
  }

  Setup setup;
  setup.build_settings().SetRootPath(root_path);

  std::vector<std::string> args;
  args.push_back(std::move(command));
  for (auto& p : patterns) {
    args.push_back(std::move(p));
  }

  auto result = RunEditImpl(args, setup);
  if (result.has_error()) {
    return result.error();
  }

  std::string after;
  if (!base::ReadFileToString(build_gn_path, &after)) {
    return Err(Location(), "Failed to read BUILD.gn");
  }
  return Edited(after, std::move(result->second));
}

// Runs an edit command matching all targets in the root BUILD.gn ("//:*").
Result<Edited> DoEdit(std::string command, const std::string& before) {
  return DoEdit(std::move(command), {"//:*"}, before);
}

}  // namespace

using EditCommandTest = TestWithScheduler;

TEST_F(EditCommandTest, MultipleTargetsSubset) {
  EXPECT_SUCCESS(DoEdit("set testonly true", {"//:foo"},
                        R"(
executable("foo") {
  testonly = false
}
executable("bar") {
  testonly = false
}
)"),
                 Edited(R"(
executable("foo") {
  testonly = true
}

executable("bar") {
  testonly = false
}
)"));
}

TEST_F(EditCommandTest, PatternNeverMatched) {
  EXPECT_FAILURE(DoEdit("set testonly true", {"//:nonexistent"},
                        R"(
executable("foo") {
}
)"),
                 "Target(s) not found: //:nonexistent");
}

TEST_F(EditCommandTest, AddSubcommand) {
  EXPECT_SUCCESS(DoEdit("add deps //add1 //add2 //add3 :dep2",
                        R"(
executable("foo") {
  deps = [ "//dep1" ]
  deps += [ "//:dep2" ]
  if (is_linux) {
    deps += [ "//add3" ]
  }
}
)"),
                 Edited(R"(
executable("foo") {
  deps = [
    "//add1",
    "//add2",
    "//add3",
    "//dep1",
  ]
  deps += [ "//:dep2" ]
  if (is_linux) {
    deps += []
  }
}
)"));

  // Adding to a target where attribute is not defined should it at the end
  EXPECT_SUCCESS(DoEdit("add deps //base",
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
)"),
                 Edited(R"(
executable("foo") {
  sources = [ "foo.cc" ]
  deps = [ "//base" ]
}
)"));

  // Attribute defined only conditionally should hoist to start of block and
  // convert = to +=
  EXPECT_SUCCESS(DoEdit("add deps //base",
                        R"(
executable("foo") {
  if (is_linux) {
    deps = [ "//dep" ]
  }
}
)"),
                 Edited(R"(
executable("foo") {
  deps = [ "//base" ]

  if (is_linux) {
    deps += [ "//dep" ]
  }
}
)"));

  EXPECT_SUCCESS(DoEdit("add deps //base",
                        R"(
executable("foo") {
  deps = foo + bar + [ "//baz" ]
}
)"),
                 Edited(R"(
executable("foo") {
  deps = foo + bar + [
           "//base",
           "//baz",
         ]
}
)"));

  EXPECT_SUCCESS(DoEdit("add deps //base",
                        R"(
executable("foo") {
  deps = other_deps
}
)"),
                 Edited(R"(
executable("foo") {
  deps = [ "//base" ] + other_deps
}
)"));
}

TEST_F(EditCommandTest, DeleteSubcommand) {
  EXPECT_SUCCESS(DoEdit("delete", {"//:bar"},
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
executable("bar") {
  sources = [ "bar.cc" ]
}
)"),
                 Edited(R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
)"));

  EXPECT_SUCCESS(DoEdit("delete", {"//:bar"},
                        R"(
if (is_win) {
  executable("bar") {
    sources = [ "bar.cc" ]
  }
} else {
  executable("bar") {
    sources = [ "bar.cc" ]
  }
}
)"),
                 Edited(R"(
if (is_win) {
  # TODO(gn edit: delete): This would normally be deleted but is conditional.
  # Manual intervention is required to decide whether it should actually be
  # deleted.
  executable("bar") {
    sources = [ "bar.cc" ]
  }
} else {
  # TODO(gn edit: delete): This would normally be deleted but is conditional.
  # Manual intervention is required to decide whether it should actually be
  # deleted.
  executable("bar") {
    sources = [ "bar.cc" ]
  }
}
)",
                        EditState({Label(SourceDir("//"), "bar")})));
}

TEST_F(EditCommandTest, MoveSubcommand) {
  EXPECT_SUCCESS(
      DoEdit("move deps public_deps //a //b //nonexistent", {"//:foo"},
             R"(
executable("foo") {
  deps = [
    "//a",
    "//b",
    "//c",
  ]
  public_deps = [ "//d" ]
}
)"),
      Edited(R"(
executable("foo") {
  deps = [ "//c" ]
  public_deps = [
    "//a",
    "//b",
    "//d",
  ]
}
)",
             EditState{{},
                       {Err(Location(),
                            "Target \"//:foo\" does not contain the value "
                            "\"//nonexistent\" in attribute \"deps\".")}}));
}

TEST_F(EditCommandTest, NewSubcommand) {
  // Append new target to the end of the file.
  EXPECT_SUCCESS(DoEdit("new source_set", {"//:bar"},
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
)"),
                 Edited(R"(
executable("foo") {
  sources = [ "foo.cc" ]
}

source_set("bar") {
}
)"));

  // Insert before a relative target.
  EXPECT_SUCCESS(DoEdit("new source_set before foo", {"//:bar"},
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
)"),
                 Edited(R"(
source_set("bar") {
}

executable("foo") {
  sources = [ "foo.cc" ]
}
)"));

  // Insert after a relative target.
  EXPECT_SUCCESS(DoEdit("new source_set after foo", {"//:bar"},
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
}

executable("baz") {
  sources = [ "baz.cc" ]
}
)"),
                 Edited(R"(
executable("foo") {
  sources = [ "foo.cc" ]
}

source_set("bar") {
}

executable("baz") {
  sources = [ "baz.cc" ]
}
)"));

  // Insert multiple new targets after a relative target.
  EXPECT_SUCCESS(DoEdit("new source_set after foo", {"//:bar", "//:qux"},
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
}

executable("baz") {
  sources = [ "baz.cc" ]
}
)"),
                 Edited(R"(
executable("foo") {
  sources = [ "foo.cc" ]
}

source_set("bar") {
}

source_set("qux") {
}

executable("baz") {
  sources = [ "baz.cc" ]
}
)"));

  // Error when target already exists.
  EXPECT_FAILURE(DoEdit("new source_set", {"//:foo"},
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
)"));

  // Error when relative target not found.
  EXPECT_FAILURE(DoEdit("new source_set before nonexistent", {"//:bar"},
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
)"));

  // Error when no explicit target name specified (e.g. glob pattern).
  EXPECT_FAILURE(DoEdit("new source_set", {"//*"},
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
)"));
}

TEST_F(EditCommandTest, RemoveAttributeSubcommand) {
  EXPECT_SUCCESS(DoEdit("remove testonly",
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
  testonly = true
}
)"),
                 Edited(R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
)"));

  EXPECT_SUCCESS(
      DoEdit("remove nonexistent_attribute", {"//:foo"},
             R"(
executable("foo") {
}
)"),
      Edited(R"(
executable("foo") {
}
)",
             EditState{{},
                       {Err(Location(),
                            "Target \"//:foo\" does not contain the "
                            "attribute \"nonexistent_attribute\".")}}));
}

TEST_F(EditCommandTest, RemoveFromAttributeSubcommand) {
  EXPECT_SUCCESS(DoEdit("remove deps //base :bar",
                        R"(
executable("foo") {
  deps = [
    "//base",
    "//:bar",
    "//other:bar",
  ]
}
)"),
                 Edited(R"(
executable("foo") {
  deps = [ "//other:bar" ]
}
)"));

  EXPECT_SUCCESS(DoEdit("remove deps //base //nonexistent:glob",
                        R"(
executable("foo") {
  deps = [ "//base" ] + [ "//foo:bar" ]
}
)"),
                 Edited(R"(
executable("foo") {
  deps = [] + [ "//foo:bar" ]
}
)"));

  EXPECT_SUCCESS(DoEdit("remove deps //nonexistent", {"//:foo"},
                        R"(
executable("foo") {
  deps = [ "//base" ]
}
)"),
                 Edited(R"(
executable("foo") {
  deps = [ "//base" ]
}
)",
                        EditState{{},
                                  {Err(Location(),
                                       "Target \"//:foo\" does not contain the "
                                       "value \"//nonexistent\" in attribute "
                                       "\"deps\".")}}));
}

TEST_F(EditCommandTest, RenameSubcommand) {
  EXPECT_SUCCESS(DoEdit("rename srcs sources",
                        R"(
executable("foo") {
  # This comment should be preserved
  srcs = [ "foo.cc" ]
  if (is_linux) {
    srcs += [ "linux.cc" ]
  }
}
)"),
                 Edited(R"(
executable("foo") {
  # This comment should be preserved
  sources = [ "foo.cc" ]
  if (is_linux) {
    sources += [ "linux.cc" ]
  }
}
)"));

  EXPECT_SUCCESS(DoEdit("rename nonexistent new_attr", {"//:foo"},
                        R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
)"),
                 Edited(R"(
executable("foo") {
  sources = [ "foo.cc" ]
}
)",
                        EditState{{},
                                  {Err(Location(),
                                       "Target \"//:foo\" does not contain the "
                                       "attribute \"nonexistent\".")}}));
}

TEST_F(EditCommandTest, SetSubcommand) {
  // New bool attribute
  EXPECT_SUCCESS(DoEdit("set testonly true",
                        R"(
executable("foo") {
}
)"),
                 Edited(R"(
executable("foo") {
  testonly = true
}
)"));

  // Replacing existing attribute
  EXPECT_SUCCESS(DoEdit("set testonly false",
                        R"(
executable("foo") {
  testonly = true
}
)"),
                 Edited(R"(
executable("foo") {
  testonly = false
}
)"));

  // String attribute
  EXPECT_SUCCESS(DoEdit("set label \"//foo:bar\"",
                        R"(
executable("foo") {
}
)"),
                 Edited(R"(
executable("foo") {
  label = "//foo:bar"
}
)"));

  // Int attribute
  EXPECT_SUCCESS(DoEdit("set assert_no_deps 42",
                        R"(
executable("foo") {
}
)"),
                 Edited(R"(
executable("foo") {
  assert_no_deps = 42
}
)"));

  // Multiple values setting a list (replaces first, deletes modification,
  // adds review for conditional)
  EXPECT_SUCCESS(DoEdit("set deps //foo //bar",
                        R"(
executable("foo") {
  deps = [ "//bar" ]
  deps += [ "//baz" ]
  if (is_linux) {
    deps += [ "//linux" ]
  }
}
)"),
                 Edited(
                     R"(
executable("foo") {
  deps = [
    "//bar",
    "//foo",
  ]

  if (is_linux) {
    # TODO(gn edit: set deps //foo //bar): This would normally be deleted but is
    # conditional. Manual intervention is required to decide whether it should
    # actually be deleted.
    deps += [ "//linux" ]
  }
}
)",
                     EditState({Label(SourceDir("//"), "foo")})));

  // Forced list attribute (appends new list, adds review for conditional)
  EXPECT_SUCCESS(DoEdit("set deps:list //foo",
                        R"(
executable("foo") {
  if (is_linux) {
    deps = [ "//linux" ]
    public_deps = [ "//linux" ]
  }
}
)"),
                 Edited(
                     R"(
executable("foo") {
  if (is_linux) {
    # TODO(gn edit: set deps:list //foo): This would normally be deleted but is
    # conditional. Manual intervention is required to decide whether it should
    # actually be deleted.
    deps = [ "//linux" ]
    public_deps = [ "//linux" ]
  }
  deps = [ "//foo" ]
}
)",
                     EditState({Label(SourceDir("//"), "foo")})));
}

TEST_F(EditCommandTest, ShardSubcommand) {
  // Shards target across sources and subdirectory files, preserving
  // conditionals, attributes, and visibility.
  EXPECT_SUCCESS(DoEdit("shard", {"//:foo"},
                        R"(
static_library("foo") {
  sources = [
    "a.cc",
    "a.h",
    "foo.h",
    "util/foo-bar.cc",
    "util/foo-bar.h",
  ]
  if (is_win) {
    sources += [ "c_win.cc" ]
  }
  defines = [ "ENABLE_FEATURE" ]
  deps = [ "//base" ]
  testonly = true
  visibility = [ "//..." ]
}
)"),
                 Edited(R"(
group("foo") {
  public_deps = [
    ":a",
    ":c_win",
    ":foo_foo",
    ":util_foo_bar",
  ]

  testonly = true
  visibility = [ "//..." ]
}
static_library("a") {
  sources = [
    "a.cc",
    "a.h",
  ]
  if (is_win) {
    sources += []
  }
  defines = [ "ENABLE_FEATURE" ]

  testonly = true
  visibility = [ "//..." ]
}
static_library("c_win") {
  sources = []
  if (is_win) {
    sources += [ "c_win.cc" ]
  }
  defines = [ "ENABLE_FEATURE" ]

  testonly = true
  visibility = [ "//..." ]
}
static_library("foo_foo") {
  sources = [ "foo.h" ]
  if (is_win) {
    sources += []
  }
  defines = [ "ENABLE_FEATURE" ]

  testonly = true
  visibility = [ "//..." ]
}
static_library("util_foo_bar") {
  sources = [
    "util/foo-bar.cc",
    "util/foo-bar.h",
  ]
  if (is_win) {
    sources += []
  }
  defines = [ "ENABLE_FEATURE" ]

  testonly = true
  visibility = [ "//..." ]
}
)",
                        EditState({}, {},
                                  {Label(SourceDir("//"), "a"),
                                   Label(SourceDir("//"), "c_win"),
                                   Label(SourceDir("//"), "foo_foo"),
                                   Label(SourceDir("//"), "util_foo_bar")})));

  // Sharding with explicit shard target type and custom group type.
  EXPECT_SUCCESS(DoEdit("shard source_set static_library", {"//:foo"},
                        R"(
static_library("foo") {
  sources = [
    "a.cc",
    "b.cc",
  ]
}
)"),
                 Edited(R"(
static_library("foo") {
  public_deps = [
    ":a",
    ":b",
  ]
}
source_set("a") {
  sources = [ "a.cc" ]
}
source_set("b") {
  sources = [ "b.cc" ]
}
)",
                        EditState({}, {},
                                  {Label(SourceDir("//"), "a"),
                                   Label(SourceDir("//"), "b")})));

  // Single source target emits a warning and is not sharded.
  EXPECT_SUCCESS(
      DoEdit("shard", {"//:foo"},
             R"(
static_library("foo") {
  sources = [ "foo.cc" ]
  deps = [ "//base" ]
}
)"),
      Edited(R"(
static_library("foo") {
  sources = [ "foo.cc" ]
  deps = [ "//base" ]
}
)",
             EditState(
                 {}, {Err(Location(),
                          "Target \"//:foo\" does not need to be sharded.")})));

  // Absolute source paths produce an error.
  EXPECT_FAILURE(DoEdit("shard", {"//:foo"},
                        R"(
static_library("foo") {
  sources = [
    "//base/a.cc",
    "b.cc",
  ]
}
)"));
}

}  // namespace commands
