Add toolchain for cxx modules in TestWithScope

This is a preparation CL changing test for behavior around dependency
from rust executable to cxx modules.

Bug: 400872290
Change-Id: Icc24d7c0018895700bb515cb1fa7c09e0071185e
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/18380
Reviewed-by: David Turner <digit@google.com>
Commit-Queue: Takuto Ikuta <tikuta@google.com>
diff --git a/src/gn/json_project_writer_unittest.cc b/src/gn/json_project_writer_unittest.cc
index a026b40..0481d1a 100644
--- a/src/gn/json_project_writer_unittest.cc
+++ b/src/gn/json_project_writer_unittest.cc
@@ -129,6 +129,15 @@
             "outputs": [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ],
             "weak_framework_switch": "-weak_framework "
          },
+         "cxx_module": {
+            "command": "c++ {{source}} {{cflags}} {{cflags_cc}} {{defines}} {{include_dirs}} -o {{output}}",
+            "framework_dir_switch": "-F",
+            "framework_switch": "-framework ",
+            "lib_dir_switch": "-L",
+            "lib_switch": "-l",
+            "outputs": [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.pcm" ],
+            "weak_framework_switch": "-weak_framework "
+         },
          "link": {
             "command": "ld -o {{target_output_name}} {{source}} {{ldflags}} {{libs}}",
             "framework_dir_switch": "-F",
@@ -360,6 +369,15 @@
             "outputs": [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ],
             "weak_framework_switch": "-weak_framework "
          },
+         "cxx_module": {
+            "command": "c++ {{source}} {{cflags}} {{cflags_cc}} {{defines}} {{include_dirs}} -o {{output}}",
+            "framework_dir_switch": "-F",
+            "framework_switch": "-framework ",
+            "lib_dir_switch": "-L",
+            "lib_switch": "-l",
+            "outputs": [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.pcm" ],
+            "weak_framework_switch": "-weak_framework "
+         },
          "link": {
             "command": "ld -o {{target_output_name}} {{source}} {{ldflags}} {{libs}}",
             "framework_dir_switch": "-F",
@@ -615,6 +633,15 @@
             "outputs": [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ],
             "weak_framework_switch": "-weak_framework "
          },
+         "cxx_module": {
+            "command": "c++ {{source}} {{cflags}} {{cflags_cc}} {{defines}} {{include_dirs}} -o {{output}}",
+            "framework_dir_switch": "-F",
+            "framework_switch": "-framework ",
+            "lib_dir_switch": "-L",
+            "lib_switch": "-l",
+            "outputs": [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.pcm" ],
+            "weak_framework_switch": "-weak_framework "
+         },
          "link": {
             "command": "ld -o {{target_output_name}} {{source}} {{ldflags}} {{libs}}",
             "framework_dir_switch": "-F",
diff --git a/src/gn/ninja_c_binary_target_writer_unittest.cc b/src/gn/ninja_c_binary_target_writer_unittest.cc
index 8d2a388..5bfd2a4 100644
--- a/src/gn/ninja_c_binary_target_writer_unittest.cc
+++ b/src/gn/ninja_c_binary_target_writer_unittest.cc
@@ -2266,12 +2266,6 @@
   TestWithScope setup;
   Err err;
 
-  std::unique_ptr<Tool> cxx_module_tool =
-      Tool::CreateTool(CTool::kCToolCxxModule);
-  cxx_module_tool->set_outputs(SubstitutionList::MakeForTest(
-      "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.pcm"));
-  setup.toolchain()->SetTool(std::move(cxx_module_tool));
-
   TestTarget target(setup, "//foo:bar", Target::STATIC_LIBRARY);
   target.sources().push_back(SourceFile("//foo/bar.cc"));
   target.sources().push_back(SourceFile("//foo/bar.modulemap"));
diff --git a/src/gn/test_with_scope.cc b/src/gn/test_with_scope.cc
index 1fae377..98a021f 100644
--- a/src/gn/test_with_scope.cc
+++ b/src/gn/test_with_scope.cc
@@ -109,6 +109,17 @@
   cxx_tool->set_command_launcher("launcher");
   toolchain->SetTool(std::move(cxx_tool));
 
+  // CXX_MODULE
+  std::unique_ptr<Tool> cxx_module_tool =
+      Tool::CreateTool(CTool::kCToolCxxModule);
+  SetCommandForTool(
+      "c++ {{source}} {{cflags}} {{cflags_cc}} {{defines}} {{include_dirs}} "
+      "-o {{output}}",
+      cxx_module_tool.get());
+  cxx_module_tool->set_outputs(SubstitutionList::MakeForTest(
+      "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.pcm"));
+  toolchain->SetTool(std::move(cxx_module_tool));
+
   // OBJC
   std::unique_ptr<Tool> objc_tool = Tool::CreateTool(CTool::kCToolObjC);
   SetCommandForTool(