| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
| 6 #include "tools/gn/build_settings.h" | 6 #include "tools/gn/build_settings.h" |
| 7 #include "tools/gn/config.h" | 7 #include "tools/gn/config.h" |
| 8 #include "tools/gn/scheduler.h" | 8 #include "tools/gn/scheduler.h" |
| 9 #include "tools/gn/settings.h" | 9 #include "tools/gn/settings.h" |
| 10 #include "tools/gn/target.h" | 10 #include "tools/gn/target.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 | 83 |
| 84 // Set up a dependency chain of a -> b -> c | 84 // Set up a dependency chain of a -> b -> c |
| 85 TestTarget a(setup, "//foo:a", Target::EXECUTABLE); | 85 TestTarget a(setup, "//foo:a", Target::EXECUTABLE); |
| 86 TestTarget b(setup, "//foo:b", Target::STATIC_LIBRARY); | 86 TestTarget b(setup, "//foo:b", Target::STATIC_LIBRARY); |
| 87 TestTarget c(setup, "//foo:c", Target::STATIC_LIBRARY); | 87 TestTarget c(setup, "//foo:c", Target::STATIC_LIBRARY); |
| 88 a.private_deps().push_back(LabelTargetPair(&b)); | 88 a.private_deps().push_back(LabelTargetPair(&b)); |
| 89 b.private_deps().push_back(LabelTargetPair(&c)); | 89 b.private_deps().push_back(LabelTargetPair(&c)); |
| 90 | 90 |
| 91 // Normal non-inherited config. | 91 // Normal non-inherited config. |
| 92 Config config(setup.settings(), Label(SourceDir("//foo/"), "config")); | 92 Config config(setup.settings(), Label(SourceDir("//foo/"), "config")); |
| 93 ASSERT_TRUE(config.OnResolved(&err)); |
| 93 c.configs().push_back(LabelConfigPair(&config)); | 94 c.configs().push_back(LabelConfigPair(&config)); |
| 94 | 95 |
| 95 // All dependent config. | 96 // All dependent config. |
| 96 Config all(setup.settings(), Label(SourceDir("//foo/"), "all")); | 97 Config all(setup.settings(), Label(SourceDir("//foo/"), "all")); |
| 98 ASSERT_TRUE(all.OnResolved(&err)); |
| 97 c.all_dependent_configs().push_back(LabelConfigPair(&all)); | 99 c.all_dependent_configs().push_back(LabelConfigPair(&all)); |
| 98 | 100 |
| 99 // Direct dependent config. | 101 // Direct dependent config. |
| 100 Config direct(setup.settings(), Label(SourceDir("//foo/"), "direct")); | 102 Config direct(setup.settings(), Label(SourceDir("//foo/"), "direct")); |
| 103 ASSERT_TRUE(direct.OnResolved(&err)); |
| 101 c.public_configs().push_back(LabelConfigPair(&direct)); | 104 c.public_configs().push_back(LabelConfigPair(&direct)); |
| 102 | 105 |
| 103 ASSERT_TRUE(c.OnResolved(&err)); | 106 ASSERT_TRUE(c.OnResolved(&err)); |
| 104 ASSERT_TRUE(b.OnResolved(&err)); | 107 ASSERT_TRUE(b.OnResolved(&err)); |
| 105 ASSERT_TRUE(a.OnResolved(&err)); | 108 ASSERT_TRUE(a.OnResolved(&err)); |
| 106 | 109 |
| 107 // B should have gotten both dependent configs from C. | 110 // B should have gotten both dependent configs from C. |
| 108 ASSERT_EQ(2u, b.configs().size()); | 111 ASSERT_EQ(2u, b.configs().size()); |
| 109 EXPECT_EQ(&all, b.configs()[0].ptr); | 112 EXPECT_EQ(&all, b.configs()[0].ptr); |
| 110 EXPECT_EQ(&direct, b.configs()[1].ptr); | 113 EXPECT_EQ(&direct, b.configs()[1].ptr); |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 product.private_deps().push_back(LabelTargetPair(&testlib)); | 357 product.private_deps().push_back(LabelTargetPair(&testlib)); |
| 355 ASSERT_FALSE(product.OnResolved(&err)); | 358 ASSERT_FALSE(product.OnResolved(&err)); |
| 356 } | 359 } |
| 357 | 360 |
| 358 TEST(Target, PublicConfigs) { | 361 TEST(Target, PublicConfigs) { |
| 359 TestWithScope setup; | 362 TestWithScope setup; |
| 360 Err err; | 363 Err err; |
| 361 | 364 |
| 362 Label pub_config_label(SourceDir("//a/"), "pubconfig"); | 365 Label pub_config_label(SourceDir("//a/"), "pubconfig"); |
| 363 Config pub_config(setup.settings(), pub_config_label); | 366 Config pub_config(setup.settings(), pub_config_label); |
| 367 ASSERT_TRUE(pub_config.OnResolved(&err)); |
| 364 | 368 |
| 365 // This is the destination target that has a public config. | 369 // This is the destination target that has a public config. |
| 366 TestTarget dest(setup, "//a:a", Target::SOURCE_SET); | 370 TestTarget dest(setup, "//a:a", Target::SOURCE_SET); |
| 367 dest.public_configs().push_back(LabelConfigPair(&pub_config)); | 371 dest.public_configs().push_back(LabelConfigPair(&pub_config)); |
| 368 ASSERT_TRUE(dest.OnResolved(&err)); | 372 ASSERT_TRUE(dest.OnResolved(&err)); |
| 369 | 373 |
| 370 // This target has a public dependency on dest. | 374 // This target has a public dependency on dest. |
| 371 TestTarget pub(setup, "//a:pub", Target::SOURCE_SET); | 375 TestTarget pub(setup, "//a:pub", Target::SOURCE_SET); |
| 372 pub.public_deps().push_back(LabelTargetPair(&dest)); | 376 pub.public_deps().push_back(LabelTargetPair(&dest)); |
| 373 ASSERT_TRUE(pub.OnResolved(&err)); | 377 ASSERT_TRUE(pub.OnResolved(&err)); |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 | 569 |
| 566 Target target(setup.settings(), Label(SourceDir("//foo/"), "bar")); | 570 Target target(setup.settings(), Label(SourceDir("//foo/"), "bar")); |
| 567 | 571 |
| 568 // Target with no settings, no configs, should be a no-op. | 572 // Target with no settings, no configs, should be a no-op. |
| 569 EXPECT_TRUE(target.ResolvePrecompiledHeaders(&err)); | 573 EXPECT_TRUE(target.ResolvePrecompiledHeaders(&err)); |
| 570 | 574 |
| 571 // Config with PCH values. | 575 // Config with PCH values. |
| 572 Config config_1(setup.settings(), Label(SourceDir("//foo/"), "c1")); | 576 Config config_1(setup.settings(), Label(SourceDir("//foo/"), "c1")); |
| 573 std::string pch_1("pch.h"); | 577 std::string pch_1("pch.h"); |
| 574 SourceFile pcs_1("//pcs.cc"); | 578 SourceFile pcs_1("//pcs.cc"); |
| 575 config_1.config_values().set_precompiled_header(pch_1); | 579 config_1.own_values().set_precompiled_header(pch_1); |
| 576 config_1.config_values().set_precompiled_source(pcs_1); | 580 config_1.own_values().set_precompiled_source(pcs_1); |
| 581 ASSERT_TRUE(config_1.OnResolved(&err)); |
| 577 target.configs().push_back(LabelConfigPair(&config_1)); | 582 target.configs().push_back(LabelConfigPair(&config_1)); |
| 578 | 583 |
| 579 // No PCH info specified on target, but the config specifies one, the | 584 // No PCH info specified on target, but the config specifies one, the |
| 580 // values should get copied to the target. | 585 // values should get copied to the target. |
| 581 EXPECT_TRUE(target.ResolvePrecompiledHeaders(&err)); | 586 EXPECT_TRUE(target.ResolvePrecompiledHeaders(&err)); |
| 582 EXPECT_EQ(pch_1, target.config_values().precompiled_header()); | 587 EXPECT_EQ(pch_1, target.config_values().precompiled_header()); |
| 583 EXPECT_TRUE(target.config_values().precompiled_source() == pcs_1); | 588 EXPECT_TRUE(target.config_values().precompiled_source() == pcs_1); |
| 584 | 589 |
| 585 // Now both target and config have matching PCH values. Resolving again | 590 // Now both target and config have matching PCH values. Resolving again |
| 586 // should be a no-op since they all match. | 591 // should be a no-op since they all match. |
| 587 EXPECT_TRUE(target.ResolvePrecompiledHeaders(&err)); | 592 EXPECT_TRUE(target.ResolvePrecompiledHeaders(&err)); |
| 588 EXPECT_TRUE(target.config_values().precompiled_header() == pch_1); | 593 EXPECT_TRUE(target.config_values().precompiled_header() == pch_1); |
| 589 EXPECT_TRUE(target.config_values().precompiled_source() == pcs_1); | 594 EXPECT_TRUE(target.config_values().precompiled_source() == pcs_1); |
| 590 | 595 |
| 591 // Second config with different PCH values. | 596 // Second config with different PCH values. |
| 592 Config config_2(setup.settings(), Label(SourceDir("//foo/"), "c2")); | 597 Config config_2(setup.settings(), Label(SourceDir("//foo/"), "c2")); |
| 593 std::string pch_2("pch2.h"); | 598 std::string pch_2("pch2.h"); |
| 594 SourceFile pcs_2("//pcs2.cc"); | 599 SourceFile pcs_2("//pcs2.cc"); |
| 595 config_2.config_values().set_precompiled_header(pch_2); | 600 config_2.own_values().set_precompiled_header(pch_2); |
| 596 config_2.config_values().set_precompiled_source(pcs_2); | 601 config_2.own_values().set_precompiled_source(pcs_2); |
| 602 ASSERT_TRUE(config_2.OnResolved(&err)); |
| 597 target.configs().push_back(LabelConfigPair(&config_2)); | 603 target.configs().push_back(LabelConfigPair(&config_2)); |
| 598 | 604 |
| 599 // This should be an error since they don't match. | 605 // This should be an error since they don't match. |
| 600 EXPECT_FALSE(target.ResolvePrecompiledHeaders(&err)); | 606 EXPECT_FALSE(target.ResolvePrecompiledHeaders(&err)); |
| 601 | 607 |
| 602 // Make sure the proper labels are blamed. | 608 // Make sure the proper labels are blamed. |
| 603 EXPECT_EQ( | 609 EXPECT_EQ( |
| 604 "The target //foo:bar\n" | 610 "The target //foo:bar\n" |
| 605 "has conflicting precompiled header settings.\n" | 611 "has conflicting precompiled header settings.\n" |
| 606 "\n" | 612 "\n" |
| 607 "From //foo:bar\n" | 613 "From //foo:bar\n" |
| 608 " header: pch.h\n" | 614 " header: pch.h\n" |
| 609 " source: //pcs.cc\n" | 615 " source: //pcs.cc\n" |
| 610 "\n" | 616 "\n" |
| 611 "From //foo:c2\n" | 617 "From //foo:c2\n" |
| 612 " header: pch2.h\n" | 618 " header: pch2.h\n" |
| 613 " source: //pcs2.cc", | 619 " source: //pcs2.cc", |
| 614 err.help_text()); | 620 err.help_text()); |
| 615 } | 621 } |
| OLD | NEW |