1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "testing/gtest/include/gtest/gtest.h" 6 7 #include "tools/gn/filesystem_utils.h" 8 #include "tools/gn/ninja_helper.h" 9 #include "tools/gn/settings.h" 10 #include "tools/gn/target.h" 11 #include "tools/gn/toolchain.h" 12 13 namespace { 14 15 class HelperSetterUpper { 16 public: 17 HelperSetterUpper() 18 : build_settings(), 19 toolchain(Label(SourceDir("//"), "tc", SourceDir(), std::string())), 20 settings(&build_settings, &toolchain, std::string()), 21 target(&settings, 22 Label(SourceDir("//tools/gn/"), "name", 23 SourceDir(), std::string())) { 24 settings.set_target_os(Settings::WIN); 25 26 // Output going to "out/Debug". 27 build_settings.SetBuildDir(SourceDir("/out/Debug/")); 28 29 // Our source target is in "tools/gn". 30 target.set_output_type(Target::EXECUTABLE); 31 } 32 33 BuildSettings build_settings; 34 Toolchain toolchain; 35 Settings settings; 36 Target target; 37 }; 38 39 } // namespace 40 41 TEST(NinjaHelper, GetNinjaFileForTarget) { 42 HelperSetterUpper setup; 43 NinjaHelper helper(&setup.build_settings); 44 45 // Default toolchain. 46 EXPECT_EQ(OutputFile("obj/tools/gn/name.ninja").value(), 47 helper.GetNinjaFileForTarget(&setup.target).value()); 48 } 49 50 TEST(NinjaHelper, GetOutputFileForSource) { 51 HelperSetterUpper setup; 52 NinjaHelper helper(&setup.build_settings); 53 54 // On Windows, expect ".obj" 55 EXPECT_EQ(OutputFile("obj/tools/gn/name.foo.obj").value(), 56 helper.GetOutputFileForSource(&setup.target, 57 SourceFile("//tools/gn/foo.cc"), 58 SOURCE_CC).value()); 59 } 60 61 TEST(NinjaHelper, GetTargetOutputFile) { 62 HelperSetterUpper setup; 63 NinjaHelper helper(&setup.build_settings); 64 EXPECT_EQ(OutputFile("name.exe"), 65 helper.GetTargetOutputFile(&setup.target)); 66 67 // Static library on Windows goes alongside the object files. 68 setup.target.set_output_type(Target::STATIC_LIBRARY); 69 EXPECT_EQ(OutputFile("obj/tools/gn/name.lib"), 70 helper.GetTargetOutputFile(&setup.target)); 71 72 // TODO(brettw) test output to library and other OS types. 73 } 74