diff --git a/tests/baz/1.0/Android.mk b/tests/baz/1.0/Android.mk
new file mode 100644
index 0000000..5f669ac
--- /dev/null
+++ b/tests/baz/1.0/Android.mk
@@ -0,0 +1,71 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := android.hardware.tests.baz@1.0
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+#
+# Build IBase.hal
+#
+GEN := $(intermediates)/android/hardware/tests/baz/1.0/BaseAll.cpp
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBase.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+    $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+    -Lc++ -randroid.hardware:hardware/interfaces\
+    android.hardware.tests.baz@1.0::$(patsubst %.hal,%,$(notdir $(PRIVATE_DEPS)))
+
+$(GEN): $(LOCAL_PATH)/IBase.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IBaz.hal
+#
+GEN := $(intermediates)/android/hardware/tests/baz/1.0/BazAll.cpp
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBaz.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+    $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+    -Lc++ -randroid.hardware:hardware/interfaces\
+    android.hardware.tests.baz@1.0::$(patsubst %.hal,%,$(notdir $(PRIVATE_DEPS)))
+
+$(GEN): $(LOCAL_PATH)/IBaz.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IBazCallback.hal
+#
+GEN := $(intermediates)/android/hardware/tests/baz/1.0/BazCallbackAll.cpp
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBazCallback.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+    $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+    -Lc++ -randroid.hardware:hardware/interfaces\
+    android.hardware.tests.baz@1.0::$(patsubst %.hal,%,$(notdir $(PRIVATE_DEPS)))
+
+$(GEN): $(LOCAL_PATH)/IBazCallback.hal
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(intermediates)
+LOCAL_SHARED_LIBRARIES := \
+  libhidl \
+  libhwbinder \
+  libutils \
+
+LOCAL_MULTILIB := both
+LOCAL_COMPATIBILITY_SUITE := vts
+-include test/vts/tools/build/Android.packaging_sharedlib.mk
+include $(BUILD_SHARED_LIBRARY)
diff --git a/tests/baz/1.0/IBase.hal b/tests/baz/1.0/IBase.hal
new file mode 100644
index 0000000..51251c1
--- /dev/null
+++ b/tests/baz/1.0/IBase.hal
@@ -0,0 +1,31 @@
+package android.hardware.tests.baz@1.0;
+
+interface IBase {
+    enum SomeBaseEnum {
+        grrr = 1,
+    };
+
+    struct Foo {
+        struct Bar {
+            float z;
+            string s;
+        };
+
+        enum FooEnum : int8_t {
+            first = 1,
+            second = 2,
+        };
+
+        int32_t x;
+        vec<Bar> aaa;
+        Bar y;
+    };
+
+    someBaseMethod();
+
+    someBoolMethod(bool x) generates (bool y);
+    someBoolArrayMethod(bool[3] x) generates (bool[4] y);
+    someBoolVectorMethod(vec<bool> x) generates (vec<bool> y);
+
+    someOtherBaseMethod(Foo foo) generates (Foo result);
+};
diff --git a/tests/baz/1.0/IBaz.hal b/tests/baz/1.0/IBaz.hal
new file mode 100644
index 0000000..a6230b9
--- /dev/null
+++ b/tests/baz/1.0/IBaz.hal
@@ -0,0 +1,36 @@
+package android.hardware.tests.baz@1.0;
+
+import IBase;
+import IBazCallback;
+
+interface IBaz extends IBase {
+
+    enum SomeOtherEnum : uint8_t {
+        bar = 66
+    };
+
+    typedef SomeOtherEnum thisIsAnAlias;
+    typedef IBaz anIBazByAnyOtherName;
+
+    enum SomeEnum : SomeOtherEnum {
+        quux = 33,
+        goober = 192,
+        blah = goober
+    };
+
+    @Fragile @NoReally(very="yes", array={"a","b","c"})
+    oneway doThis(float param);
+
+    doThatAndReturnSomething(int64_t param) generates (int32_t result);
+    doQuiteABit(int32_t a, int64_t b, float c, double d) generates (double something);
+    doSomethingElse(int32_t[15] param) generates (int32_t[32] something);
+    doStuffAndReturnAString() generates (string something);
+    mapThisVector(vec<int32_t> param) generates (vec<int32_t> something);
+    callMe(IBazCallback cb);
+    useAnEnum(SomeEnum zzz) generates (SomeEnum kkk);
+
+    haveSomeStrings(string[3] array) generates (string[2] result);
+    haveAStringVec(vec<string> vector) generates (vec<string> result);
+
+    returnABunchOfStrings() generates (string a, string b, string c);
+};
diff --git a/tests/baz/1.0/IBazCallback.hal b/tests/baz/1.0/IBazCallback.hal
new file mode 100644
index 0000000..858e8c9
--- /dev/null
+++ b/tests/baz/1.0/IBazCallback.hal
@@ -0,0 +1,5 @@
+package android.hardware.tests.baz@1.0;
+
+interface IBazCallback {
+    heyItsMe(IBazCallback cb);
+};
