xml: Make sure existing interconnect is preserved.

(Plus add test.)

Signed-off-by: Tim 'mithro' Ansell <me@mith.ro>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0f8cf86..0ef0e5b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,6 +8,7 @@
 xsl_golden_test(NAME "explicit-port")
 xsl_golden_test(NAME "pack_pattern-merge-type-into-name")
 xsl_golden_test(NAME "pack_pattern-strip-from-pb_type-ports")
+xsl_golden_test(NAME "preserve-interconnect")
 # Test everything used together in one big file
 add_file_target(FILE "full-test-inner.xml" SCANNER_TYPE xml)
 xsl_golden_test(NAME "full-test")
diff --git a/preserve-interconnect.golden.xml b/preserve-interconnect.golden.xml
new file mode 100644
index 0000000..43c72d0
--- /dev/null
+++ b/preserve-interconnect.golden.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<xml>
+  <pb_type name="parent">
+    <input name="ia1"/>
+    <input name="ia2"/>
+    <input name="ia3"/>
+    <output name="o0"/>
+    <output name="o1"/>
+    <pb_type name="childa">
+      <input name="i1"/>
+      <input name="i2"/>
+      <output name="o"/>
+    </pb_type>
+    <pb_type name="childb">
+      <input name="i"/>
+      <output name="o"/>
+    </pb_type>
+    <pb_type name="childc">
+      <input name="i"/>
+      <output name="o"/>
+    </pb_type>
+    <interconnect>
+      <direct input="parent.ia1" name="childa-i1" output="childa.i1"/>
+      <mux name="childa-input-i2" input="parent.ia2 parent.ia3" output="childa.i2"/>
+      <direct input="childa.o" name="parent-o0" output="parent.o0"/>
+      <direct input="childa.o" name="childb-i" output="childb.i"/>
+      <mux name="childc-input" input="childa.o childb.o" output="childc.i"/>
+      <mux name="output" input="childa.o childb.o childc.o" output="parent.o1"/>
+    </interconnect>
+  </pb_type>
+</xml>
diff --git a/preserve-interconnect.xml b/preserve-interconnect.xml
new file mode 100644
index 0000000..bcdffaa
--- /dev/null
+++ b/preserve-interconnect.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!-- Make sure existing interconnect values are preserved. -->
+<xml>
+  <pb_type name="parent">
+    <input name="ia1"/>
+    <input name="ia2"/>
+    <input name="ia3"/>
+    <output name="o0"/>
+    <output name="o1"/>
+    <pb_type name="childa">
+      <input name="i1"/>
+      <input name="i2"/>
+      <output name="o"/>
+    </pb_type>
+    <pb_type name="childb">
+      <input name="i"/>
+      <output name="o"/>
+    </pb_type>
+    <pb_type name="childc">
+      <input name="i"/>
+      <output name="o"/>
+    </pb_type>
+    <interconnect>
+      <direct input="parent.ia1" name="childa-i1" output="childa.i1"/>
+      <mux name="childa-input-i2" input="parent.ia2 parent.ia3" output="childa.i2"/>
+      <direct input="childa.o" name="parent-o0" output="parent.o0"/>
+      <direct input="childa.o" name="childb-i" output="childb.i"/>
+      <mux name="childc-input" input="childa.o childb.o" output="childc.i"/>
+      <mux name="output" input="childa.o childb.o childc.o" output="parent.o1"/>
+    </interconnect>
+  </pb_type>
+</xml>