Home | History | Annotate | Download | only in gn
      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 #include "tools/gn/err.h"
      7 #include "tools/gn/settings.h"
      8 #include "tools/gn/target_manager.h"
      9 #include "tools/gn/value.h"
     10 
     11 /* TODO(brettw) make this compile again
     12 namespace {
     13 
     14 class TestTargetManagerDelegate : public TargetManager::Delegate {
     15  public:
     16   TestTargetManagerDelegate() {}
     17 
     18   virtual bool ScheduleInvocation(ToolchainManager* toolchain_manager,
     19                                   const LocationRange& origin,
     20                                   const Label& toolchain_name,
     21                                   const SourceDir& dir,
     22                                   Err* err) OVERRIDE {
     23     invokes.push_back(dir.value());
     24     return true;
     25   }
     26   virtual void ScheduleTargetFileWrite(const Target* target) {
     27     writes.push_back(target);
     28   }
     29 
     30   std::vector<std::string> invokes;
     31   std::vector<const Target*> writes;
     32 };
     33 
     34 }  // namespace
     35 
     36 TEST(TargetManager, ResolveDeps) {
     37   TestTargetManagerDelegate ttmd;
     38   BuildSettings build_settings(&ttmd);
     39 
     40   TargetManager& target_manager = build_settings.target_manager();
     41 
     42   SourceDir tc_dir("/chrome/");
     43   std::string tc_name("toolchain");
     44 
     45   // Get a root target. This should not invoke anything.
     46   Err err;
     47   Label chromelabel(SourceDir("/chrome/"), "chrome", tc_dir, tc_name);
     48   Target* chrome = target_manager.GetTarget(
     49       chromelabel, LocationRange(), NULL, &err);
     50   EXPECT_EQ(0u, ttmd.invokes.size());
     51 
     52   // Declare it has a dependency on content1 and 2. We should get one
     53   // invocation of the content build file.
     54   Label content1label(SourceDir("/content/"), "content1", tc_dir, tc_name);
     55   Target* content1 = target_manager.GetTarget(
     56       content1label, LocationRange(), chrome, &err);
     57   EXPECT_EQ(1u, ttmd.invokes.size());
     58 
     59   Label content2label(SourceDir("/content/"), "content2", tc_dir, tc_name);
     60   Target* content2 = target_manager.GetTarget(
     61       content2label, LocationRange(), chrome, &err);
     62   EXPECT_EQ(2u, ttmd.invokes.size());
     63 
     64   // Declare chrome has a depdency on base, this should load it.
     65   Label baselabel(SourceDir("/base/"), "base", tc_dir, tc_name);
     66   Target* base1 = target_manager.GetTarget(
     67       baselabel, LocationRange(), chrome, &err);
     68   EXPECT_EQ(3u, ttmd.invokes.size());
     69 
     70   // Declare content1 has a dependency on base.
     71   Target* base2 = target_manager.GetTarget(
     72       baselabel, LocationRange(), content1, &err);
     73   EXPECT_EQ(3u, ttmd.invokes.size());
     74   EXPECT_EQ(base1, base2);
     75 
     76   // Mark content1 and chrome as done. They have unresolved depdendencies so
     77   // shouldn't be written out yet.
     78   target_manager.TargetGenerationComplete(content1label);
     79   target_manager.TargetGenerationComplete(chromelabel);
     80   EXPECT_EQ(0u, ttmd.writes.size());
     81 
     82   // Mark content2 as done. It has no dependencies so should be written.
     83   target_manager.TargetGenerationComplete(content2label);
     84   ASSERT_EQ(1u, ttmd.writes.size());
     85   EXPECT_EQ(content2label, ttmd.writes[0]->label());
     86 
     87   // Mark base as complete. It should have caused itself, content1 and then
     88   // chrome to be written.
     89   target_manager.TargetGenerationComplete(baselabel);
     90   ASSERT_EQ(4u, ttmd.writes.size());
     91   EXPECT_EQ(baselabel, ttmd.writes[1]->label());
     92   EXPECT_EQ(content1label, ttmd.writes[2]->label());
     93   EXPECT_EQ(chromelabel, ttmd.writes[3]->label());
     94 }
     95 */
     96