From a7e408af0af05f9bb02e532e4a47220b14665fbb Mon Sep 17 00:00:00 2001 From: Jeff Gaston Date: Tue, 5 Dec 2017 15:11:55 -0800 Subject: prevent file=nil panic if syntax error in Blueprints Bug: 65683273 Test: build/soong/scripts/diff_build_graphs.sh \ 'build/blueprint:work^^^' 'build/blueprint:work' Test: put a syntax error in a file and see that the reported error reports the location of the violation Change-Id: Iaeedb91ea8e816cb8e9ee954f21cd6c6bc4afa48 --- context_test.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'context_test.go') diff --git a/context_test.go b/context_test.go index c0ce803..635f73e 100644 --- a/context_test.go +++ b/context_test.go @@ -16,6 +16,8 @@ package blueprint import ( "bytes" + "errors" + "fmt" "reflect" "strings" "sync" @@ -353,3 +355,40 @@ func doTestWalkFileOrder(t *testing.T, sleepDuration time.Duration) { t.Errorf("Incorrect visit order; expected %v, got %v", correctVisitOrder, visitOrder) } } + +// test that WalkBlueprintsFiles reports syntax errors +func TestWalkingWithSyntaxError(t *testing.T) { + // setup mock context + ctx := newContext() + mockFiles := map[string][]byte{ + "Blueprints": []byte(` + sample_module { + name: "a" "b", + } + `), + "dir1/Blueprints": []byte(` + sample_module { + name: "b", + `), + "dir1/dir2/Blueprints": []byte(` + sample_module { + name: "c", + } + `), + } + ctx.MockFileSystem(mockFiles) + + keys := []string{"Blueprints", "dir1/Blueprints", "dir1/dir2/Blueprints"} + + // visit the blueprints files + _, errs := ctx.WalkBlueprintsFiles(".", keys, func(file *parser.File) {}) + + expectedErrs := []error{ + errors.New(`Blueprints:3:18: expected "}", found String`), + errors.New(`dir1/Blueprints:4:3: expected "}", found EOF`), + } + if fmt.Sprintf("%s", expectedErrs) != fmt.Sprintf("%s", errs) { + t.Errorf("Incorrect errors; expected:\n%s\ngot:\n%s", expectedErrs, errs) + } + +} -- cgit v1.2.3