androidbp: Add module tests
Change-Id: I563c901c8c65496f4de13d4dea38d2e7ee629fff
diff --git a/androidbp/cmd/androidbp_test.go b/androidbp/cmd/androidbp_test.go
index 178ea57..4befa73 100644
--- a/androidbp/cmd/androidbp_test.go
+++ b/androidbp/cmd/androidbp_test.go
@@ -1,8 +1,11 @@
package main
import (
+ "bufio"
+ "bytes"
"strings"
"testing"
+ "unicode"
bpparser "github.com/google/blueprint/parser"
)
@@ -26,8 +29,8 @@
{
blueprint: `test = ["a", "b"]`,
expected: `\
- a \
- b`,
+ a \
+ b`,
},
{
blueprint: `test = Var + "b"`,
@@ -36,8 +39,8 @@
{
blueprint: `test = ["a"] + ["b"]`,
expected: `\
- a\
- b`,
+ a\
+ b`,
},
}
@@ -49,11 +52,86 @@
}
str := valueToString(blueprint.Defs[0].(*bpparser.Assignment).Value)
- if str != testCase.expected {
- t.Errorf("test case: %s", testCase.blueprint)
- t.Errorf("unexpected difference:")
- t.Errorf(" expected: %s", testCase.expected)
- t.Errorf(" got: %s", str)
+ expect(t, testCase.blueprint, testCase.expected, str)
+ }
+}
+
+var moduleTestCases = []struct {
+ blueprint string
+ androidmk string
+}{
+ // Target-only
+ {
+ blueprint: `cc_library_shared { name: "test", }`,
+ androidmk: `include $(CLEAR_VARS)
+ LOCAL_MODULE := test
+ include $(BUILD_SHARED_LIBRARY)`,
+ },
+ // Host-only
+ {
+ blueprint: `cc_library_host_shared { name: "test", }`,
+ androidmk: `include $(CLEAR_VARS)
+ LOCAL_MODULE := test
+ include $(BUILD_HOST_SHARED_LIBRARY)`,
+ },
+ // Target and Host
+ {
+ blueprint: `cc_library_shared { name: "test", host_supported: true, }`,
+ androidmk: `include $(CLEAR_VARS)
+ LOCAL_MODULE := test
+ include $(BUILD_SHARED_LIBRARY)
+
+ include $(CLEAR_VARS)
+ LOCAL_MODULE := test
+ include $(BUILD_HOST_SHARED_LIBRARY)`,
+ },
+}
+
+func TestModules(t *testing.T) {
+ for _, testCase := range moduleTestCases {
+ blueprint, errs := bpparser.Parse("", strings.NewReader(testCase.blueprint), nil)
+ if len(errs) > 0 {
+ t.Errorf("Failed to read blueprint: %q", errs)
}
+
+ buf := &bytes.Buffer{}
+ writer := &androidMkWriter{
+ blueprint: blueprint,
+ path: "",
+ mapScope: make(map[string][]*bpparser.Property),
+ Writer: bufio.NewWriter(buf),
+ }
+
+ module := blueprint.Defs[0].(*bpparser.Module)
+ writer.handleModule(module)
+ writer.Flush()
+
+ expect(t, testCase.blueprint, testCase.androidmk, buf.String())
+ }
+}
+
+// Trim left whitespace, and any trailing newlines. Leave inner blank lines and
+// right whitespace so that we can still check line continuations are correct
+func trim(str string) string {
+ var list []string
+ for _, s := range strings.Split(str, "\n") {
+ list = append(list, strings.TrimLeftFunc(s, unicode.IsSpace))
+ }
+ return strings.TrimRight(strings.Join(list, "\n"), "\n")
+}
+
+func expect(t *testing.T, testCase string, expected string, out string) {
+ expected = trim(expected)
+ out = trim(out)
+ if expected != out {
+ sep := " "
+ if strings.Index(expected, "\n") != -1 || strings.Index(out, "\n") != -1 {
+ sep = "\n"
+ }
+
+ t.Errorf("test case: %s", testCase)
+ t.Errorf("unexpected difference:")
+ t.Errorf(" expected:%s%s", sep, expected)
+ t.Errorf(" got:%s%s", sep, out)
}
}