xml: Add test for existing fasm_mux metadata.

Signed-off-by: Tim 'mithro' Ansell <me@mith.ro>
diff --git a/convert-port-tag.xsl b/convert-port-tag.xsl
index 8e0e1d8..170d156 100644
--- a/convert-port-tag.xsl
+++ b/convert-port-tag.xsl
@@ -75,15 +75,14 @@
       </xsl:attribute>
       <xsl:for-each select="@*"><xsl:copy /></xsl:for-each>
       <xsl:apply-templates/>
-      <xsl:if test="*/metadata">
+      <xsl:if test="metadata">
         <metadata>
           <!-- The fasm_mux metadata attribute needs special handling. -->
           <xsl:if test="*/metadata/meta[@name='fasm_mux']">
-            <meta name="fasm_mux">
-              <xsl:for-each select="port[@type='input']"><xsl:text>
-                </xsl:text><xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/><xsl:text> : </xsl:text><xsl:value-of select="metadata/meta[@name='fasm_mux']" />
-              </xsl:for-each><xsl:text>
-            </xsl:text>
+            <meta name="fasm_mux"><xsl:text>&#xa;</xsl:text>
+              <xsl:for-each select="port[@type='input']">
+                <xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/><xsl:text> : </xsl:text><xsl:value-of select="metadata/meta[@name='fasm_mux']" /><xsl:text>&#xa;</xsl:text>
+              </xsl:for-each>
             </meta>
           </xsl:if>
           <xsl:for-each select="metadata">
diff --git a/convert_and_merge_composable_tests/CMakeLists.txt b/convert_and_merge_composable_tests/CMakeLists.txt
index 17e79c3..32063e2 100644
--- a/convert_and_merge_composable_tests/CMakeLists.txt
+++ b/convert_and_merge_composable_tests/CMakeLists.txt
@@ -1,6 +1,7 @@
 include("xsl_tests.cmake")
 # Test individual parts of the transform
 xsl_golden_test(NAME "attribute-cleanup")
+xsl_golden_test(NAME "composable-interconnect-existing-fasm-mux")
 xsl_golden_test(NAME "composable-interconnect-fasm-mux")
 xsl_golden_test(NAME "composable-interconnect-fasm-mux-levels")
 xsl_golden_test(NAME "composable-interconnect-implicit-parent")
diff --git a/convert_and_merge_composable_tests/composable-interconnect-existing-fasm-mux.golden.xml b/convert_and_merge_composable_tests/composable-interconnect-existing-fasm-mux.golden.xml
new file mode 100644
index 0000000..325e28a
--- /dev/null
+++ b/convert_and_merge_composable_tests/composable-interconnect-existing-fasm-mux.golden.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<xml>
+  <pb_type name="parent">
+    <input name="i0"/>
+    <input name="i1"/>
+    <output name="o"/>
+    <pb_type name="child">
+      <input name="i"/>
+      <output name="o"/>
+    </pb_type>
+    <interconnect>
+      <direct input="COMMON_SLICE.CIN" name="CIN_TO_CARRY0" output="CARRY4_VPR.CIN">
+        <pack_pattern in_port="COMMON_SLICE.CIN" name="CARRYCHAIN" out_port="CARRY4_VPR.CIN"/>
+        <metadata>
+          <meta name="fasm_mux">
+      COMMON_SLICE.CIN = PRECYINIT.CIN
+     </meta>
+        </metadata>
+      </direct>
+      <mux input="CARRY4_VPR.O3 CARRY4_VPR.CO_FABRIC3 COMMON_SLICE.DO6 COMMON_SLICE.DO5 COMMON_SLICE.DX" name="DFFMUX" output="SLICE_FF.D[3]">
+        <metadata>
+          <meta name="fasm_mux">
+      COMMON_SLICE.DX = DFFMUX.DX
+      COMMON_SLICE.DO5 = DFFMUX.O5
+      COMMON_SLICE.DO6 = DFFMUX.O6
+      CARRY4_VPR.CO_FABRIC3 = DFFMUX.CY
+      CARRY4_VPR.O3 = DFFMUX.XOR
+     </meta>
+        </metadata>
+      </mux>
+    </interconnect>
+  </pb_type>
+</xml>
diff --git a/convert_and_merge_composable_tests/composable-interconnect-existing-fasm-mux.xml b/convert_and_merge_composable_tests/composable-interconnect-existing-fasm-mux.xml
new file mode 100644
index 0000000..c2a333e
--- /dev/null
+++ b/convert_and_merge_composable_tests/composable-interconnect-existing-fasm-mux.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!-- Test the special handling around the fasm_mux metadata doesn't destroy
+     existing values.
+     -->
+<xml>
+ <pb_type name="parent">
+  <input name="i0" />
+  <input name="i1" />
+  <output name="o" />
+
+  <pb_type name="child">
+   <input name="i" />
+   <output name="o" />
+  </pb_type>
+
+  <interconnect>
+   <direct name="CIN_TO_CARRY0" input="COMMON_SLICE.CIN" output="CARRY4_VPR.CIN" >
+    <pack_pattern name="CARRYCHAIN"/>
+    <metadata>
+     <meta name="fasm_mux">
+      COMMON_SLICE.CIN = PRECYINIT.CIN
+     </meta>
+    </metadata>
+   </direct>
+   <mux name="DFFMUX"
+    input="CARRY4_VPR.O3 CARRY4_VPR.CO_FABRIC3 COMMON_SLICE.DO6 COMMON_SLICE.DO5 COMMON_SLICE.DX"
+    output="SLICE_FF.D[3]" >
+    <metadata>
+     <meta name="fasm_mux">
+      COMMON_SLICE.DX = DFFMUX.DX
+      COMMON_SLICE.DO5 = DFFMUX.O5
+      COMMON_SLICE.DO6 = DFFMUX.O6
+      CARRY4_VPR.CO_FABRIC3 = DFFMUX.CY
+      CARRY4_VPR.O3 = DFFMUX.XOR
+     </meta>
+    </metadata>
+   </mux>
+  </interconnect>
+ </pb_type>
+</xml>
diff --git a/convert_and_merge_composable_tests/composable-interconnect-fasm-mux-levels.golden.xml b/convert_and_merge_composable_tests/composable-interconnect-fasm-mux-levels.golden.xml
index 58b70bc..36509f5 100644
--- a/convert_and_merge_composable_tests/composable-interconnect-fasm-mux-levels.golden.xml
+++ b/convert_and_merge_composable_tests/composable-interconnect-fasm-mux-levels.golden.xml
@@ -24,11 +24,11 @@
       <mux input="blocka.a blockb.b blockc[0].c blockc[1].c" name="outmux" output="blocko.i">
         <metadata>
           <meta name="fasm_mux">
-                blocka.a : a1
-                blockb.b : b1.l1
-                blockc[0].c : c0.l1
-                blockc[1].c : c1
-            </meta>
+blocka.a : a1
+blockb.b : b1.l1
+blockc[0].c : c0.l1
+blockc[1].c : c1
+</meta>
           <meta name="fasm_name">fasm_name</meta>
         </metadata>
       </mux>
diff --git a/convert_and_merge_composable_tests/composable-interconnect-fasm-mux.golden.xml b/convert_and_merge_composable_tests/composable-interconnect-fasm-mux.golden.xml
index 3e72333..cb3f7e1 100644
--- a/convert_and_merge_composable_tests/composable-interconnect-fasm-mux.golden.xml
+++ b/convert_and_merge_composable_tests/composable-interconnect-fasm-mux.golden.xml
@@ -13,9 +13,9 @@
       <mux input="parent.i0 parent.i1" name="mux1" output="child.i">
         <metadata>
           <meta name="fasm_mux">
-                parent.i0 : a1
-                parent.i1 : b1
-            </meta>
+parent.i0 : a1
+parent.i1 : b1
+</meta>
           <meta name="fasm_name">fasm_name</meta>
         </metadata>
       </mux>