From a6091afa5bd24fe65e7fc20f179ed888301afdf8 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sat, 18 Apr 2020 14:43:31 +1000 Subject: Test ability for an extension to have a custom strongly typed row during binding. --- src/test/Example.Extension/ExampleExtensionData.cs | 16 +-------- src/test/Example.Extension/ExampleRow.cs | 32 +++++++++++++++++ .../Example.Extension/ExampleTableDefinitions.cs | 1 + .../Example.Extension/ExampleTupleDefinitions.cs | 42 +++++++++++++++++++--- .../ExampleWindowsInstallerBackendExtension.cs | 23 ++++++------ 5 files changed, 83 insertions(+), 31 deletions(-) create mode 100644 src/test/Example.Extension/ExampleRow.cs (limited to 'src/test') diff --git a/src/test/Example.Extension/ExampleExtensionData.cs b/src/test/Example.Extension/ExampleExtensionData.cs index b38eb2a2..2ba94397 100644 --- a/src/test/Example.Extension/ExampleExtensionData.cs +++ b/src/test/Example.Extension/ExampleExtensionData.cs @@ -16,21 +16,7 @@ namespace Example.Extension public bool TryGetTupleDefinitionByName(string name, out IntermediateTupleDefinition tupleDefinition) { - switch (name) - { - case "Example": - tupleDefinition = ExampleTupleDefinitions.Example; - break; - - case "ExampleSearch": - tupleDefinition = ExampleTupleDefinitions.ExampleSearch; - break; - - default: - tupleDefinition = null; - break; - } - + tupleDefinition = ExampleTupleDefinitions.ByName(name); return tupleDefinition != null; } } diff --git a/src/test/Example.Extension/ExampleRow.cs b/src/test/Example.Extension/ExampleRow.cs new file mode 100644 index 00000000..fc20c6c9 --- /dev/null +++ b/src/test/Example.Extension/ExampleRow.cs @@ -0,0 +1,32 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace Example.Extension +{ + using WixToolset.Data; + using WixToolset.Data.WindowsInstaller; + + public class ExampleRow : Row + { + public ExampleRow(SourceLineNumber sourceLineNumbers, Table table) + : base(sourceLineNumbers, table) + { + } + + public ExampleRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition) + : base(sourceLineNumbers, tableDefinition) + { + } + + public string Example + { + get { return (string)this.Fields[0].Data; } + set { this.Fields[0].Data = value; } + } + + public string Value + { + get { return (string)this.Fields[1].Data; } + set { this.Fields[1].Data = value; } + } + } +} diff --git a/src/test/Example.Extension/ExampleTableDefinitions.cs b/src/test/Example.Extension/ExampleTableDefinitions.cs index f204e5b6..4901cc09 100644 --- a/src/test/Example.Extension/ExampleTableDefinitions.cs +++ b/src/test/Example.Extension/ExampleTableDefinitions.cs @@ -14,6 +14,7 @@ namespace Example.Extension new ColumnDefinition("Example", ColumnType.String, 72, true, false, ColumnCategory.Identifier), new ColumnDefinition("Value", ColumnType.String, 0, false, false, ColumnCategory.Formatted), }, + strongRowType: typeof(ExampleRow), tupleIdIsPrimaryKey: true ); diff --git a/src/test/Example.Extension/ExampleTupleDefinitions.cs b/src/test/Example.Extension/ExampleTupleDefinitions.cs index dd8b5bbf..446c2c45 100644 --- a/src/test/Example.Extension/ExampleTupleDefinitions.cs +++ b/src/test/Example.Extension/ExampleTupleDefinitions.cs @@ -2,15 +2,20 @@ namespace Example.Extension { + using System; using WixToolset.Data; using WixToolset.Data.Burn; - public static class ExampleTupleDefinitions + public enum ExampleTupleDefinitionType { - public const string ExampleName = "Example"; + Example, + ExampleSearch, + } + public static class ExampleTupleDefinitions + { public static readonly IntermediateTupleDefinition Example = new IntermediateTupleDefinition( - ExampleName, + ExampleTupleDefinitionType.Example.ToString(), new[] { new IntermediateFieldDefinition(nameof(ExampleTupleFields.Value), IntermediateFieldType.String), @@ -18,7 +23,7 @@ namespace Example.Extension typeof(ExampleTuple)); public static readonly IntermediateTupleDefinition ExampleSearch = new IntermediateTupleDefinition( - nameof(ExampleSearch), + ExampleTupleDefinitionType.ExampleSearch.ToString(), new[] { new IntermediateFieldDefinition(nameof(ExampleSearchTupleFields.SearchFor), IntermediateFieldType.String), @@ -29,5 +34,34 @@ namespace Example.Extension { ExampleSearch.AddTag(BurnConstants.BundleExtensionSearchTupleDefinitionTag); } + + public static bool TryGetTupleType(string name, out ExampleTupleDefinitionType type) + { + return Enum.TryParse(name, out type); + } + + public static IntermediateTupleDefinition ByName(string name) + { + if (!TryGetTupleType(name, out var type)) + { + return null; + } + return ByType(type); + } + + public static IntermediateTupleDefinition ByType(ExampleTupleDefinitionType type) + { + switch (type) + { + case ExampleTupleDefinitionType.Example: + return ExampleTupleDefinitions.Example; + + case ExampleTupleDefinitionType.ExampleSearch: + return ExampleTupleDefinitions.ExampleSearch; + + default: + throw new ArgumentOutOfRangeException(nameof(type)); + } + } } } diff --git a/src/test/Example.Extension/ExampleWindowsInstallerBackendExtension.cs b/src/test/Example.Extension/ExampleWindowsInstallerBackendExtension.cs index 4ee682d3..2818cde4 100644 --- a/src/test/Example.Extension/ExampleWindowsInstallerBackendExtension.cs +++ b/src/test/Example.Extension/ExampleWindowsInstallerBackendExtension.cs @@ -13,22 +13,21 @@ namespace Example.Extension public override bool TryAddTupleToOutput(IntermediateSection section, IntermediateTuple tuple, WindowsInstallerData output, TableDefinitionCollection tableDefinitions) { -#if ALTERNATIVE_TO_USING_HELPER - switch (tuple.Definition.Name) + if (ExampleTupleDefinitions.TryGetTupleType(tuple.Definition.Name, out var tupleType)) { - case ExampleTupleDefinitions.ExampleName: - { - var row = this.BackendHelper.CreateRow(section, tuple, output, ExampleTableDefinitions.ExampleTable); - row[0] = tuple[0].AsString(); - row[1] = tuple[1].AsString(); - } - return true; + switch (tupleType) + { + case ExampleTupleDefinitionType.Example: + { + var row = (ExampleRow)this.BackendHelper.CreateRow(section, tuple, output, ExampleTableDefinitions.ExampleTable); + row.Example = tuple.Id.Id; + row.Value = tuple[0].AsString(); + } + return true; + } } - return false; -#else return this.BackendHelper.TryAddTupleToOutputMatchingTableDefinitions(section, tuple, output, tableDefinitions); -#endif } } } -- cgit v1.2.3-55-g6feb