21
21
#include " state.h"
22
22
#include " test.h"
23
23
24
- struct ParserTest : public testing ::Test,
25
- public ManifestParser::FileReader {
24
+ struct ParserTest : public testing ::Test {
26
25
void AssertParse (const char * input) {
27
- ManifestParser parser (&state, this , kDupeEdgeActionWarn );
26
+ ManifestParser parser (&state, &fs_ , kDupeEdgeActionWarn );
28
27
string err;
29
28
EXPECT_TRUE (parser.ParseTest (input, &err));
30
29
ASSERT_EQ (" " , err);
31
30
VerifyGraph (state);
32
31
}
33
32
34
- virtual bool ReadFile (const string& path, string* content, string* err) {
35
- files_read_.push_back (path);
36
- map<string, string>::iterator i = files_.find (path);
37
- if (i == files_.end ()) {
38
- *err = " No such file or directory" ; // Match strerror() for ENOENT.
39
- return false ;
40
- }
41
- *content = i->second ;
42
- return true ;
43
- }
44
-
45
33
State state;
46
- map<string, string> files_;
47
- vector<string> files_read_;
34
+ VirtualFileSystem fs_;
48
35
};
49
36
50
37
TEST_F (ParserTest, Empty) {
@@ -371,22 +358,22 @@ TEST_F(ParserTest, DuplicateEdgeWithMultipleOutputsError) {
371
358
" build out1 out2: cat in1\n "
372
359
" build out1: cat in2\n "
373
360
" build final: cat out1\n " ;
374
- ManifestParser parser (&state, this , kDupeEdgeActionError );
361
+ ManifestParser parser (&state, &fs_ , kDupeEdgeActionError );
375
362
string err;
376
363
EXPECT_FALSE (parser.ParseTest (kInput , &err));
377
364
EXPECT_EQ (" input:5: multiple rules generate out1 [-w dupbuild=err]\n " , err);
378
365
}
379
366
380
367
TEST_F (ParserTest, DuplicateEdgeInIncludedFile) {
381
- files_[ " sub.ninja" ] =
368
+ fs_. Create ( " sub.ninja" ,
382
369
" rule cat\n "
383
370
" command = cat $in > $out\n "
384
371
" build out1 out2: cat in1\n "
385
372
" build out1: cat in2\n "
386
- " build final: cat out1\n " ;
373
+ " build final: cat out1\n " ) ;
387
374
const char kInput [] =
388
375
" subninja sub.ninja\n " ;
389
- ManifestParser parser (&state, this , kDupeEdgeActionError );
376
+ ManifestParser parser (&state, &fs_ , kDupeEdgeActionError );
390
377
string err;
391
378
EXPECT_FALSE (parser.ParseTest (kInput , &err));
392
379
EXPECT_EQ (" sub.ninja:5: multiple rules generate out1 [-w dupbuild=err]\n " ,
@@ -813,7 +800,7 @@ TEST_F(ParserTest, Errors) {
813
800
814
801
TEST_F (ParserTest, MissingInput) {
815
802
State state;
816
- ManifestParser parser (&state, this , kDupeEdgeActionWarn );
803
+ ManifestParser parser (&state, &fs_ , kDupeEdgeActionWarn );
817
804
string err;
818
805
EXPECT_FALSE (parser.Load (" build.ninja" , &err));
819
806
EXPECT_EQ (" loading 'build.ninja': No such file or directory" , err);
@@ -841,9 +828,9 @@ TEST_F(ParserTest, MultipleOutputsWithDeps) {
841
828
}
842
829
843
830
TEST_F (ParserTest, SubNinja) {
844
- files_[ " test.ninja" ] =
831
+ fs_. Create ( " test.ninja" ,
845
832
" var = inner\n "
846
- " build $builddir/inner: varref\n " ;
833
+ " build $builddir/inner: varref\n " ) ;
847
834
ASSERT_NO_FATAL_FAILURE (AssertParse (
848
835
" builddir = some_dir/\n "
849
836
" rule varref\n "
@@ -852,9 +839,9 @@ TEST_F(ParserTest, SubNinja) {
852
839
" build $builddir/outer: varref\n "
853
840
" subninja test.ninja\n "
854
841
" build $builddir/outer2: varref\n " ));
855
- ASSERT_EQ (1u , files_read_.size ());
842
+ ASSERT_EQ (1u , fs_. files_read_ .size ());
856
843
857
- EXPECT_EQ (" test.ninja" , files_read_[0 ]);
844
+ EXPECT_EQ (" test.ninja" , fs_. files_read_ [0 ]);
858
845
EXPECT_TRUE (state.LookupNode (" some_dir/outer" ));
859
846
// Verify our builddir setting is inherited.
860
847
EXPECT_TRUE (state.LookupNode (" some_dir/inner" ));
@@ -866,7 +853,7 @@ TEST_F(ParserTest, SubNinja) {
866
853
}
867
854
868
855
TEST_F (ParserTest, MissingSubNinja) {
869
- ManifestParser parser (&state, this , kDupeEdgeActionWarn );
856
+ ManifestParser parser (&state, &fs_ , kDupeEdgeActionWarn );
870
857
string err;
871
858
EXPECT_FALSE (parser.ParseTest (" subninja foo.ninja\n " , &err));
872
859
EXPECT_EQ (" input:1: loading 'foo.ninja': No such file or directory\n "
@@ -877,9 +864,9 @@ TEST_F(ParserTest, MissingSubNinja) {
877
864
878
865
TEST_F (ParserTest, DuplicateRuleInDifferentSubninjas) {
879
866
// Test that rules are scoped to subninjas.
880
- files_[ " test.ninja" ] = " rule cat\n "
881
- " command = cat\n " ;
882
- ManifestParser parser (&state, this , kDupeEdgeActionWarn );
867
+ fs_. Create ( " test.ninja" , " rule cat\n "
868
+ " command = cat\n " ) ;
869
+ ManifestParser parser (&state, &fs_ , kDupeEdgeActionWarn );
883
870
string err;
884
871
EXPECT_TRUE (parser.ParseTest (" rule cat\n "
885
872
" command = cat\n "
@@ -888,31 +875,31 @@ TEST_F(ParserTest, DuplicateRuleInDifferentSubninjas) {
888
875
889
876
TEST_F (ParserTest, DuplicateRuleInDifferentSubninjasWithInclude) {
890
877
// Test that rules are scoped to subninjas even with includes.
891
- files_[ " rules.ninja" ] = " rule cat\n "
892
- " command = cat\n " ;
893
- files_[ " test.ninja" ] = " include rules.ninja\n "
894
- " build x : cat\n " ;
895
- ManifestParser parser (&state, this , kDupeEdgeActionWarn );
878
+ fs_. Create ( " rules.ninja" , " rule cat\n "
879
+ " command = cat\n " ) ;
880
+ fs_. Create ( " test.ninja" , " include rules.ninja\n "
881
+ " build x : cat\n " ) ;
882
+ ManifestParser parser (&state, &fs_ , kDupeEdgeActionWarn );
896
883
string err;
897
884
EXPECT_TRUE (parser.ParseTest (" include rules.ninja\n "
898
885
" subninja test.ninja\n "
899
886
" build y : cat\n " , &err));
900
887
}
901
888
902
889
TEST_F (ParserTest, Include) {
903
- files_[ " include.ninja" ] = " var = inner\n " ;
890
+ fs_. Create ( " include.ninja" , " var = inner\n " ) ;
904
891
ASSERT_NO_FATAL_FAILURE (AssertParse (
905
892
" var = outer\n "
906
893
" include include.ninja\n " ));
907
894
908
- ASSERT_EQ (1u , files_read_.size ());
909
- EXPECT_EQ (" include.ninja" , files_read_[0 ]);
895
+ ASSERT_EQ (1u , fs_. files_read_ .size ());
896
+ EXPECT_EQ (" include.ninja" , fs_. files_read_ [0 ]);
910
897
EXPECT_EQ (" inner" , state.bindings_ .LookupVariable (" var" ));
911
898
}
912
899
913
900
TEST_F (ParserTest, BrokenInclude) {
914
- files_[ " include.ninja" ] = " build\n " ;
915
- ManifestParser parser (&state, this , kDupeEdgeActionWarn );
901
+ fs_. Create ( " include.ninja" , " build\n " ) ;
902
+ ManifestParser parser (&state, &fs_ , kDupeEdgeActionWarn );
916
903
string err;
917
904
EXPECT_FALSE (parser.ParseTest (" include include.ninja\n " , &err));
918
905
EXPECT_EQ (" include.ninja:1: expected path\n "
0 commit comments