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