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

Unified Diff: tools/gn/target_manager_unittest.cc

Issue 21114002: Add initial prototype for the GN meta-buildsystem. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add owners and readme Created 7 years, 5 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_manager.cc ('k') | tools/gn/token.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/target_manager_unittest.cc
diff --git a/tools/gn/target_manager_unittest.cc b/tools/gn/target_manager_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a1a3ad219b865bf827757091e8758460e43a03f1
--- /dev/null
+++ b/tools/gn/target_manager_unittest.cc
@@ -0,0 +1,95 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "tools/gn/err.h"
+#include "tools/gn/settings.h"
+#include "tools/gn/target_manager.h"
+#include "tools/gn/value.h"
+
+/* TODO(brettw) make this compile again
+namespace {
+
+class TestTargetManagerDelegate : public TargetManager::Delegate {
+ public:
+ TestTargetManagerDelegate() {}
+
+ virtual bool ScheduleInvocation(ToolchainManager* toolchain_manager,
+ const LocationRange& origin,
+ const Label& toolchain_name,
+ const SourceDir& dir,
+ Err* err) OVERRIDE {
+ invokes.push_back(dir.value());
+ return true;
+ }
+ virtual void ScheduleTargetFileWrite(const Target* target) {
+ writes.push_back(target);
+ }
+
+ std::vector<std::string> invokes;
+ std::vector<const Target*> writes;
+};
+
+} // namespace
+
+TEST(TargetManager, ResolveDeps) {
+ TestTargetManagerDelegate ttmd;
+ BuildSettings build_settings(&ttmd);
+
+ TargetManager& target_manager = build_settings.target_manager();
+
+ SourceDir tc_dir("/chrome/");
+ std::string tc_name("toolchain");
+
+ // Get a root target. This should not invoke anything.
+ Err err;
+ Label chromelabel(SourceDir("/chrome/"), "chrome", tc_dir, tc_name);
+ Target* chrome = target_manager.GetTarget(
+ chromelabel, LocationRange(), NULL, &err);
+ EXPECT_EQ(0u, ttmd.invokes.size());
+
+ // Declare it has a dependency on content1 and 2. We should get one
+ // invocation of the content build file.
+ Label content1label(SourceDir("/content/"), "content1", tc_dir, tc_name);
+ Target* content1 = target_manager.GetTarget(
+ content1label, LocationRange(), chrome, &err);
+ EXPECT_EQ(1u, ttmd.invokes.size());
+
+ Label content2label(SourceDir("/content/"), "content2", tc_dir, tc_name);
+ Target* content2 = target_manager.GetTarget(
+ content2label, LocationRange(), chrome, &err);
+ EXPECT_EQ(2u, ttmd.invokes.size());
+
+ // Declare chrome has a depdency on base, this should load it.
+ Label baselabel(SourceDir("/base/"), "base", tc_dir, tc_name);
+ Target* base1 = target_manager.GetTarget(
+ baselabel, LocationRange(), chrome, &err);
+ EXPECT_EQ(3u, ttmd.invokes.size());
+
+ // Declare content1 has a dependency on base.
+ Target* base2 = target_manager.GetTarget(
+ baselabel, LocationRange(), content1, &err);
+ EXPECT_EQ(3u, ttmd.invokes.size());
+ EXPECT_EQ(base1, base2);
+
+ // Mark content1 and chrome as done. They have unresolved depdendencies so
+ // shouldn't be written out yet.
+ target_manager.TargetGenerationComplete(content1label);
+ target_manager.TargetGenerationComplete(chromelabel);
+ EXPECT_EQ(0u, ttmd.writes.size());
+
+ // Mark content2 as done. It has no dependencies so should be written.
+ target_manager.TargetGenerationComplete(content2label);
+ ASSERT_EQ(1u, ttmd.writes.size());
+ EXPECT_EQ(content2label, ttmd.writes[0]->label());
+
+ // Mark base as complete. It should have caused itself, content1 and then
+ // chrome to be written.
+ target_manager.TargetGenerationComplete(baselabel);
+ ASSERT_EQ(4u, ttmd.writes.size());
+ EXPECT_EQ(baselabel, ttmd.writes[1]->label());
+ EXPECT_EQ(content1label, ttmd.writes[2]->label());
+ EXPECT_EQ(chromelabel, ttmd.writes[3]->label());
+}
+*/
« no previous file with comments | « tools/gn/target_manager.cc ('k') | tools/gn/token.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698