@joebigelow / wix-1 / commits / 66563e5e

Fix XmlConfig decompile to produce schema element, Add unitest for XmlDecomile

fyodorkor committed Apr 13, 2023 at 22:37 UTC 66563e5e142fb89d4df5d2b8a20e65261becb0a2
2 files changed +34 -9
src/ext/Util/test/WixToolsetTest.Util/UtilExtensionFixture.cs
+23
@@ -301,6 +301,29 @@ namespace WixToolsetTest.Util
301 }, results.OrderBy(s => s).ToArray());
302 }
303
304 + [Fact]
305 + public void CanRoundtripXmlConfig()
306 + {
307 + var folder = TestData.Get(@"TestData", "XmlConfig");
308 + var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder });
309 + var output = Path.Combine(folder, "XmlConfigdecompile.xml");
310 +
311 + build.BuildAndDecompileAndBuild(Build, Decompile, output);
312 +
313 + var doc = XDocument.Load(output);
314 + var utilElementNames = doc.Descendants().Where(e => e.Name.Namespace == "http://wixtoolset.org/schemas/v4/wxs/util")
315 + .Select(e => e.Name.LocalName)
316 + .ToArray();
317 +
318 + WixAssert.CompareLineByLine(new[]
319 + {
320 + "XmlConfig",
321 + "XmlConfig",
322 + "XmlConfig",
323 + "XmlConfig"
324 + }, utilElementNames);
325 + }
326 +
327 [Fact]
328 public void CanBuildModuleWithXmlConfig()
329 {
src/ext/Util/wixext/UtilDecompiler.cs
+11 -9
@@ -673,7 +673,7 @@ namespace WixToolset.Util
673 {
674 foreach (var row in table.Rows)
675 {
676 - var flags = row.FieldAsNullableInteger(6) ?? 0;
676 + var flags = row.FieldAsNullableInteger(7) ?? 0;
677 string node = null;
678 string action = null;
679 string on = null;
@@ -712,14 +712,16 @@ namespace WixToolset.Util
712 var xmlConfig = new XElement(UtilConstants.XmlConfigName,
713 new XAttribute("Id", row.FieldAsString(0)),
714 new XAttribute("File", row.FieldAsString(1)),
715 - new XAttribute("ElementPath", row.FieldAsString(2)),
716 - AttributeIfNotNull("VerifyPath", row, 3),
717 - AttributeIfNotNull("Name", row, 4),
715 + AttributeIfNotNull("ElementId", row, 2),
716 + AttributeIfNotNull("ElementPath", row, 3),
717 + AttributeIfNotNull("VerifyPath", row, 4),
718 + AttributeIfNotNull("Name", row, 5),
719 + AttributeIfNotNull("Value", row, 6),
720 AttributeIfNotNull("Node", node),
721 AttributeIfNotNull("Action", action),
722 AttributeIfNotNull("On", on),
723 AttributeIfTrue("PreserveModifiedDate", 0x00001000 == (flags & 0x00001000)),
722 - NumericAttributeIfNotNull("Sequence", row, 8)
724 + NumericAttributeIfNotNull("Sequence", row, 9)
725 );
726
727 this.DecompilerHelper.IndexElement(row, xmlConfig);
@@ -967,16 +969,16 @@ namespace WixToolset.Util
969 /// <param name="tables">Collection of all tables.</param>
970 private void FinalizeXmlConfigTable(TableIndexedCollection tables)
971 {
970 - if (tables.TryGetTable("XmlConfig", out var xmlConfigTable))
972 + if (tables.TryGetTable("Wix4XmlConfig", out var xmlConfigTable))
973 {
974 foreach (var row in xmlConfigTable.Rows)
975 {
976 var xmlConfig = this.DecompilerHelper.GetIndexedElement(row);
977
976 - if (null == row[6] || 0 == (int)row[6])
978 + if (null != row[2])
979 {
980 var id = row.FieldAsString(2);
979 - if (this.DecompilerHelper.TryGetIndexedElement("XmlConfig", id, out var parentXmlConfig))
981 + if (this.DecompilerHelper.TryGetIndexedElement("Wix4XmlConfig", id, out var parentXmlConfig))
982 {
983 parentXmlConfig.Add(xmlConfig);
984 }
@@ -987,7 +989,7 @@ namespace WixToolset.Util
989 }
990 else
991 {
990 - var componentId = row.FieldAsString(7);
992 + var componentId = row.FieldAsString(8);
993 if (this.DecompilerHelper.TryGetIndexedElement("Component", componentId, out var component))
994 {
995 component.Add(xmlConfig);