From 7a7f88c3009ad824852322682cc8cfd3173c2e02 Mon Sep 17 00:00:00 2001 From: Bob Arnson <bob@firegiant.com> Date: Wed, 30 Sep 2020 18:56:06 -0400 Subject: Add error message for cases where inner text used to be used. --- src/WixToolset.Core/Compiler.cs | 6 +++++- src/WixToolset.Core/CompilerCore.cs | 9 +++++++++ src/WixToolset.Core/Compiler_2.cs | 18 ++++++++++++++++++ src/WixToolset.Core/Compiler_EmbeddedUI.cs | 2 ++ src/WixToolset.Core/Compiler_UI.cs | 8 ++++++++ .../DialogsInInstallUISequence/PackageComponents.wxs | 14 +++++--------- 6 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/WixToolset.Core/Compiler.cs b/src/WixToolset.Core/Compiler.cs index 286a598b..d9c60ef6 100644 --- a/src/WixToolset.Core/Compiler.cs +++ b/src/WixToolset.Core/Compiler.cs @@ -3382,6 +3382,8 @@ namespace WixToolset.Core win64 = true; } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + // if we have an in-lined Script CustomAction ensure no source or target attributes were provided if (inlineScript) { @@ -5349,6 +5351,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (CompilerConstants.IntegerNotSet == id) { this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); @@ -7598,7 +7602,7 @@ namespace WixToolset.Core } /// <summary> - /// Parses a condition element. + /// Parses a Level element. /// </summary> /// <param name="node">Element to parse.</param> /// <param name="featureId">Id of the parent Feature element.</param> diff --git a/src/WixToolset.Core/CompilerCore.cs b/src/WixToolset.Core/CompilerCore.cs index 8e4f3d89..721eae6b 100644 --- a/src/WixToolset.Core/CompilerCore.cs +++ b/src/WixToolset.Core/CompilerCore.cs @@ -1086,6 +1086,15 @@ namespace WixToolset.Core return this.parseHelper.ScheduleActionSymbol(this.ActiveSection, sourceLineNumbers, access, sequence, actionName, condition, beforeAction, afterAction, overridable); } + internal void VerifyNoInnerText(SourceLineNumber sourceLineNumbers, XElement element) + { + var innerText = Common.GetInnerText(element); + if (!String.IsNullOrWhiteSpace(innerText)) + { + this.messaging.Write(ErrorMessages.IllegalInnerText(sourceLineNumbers, element.Name.LocalName, innerText)); + } + } + private static string CreateValueList(ValueListKind kind, IEnumerable<string> values) { // Ideally, we could denote the list kind (and the list itself) directly in the diff --git a/src/WixToolset.Core/Compiler_2.cs b/src/WixToolset.Core/Compiler_2.cs index 204a3788..fbad873e 100644 --- a/src/WixToolset.Core/Compiler_2.cs +++ b/src/WixToolset.Core/Compiler_2.cs @@ -1211,6 +1211,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (null == sddl) { this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Sddl")); @@ -1499,6 +1501,8 @@ namespace WixToolset.Core this.Core.Write(ErrorMessages.CannotAuthorSpecialProperties(sourceLineNumbers, id.Id)); } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if ("ErrorDialog" == id.Id) { this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Dialog, value); @@ -2043,6 +2047,8 @@ namespace WixToolset.Core this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + this.Core.ParseForExtensionElements(node); return (null == value) ? multiStringValue : String.Concat(value, "[~]", multiStringValue); @@ -2608,6 +2614,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(childSourceLineNumbers, node); + if (customAction && "Custom" == actionName) { this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Action")); @@ -3071,6 +3079,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (privilege == null) { this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name")); @@ -3432,6 +3442,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (argument == null) { this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); @@ -3769,6 +3781,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (null == id) { this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); @@ -3876,6 +3890,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (null == id) { this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); @@ -4353,6 +4369,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (String.IsNullOrEmpty(key)) { this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key")); diff --git a/src/WixToolset.Core/Compiler_EmbeddedUI.cs b/src/WixToolset.Core/Compiler_EmbeddedUI.cs index 4353e3cd..d71bb09a 100644 --- a/src/WixToolset.Core/Compiler_EmbeddedUI.cs +++ b/src/WixToolset.Core/Compiler_EmbeddedUI.cs @@ -80,6 +80,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (null == id) { id = this.Core.CreateIdentifier("mec", source, type.ToString()); diff --git a/src/WixToolset.Core/Compiler_UI.cs b/src/WixToolset.Core/Compiler_UI.cs index 9353d966..cb1d34ac 100644 --- a/src/WixToolset.Core/Compiler_UI.cs +++ b/src/WixToolset.Core/Compiler_UI.cs @@ -700,6 +700,8 @@ namespace WixToolset.Core this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action")); } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + this.Core.ParseForExtensionElements(node); if (!this.Core.EncounteredError) @@ -746,6 +748,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (null == id) { id = this.Core.CreateIdentifier("txt", text); @@ -1422,6 +1426,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (!String.IsNullOrEmpty(text) && null != sourceFile) { this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(childSourceLineNumbers, child.Name.LocalName, "SourceFile", "Value")); @@ -1689,6 +1695,8 @@ namespace WixToolset.Core } } + this.Core.VerifyNoInnerText(sourceLineNumbers, node); + if (null == control) { this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Control")); diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs index 10c8b2c3..ec6e62df 100644 --- a/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs @@ -1,21 +1,17 @@ -<?xml version="1.0" encoding="utf-8"?> -<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> +<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> <Fragment> <UI Id="CustomDialog"> <Dialog Id="FirstDialog" Width="100" Height="100"> <Control Id="Title" Type="Text" X="0" Y="0" Width="90" Height="13" TabSkip="no" Text="FirstDialogTitle" /> - <Control Id="Header" Type="Text" X="0" Y="13" Width="90" Height="13" TabSkip="no" Text="FirstDialogHeader" - HideCondition="Installed" DisableCondition="Installed" /> + <Control Id="Header" Type="Text" X="0" Y="13" Width="90" Height="13" TabSkip="no" Text="FirstDialogHeader" HideCondition="Installed" DisableCondition="Installed" /> </Dialog> <Dialog Id="SecondDialog" Width="100" Height="100"> <Control Id="Title" Type="Text" X="0" Y="0" Width="90" Height="13" TabSkip="no" Text="SecondDialogTitle" /> - <Control Id="OptionalCheckBox" Type="CheckBox" X="0" Y="13" Width="100" Height="40" Hidden="yes" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]" - ToolTip="Optional checkbox" Help="Check this box for fun" - ShowCondition="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed" /> + <Control Id="OptionalCheckBox" Type="CheckBox" X="0" Y="13" Width="100" Height="40" Hidden="yes" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]" ToolTip="Optional checkbox" Help="Check this box for fun" ShowCondition="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed" /> </Dialog> <InstallUISequence> - <Show Dialog="SecondDialog" Before="FirstDialog" Overridable="yes">NOT Installed</Show> + <Show Dialog="SecondDialog" Before="FirstDialog" Overridable="yes" Condition="NOT Installed" /> </InstallUISequence> </UI> </Fragment> @@ -24,7 +20,7 @@ <DialogRef Id="FirstDialog" /> <DialogRef Id="SecondDialog" /> - <Publish Dialog="FirstDialog" Control="Next" Event="NewDialog" Value="SecondDialog">Installed AND PATCH</Publish> + <Publish Dialog="FirstDialog" Control="Next" Event="NewDialog" Value="SecondDialog" Condition="Installed AND PATCH" /> <InstallUISequence> <Show Dialog="FirstDialog" Before="SecondDialog" Condition="Installed AND PATCH" /> -- cgit v1.2.3-55-g6feb