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
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 @@
import (
"bytes"
+ "errors"
+ "fmt"
"reflect"
"strings"
"sync"
@@ -353,3 +355,40 @@
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)
+ }
+
+}