38 " command = touch $out\n" 39 "build out otherout: touch\n");
53 EXPECT_EQ(
"input:1: expected 'ninja_dyndep_version = ...'\n", err);
58 "ninja_dyndep_version = 1\n"));
63 "ninja_dyndep_version = 1-extra\n"));
68 "ninja_dyndep_version = 1.0\n"));
73 "ninja_dyndep_version = 1.0-extra\n"));
79 "ninja_dyndep_version = 1\n"));
85 "ninja_dyndep_version = 1\n"));
90 "ninja_dyndep_version = 1\r\n"));
96 "ninja_dyndep_version = 1\r\n"));
102 "ninja_dyndep_version = 1\r\n"));
106 const char kInput[] =
107 "ninja_dyndep_version = 1.0";
112 "ninja_dyndep_version = 1.0\n" 113 " ^ near here", err);
117 const char kInput[] =
118 "ninja_dyndep_version = 0\n";
122 EXPECT_EQ(
"input:1: unsupported 'ninja_dyndep_version = 0'\n" 123 "ninja_dyndep_version = 0\n" 124 " ^ near here", err);
128 const char kInput[] =
129 "ninja_dyndep_version = 1.1\n";
133 EXPECT_EQ(
"input:1: unsupported 'ninja_dyndep_version = 1.1'\n" 134 "ninja_dyndep_version = 1.1\n" 135 " ^ near here", err);
139 const char kInput[] =
140 "ninja_dyndep_version = 1\n" 141 "ninja_dyndep_version = 1\n";
145 EXPECT_EQ(
"input:2: unexpected identifier\n", err);
149 const char kInput[] =
150 "not_ninja_dyndep_version = 1\n";
154 EXPECT_EQ(
"input:1: expected 'ninja_dyndep_version = ...'\n" 155 "not_ninja_dyndep_version = 1\n" 156 " ^ near here", err);
160 const char kInput[] =
161 "build out: dyndep\n";
165 EXPECT_EQ(
"input:1: expected 'ninja_dyndep_version = ...'\n", err);
169 const char kInput[] =
174 EXPECT_EQ(
"input:1: unexpected '='\n", err);
178 const char kInput[] =
183 EXPECT_EQ(
"input:1: unexpected indent\n", err);
187 const char kInput[] =
188 "ninja_dyndep_version = 1\n" 189 "build out: dyndep\n" 190 "build out: dyndep\n";
194 EXPECT_EQ(
"input:3: multiple statements for 'out'\n" 195 "build out: dyndep\n" 196 " ^ near here", err);
200 const char kInput[] =
201 "ninja_dyndep_version = 1\n" 202 "build out: dyndep\n" 203 "build otherout: dyndep\n";
207 EXPECT_EQ(
"input:3: multiple statements for 'otherout'\n" 208 "build otherout: dyndep\n" 209 " ^ near here", err);
213 const char kInput[] =
214 "ninja_dyndep_version = 1\n" 221 " ^ near here", err);
225 const char kInput[] =
226 "ninja_dyndep_version = 1\n" 233 " ^ near here", err);
237 const char kInput[] =
238 "ninja_dyndep_version = 1\n" 239 "build missing: dyndep\n";
243 EXPECT_EQ(
"input:2: no build statement exists for 'missing'\n" 244 "build missing: dyndep\n" 245 " ^ near here", err);
249 const char kInput[] =
250 "ninja_dyndep_version = 1\n" 257 " ^ near here", err);
261 const char kInput[] =
262 "ninja_dyndep_version = 1\n" 267 EXPECT_EQ(
"input:2: expected build command name 'dyndep'\n" 269 " ^ near here", err);
273 const char kInput[] =
274 "ninja_dyndep_version = 1\n" 279 EXPECT_EQ(
"input:2: expected build command name 'dyndep'\n" 281 " ^ near here", err);
285 const char kInput[] =
286 "ninja_dyndep_version = 1\n" 292 "build out: dyndep\n" 293 " ^ near here", err);
297 const char kInput[] =
298 "ninja_dyndep_version = 1\n" 299 "build out exp: dyndep\n";
303 EXPECT_EQ(
"input:2: explicit outputs not supported\n" 304 "build out exp: dyndep\n" 305 " ^ near here", err);
309 const char kInput[] =
310 "ninja_dyndep_version = 1\n" 311 "build out: dyndep exp\n";
315 EXPECT_EQ(
"input:2: explicit inputs not supported\n" 316 "build out: dyndep exp\n" 317 " ^ near here", err);
321 const char kInput[] =
322 "ninja_dyndep_version = 1\n" 323 "build out: dyndep ||\n";
327 EXPECT_EQ(
"input:2: order-only inputs not supported\n" 328 "build out: dyndep ||\n" 329 " ^ near here", err);
333 const char kInput[] =
334 "ninja_dyndep_version = 1\n" 335 "build out: dyndep\n" 340 EXPECT_EQ(
"input:3: binding is not 'restat'\n" 342 " ^ near here", err);
346 const char kInput[] =
347 "ninja_dyndep_version = 1\n" 348 "build out: dyndep\n" 354 EXPECT_EQ(
"input:4: unexpected indent\n", err);
359 "ninja_dyndep_version = 1\n" 360 "build out: dyndep\n"));
363 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[0]);
366 EXPECT_EQ(0u, i->second.implicit_outputs_.size());
367 EXPECT_EQ(0u, i->second.implicit_inputs_.size());
372 "ninja_dyndep_version = 1\n" 373 "build out | : dyndep |\n"));
376 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[0]);
379 EXPECT_EQ(0u, i->second.implicit_outputs_.size());
380 EXPECT_EQ(0u, i->second.implicit_inputs_.size());
385 "ninja_dyndep_version = 1\n" 386 "build out: dyndep | impin\n"));
389 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[0]);
392 EXPECT_EQ(0u, i->second.implicit_outputs_.size());
393 ASSERT_EQ(1u, i->second.implicit_inputs_.size());
394 EXPECT_EQ(
"impin", i->second.implicit_inputs_[0]->path());
399 "ninja_dyndep_version = 1\n" 400 "build out: dyndep | impin1 impin2\n"));
403 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[0]);
406 EXPECT_EQ(0u, i->second.implicit_outputs_.size());
407 ASSERT_EQ(2u, i->second.implicit_inputs_.size());
408 EXPECT_EQ(
"impin1", i->second.implicit_inputs_[0]->path());
409 EXPECT_EQ(
"impin2", i->second.implicit_inputs_[1]->path());
414 "ninja_dyndep_version = 1\n" 415 "build out | impout: dyndep\n"));
418 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[0]);
421 ASSERT_EQ(1u, i->second.implicit_outputs_.size());
422 EXPECT_EQ(
"impout", i->second.implicit_outputs_[0]->path());
423 EXPECT_EQ(0u, i->second.implicit_inputs_.size());
428 "ninja_dyndep_version = 1\n" 429 "build out | impout1 impout2 : dyndep\n"));
432 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[0]);
435 ASSERT_EQ(2u, i->second.implicit_outputs_.size());
436 EXPECT_EQ(
"impout1", i->second.implicit_outputs_[0]->path());
437 EXPECT_EQ(
"impout2", i->second.implicit_outputs_[1]->path());
438 EXPECT_EQ(0u, i->second.implicit_inputs_.size());
443 "ninja_dyndep_version = 1\n" 444 "build out | impout1 impout2: dyndep | impin1 impin2\n"));
447 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[0]);
450 ASSERT_EQ(2u, i->second.implicit_outputs_.size());
451 EXPECT_EQ(
"impout1", i->second.implicit_outputs_[0]->path());
452 EXPECT_EQ(
"impout2", i->second.implicit_outputs_[1]->path());
453 ASSERT_EQ(2u, i->second.implicit_inputs_.size());
454 EXPECT_EQ(
"impin1", i->second.implicit_inputs_[0]->path());
455 EXPECT_EQ(
"impin2", i->second.implicit_inputs_[1]->path());
460 "ninja_dyndep_version = 1\n" 461 "build out: dyndep\n" 465 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[0]);
468 EXPECT_EQ(0u, i->second.implicit_outputs_.size());
469 EXPECT_EQ(0u, i->second.implicit_inputs_.size());
474 "ninja_dyndep_version = 1\n" 475 "build otherout: dyndep\n"));
478 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[0]);
481 EXPECT_EQ(0u, i->second.implicit_outputs_.size());
482 EXPECT_EQ(0u, i->second.implicit_inputs_.size());
487 "build out2: touch\n");
489 ASSERT_EQ(1u, state_.edges_[1]->outputs_.size());
490 EXPECT_EQ(
"out2", state_.edges_[1]->outputs_[0]->path());
491 EXPECT_EQ(0u, state_.edges_[0]->inputs_.size());
494 "ninja_dyndep_version = 1\n" 495 "build out: dyndep\n" 496 "build out2: dyndep\n" 501 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[0]);
504 EXPECT_EQ(0u, i->second.implicit_outputs_.size());
505 EXPECT_EQ(0u, i->second.implicit_inputs_.size());
508 DyndepFile::iterator i = dyndep_file_.find(state_.edges_[1]);
511 EXPECT_EQ(0u, i->second.implicit_outputs_.size());
512 EXPECT_EQ(0u, i->second.implicit_inputs_.size());
An implementation of DiskInterface that uses an in-memory representation of disk state.
void AssertParse(State *state, const char *input, ManifestParserOptions opts)
void AssertParse(const char *input)
Store data loaded from one dyndep file.
TEST_F(DyndepParserTest, Empty)
bool ParseTest(const std::string &input, std::string *err)
Parse a text string of input. Used by tests.
#define ASSERT_NO_FATAL_FAILURE(a)
Global state (file status) for a single run.