diff options
Diffstat (limited to 'src/WixToolset.Data/IntermediateFieldExtensions.cs')
| -rw-r--r-- | src/WixToolset.Data/IntermediateFieldExtensions.cs | 72 |
1 files changed, 58 insertions, 14 deletions
diff --git a/src/WixToolset.Data/IntermediateFieldExtensions.cs b/src/WixToolset.Data/IntermediateFieldExtensions.cs index c551b455..be225452 100644 --- a/src/WixToolset.Data/IntermediateFieldExtensions.cs +++ b/src/WixToolset.Data/IntermediateFieldExtensions.cs | |||
| @@ -11,6 +11,8 @@ namespace WixToolset.Data | |||
| 11 | 11 | ||
| 12 | public static IntermediateField Set(this IntermediateField field, object value) | 12 | public static IntermediateField Set(this IntermediateField field, object value) |
| 13 | { | 13 | { |
| 14 | var data = value; | ||
| 15 | |||
| 14 | if (field == null) | 16 | if (field == null) |
| 15 | { | 17 | { |
| 16 | throw new ArgumentNullException(nameof(field)); | 18 | throw new ArgumentNullException(nameof(field)); |
| @@ -21,30 +23,72 @@ namespace WixToolset.Data | |||
| 21 | } | 23 | } |
| 22 | else if (field.Type == IntermediateFieldType.Bool && !(value is bool)) | 24 | else if (field.Type == IntermediateFieldType.Bool && !(value is bool)) |
| 23 | { | 25 | { |
| 24 | throw new ArgumentException(nameof(value)); | 26 | if (value is int) |
| 27 | { | ||
| 28 | data = ((int)value) != 0; | ||
| 29 | } | ||
| 30 | else if (value is string str) | ||
| 31 | { | ||
| 32 | if (str.Equals("yes", StringComparison.OrdinalIgnoreCase) || str.Equals("true", StringComparison.OrdinalIgnoreCase)) | ||
| 33 | { | ||
| 34 | data = true; | ||
| 35 | } | ||
| 36 | else if (str.Equals("no", StringComparison.OrdinalIgnoreCase) || str.Equals("false", StringComparison.OrdinalIgnoreCase)) | ||
| 37 | { | ||
| 38 | data = false; | ||
| 39 | } | ||
| 40 | else | ||
| 41 | { | ||
| 42 | throw new ArgumentException(nameof(value)); | ||
| 43 | } | ||
| 44 | } | ||
| 45 | else | ||
| 46 | { | ||
| 47 | throw new ArgumentException(nameof(value)); | ||
| 48 | } | ||
| 25 | } | 49 | } |
| 26 | else if (field.Type == IntermediateFieldType.Number && !(value is int)) | 50 | else if (field.Type == IntermediateFieldType.Number && !(value is int)) |
| 27 | { | 51 | { |
| 28 | throw new ArgumentException(nameof(value)); | 52 | if (value is string str && Int32.TryParse(str, out var number)) |
| 53 | { | ||
| 54 | data = number; | ||
| 55 | } | ||
| 56 | else | ||
| 57 | { | ||
| 58 | throw new ArgumentException(nameof(value)); | ||
| 59 | } | ||
| 29 | } | 60 | } |
| 30 | else if (field.Type == IntermediateFieldType.String && !(value is string)) | 61 | else if (field.Type == IntermediateFieldType.String && !(value is string)) |
| 31 | { | 62 | { |
| 32 | throw new ArgumentException(nameof(value)); | 63 | if (value is int) |
| 33 | } | 64 | { |
| 34 | else if (field.Type == IntermediateFieldType.Path && !(value is IntermediateFieldPathValue || value is string)) | 65 | data = value.ToString(); |
| 35 | { | 66 | } |
| 36 | throw new ArgumentException(nameof(value)); | 67 | else if (value is bool b) |
| 37 | } | 68 | { |
| 38 | 69 | data = b ? "true" : "false"; | |
| 39 | if (field.Type == IntermediateFieldType.Path && value != null && value is string) | 70 | } |
| 40 | { | 71 | else |
| 41 | value = new IntermediateFieldPathValue { Path = (string)value }; | 72 | { |
| 73 | throw new ArgumentException(nameof(value)); | ||
| 74 | } | ||
| 75 | } | ||
| 76 | else if (field.Type == IntermediateFieldType.Path && !(value is IntermediateFieldPathValue)) | ||
| 77 | { | ||
| 78 | if (value is string str) | ||
| 79 | { | ||
| 80 | data = new IntermediateFieldPathValue { Path = str }; | ||
| 81 | } | ||
| 82 | else | ||
| 83 | { | ||
| 84 | throw new ArgumentException(nameof(value)); | ||
| 85 | } | ||
| 42 | } | 86 | } |
| 43 | 87 | ||
| 44 | field.Value = new IntermediateFieldValue | 88 | field.Value = new IntermediateFieldValue |
| 45 | { | 89 | { |
| 46 | Context = valueContext, | 90 | Context = valueContext, |
| 47 | Data = value, | 91 | Data = data, |
| 48 | PreviousValue = field.Value | 92 | PreviousValue = field.Value |
| 49 | }; | 93 | }; |
| 50 | 94 | ||
| @@ -103,7 +147,7 @@ namespace WixToolset.Data | |||
| 103 | return field.Value.AsNumber() != 0; | 147 | return field.Value.AsNumber() != 0; |
| 104 | 148 | ||
| 105 | case IntermediateFieldType.String: | 149 | case IntermediateFieldType.String: |
| 106 | return !System.String.IsNullOrEmpty(field.Value.AsString()); | 150 | return !String.IsNullOrEmpty(field.Value.AsString()); |
| 107 | 151 | ||
| 108 | default: | 152 | default: |
| 109 | throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to boolean"); | 153 | throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to boolean"); |
