Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / tools / gn / ninja_copy_target_writer_unittest.cc
index b86508b..12496bf 100644 (file)
@@ -6,12 +6,16 @@
 #include <sstream>
 
 #include "testing/gtest/include/gtest/gtest.h"
-#include "tools/gn/file_template.h"
 #include "tools/gn/ninja_copy_target_writer.h"
+#include "tools/gn/target.h"
 #include "tools/gn/test_with_scope.h"
 
+// Tests multiple files with an output pattern and no toolchain dependency.
 TEST(NinjaCopyTargetWriter, Run) {
   TestWithScope setup;
+  Err err;
+
+  setup.settings()->set_target_os(Settings::LINUX);
   setup.build_settings()->SetBuildDir(SourceDir("//out/Debug/"));
   Target target(setup.settings(), Label(SourceDir("//foo/"), "bar"));
   target.set_output_type(Target::COPY_FILES);
@@ -19,48 +23,81 @@ TEST(NinjaCopyTargetWriter, Run) {
   target.sources().push_back(SourceFile("//foo/input1.txt"));
   target.sources().push_back(SourceFile("//foo/input2.txt"));
 
-  target.action_values().outputs().push_back(
-      SourceFile("//out/Debug/{{source_name_part}}.out"));
-
-  // Posix.
-  {
-    setup.settings()->set_target_os(Settings::LINUX);
-
-    std::ostringstream out;
-    NinjaCopyTargetWriter writer(&target, setup.toolchain(), out);
-    writer.Run();
-
-    const char expected_linux[] =
-        "build input1.out: copy ../../foo/input1.txt\n"
-        "build input2.out: copy ../../foo/input2.txt\n"
-        "\n"
-        "build obj/foo/bar.stamp: stamp input1.out input2.out\n";
-    std::string out_str = out.str();
-#if defined(OS_WIN)
-    std::replace(out_str.begin(), out_str.end(), '\\', '/');
-#endif
-    EXPECT_EQ(expected_linux, out_str);
-  }
-
-  // Windows.
-  {
-    setup.settings()->set_target_os(Settings::WIN);
-
-    std::ostringstream out;
-    NinjaCopyTargetWriter writer(&target, setup.toolchain(), out);
-    writer.Run();
-
-    // TODO(brettw) I think we'll need to worry about backslashes here
-    // depending if we're on actual Windows or Linux pretending to be Windows.
-    const char expected_win[] =
-        "build input1.out: copy ../../foo/input1.txt\n"
-        "build input2.out: copy ../../foo/input2.txt\n"
-        "\n"
-        "build obj/foo/bar.stamp: stamp input1.out input2.out\n";
-    std::string out_str = out.str();
-#if defined(OS_WIN)
-    std::replace(out_str.begin(), out_str.end(), '\\', '/');
-#endif
-    EXPECT_EQ(expected_win, out_str);
-  }
+  target.action_values().outputs() =
+      SubstitutionList::MakeForTest("//out/Debug/{{source_name_part}}.out");
+
+  target.SetToolchain(setup.toolchain());
+  ASSERT_TRUE(target.OnResolved(&err));
+
+  std::ostringstream out;
+  NinjaCopyTargetWriter writer(&target, out);
+  writer.Run();
+
+  const char expected_linux[] =
+      "build input1.out: copy ../../foo/input1.txt\n"
+      "build input2.out: copy ../../foo/input2.txt\n"
+      "\n"
+      "build obj/foo/bar.stamp: stamp input1.out input2.out\n";
+  std::string out_str = out.str();
+  EXPECT_EQ(expected_linux, out_str);
+}
+
+// Tests a single file with no output pattern.
+TEST(NinjaCopyTargetWriter, ToolchainDeps) {
+  TestWithScope setup;
+  Err err;
+
+  setup.settings()->set_target_os(Settings::LINUX);
+  setup.build_settings()->SetBuildDir(SourceDir("//out/Debug/"));
+  Target target(setup.settings(), Label(SourceDir("//foo/"), "bar"));
+  target.set_output_type(Target::COPY_FILES);
+
+  target.sources().push_back(SourceFile("//foo/input1.txt"));
+
+  target.action_values().outputs() =
+      SubstitutionList::MakeForTest("//out/Debug/output.out");
+
+  target.SetToolchain(setup.toolchain());
+  ASSERT_TRUE(target.OnResolved(&err));
+
+  std::ostringstream out;
+  NinjaCopyTargetWriter writer(&target, out);
+  writer.Run();
+
+  const char expected_linux[] =
+      "build output.out: copy ../../foo/input1.txt\n"
+      "\n"
+      "build obj/foo/bar.stamp: stamp output.out\n";
+  std::string out_str = out.str();
+  EXPECT_EQ(expected_linux, out_str);
+}
+
+TEST(NinjaCopyTargetWriter, OrderOnlyDeps) {
+  TestWithScope setup;
+  Err err;
+
+  setup.settings()->set_target_os(Settings::LINUX);
+  setup.build_settings()->SetBuildDir(SourceDir("//out/Debug/"));
+
+  Target target(setup.settings(), Label(SourceDir("//foo/"), "bar"));
+  target.set_output_type(Target::COPY_FILES);
+  target.sources().push_back(SourceFile("//foo/input1.txt"));
+  target.action_values().outputs() =
+      SubstitutionList::MakeForTest("//out/Debug/{{source_name_part}}.out");
+  target.inputs().push_back(SourceFile("//foo/script.py"));
+  target.SetToolchain(setup.toolchain());
+  ASSERT_TRUE(target.OnResolved(&err));
+
+  std::ostringstream out;
+  NinjaCopyTargetWriter writer(&target, out);
+  writer.Run();
+
+  const char expected_linux[] =
+      "build obj/foo/bar.inputdeps.stamp: stamp ../../foo/script.py\n"
+      "build input1.out: copy ../../foo/input1.txt || "
+          "obj/foo/bar.inputdeps.stamp\n"
+      "\n"
+      "build obj/foo/bar.stamp: stamp input1.out\n";
+  std::string out_str = out.str();
+  EXPECT_EQ(expected_linux, out_str);
 }