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)
+	}
+
+}