Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / tools / gn / test_with_scope.cc
index 55fbc2e..06f4d04 100644 (file)
@@ -8,6 +8,19 @@
 #include "tools/gn/parser.h"
 #include "tools/gn/tokenizer.h"
 
+namespace {
+
+void SetCommandForTool(const std::string& cmd, Tool* tool) {
+  Err err;
+  SubstitutionPattern command;
+  command.Parse(cmd, NULL, &err);
+  CHECK(!err.has_error())
+      << "Couldn't parse \"" << cmd << "\", " << "got " << err.message();
+  tool->set_command(command);
+}
+
+}  // namespace
+
 TestWithScope::TestWithScope()
     : build_settings_(),
       settings_(&build_settings_, std::string()),
@@ -19,11 +32,98 @@ TestWithScope::TestWithScope()
 
   settings_.set_toolchain_label(toolchain_.label());
   settings_.set_default_toolchain_label(toolchain_.label());
+
+  SetupToolchain(&toolchain_);
 }
 
 TestWithScope::~TestWithScope() {
 }
 
+// static
+void TestWithScope::SetupToolchain(Toolchain* toolchain) {
+  Err err;
+
+  // CC
+  scoped_ptr<Tool> cc_tool(new Tool);
+  SetCommandForTool(
+      "cc {{source}} {{cflags}} {{cflags_c}} {{defines}} {{include_dirs}} "
+      "-o {{output}}",
+      cc_tool.get());
+  cc_tool->set_outputs(SubstitutionList::MakeForTest(
+      "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
+  toolchain->SetTool(Toolchain::TYPE_CC, cc_tool.Pass());
+
+  // CXX
+  scoped_ptr<Tool> cxx_tool(new Tool);
+  SetCommandForTool(
+      "c++ {{source}} {{cflags}} {{cflags_cc}} {{defines}} {{include_dirs}} "
+      "-o {{output}}",
+      cxx_tool.get());
+  cxx_tool->set_outputs(SubstitutionList::MakeForTest(
+      "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
+  toolchain->SetTool(Toolchain::TYPE_CXX, cxx_tool.Pass());
+
+  // OBJC
+  scoped_ptr<Tool> objc_tool(new Tool);
+  SetCommandForTool(
+      "objcc {{source}} {{cflags}} {{cflags_objc}} {{defines}} "
+      "{{include_dirs}} -o {{output}}",
+      objc_tool.get());
+  objc_tool->set_outputs(SubstitutionList::MakeForTest(
+      "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
+  toolchain->SetTool(Toolchain::TYPE_OBJC, objc_tool.Pass());
+
+  // OBJC
+  scoped_ptr<Tool> objcxx_tool(new Tool);
+  SetCommandForTool(
+      "objcxx {{source}} {{cflags}} {{cflags_objcc}} {{defines}} "
+      "{{include_dirs}} -o {{output}}",
+      objcxx_tool.get());
+  objcxx_tool->set_outputs(SubstitutionList::MakeForTest(
+      "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o"));
+  toolchain->SetTool(Toolchain::TYPE_OBJCXX, objcxx_tool.Pass());
+
+  // Don't use RC and ASM tools in unit tests yet. Add here if needed.
+
+  // ALINK
+  scoped_ptr<Tool> alink_tool(new Tool);
+  SetCommandForTool("ar {{output}} {{source}}", alink_tool.get());
+  alink_tool->set_output_prefix("lib");
+  alink_tool->set_outputs(SubstitutionList::MakeForTest(
+      "{{target_out_dir}}/{{target_output_name}}.a"));
+  toolchain->SetTool(Toolchain::TYPE_ALINK, alink_tool.Pass());
+
+  // SOLINK
+  scoped_ptr<Tool> solink_tool(new Tool);
+  SetCommandForTool("ld -shared -o {{target_output_name}}.so {{inputs}} "
+      "{{ldflags}} {{libs}}", solink_tool.get());
+  solink_tool->set_output_prefix("lib");
+  solink_tool->set_default_output_extension(".so");
+  solink_tool->set_outputs(SubstitutionList::MakeForTest(
+      "{{root_out_dir}}/{{target_output_name}}{{output_extension}}"));
+  toolchain->SetTool(Toolchain::TYPE_SOLINK, solink_tool.Pass());
+
+  // LINK
+  scoped_ptr<Tool> link_tool(new Tool);
+  SetCommandForTool("ld -o {{target_output_name}} {{source}} "
+      "{{ldflags}} {{libs}}", link_tool.get());
+  link_tool->set_outputs(SubstitutionList::MakeForTest(
+      "{{root_out_dir}}/{{target_output_name}}"));
+  toolchain->SetTool(Toolchain::TYPE_LINK, link_tool.Pass());
+
+  // STAMP
+  scoped_ptr<Tool> stamp_tool(new Tool);
+  SetCommandForTool("touch {{output}}", stamp_tool.get());
+  toolchain->SetTool(Toolchain::TYPE_STAMP, stamp_tool.Pass());
+
+  // COPY
+  scoped_ptr<Tool> copy_tool(new Tool);
+  SetCommandForTool("cp {{source}} {{output}}", copy_tool.get());
+  toolchain->SetTool(Toolchain::TYPE_COPY, copy_tool.Pass());
+
+  toolchain->ToolchainSetupComplete();
+}
+
 void TestWithScope::AppendPrintOutput(const std::string& str) {
   print_output_.append(str);
 }