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);