From c5df86a7caaa1cbff9adde6396925383ba9a2e4e Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Wed, 18 Mar 2020 21:45:53 -0400 Subject: Allow unresolved variables during resolution. --- src/WixToolset.Core/Bind/ResolveFieldsCommand.cs | 4 +++- src/WixToolset.Core/ResolveContext.cs | 2 ++ src/WixToolset.Core/Resolver.cs | 1 + src/WixToolset.Core/VariableResolver.cs | 9 +-------- .../WixToolsetTest.CoreIntegration/VariableResolverFixture.cs | 7 ++++++- 5 files changed, 13 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs b/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs index 5db878a1..3e680a98 100644 --- a/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs +++ b/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs @@ -32,6 +32,8 @@ namespace WixToolset.Core.Bind public bool SupportDelayedResolution { private get; set; } + public bool AllowUnresolvedVariables { private get; set; } + public IEnumerable DelayedFields { get; private set; } public void Execute() @@ -62,7 +64,7 @@ namespace WixToolset.Core.Bind var original = field.AsString(); if (!String.IsNullOrEmpty(original)) { - var resolution = this.VariableResolver.ResolveVariables(tuple.SourceLineNumbers, original); + var resolution = this.VariableResolver.ResolveVariables(tuple.SourceLineNumbers, original, !this.AllowUnresolvedVariables); if (resolution.UpdatedValue) { field.Set(resolution.Value); diff --git a/src/WixToolset.Core/ResolveContext.cs b/src/WixToolset.Core/ResolveContext.cs index 1801f820..1694d6e5 100644 --- a/src/WixToolset.Core/ResolveContext.cs +++ b/src/WixToolset.Core/ResolveContext.cs @@ -33,5 +33,7 @@ namespace WixToolset.Core public IEnumerable Localizations { get; set; } public IVariableResolver VariableResolver { get; set; } + + public bool AllowUnresolvedVariables { get; set; } } } diff --git a/src/WixToolset.Core/Resolver.cs b/src/WixToolset.Core/Resolver.cs index 54bde848..6913ce98 100644 --- a/src/WixToolset.Core/Resolver.cs +++ b/src/WixToolset.Core/Resolver.cs @@ -87,6 +87,7 @@ namespace WixToolset.Core command.IntermediateFolder = context.IntermediateFolder; command.Intermediate = context.IntermediateRepresentation; command.SupportDelayedResolution = true; + command.AllowUnresolvedVariables = context.AllowUnresolvedVariables; command.Execute(); delayedFields = command.DelayedFields; diff --git a/src/WixToolset.Core/VariableResolver.cs b/src/WixToolset.Core/VariableResolver.cs index b1a5defc..8cddfaa5 100644 --- a/src/WixToolset.Core/VariableResolver.cs +++ b/src/WixToolset.Core/VariableResolver.cs @@ -77,14 +77,7 @@ namespace WixToolset.Core return this.localizedControls.TryGetValue(key, out localizedControl); } - /// - /// Resolve the wix variables in a value. - /// - /// The source line information for the value. - /// The value to resolve. - /// true if unknown variables should throw errors. - /// The resolved value. - internal IVariableResolution ResolveVariables(SourceLineNumber sourceLineNumbers, string value, bool errorOnUnknown) + public IVariableResolution ResolveVariables(SourceLineNumber sourceLineNumbers, string value, bool errorOnUnknown) { var matches = Common.WixVariableRegex.Matches(value); diff --git a/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs b/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs index abf1bd43..3443896b 100644 --- a/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs @@ -50,7 +50,12 @@ namespace WixToolsetTest.CoreIntegration Assert.False(result.UpdatedValue); Assert.True(result.DelayedResolve); - Assert.Throws(() => variableResolver.ResolveVariables(null, "Welcome to !(loc.UnknownLocalizationVariable)")); + var withUnknownLocString = "Welcome to !(loc.UnknownLocalizationVariable)"; + Assert.Throws(() => variableResolver.ResolveVariables(null, withUnknownLocString)); + + result = variableResolver.ResolveVariables(null, withUnknownLocString, errorOnUnknown: false); + Assert.Equal(withUnknownLocString, result.Value); + Assert.False(result.UpdatedValue); result = variableResolver.ResolveVariables(null, "Welcome to !!(loc.UnknownLocalizationVariable)"); Assert.Equal("Welcome to !(loc.UnknownLocalizationVariable)", result.Value); -- cgit v1.2.3-55-g6feb