Include Vndk version to compatibility matrix XML.

Serialization code is missing before. Also added tests
for converting device compatibility matrices.

Test: libvintf_test
Bug: 36400653
Change-Id: I57aabafdf71f7e9ce05f30e0b14c3d83dc1c183f
diff --git a/parse_xml.cpp b/parse_xml.cpp
index 1435c4e..19ef771 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -656,6 +656,8 @@
         if (m.mType == SchemaType::FRAMEWORK) {
             appendChildren(root, matrixKernelConverter, m.framework.mKernels, d);
             appendChild(root, sepolicyConverter(m.framework.mSepolicy, d));
+        } else if (m.mType == SchemaType::DEVICE) {
+            appendChild(root, vndkConverter(m.device.mVndk, d));
         }
     }
     bool buildObject(CompatibilityMatrix *object, NodeType *root) const override {
diff --git a/test/main.cpp b/test/main.cpp
index 0ddaee3..be007f1 100644
--- a/test/main.cpp
+++ b/test/main.cpp
@@ -54,6 +54,13 @@
     void set(CompatibilityMatrix &cm, Sepolicy &&sepolicy) {
         cm.framework.mSepolicy = sepolicy;
     }
+    void set(CompatibilityMatrix &cm, SchemaType type) {
+        cm.mType = type;
+    }
+    void set(CompatibilityMatrix &cm, VndkVersionRange &&range, std::set<std::string> &&libs) {
+        cm.device.mVndk.mVersionRange = range;
+        cm.device.mVndk.mLibraries = libs;
+    }
     const ManifestHal *getHal(HalManifest &vm, const std::string &name) {
         return vm.getHal(name);
     }
@@ -424,6 +431,31 @@
     EXPECT_EQ(cm, cm2);
 }
 
+TEST_F(LibVintfTest, DeviceCompatibilityMatrixCoverter) {
+    CompatibilityMatrix cm;
+    EXPECT_TRUE(add(cm, MatrixHal{HalFormat::NATIVE, "android.hidl.manager",
+            {{VersionRange(1,0)}},
+            false /* optional */}));
+    set(cm, SchemaType::DEVICE);
+    set(cm, VndkVersionRange{25,0,1,5}, {"libjpeg.so", "libbase.so"});
+    std::string xml = gCompatibilityMatrixConverter(cm);
+    EXPECT_EQ(xml,
+        "<compatibility-matrix version=\"1.0\" type=\"device\">\n"
+        "    <hal format=\"native\" optional=\"false\">\n"
+        "        <name>android.hidl.manager</name>\n"
+        "        <version>1.0</version>\n"
+        "    </hal>\n"
+        "    <vndk>\n"
+        "        <version>25.0.1-5</version>\n"
+        "        <library>libbase.so</library>\n"
+        "        <library>libjpeg.so</library>\n"
+        "    </vndk>\n"
+        "</compatibility-matrix>\n");
+    CompatibilityMatrix cm2;
+    EXPECT_TRUE(gCompatibilityMatrixConverter(&cm2, xml));
+    EXPECT_EQ(cm, cm2);
+}
+
 TEST_F(LibVintfTest, IsValid) {
     EXPECT_TRUE(isValid(ManifestHal()));