Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Unified Diff: tools/gn/target_unittest.cc

Issue 440333002: Support more configurability in GN toolchains (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: unsigned check Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/target_generator.cc ('k') | tools/gn/test_with_scope.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/target_unittest.cc
diff --git a/tools/gn/target_unittest.cc b/tools/gn/target_unittest.cc
index 9dcaf08e468ba3fa7db2f0f9a4c3b666b5982806..9bf0c30df28b3d6dfbe046be3f067c574c7c93cd 100644
--- a/tools/gn/target_unittest.cc
+++ b/tools/gn/target_unittest.cc
@@ -7,51 +7,43 @@
#include "tools/gn/config.h"
#include "tools/gn/settings.h"
#include "tools/gn/target.h"
+#include "tools/gn/test_with_scope.h"
#include "tools/gn/toolchain.h"
-namespace {
-
-class TargetTest : public testing::Test {
- public:
- TargetTest()
- : build_settings_(),
- settings_(&build_settings_, std::string()),
- toolchain_(&settings_, Label(SourceDir("//tc/"), "tc")) {
- settings_.set_toolchain_label(toolchain_.label());
- }
- virtual ~TargetTest() {
- }
-
- protected:
- BuildSettings build_settings_;
- Settings settings_;
- Toolchain toolchain_;
-};
-
-} // namespace
-
// Tests that depending on a group is like depending directly on the group's
// deps.
-TEST_F(TargetTest, GroupDeps) {
+TEST(Target, GroupDeps) {
+ TestWithScope setup;
+
// Two low-level targets.
- Target x(&settings_, Label(SourceDir("//component/"), "x"));
- Target y(&settings_, Label(SourceDir("//component/"), "y"));
+ Target x(setup.settings(), Label(SourceDir("//component/"), "x"));
+ x.set_output_type(Target::STATIC_LIBRARY);
+ x.SetToolchain(setup.toolchain());
+ x.OnResolved();
+ Target y(setup.settings(), Label(SourceDir("//component/"), "y"));
+ y.set_output_type(Target::STATIC_LIBRARY);
+ y.SetToolchain(setup.toolchain());
+ y.OnResolved();
// Make a group for both x and y.
- Target g(&settings_, Label(SourceDir("//group/"), "g"));
+ Target g(setup.settings(), Label(SourceDir("//group/"), "g"));
g.set_output_type(Target::GROUP);
g.deps().push_back(LabelTargetPair(&x));
g.deps().push_back(LabelTargetPair(&y));
// Random placeholder target so we can see the group's deps get inserted at
// the right place.
- Target b(&settings_, Label(SourceDir("//app/"), "b"));
+ Target b(setup.settings(), Label(SourceDir("//app/"), "b"));
+ b.set_output_type(Target::STATIC_LIBRARY);
+ b.SetToolchain(setup.toolchain());
+ b.OnResolved();
// Make a target depending on the group and "b". OnResolved will expand.
- Target a(&settings_, Label(SourceDir("//app/"), "a"));
+ Target a(setup.settings(), Label(SourceDir("//app/"), "a"));
a.set_output_type(Target::EXECUTABLE);
a.deps().push_back(LabelTargetPair(&g));
a.deps().push_back(LabelTargetPair(&b));
+ a.SetToolchain(setup.toolchain());
a.OnResolved();
// The group's deps should be inserted after the group itself in the deps
@@ -65,15 +57,18 @@ TEST_F(TargetTest, GroupDeps) {
// Tests that lib[_dir]s are inherited across deps boundaries for static
// libraries but not executables.
-TEST_F(TargetTest, LibInheritance) {
+TEST(Target, LibInheritance) {
+ TestWithScope setup;
+
const std::string lib("foo");
const SourceDir libdir("/foo_dir/");
// Leaf target with ldflags set.
- Target z(&settings_, Label(SourceDir("//foo/"), "z"));
+ Target z(setup.settings(), Label(SourceDir("//foo/"), "z"));
z.set_output_type(Target::STATIC_LIBRARY);
z.config_values().libs().push_back(lib);
z.config_values().lib_dirs().push_back(libdir);
+ z.SetToolchain(setup.toolchain());
z.OnResolved();
// All lib[_dir]s should be set when target is resolved.
@@ -86,11 +81,12 @@ TEST_F(TargetTest, LibInheritance) {
// and its own. Its own flag should be before the inherited one.
const std::string second_lib("bar");
const SourceDir second_libdir("/bar_dir/");
- Target shared(&settings_, Label(SourceDir("//foo/"), "shared"));
+ Target shared(setup.settings(), Label(SourceDir("//foo/"), "shared"));
shared.set_output_type(Target::SHARED_LIBRARY);
shared.config_values().libs().push_back(second_lib);
shared.config_values().lib_dirs().push_back(second_libdir);
shared.deps().push_back(LabelTargetPair(&z));
+ shared.SetToolchain(setup.toolchain());
shared.OnResolved();
ASSERT_EQ(2u, shared.all_libs().size());
@@ -101,9 +97,10 @@ TEST_F(TargetTest, LibInheritance) {
EXPECT_EQ(libdir, shared.all_lib_dirs()[1]);
// Executable target shouldn't get either by depending on shared.
- Target exec(&settings_, Label(SourceDir("//foo/"), "exec"));
+ Target exec(setup.settings(), Label(SourceDir("//foo/"), "exec"));
exec.set_output_type(Target::EXECUTABLE);
exec.deps().push_back(LabelTargetPair(&shared));
+ exec.SetToolchain(setup.toolchain());
exec.OnResolved();
EXPECT_EQ(0u, exec.all_libs().size());
EXPECT_EQ(0u, exec.all_lib_dirs().size());
@@ -111,27 +108,32 @@ TEST_F(TargetTest, LibInheritance) {
// Test all/direct_dependent_configs inheritance, and
// forward_dependent_configs_from
-TEST_F(TargetTest, DependentConfigs) {
+TEST(Target, DependentConfigs) {
+ TestWithScope setup;
+
// Set up a dependency chain of a -> b -> c
- Target a(&settings_, Label(SourceDir("//foo/"), "a"));
+ Target a(setup.settings(), Label(SourceDir("//foo/"), "a"));
a.set_output_type(Target::EXECUTABLE);
- Target b(&settings_, Label(SourceDir("//foo/"), "b"));
+ a.SetToolchain(setup.toolchain());
+ Target b(setup.settings(), Label(SourceDir("//foo/"), "b"));
b.set_output_type(Target::STATIC_LIBRARY);
- Target c(&settings_, Label(SourceDir("//foo/"), "c"));
+ b.SetToolchain(setup.toolchain());
+ Target c(setup.settings(), Label(SourceDir("//foo/"), "c"));
c.set_output_type(Target::STATIC_LIBRARY);
+ c.SetToolchain(setup.toolchain());
a.deps().push_back(LabelTargetPair(&b));
b.deps().push_back(LabelTargetPair(&c));
// Normal non-inherited config.
- Config config(&settings_, Label(SourceDir("//foo/"), "config"));
+ Config config(setup.settings(), Label(SourceDir("//foo/"), "config"));
c.configs().push_back(LabelConfigPair(&config));
// All dependent config.
- Config all(&settings_, Label(SourceDir("//foo/"), "all"));
+ Config all(setup.settings(), Label(SourceDir("//foo/"), "all"));
c.all_dependent_configs().push_back(LabelConfigPair(&all));
// Direct dependent config.
- Config direct(&settings_, Label(SourceDir("//foo/"), "direct"));
+ Config direct(setup.settings(), Label(SourceDir("//foo/"), "direct"));
c.direct_dependent_configs().push_back(LabelConfigPair(&direct));
c.OnResolved();
@@ -151,10 +153,12 @@ TEST_F(TargetTest, DependentConfigs) {
EXPECT_EQ(&all, a.all_dependent_configs()[0].ptr);
// Making an an alternate A and B with B forwarding the direct dependents.
- Target a_fwd(&settings_, Label(SourceDir("//foo/"), "a_fwd"));
+ Target a_fwd(setup.settings(), Label(SourceDir("//foo/"), "a_fwd"));
a_fwd.set_output_type(Target::EXECUTABLE);
- Target b_fwd(&settings_, Label(SourceDir("//foo/"), "b_fwd"));
+ a_fwd.SetToolchain(setup.toolchain());
+ Target b_fwd(setup.settings(), Label(SourceDir("//foo/"), "b_fwd"));
b_fwd.set_output_type(Target::STATIC_LIBRARY);
+ b_fwd.SetToolchain(setup.toolchain());
a_fwd.deps().push_back(LabelTargetPair(&b_fwd));
b_fwd.deps().push_back(LabelTargetPair(&c));
b_fwd.forward_dependent_configs().push_back(LabelTargetPair(&c));
@@ -172,18 +176,23 @@ TEST_F(TargetTest, DependentConfigs) {
// Tests that forward_dependent_configs_from works for groups, forwarding the
// group's deps' dependent configs.
-TEST_F(TargetTest, ForwardDependentConfigsFromGroups) {
- Target a(&settings_, Label(SourceDir("//foo/"), "a"));
+TEST(Target, ForwardDependentConfigsFromGroups) {
+ TestWithScope setup;
+
+ Target a(setup.settings(), Label(SourceDir("//foo/"), "a"));
a.set_output_type(Target::EXECUTABLE);
- Target b(&settings_, Label(SourceDir("//foo/"), "b"));
+ a.SetToolchain(setup.toolchain());
+ Target b(setup.settings(), Label(SourceDir("//foo/"), "b"));
b.set_output_type(Target::GROUP);
- Target c(&settings_, Label(SourceDir("//foo/"), "c"));
+ b.SetToolchain(setup.toolchain());
+ Target c(setup.settings(), Label(SourceDir("//foo/"), "c"));
c.set_output_type(Target::STATIC_LIBRARY);
+ c.SetToolchain(setup.toolchain());
a.deps().push_back(LabelTargetPair(&b));
b.deps().push_back(LabelTargetPair(&c));
// Direct dependent config on C.
- Config direct(&settings_, Label(SourceDir("//foo/"), "direct"));
+ Config direct(setup.settings(), Label(SourceDir("//foo/"), "direct"));
c.direct_dependent_configs().push_back(LabelConfigPair(&direct));
// A forwards the dependent configs from B.
@@ -200,17 +209,23 @@ TEST_F(TargetTest, ForwardDependentConfigsFromGroups) {
ASSERT_EQ(&direct, a.direct_dependent_configs()[0].ptr);
}
-TEST_F(TargetTest, InheritLibs) {
+TEST(Target, InheritLibs) {
+ TestWithScope setup;
+
// Create a dependency chain:
// A (executable) -> B (shared lib) -> C (static lib) -> D (source set)
- Target a(&settings_, Label(SourceDir("//foo/"), "a"));
+ Target a(setup.settings(), Label(SourceDir("//foo/"), "a"));
a.set_output_type(Target::EXECUTABLE);
- Target b(&settings_, Label(SourceDir("//foo/"), "b"));
+ a.SetToolchain(setup.toolchain());
+ Target b(setup.settings(), Label(SourceDir("//foo/"), "b"));
b.set_output_type(Target::SHARED_LIBRARY);
- Target c(&settings_, Label(SourceDir("//foo/"), "c"));
+ b.SetToolchain(setup.toolchain());
+ Target c(setup.settings(), Label(SourceDir("//foo/"), "c"));
c.set_output_type(Target::STATIC_LIBRARY);
- Target d(&settings_, Label(SourceDir("//foo/"), "d"));
+ c.SetToolchain(setup.toolchain());
+ Target d(setup.settings(), Label(SourceDir("//foo/"), "d"));
d.set_output_type(Target::SOURCE_SET);
+ d.SetToolchain(setup.toolchain());
a.deps().push_back(LabelTargetPair(&b));
b.deps().push_back(LabelTargetPair(&c));
c.deps().push_back(LabelTargetPair(&d));
@@ -237,3 +252,44 @@ TEST_F(TargetTest, InheritLibs) {
EXPECT_EQ(1u, a_inherited.size());
EXPECT_TRUE(a_inherited.IndexOf(&b) != static_cast<size_t>(-1));
}
+
+TEST(Target, GetComputedOutputName) {
+ TestWithScope setup;
+
+ // Basic target with no prefix (executable type tool in the TestWithScope has
+ // no prefix) or output name.
+ Target basic(setup.settings(), Label(SourceDir("//foo/"), "bar"));
+ basic.set_output_type(Target::EXECUTABLE);
+ basic.SetToolchain(setup.toolchain());
+ basic.OnResolved();
+ EXPECT_EQ("bar", basic.GetComputedOutputName(false));
+ EXPECT_EQ("bar", basic.GetComputedOutputName(true));
+
+ // Target with no prefix but an output name.
+ Target with_name(setup.settings(), Label(SourceDir("//foo/"), "bar"));
+ with_name.set_output_type(Target::EXECUTABLE);
+ with_name.set_output_name("myoutput");
+ with_name.SetToolchain(setup.toolchain());
+ with_name.OnResolved();
+ EXPECT_EQ("myoutput", with_name.GetComputedOutputName(false));
+ EXPECT_EQ("myoutput", with_name.GetComputedOutputName(true));
+
+ // Target with a "lib" prefix (the static library tool in the TestWithScope
+ // should specify a "lib" output prefix).
+ Target with_prefix(setup.settings(), Label(SourceDir("//foo/"), "bar"));
+ with_prefix.set_output_type(Target::STATIC_LIBRARY);
+ with_prefix.SetToolchain(setup.toolchain());
+ with_prefix.OnResolved();
+ EXPECT_EQ("bar", with_prefix.GetComputedOutputName(false));
+ EXPECT_EQ("libbar", with_prefix.GetComputedOutputName(true));
+
+ // Target with a "lib" prefix that already has it applied. The prefix should
+ // not duplicate something already in the target name.
+ Target dup_prefix(setup.settings(), Label(SourceDir("//foo/"), "bar"));
+ dup_prefix.set_output_type(Target::STATIC_LIBRARY);
+ dup_prefix.set_output_name("libbar");
+ dup_prefix.SetToolchain(setup.toolchain());
+ dup_prefix.OnResolved();
+ EXPECT_EQ("libbar", dup_prefix.GetComputedOutputName(false));
+ EXPECT_EQ("libbar", dup_prefix.GetComputedOutputName(true));
+}
« no previous file with comments | « tools/gn/target_generator.cc ('k') | tools/gn/test_with_scope.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698