From acba90f005779fa03ee05c3c87148bb6141ba60e Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Tue, 23 Jun 2020 16:43:11 -0700 Subject: Do *not* require XML declaration --- src/WixToolset.Converters/Wix3Converter.cs | 48 +++++++++++------ .../BaseConverterFixture.cs | 16 +++--- .../WixToolsetTest.Converters/ConditionFixture.cs | 10 ++-- .../WixToolsetTest.Converters/ConverterFixture.cs | 61 +++++----------------- .../ConverterIntegrationFixture.cs | 2 +- .../CustomActionFixture.cs | 6 +-- .../CustomTableFixture.cs | 9 +--- .../WixToolsetTest.Converters/PropertyFixture.cs | 6 --- .../WixToolsetTest.Converters/SequenceFixture.cs | 4 +- .../TestData/PermissionEx/v3.wxs | 1 - .../TestData/PermissionEx/v4_expected.wxs | 1 - .../Preprocessor/ConvertedPreprocessor.wxs | 1 - .../TestData/QtExec.bad/v3.wxs | 1 - .../TestData/QtExec.bad/v4_expected.wxs | 1 - .../TestData/QtExec/v4_expected.wxs | 1 - .../TestData/SingleFile/ConvertedSingleFile.wxs | 1 - 16 files changed, 58 insertions(+), 111 deletions(-) (limited to 'src') diff --git a/src/WixToolset.Converters/Wix3Converter.cs b/src/WixToolset.Converters/Wix3Converter.cs index 2d603c4f..8c7d2049 100644 --- a/src/WixToolset.Converters/Wix3Converter.cs +++ b/src/WixToolset.Converters/Wix3Converter.cs @@ -203,9 +203,9 @@ namespace WixToolset.Converters { try { - using (var writer = File.CreateText(this.SourceFile)) + using (var writer = XmlWriter.Create(this.SourceFile, new XmlWriterSettings { OmitXmlDeclaration = true })) { - document.Save(writer, SaveOptions.DisableFormatting | SaveOptions.OmitDuplicateNamespaces); + document.Save(writer); } } catch (UnauthorizedAccessException) @@ -228,26 +228,17 @@ namespace WixToolset.Converters var declaration = document.Declaration; - // Convert the declaration. + // Remove the declaration. if (null != declaration) { - if (!String.Equals("utf-8", declaration.Encoding, StringComparison.OrdinalIgnoreCase)) + if (this.OnError(ConverterTestType.DeclarationPresent, null, "This file contains an XML declaration on the first line.")) { - if (this.OnError(ConverterTestType.DeclarationEncodingWrong, document.Root, "The XML declaration encoding is not properly set to 'utf-8'.")) - { - declaration.Encoding = "utf-8"; - } - } - } - else // missing declaration - { - if (this.OnError(ConverterTestType.DeclarationMissing, null, "This file is missing an XML declaration on the first line.")) - { - document.Declaration = new XDeclaration("1.0", "utf-8", null); - document.Root.AddBeforeSelf(new XText(XDocumentNewLine.ToString())); + document.Declaration = null; } } + TrimLeadingText(document); + // Start converting the nodes at the top. this.ConvertNodes(document.Nodes(), 0); @@ -903,6 +894,26 @@ namespace WixToolset.Converters return !String.IsNullOrEmpty(value); } + private static bool IsTextNode(XNode node, out XText text) + { + text = null; + + if (node.NodeType == XmlNodeType.Text || node.NodeType == XmlNodeType.CDATA) + { + text = (XText)node; + } + + return text != null; + } + + private static void TrimLeadingText(XDocument document) + { + while (IsTextNode(document.Nodes().FirstOrDefault(), out var text)) + { + text.Remove(); + } + } + private static string TrimTextValue(XText text) { var value = text.Value; @@ -1052,6 +1063,11 @@ namespace WixToolset.Converters /// Explicit auto-GUID unnecessary. /// AutoGuidUnnecessary, + + /// + /// Displayed when the XML declaration is present in the source file. + /// + DeclarationPresent, } } } diff --git a/src/test/WixToolsetTest.Converters/BaseConverterFixture.cs b/src/test/WixToolsetTest.Converters/BaseConverterFixture.cs index e8eeb459..2cd4119b 100644 --- a/src/test/WixToolsetTest.Converters/BaseConverterFixture.cs +++ b/src/test/WixToolsetTest.Converters/BaseConverterFixture.cs @@ -5,6 +5,7 @@ namespace WixToolsetTest.Converters using System; using System.IO; using System.Text; + using System.Xml; using System.Xml.Linq; using Xunit; @@ -15,23 +16,18 @@ namespace WixToolsetTest.Converters var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) + using (var xml = XmlWriter.Create(writer, new XmlWriterSettings { OmitXmlDeclaration = true })) { - document.Save(writer, SaveOptions.DisableFormatting); + document.Save(xml); } - return sb.ToString(); + return sb.ToString().TrimStart(); } protected static string[] UnformattedDocumentLines(XDocument document) { - var sb = new StringBuilder(); - - using (var writer = new StringWriter(sb)) - { - document.Save(writer, SaveOptions.DisableFormatting); - } - - return sb.ToString().Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); + var unformatted = UnformattedDocumentString(document); + return unformatted.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); } protected static void CompareLineByLine(string[] expectedLines, string[] actualLines) diff --git a/src/test/WixToolsetTest.Converters/ConditionFixture.cs b/src/test/WixToolsetTest.Converters/ConditionFixture.cs index 6a5ce1f9..804ebe5b 100644 --- a/src/test/WixToolsetTest.Converters/ConditionFixture.cs +++ b/src/test/WixToolsetTest.Converters/ConditionFixture.cs @@ -29,7 +29,6 @@ namespace WixToolsetTest.Converters var expected = new[] { - "", "", " ", " ", @@ -70,7 +69,6 @@ namespace WixToolsetTest.Converters var expected = new[] { - "", "", " ", " ", @@ -107,7 +105,6 @@ namespace WixToolsetTest.Converters var expected = new[] { - "", "", " ", " ", @@ -144,7 +141,6 @@ namespace WixToolsetTest.Converters var expected = new[] { - "", "", " ", " ", @@ -168,7 +164,7 @@ namespace WixToolsetTest.Converters public void FixPermissionExCondition() { var parse = String.Join(Environment.NewLine, - "", + "", "", " ", " ", @@ -181,7 +177,7 @@ namespace WixToolsetTest.Converters var expected = new[] { - "", + "", "", " ", " ", @@ -199,7 +195,7 @@ namespace WixToolsetTest.Converters var converter = new Wix3Converter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); - Assert.Equal(4, errors); + Assert.Equal(3, errors); var actualLines = UnformattedDocumentLines(document); CompareLineByLine(expected, actualLines); diff --git a/src/test/WixToolsetTest.Converters/ConverterFixture.cs b/src/test/WixToolsetTest.Converters/ConverterFixture.cs index 3378b804..10029090 100644 --- a/src/test/WixToolsetTest.Converters/ConverterFixture.cs +++ b/src/test/WixToolsetTest.Converters/ConverterFixture.cs @@ -13,15 +13,15 @@ namespace WixToolsetTest.Converters private static readonly XNamespace Wix4Namespace = "http://wixtoolset.org/schemas/v4/wxs"; [Fact] - public void EnsuresDeclaration() + public void EnsuresNoDeclaration() { var parse = String.Join(Environment.NewLine, + "", "", " ", ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); @@ -39,27 +39,6 @@ namespace WixToolsetTest.Converters Assert.Equal(expected, actual); } - [Fact] - public void EnsuresUtf8Declaration() - { - var parse = String.Join(Environment.NewLine, - "", - "", - " ", - ""); - - var document = XDocument.Parse(parse, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); - - var messaging = new MockMessaging(); - var converter = new Wix3Converter(messaging, 4, null, null); - - var errors = converter.ConvertDocument(document); - - Assert.Equal(1, errors); - Assert.Equal("1.0", document.Declaration.Version); - Assert.Equal("utf-8", document.Declaration.Encoding); - } - [Fact] public void CanFixWhitespace() { @@ -74,7 +53,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -91,7 +69,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); Assert.Equal(expected, actual); - Assert.Equal(4, errors); + Assert.Equal(5, errors); } [Fact] @@ -108,7 +86,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", "", @@ -127,14 +104,13 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); Assert.Equal(expected, actual); - Assert.Equal(3, conversions); + Assert.Equal(4, conversions); } [Fact] public void CanConvertWithNewLineAtEndOfFile() { var parse = String.Join(Environment.NewLine, - "", "", " ", "", @@ -145,7 +121,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", "", @@ -178,7 +153,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); @@ -192,7 +166,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); - Assert.Equal(1, errors); + Assert.Equal(2, errors); //Assert.Equal(Wix4Namespace, document.Root.GetDefaultNamespace()); Assert.Equal(expected, actual); } @@ -207,7 +181,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); @@ -221,7 +194,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); - Assert.Equal(1, errors); + Assert.Equal(2, errors); Assert.Equal(expected, actual); Assert.Equal(Wix4Namespace, document.Root.GetNamespaceOfPrefix("w")); } @@ -238,7 +211,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -255,7 +227,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); Assert.Equal(expected, actual); - Assert.Equal(2, errors); + Assert.Equal(3, errors); Assert.Equal(Wix4Namespace, document.Root.GetNamespaceOfPrefix("w")); Assert.Equal("http://wixtoolset.org/schemas/v4/wxs/util", document.Root.GetDefaultNamespace()); } @@ -270,7 +242,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); @@ -284,7 +255,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); - Assert.Equal(2, errors); + Assert.Equal(3, errors); Assert.Equal(expected, actual); Assert.Equal(Wix4Namespace, document.Root.GetDefaultNamespace()); } @@ -299,7 +270,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); @@ -313,7 +283,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); - Assert.Equal(1, errors); + Assert.Equal(2, errors); Assert.Equal(expected, actual); Assert.Equal(Wix4Namespace, document.Root.GetDefaultNamespace()); } @@ -333,7 +303,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -352,7 +321,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); - Assert.Equal(1, errors); + Assert.Equal(2, errors); Assert.Equal(expected, actual); Assert.Equal(Wix4Namespace, document.Root.GetDefaultNamespace()); } @@ -367,7 +336,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); @@ -381,7 +349,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); - Assert.Equal(1, errors); + Assert.Equal(2, errors); Assert.Equal(expected, actual); } @@ -395,7 +363,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); @@ -409,7 +376,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); - Assert.Equal(1, errors); + Assert.Equal(2, errors); Assert.Equal(expected, actual); } @@ -417,13 +384,11 @@ namespace WixToolsetTest.Converters public void CanConvertSuppressSignatureValidationNo() { var parse = String.Join(Environment.NewLine, - "", "", " ", ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); @@ -445,13 +410,11 @@ namespace WixToolsetTest.Converters public void CanConvertSuppressSignatureValidationYes() { var parse = String.Join(Environment.NewLine, - "", "", " ", ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); diff --git a/src/test/WixToolsetTest.Converters/ConverterIntegrationFixture.cs b/src/test/WixToolsetTest.Converters/ConverterIntegrationFixture.cs index d05f8e8f..d4fd1acf 100644 --- a/src/test/WixToolsetTest.Converters/ConverterIntegrationFixture.cs +++ b/src/test/WixToolsetTest.Converters/ConverterIntegrationFixture.cs @@ -58,7 +58,7 @@ namespace WixToolsetTest.Converters var converter = new Wix3Converter(messaging, 4); var errors = converter.ConvertFile(targetFile, true); - Assert.Equal(6, errors); + Assert.Equal(7, errors); var expected = File.ReadAllText(Path.Combine(folder, afterFileName)).Replace("\r\n", "\n"); var actual = File.ReadAllText(targetFile).Replace("\r\n", "\n"); diff --git a/src/test/WixToolsetTest.Converters/CustomActionFixture.cs b/src/test/WixToolsetTest.Converters/CustomActionFixture.cs index 1eab0926..27d45bc6 100644 --- a/src/test/WixToolsetTest.Converters/CustomActionFixture.cs +++ b/src/test/WixToolsetTest.Converters/CustomActionFixture.cs @@ -24,7 +24,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -41,7 +40,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); - Assert.Equal(6, errors); + Assert.Equal(7, errors); Assert.Equal(expected, actual); } @@ -60,7 +59,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); @@ -80,7 +78,7 @@ namespace WixToolsetTest.Converters var actual = UnformattedDocumentString(document); - Assert.Equal(1, errors); + Assert.Equal(2, errors); Assert.Equal(expected, actual); var script = File.ReadAllText("Foo.js"); diff --git a/src/test/WixToolsetTest.Converters/CustomTableFixture.cs b/src/test/WixToolsetTest.Converters/CustomTableFixture.cs index c09534ee..b61dbb10 100644 --- a/src/test/WixToolsetTest.Converters/CustomTableFixture.cs +++ b/src/test/WixToolsetTest.Converters/CustomTableFixture.cs @@ -25,7 +25,6 @@ namespace WixToolsetTest.Converters var expected = new[] { - "", "", " ", " ", @@ -64,7 +63,6 @@ namespace WixToolsetTest.Converters var expected = new[] { - "", "", " ", " ", @@ -90,7 +88,6 @@ namespace WixToolsetTest.Converters public void FixCustomRowCdataValue() { var parse = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -105,7 +102,6 @@ namespace WixToolsetTest.Converters var expected = new[] { - "", "", " ", " ", @@ -121,7 +117,7 @@ namespace WixToolsetTest.Converters var converter = new Wix3Converter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); - Assert.Equal(3, errors); + Assert.Equal(2, errors); var actualLines = UnformattedDocumentLines(document); CompareLineByLine(expected, actualLines); @@ -142,7 +138,6 @@ namespace WixToolsetTest.Converters var expected = new[] { - "", "", " ", " ", @@ -168,13 +163,11 @@ namespace WixToolsetTest.Converters public void CanConvertCustomTableBootstrapperApplicationData() { var parse = String.Join(Environment.NewLine, - "", "", " ", ""); var expected = String.Join(Environment.NewLine, - "", "", " ", ""); diff --git a/src/test/WixToolsetTest.Converters/PropertyFixture.cs b/src/test/WixToolsetTest.Converters/PropertyFixture.cs index 0449fb43..90c1e5c9 100644 --- a/src/test/WixToolsetTest.Converters/PropertyFixture.cs +++ b/src/test/WixToolsetTest.Converters/PropertyFixture.cs @@ -14,7 +14,6 @@ namespace WixToolsetTest.Converters public void CanFixCdataWhitespace() { var parse = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -24,7 +23,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -48,7 +46,6 @@ namespace WixToolsetTest.Converters public void CanFixCdataWithWhitespace() { var parse = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -60,7 +57,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -84,7 +80,6 @@ namespace WixToolsetTest.Converters public void CanKeepCdataWithOnlyWhitespace() { var parse = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -92,7 +87,6 @@ namespace WixToolsetTest.Converters ""); var expected = String.Join(Environment.NewLine, - "", "", " ", " ", diff --git a/src/test/WixToolsetTest.Converters/SequenceFixture.cs b/src/test/WixToolsetTest.Converters/SequenceFixture.cs index 997dcd6a..1abe6c0c 100644 --- a/src/test/WixToolsetTest.Converters/SequenceFixture.cs +++ b/src/test/WixToolsetTest.Converters/SequenceFixture.cs @@ -14,7 +14,6 @@ namespace WixToolsetTest.Converters public void FixCondition() { var parse = String.Join(Environment.NewLine, - "", "", " ", " ", @@ -25,7 +24,6 @@ namespace WixToolsetTest.Converters var expected = new[] { - "", "", " ", " ", @@ -41,7 +39,7 @@ namespace WixToolsetTest.Converters var converter = new Wix3Converter(messaging, 2, null, null); var errors = converter.ConvertDocument(document); - Assert.Equal(3, errors); + Assert.Equal(2, errors); var actualLines = UnformattedDocumentLines(document); CompareLineByLine(expected, actualLines); diff --git a/src/test/WixToolsetTest.Converters/TestData/PermissionEx/v3.wxs b/src/test/WixToolsetTest.Converters/TestData/PermissionEx/v3.wxs index 0e241544..9a739052 100644 --- a/src/test/WixToolsetTest.Converters/TestData/PermissionEx/v3.wxs +++ b/src/test/WixToolsetTest.Converters/TestData/PermissionEx/v3.wxs @@ -1,4 +1,3 @@ - diff --git a/src/test/WixToolsetTest.Converters/TestData/PermissionEx/v4_expected.wxs b/src/test/WixToolsetTest.Converters/TestData/PermissionEx/v4_expected.wxs index 375b70d3..6bf3c1ea 100644 --- a/src/test/WixToolsetTest.Converters/TestData/PermissionEx/v4_expected.wxs +++ b/src/test/WixToolsetTest.Converters/TestData/PermissionEx/v4_expected.wxs @@ -1,4 +1,3 @@ - diff --git a/src/test/WixToolsetTest.Converters/TestData/Preprocessor/ConvertedPreprocessor.wxs b/src/test/WixToolsetTest.Converters/TestData/Preprocessor/ConvertedPreprocessor.wxs index 72c78653..ea52c71f 100644 --- a/src/test/WixToolsetTest.Converters/TestData/Preprocessor/ConvertedPreprocessor.wxs +++ b/src/test/WixToolsetTest.Converters/TestData/Preprocessor/ConvertedPreprocessor.wxs @@ -1,4 +1,3 @@ - diff --git a/src/test/WixToolsetTest.Converters/TestData/QtExec.bad/v3.wxs b/src/test/WixToolsetTest.Converters/TestData/QtExec.bad/v3.wxs index b0630f65..b0fcf9c9 100644 --- a/src/test/WixToolsetTest.Converters/TestData/QtExec.bad/v3.wxs +++ b/src/test/WixToolsetTest.Converters/TestData/QtExec.bad/v3.wxs @@ -1,4 +1,3 @@ - diff --git a/src/test/WixToolsetTest.Converters/TestData/QtExec.bad/v4_expected.wxs b/src/test/WixToolsetTest.Converters/TestData/QtExec.bad/v4_expected.wxs index 20a5b1d0..02a06cff 100644 --- a/src/test/WixToolsetTest.Converters/TestData/QtExec.bad/v4_expected.wxs +++ b/src/test/WixToolsetTest.Converters/TestData/QtExec.bad/v4_expected.wxs @@ -1,4 +1,3 @@ - diff --git a/src/test/WixToolsetTest.Converters/TestData/QtExec/v4_expected.wxs b/src/test/WixToolsetTest.Converters/TestData/QtExec/v4_expected.wxs index cb42ea7d..00ce8461 100644 --- a/src/test/WixToolsetTest.Converters/TestData/QtExec/v4_expected.wxs +++ b/src/test/WixToolsetTest.Converters/TestData/QtExec/v4_expected.wxs @@ -1,4 +1,3 @@ - diff --git a/src/test/WixToolsetTest.Converters/TestData/SingleFile/ConvertedSingleFile.wxs b/src/test/WixToolsetTest.Converters/TestData/SingleFile/ConvertedSingleFile.wxs index 0c4fd1fb..ec4d84d5 100644 --- a/src/test/WixToolsetTest.Converters/TestData/SingleFile/ConvertedSingleFile.wxs +++ b/src/test/WixToolsetTest.Converters/TestData/SingleFile/ConvertedSingleFile.wxs @@ -1,4 +1,3 @@ - -- cgit v1.2.3-55-g6feb