27 const Rule& generator) {}
50 for (std::vector<Node*>::iterator it = nodes.begin(); it != nodes.end();
103 CreateInitialState();
105 RecordDepsLogDep(
"compiled_object",
"generated_header");
108 ASSERT_EQ(1u, scanner().nodes_missing_deps_.size());
109 ASSERT_EQ(1u, scanner().missing_dep_path_count_);
110 AssertMissingDependencyBetween(
"compiled_object",
"generated_header",
115 CreateInitialState();
117 CreateGraphDependencyBetween(
"compiled_object",
"generated_header");
118 RecordDepsLogDep(
"compiled_object",
"generated_header");
124 CreateInitialState();
126 Edge* intermediate_edge = state_.AddEdge(&generator_rule_);
127 state_.AddOut(intermediate_edge,
"intermediate", 0);
128 CreateGraphDependencyBetween(
"compiled_object",
"intermediate");
129 CreateGraphDependencyBetween(
"intermediate",
"generated_header");
130 RecordDepsLogDep(
"compiled_object",
"generated_header");
136 CreateInitialState();
137 RecordDepsLogDep(
"generated_header",
"compiled_object");
138 RecordDepsLogDep(
"compiled_object",
"generated_header");
143 ASSERT_EQ(2u, scanner().nodes_missing_deps_.size());
144 ASSERT_EQ(2u, scanner().missing_dep_path_count_);
145 AssertMissingDependencyBetween(
"compiled_object",
"generated_header",
147 AssertMissingDependencyBetween(
"generated_header",
"compiled_object",
152 CreateInitialState();
153 CreateGraphDependencyBetween(
"compiled_object",
"generated_header");
154 CreateGraphDependencyBetween(
"generated_header",
"compiled_object");
159 std::vector<Node*> nodes = state_.RootNodes(&err);
void AssertMissingDependencyBetween(const char *flaky, const char *generated, Rule *rule)
An implementation of DiskInterface that uses an in-memory representation of disk state.
void RecordDepsLogDep(const std::string &from, const std::string &to)
Information about a node in the dependency graph: the file, whether it's dirty, mtime, etc.
void AddIn(Edge *edge, StringPiece path, uint64_t slash_bits)
MissingDependencyScanner & scanner()
An edge in the dependency graph; links between Nodes using Rules.
Node * LookupNode(StringPiece path) const
std::vector< Node * > RootNodes(std::string *error) const
MissingDependencyScannerTest()
void OnMissingDep(Node *node, const std::string &path, const Rule &generator)
Edge * AddEdge(const Rule *rule)
As build commands run they can output extra dependency information (e.g.
void CreateInitialState()
void ProcessNode(Node *node)
bool AddOut(Edge *edge, StringPiece path, uint64_t slash_bits)
bool RecordDeps(Node *node, TimeStamp mtime, const std::vector< Node *> &nodes)
void AddBinding(const std::string &key, const EvalString &val)
An invocable build command and associated metadata (description, etc.).
VirtualFileSystem filesystem_
MissingDependencyTestDelegate delegate_
bool OpenForWrite(const std::string &path, std::string *err)
TEST_F(MissingDependencyScannerTest, EmptyGraph)
MissingDependencyScanner scanner_
const char kTestDepsLogFilename[]
void AddText(StringPiece text)
Global state (file status) for a single run.
A tokenized string that contains variable references.
void CreateGraphDependencyBetween(const char *from, const char *to)