From 807a2969cd212850cdb89a7fd1894bd8cc99c8a1 Mon Sep 17 00:00:00 2001 From: Adam Smith-Platts Date: Wed, 13 Dec 2023 17:35:38 +1100 Subject: [PATCH 1/4] Updated .editorconfig to correctly redefine the severity of new Roslyn analysers that cause the build to fail --- .editorconfig | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/.editorconfig b/.editorconfig index 5bd59069..e63069d8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -84,6 +84,10 @@ spelling_checkable_types = # NEW # Default Severity for all .NET Code Style rules below dotnet_analyzer_diagnostic.severity = warning +# VSSpell001: Spell Check +dotnet_diagnostic.VSSpell001.severity = suggestion +dotnet_diagnostic.VSSpell002.severity = suggestion + ########################################## # Language Rules - .NET # https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/language-rules @@ -162,6 +166,7 @@ dotnet_diagnostic.IDE0063.severity = suggestion csharp_style_namespace_declarations = file_scoped csharp_style_prefer_method_group_conversion = true # NEW csharp_style_prefer_top_level_statements = true # NEW +dotnet_diagnostic.IDE0290.severity = suggestion # NEW - Use primary constructor # Expression-bodied members csharp_style_expression_bodied_constructors = true @@ -189,6 +194,11 @@ csharp_style_implicit_object_creation_when_type_is_apparent = true csharp_style_prefer_null_check_over_type_check = true csharp_style_prefer_tuple_swap = true # NEW csharp_style_prefer_utf8_string_literals = true # NEW +dotnet_diagnostic.IDE0028.severity = suggestion # NEW - Use collection initializers +dotnet_diagnostic.IDE0090.severity = suggestion # NEW - Simplify new expression +dotnet_diagnostic.IDE0300.severity = suggestion # NEW - Collection initialization can be simplified +dotnet_diagnostic.IDE0301.severity = suggestion # NEW - Collection initialization can be simplified +dotnet_diagnostic.IDE0305.severity = suggestion # NEW - Collection initialization can be simplified # Modifier preferences csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async @@ -294,6 +304,27 @@ csharp_space_between_square_brackets = false csharp_preserve_single_line_statements = false csharp_preserve_single_line_blocks = true +########################################## +# Code Quality Rules - C# +# https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ +########################################## + +[*.{cs,csx,cake}] + +# Usage rules +# https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/usage-warnings +dotnet_diagnostic.CA2249.severity = suggestion # NEW - Consider using String.Contains instead of String.IndexOf + +# Performance rules +# https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/performance-warnings +dotnet_diagnostic.CA1854.severity = suggestion # NEW - Prefer the IDictionary.TryGetValue(TKey, out TValue) method +dotnet_diagnostic.CA1859.severity = suggestion # NEW - Use concrete types when possible for improved performance +dotnet_diagnostic.CA1861.severity = suggestion # NEW - Avoid constant arrays as arguments +dotnet_diagnostic.CA1865.severity = suggestion # NEW - Use 'string.Method(char)' instead of 'string.Method(string)' for string with single char +dotnet_diagnostic.CA1866.severity = suggestion # NEW - Use 'string.Method(char)' instead of 'string.Method(string)' for string with single char +dotnet_diagnostic.CA1867.severity = suggestion # NEW - Use 'string.Method(char)' instead of 'string.Method(string)' for string with single char +dotnet_diagnostic.CA1869.severity = suggestion # NEW - Cache and reuse 'JsonSerializerOptions' instances + ########################################## # .NET Naming Rules # https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/naming-rules From 2d4f207ee15d9ad0eb3c139373603cf38db01e0f Mon Sep 17 00:00:00 2001 From: Adam Smith-Platts Date: Wed, 13 Dec 2023 17:34:10 +1100 Subject: [PATCH 2/4] Updated Schema.NET.Test to properly handle testing that a OneOrMany collection is empty, where T is a string - Added `AssertEx` class that exposes a `Empty()` method that takes a `OneOrMany`. - Updated all `Assert.Empty(OneOrMany!)` instances to use `AssertEx.Empty(OneOrMany)`. Tests now pass! --- Tests/Schema.NET.Test/AssertEx.cs | 18 +++++++++++++ Tests/Schema.NET.Test/OneOrManyTest.cs | 2 +- Tests/Schema.NET.Test/Values2Test.cs | 6 ++--- Tests/Schema.NET.Test/Values3Test.cs | 12 ++++----- Tests/Schema.NET.Test/Values4Test.cs | 18 ++++++------- Tests/Schema.NET.Test/Values5Test.cs | 24 ++++++++--------- Tests/Schema.NET.Test/Values6Test.cs | 30 ++++++++++----------- Tests/Schema.NET.Test/Values7Test.cs | 36 +++++++++++++------------- 8 files changed, 82 insertions(+), 64 deletions(-) create mode 100644 Tests/Schema.NET.Test/AssertEx.cs diff --git a/Tests/Schema.NET.Test/AssertEx.cs b/Tests/Schema.NET.Test/AssertEx.cs new file mode 100644 index 00000000..fdf76e6d --- /dev/null +++ b/Tests/Schema.NET.Test/AssertEx.cs @@ -0,0 +1,18 @@ +namespace Schema.NET.Test; + +using System.Collections; +using Xunit; + +/// +/// Provides extended methods and helpers to the Xunit.Assert class. +/// +[System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1711:Identifiers should not have incorrect suffix", Justification = "Name needs to be short to ensure readability of consuming code.")] +public static class AssertEx +{ + /// + /// Verifies that a collection is empty. + /// + /// The type of the values. + /// + public static void Empty(OneOrMany collection) => Assert.Empty(collection); +} diff --git a/Tests/Schema.NET.Test/OneOrManyTest.cs b/Tests/Schema.NET.Test/OneOrManyTest.cs index d5fdce54..220a7b4a 100644 --- a/Tests/Schema.NET.Test/OneOrManyTest.cs +++ b/Tests/Schema.NET.Test/OneOrManyTest.cs @@ -60,7 +60,7 @@ public void Constructor_NullList_ThrowsArgumentNullException() => public void Count_DefaultStructConstructor_ReturnsZero() => Assert.Empty(default(OneOrMany)); [Fact] - public void Count_DefaultClassConstructor_ReturnsZero() => Assert.Empty(default(OneOrMany)!); + public void Count_DefaultClassConstructor_ReturnsZero() => AssertEx.Empty(default(OneOrMany)); [Fact] public void Count_NullItem_ReturnsZero() => Assert.Empty(new OneOrMany((int?)null)); diff --git a/Tests/Schema.NET.Test/Values2Test.cs b/Tests/Schema.NET.Test/Values2Test.cs index b6b8ecf5..2e9d74c5 100644 --- a/Tests/Schema.NET.Test/Values2Test.cs +++ b/Tests/Schema.NET.Test/Values2Test.cs @@ -15,7 +15,7 @@ public void Constructor_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.Equal(new List() { 1 }, values.Cast().ToList()); } @@ -88,7 +88,7 @@ public void ImplicitConversionOperator_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.Equal(new List() { 1 }, values.Cast().ToList()); } @@ -112,7 +112,7 @@ public void ImplicitConversionOperator_Value1ListPassed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Equal(2, values.Value1.Count); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.Equal(new List() { 1, 2 }, values.Cast().ToList()); } diff --git a/Tests/Schema.NET.Test/Values3Test.cs b/Tests/Schema.NET.Test/Values3Test.cs index 6febde43..9c6dd7a7 100644 --- a/Tests/Schema.NET.Test/Values3Test.cs +++ b/Tests/Schema.NET.Test/Values3Test.cs @@ -15,7 +15,7 @@ public void Constructor_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.Equal(new List() { 1 }, values.Cast().ToList()); } @@ -39,7 +39,7 @@ public void Constructor_Value3Passed_OnlyValue3HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Single(values.Value3); Assert.Equal(new List() { DayOfWeek.Friday }, values.Cast().ToList()); @@ -119,7 +119,7 @@ public void ImplicitConversionOperator_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.Equal(new List() { 1 }, values.Cast().ToList()); } @@ -143,7 +143,7 @@ public void ImplicitConversionOperator_Value3Passed_OnlyValue3HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Single(values.Value3); Assert.Equal(new List() { DayOfWeek.Friday }, values.Cast().ToList()); @@ -157,7 +157,7 @@ public void ImplicitConversionOperator_Value1CollectionPassed_OnlyValue1HasValue Assert.True(values.HasValue1); Assert.Equal(2, values.Value1.Count); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.Equal(new List() { 1, 2 }, values.Cast().ToList()); } @@ -181,7 +181,7 @@ public void ImplicitConversionOperator_Value3CollectionPassed_OnlyValue3HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Equal(2, values.Value3.Count); Assert.Equal(new List() { DayOfWeek.Friday, DayOfWeek.Monday }, values.Cast().ToList()); diff --git a/Tests/Schema.NET.Test/Values4Test.cs b/Tests/Schema.NET.Test/Values4Test.cs index 8d00af02..a6a19e9b 100644 --- a/Tests/Schema.NET.Test/Values4Test.cs +++ b/Tests/Schema.NET.Test/Values4Test.cs @@ -15,7 +15,7 @@ public void Constructor_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.Equal(new List() { 1 }, values.Cast().ToList()); } @@ -39,7 +39,7 @@ public void Constructor_Value3Passed_OnlyValue3HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Single(values.Value3); Assert.Equal(new List() { DayOfWeek.Friday }, values.Cast().ToList()); @@ -53,7 +53,7 @@ public void Constructor_Value4Passed_OnlyValue4HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -149,7 +149,7 @@ public void ImplicitConversionOperator_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.Equal(new List() { 1 }, values.Cast().ToList()); } @@ -173,7 +173,7 @@ public void ImplicitConversionOperator_Value3Passed_OnlyValue3HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Single(values.Value3); Assert.Equal(new List() { DayOfWeek.Friday }, values.Cast().ToList()); @@ -187,7 +187,7 @@ public void ImplicitConversionOperator_Value4Passed_OnlyValue4HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -204,7 +204,7 @@ public void ImplicitConversionOperator_Value1CollectionPassed_OnlyValue1HasValue Assert.True(values.HasValue1); Assert.Equal(2, values.Value1.Count); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.Equal(new List() { 1, 2 }, values.Cast().ToList()); } @@ -228,7 +228,7 @@ public void ImplicitConversionOperator_Value3CollectionPassed_OnlyValue3HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Equal(2, values.Value3.Count); Assert.Equal( @@ -244,7 +244,7 @@ public void ImplicitConversionOperator_Value4CollectionPassed_OnlyValue4HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); diff --git a/Tests/Schema.NET.Test/Values5Test.cs b/Tests/Schema.NET.Test/Values5Test.cs index a0c0777a..8b3bd8fc 100644 --- a/Tests/Schema.NET.Test/Values5Test.cs +++ b/Tests/Schema.NET.Test/Values5Test.cs @@ -15,7 +15,7 @@ public void Constructor_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -51,7 +51,7 @@ public void Constructor_Value3Passed_OnlyValue3HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Single(values.Value3); Assert.False(values.HasValue4); @@ -69,7 +69,7 @@ public void Constructor_Value4Passed_OnlyValue4HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -88,7 +88,7 @@ public void Constructor_Value5Passed_OnlyValue5HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -196,7 +196,7 @@ public void ImplicitConversionOperator_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -232,7 +232,7 @@ public void ImplicitConversionOperator_Value3Passed_OnlyValue3HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Single(values.Value3); Assert.False(values.HasValue4); @@ -250,7 +250,7 @@ public void ImplicitConversionOperator_Value4Passed_OnlyValue4HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -269,7 +269,7 @@ public void ImplicitConversionOperator_Value5Passed_OnlyValue5HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -288,7 +288,7 @@ public void ImplicitConversionOperator_Value1CollectionPassed_OnlyValue1HasValue Assert.True(values.HasValue1); Assert.Equal(2, values.Value1.Count); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -324,7 +324,7 @@ public void ImplicitConversionOperator_Value3CollectionPassed_OnlyValue3HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Equal(2, values.Value3.Count); Assert.False(values.HasValue4); @@ -344,7 +344,7 @@ public void ImplicitConversionOperator_Value4CollectionPassed_OnlyValue4HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -362,7 +362,7 @@ public void ImplicitConversionOperator_Value5CollectionPassed_OnlyValue5HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); diff --git a/Tests/Schema.NET.Test/Values6Test.cs b/Tests/Schema.NET.Test/Values6Test.cs index a4c0e229..ff73acd0 100644 --- a/Tests/Schema.NET.Test/Values6Test.cs +++ b/Tests/Schema.NET.Test/Values6Test.cs @@ -15,7 +15,7 @@ public void Constructor_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -55,7 +55,7 @@ public void Constructor_Value3Passed_OnlyValue3HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Single(values.Value3); Assert.False(values.HasValue4); @@ -75,7 +75,7 @@ public void Constructor_Value4Passed_OnlyValue4HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -96,7 +96,7 @@ public void Constructor_Value5Passed_OnlyValue5HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -117,7 +117,7 @@ public void Constructor_Value6Passed_OnlyValue6HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -237,7 +237,7 @@ public void ImplicitConversionOperator_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -277,7 +277,7 @@ public void ImplicitConversionOperator_Value3Passed_OnlyValue3HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Single(values.Value3); Assert.False(values.HasValue4); @@ -297,7 +297,7 @@ public void ImplicitConversionOperator_Value4Passed_OnlyValue4HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -318,7 +318,7 @@ public void ImplicitConversionOperator_Value5Passed_OnlyValue5HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -339,7 +339,7 @@ public void ImplicitConversionOperator_Value6Passed_OnlyValue6HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -360,7 +360,7 @@ public void ImplicitConversionOperator_Value1CollectionPassed_OnlyValue1HasValue Assert.True(values.HasValue1); Assert.Equal(2, values.Value1.Count); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -400,7 +400,7 @@ public void ImplicitConversionOperator_Value3CollectionPassed_OnlyValue3HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Equal(2, values.Value3.Count); Assert.False(values.HasValue4); @@ -422,7 +422,7 @@ public void ImplicitConversionOperator_Value4CollectionPassed_OnlyValue4HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -442,7 +442,7 @@ public void ImplicitConversionOperator_Value5CollectionPassed_OnlyValue5HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -462,7 +462,7 @@ public void ImplicitConversionOperator_Value6CollectionPassed_OnlyValue6HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); diff --git a/Tests/Schema.NET.Test/Values7Test.cs b/Tests/Schema.NET.Test/Values7Test.cs index 11e8f625..3cad7e7b 100644 --- a/Tests/Schema.NET.Test/Values7Test.cs +++ b/Tests/Schema.NET.Test/Values7Test.cs @@ -15,7 +15,7 @@ public void Constructor_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -59,7 +59,7 @@ public void Constructor_Value3Passed_OnlyValue3HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Single(values.Value3); Assert.False(values.HasValue4); @@ -81,7 +81,7 @@ public void Constructor_Value4Passed_OnlyValue4HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -104,7 +104,7 @@ public void Constructor_Value5Passed_OnlyValue5HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -127,7 +127,7 @@ public void Constructor_Value6Passed_OnlyValue6HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -150,7 +150,7 @@ public void Constructor_Value7Passed_OnlyValue7HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -282,7 +282,7 @@ public void ImplicitConversionOperator_Value1Passed_OnlyValue1HasValue() Assert.True(values.HasValue1); Assert.Single(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -326,7 +326,7 @@ public void ImplicitConversionOperator_Value3Passed_OnlyValue3HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Single(values.Value3); Assert.False(values.HasValue4); @@ -348,7 +348,7 @@ public void ImplicitConversionOperator_Value4Passed_OnlyValue4HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -371,7 +371,7 @@ public void ImplicitConversionOperator_Value5Passed_OnlyValue5HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -394,7 +394,7 @@ public void ImplicitConversionOperator_Value6Passed_OnlyValue6HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -417,7 +417,7 @@ public void ImplicitConversionOperator_Value7Passed_OnlyValue7HasValue() Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -440,7 +440,7 @@ public void ImplicitConversionOperator_Value1CollectionPassed_OnlyValue1HasValue Assert.True(values.HasValue1); Assert.Equal(2, values.Value1.Count); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -484,7 +484,7 @@ public void ImplicitConversionOperator_Value3CollectionPassed_OnlyValue3HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.True(values.HasValue3); Assert.Equal(2, values.Value3.Count); Assert.False(values.HasValue4); @@ -506,7 +506,7 @@ public void ImplicitConversionOperator_Value4CollectionPassed_OnlyValue4HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.True(values.HasValue4); @@ -528,7 +528,7 @@ public void ImplicitConversionOperator_Value5CollectionPassed_OnlyValue5HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -550,7 +550,7 @@ public void ImplicitConversionOperator_Value6CollectionPassed_OnlyValue6HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); @@ -572,7 +572,7 @@ public void ImplicitConversionOperator_Value7CollectionPassed_OnlyValue7HasValue Assert.False(values.HasValue1); Assert.Empty(values.Value1); Assert.False(values.HasValue2); - Assert.Empty(values.Value2!); + AssertEx.Empty(values.Value2); Assert.False(values.HasValue3); Assert.Empty(values.Value3); Assert.False(values.HasValue4); From 3a7c334779d7062a993ae8c89b8b19b7742b4c84 Mon Sep 17 00:00:00 2001 From: Adam Smith-Platts Date: Wed, 13 Dec 2023 12:38:13 +1100 Subject: [PATCH 3/4] [#675] Added test cases to handle passing null or whitespace to Values() constructors Presently failing, next commit addresses bug. --- Tests/Schema.NET.Test/Values2Test.cs | 17 +++++++++++++++++ Tests/Schema.NET.Test/Values3Test.cs | 19 +++++++++++++++++++ Tests/Schema.NET.Test/Values4Test.cs | 21 +++++++++++++++++++++ Tests/Schema.NET.Test/Values5Test.cs | 23 +++++++++++++++++++++++ Tests/Schema.NET.Test/Values6Test.cs | 25 +++++++++++++++++++++++++ Tests/Schema.NET.Test/Values7Test.cs | 27 +++++++++++++++++++++++++++ 6 files changed, 132 insertions(+) diff --git a/Tests/Schema.NET.Test/Values2Test.cs b/Tests/Schema.NET.Test/Values2Test.cs index 2e9d74c5..7a71cb49 100644 --- a/Tests/Schema.NET.Test/Values2Test.cs +++ b/Tests/Schema.NET.Test/Values2Test.cs @@ -43,6 +43,23 @@ public void Constructor_Items_HasAllItems() Assert.Equal(new List() { 1, "Foo" }, values.Cast().ToList()); } + [Fact] + public void Constructor_StringItems_NullOrWhitespaceDoesntHaveValue() + { + object[] nullOrWhitespaceValues = new[] + { + string.Empty, + null!, + "\u2028 \u2029 \u0009 \u000A \u000B \u000C \u000D \u0085", + }; + var values = new Values(nullOrWhitespaceValues); + + Assert.False(values.HasValue1); + Assert.Empty(values.Value1); + Assert.False(values.HasValue2, $"{nameof(values.HasValue2)}: Expected: False, Actual: True"); + AssertEx.Empty(values.Value2); + } + [Fact] public void Constructor_NullList_ThrowsArgumentNullException() => Assert.Throws(() => new Values((List)null!)); diff --git a/Tests/Schema.NET.Test/Values3Test.cs b/Tests/Schema.NET.Test/Values3Test.cs index 9c6dd7a7..f8001720 100644 --- a/Tests/Schema.NET.Test/Values3Test.cs +++ b/Tests/Schema.NET.Test/Values3Test.cs @@ -59,6 +59,25 @@ public void Constructor_Items_HasAllItems() Assert.Equal(new List() { 1, "Foo", DayOfWeek.Friday }, values.Cast().ToList()); } + [Fact] + public void Constructor_StringItems_NullOrWhitespaceDoesntHaveValue() + { + object[] nullOrWhitespaceValues = new[] + { + string.Empty, + null!, + "\u2028 \u2029 \u0009 \u000A \u000B \u000C \u000D \u0085", + }; + var values = new Values(nullOrWhitespaceValues); + + Assert.False(values.HasValue1); + Assert.Empty(values.Value1); + Assert.False(values.HasValue2, $"{nameof(values.HasValue2)}: Expected: False, Actual: True"); + AssertEx.Empty(values.Value2); + Assert.False(values.HasValue3); + Assert.Empty(values.Value3); + } + [Fact] public void Constructor_NullList_ThrowsArgumentNullException() => Assert.Throws(() => new Values((List)null!)); diff --git a/Tests/Schema.NET.Test/Values4Test.cs b/Tests/Schema.NET.Test/Values4Test.cs index a6a19e9b..0e52092f 100644 --- a/Tests/Schema.NET.Test/Values4Test.cs +++ b/Tests/Schema.NET.Test/Values4Test.cs @@ -81,6 +81,27 @@ public void Constructor_Items_HasAllItems() values.Cast().ToList()); } + [Fact] + public void Constructor_StringItems_NullOrWhitespaceDoesntHaveValue() + { + object[] nullOrWhitespaceValues = new[] + { + string.Empty, + null!, + "\u2028 \u2029 \u0009 \u000A \u000B \u000C \u000D \u0085", + }; + var values = new Values(nullOrWhitespaceValues); + + Assert.False(values.HasValue1); + Assert.Empty(values.Value1); + Assert.False(values.HasValue2, $"{nameof(values.HasValue2)}: Expected: False, Actual: True"); + AssertEx.Empty(values.Value2); + Assert.False(values.HasValue3); + Assert.Empty(values.Value3); + Assert.False(values.HasValue4); + Assert.Empty(values.Value4); + } + [Fact] public void Constructor_NullList_ThrowsArgumentNullException() => Assert.Throws(() => new Values((List)null!)); diff --git a/Tests/Schema.NET.Test/Values5Test.cs b/Tests/Schema.NET.Test/Values5Test.cs index 8b3bd8fc..f0cd95cc 100644 --- a/Tests/Schema.NET.Test/Values5Test.cs +++ b/Tests/Schema.NET.Test/Values5Test.cs @@ -120,6 +120,29 @@ public void Constructor_Items_HasAllItems() values.Cast().ToList()); } + [Fact] + public void Constructor_StringItems_NullOrWhitespaceDoesntHaveValue() + { + object[] nullOrWhitespaceValues = new[] + { + string.Empty, + null!, + "\u2028 \u2029 \u0009 \u000A \u000B \u000C \u000D \u0085", + }; + var values = new Values(nullOrWhitespaceValues); + + Assert.False(values.HasValue1); + Assert.Empty(values.Value1); + Assert.False(values.HasValue2, $"{nameof(values.HasValue2)}: Expected: False, Actual: True"); + AssertEx.Empty(values.Value2); + Assert.False(values.HasValue3); + Assert.Empty(values.Value3); + Assert.False(values.HasValue4); + Assert.Empty(values.Value4); + Assert.False(values.HasValue5); + Assert.Empty(values.Value5); + } + [Fact] public void Constructor_NullList_ThrowsArgumentNullException() => Assert.Throws(() => new Values((List)null!)); diff --git a/Tests/Schema.NET.Test/Values6Test.cs b/Tests/Schema.NET.Test/Values6Test.cs index ff73acd0..fb5f3118 100644 --- a/Tests/Schema.NET.Test/Values6Test.cs +++ b/Tests/Schema.NET.Test/Values6Test.cs @@ -153,6 +153,31 @@ public void Constructor_Items_HasAllItems() values.Cast().ToList()); } + [Fact] + public void Constructor_StringItems_NullOrWhitespaceDoesntHaveValue() + { + object[] nullOrWhitespaceValues = new[] + { + string.Empty, + null!, + "\u2028 \u2029 \u0009 \u000A \u000B \u000C \u000D \u0085", + }; + var values = new Values(nullOrWhitespaceValues); + + Assert.False(values.HasValue1); + Assert.Empty(values.Value1); + Assert.False(values.HasValue2, $"{nameof(values.HasValue2)}: Expected: False, Actual: True"); + AssertEx.Empty(values.Value2); + Assert.False(values.HasValue3); + Assert.Empty(values.Value3); + Assert.False(values.HasValue4); + Assert.Empty(values.Value4); + Assert.False(values.HasValue5); + Assert.Empty(values.Value5); + Assert.False(values.HasValue6); + Assert.Empty(values.Value6); + } + [Fact] public void Constructor_NullList_ThrowsArgumentNullException() => Assert.Throws(() => new Values((List)null!)); diff --git a/Tests/Schema.NET.Test/Values7Test.cs b/Tests/Schema.NET.Test/Values7Test.cs index 3cad7e7b..22b6bd27 100644 --- a/Tests/Schema.NET.Test/Values7Test.cs +++ b/Tests/Schema.NET.Test/Values7Test.cs @@ -190,6 +190,33 @@ public void Constructor_Items_HasAllItems() values.Cast().ToList()); } + [Fact] + public void Constructor_StringItems_NullOrWhitespaceDoesntHaveValue() + { + object[] nullOrWhitespaceValues = new[] + { + string.Empty, + null!, + "\u2028 \u2029 \u0009 \u000A \u000B \u000C \u000D \u0085", + }; + var values = new Values(nullOrWhitespaceValues); + + Assert.False(values.HasValue1); + Assert.Empty(values.Value1); + Assert.False(values.HasValue2, $"{nameof(values.HasValue2)}: Expected: False, Actual: True"); + AssertEx.Empty(values.Value2); + Assert.False(values.HasValue3); + Assert.Empty(values.Value3); + Assert.False(values.HasValue4); + Assert.Empty(values.Value4); + Assert.False(values.HasValue5); + Assert.Empty(values.Value5); + Assert.False(values.HasValue6); + Assert.Empty(values.Value6); + Assert.False(values.HasValue7); + Assert.Empty(values.Value7); + } + [Fact] public void Constructor_NullList_ThrowsArgumentNullException() => Assert.Throws(() => new Values((List)null!)); From 60dd7f6ef0b5238a14aa9427b167e43262b6d81d Mon Sep 17 00:00:00 2001 From: Adam Smith-Platts Date: Wed, 13 Dec 2023 17:47:44 +1100 Subject: [PATCH 4/4] [#675] Corrected order of execution when assigning values to ValueX, from object collection, and correctly storing the state of HasValueX --- Source/Common/Values{T1,T2,T3,T4,T5,T6,T7}.cs | 16 ++++++++-------- Source/Common/Values{T1,T2,T3,T4,T5,T6}.cs | 14 +++++++------- Source/Common/Values{T1,T2,T3,T4,T5}.cs | 12 ++++++------ Source/Common/Values{T1,T2,T3,T4}.cs | 10 +++++----- Source/Common/Values{T1,T2,T3}.cs | 8 ++++---- Source/Common/Values{T1,T2}.cs | 6 +++--- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/Source/Common/Values{T1,T2,T3,T4,T5,T6,T7}.cs b/Source/Common/Values{T1,T2,T3,T4,T5,T6,T7}.cs index e42986d1..8c8a9cf3 100644 --- a/Source/Common/Values{T1,T2,T3,T4,T5,T6,T7}.cs +++ b/Source/Common/Values{T1,T2,T3,T4,T5,T6,T7}.cs @@ -245,14 +245,6 @@ public Values(IEnumerable items) } } - this.HasValue1 = items1?.Count > 0; - this.HasValue2 = items2?.Count > 0; - this.HasValue3 = items3?.Count > 0; - this.HasValue4 = items4?.Count > 0; - this.HasValue5 = items5?.Count > 0; - this.HasValue6 = items6?.Count > 0; - this.HasValue7 = items7?.Count > 0; - this.Value1 = items1 == null ? default : (OneOrMany)items1; this.Value2 = items2 == null ? default : (OneOrMany)items2; this.Value3 = items3 == null ? default : (OneOrMany)items3; @@ -260,6 +252,14 @@ public Values(IEnumerable items) this.Value5 = items5 == null ? default : (OneOrMany)items5; this.Value6 = items6 == null ? default : (OneOrMany)items6; this.Value7 = items7 == null ? default : (OneOrMany)items7; + + this.HasValue1 = this.Value1.Count > 0; + this.HasValue2 = this.Value2.Count > 0; + this.HasValue3 = this.Value3.Count > 0; + this.HasValue4 = this.Value4.Count > 0; + this.HasValue5 = this.Value5.Count > 0; + this.HasValue6 = this.Value6.Count > 0; + this.HasValue7 = this.Value7.Count > 0; } /// diff --git a/Source/Common/Values{T1,T2,T3,T4,T5,T6}.cs b/Source/Common/Values{T1,T2,T3,T4,T5,T6}.cs index 655dd641..4675de95 100644 --- a/Source/Common/Values{T1,T2,T3,T4,T5,T6}.cs +++ b/Source/Common/Values{T1,T2,T3,T4,T5,T6}.cs @@ -204,19 +204,19 @@ public Values(IEnumerable items) } } - this.HasValue1 = items1?.Count > 0; - this.HasValue2 = items2?.Count > 0; - this.HasValue3 = items3?.Count > 0; - this.HasValue4 = items4?.Count > 0; - this.HasValue5 = items5?.Count > 0; - this.HasValue6 = items6?.Count > 0; - this.Value1 = items1 == null ? default : (OneOrMany)items1; this.Value2 = items2 == null ? default : (OneOrMany)items2; this.Value3 = items3 == null ? default : (OneOrMany)items3; this.Value4 = items4 == null ? default : (OneOrMany)items4; this.Value5 = items5 == null ? default : (OneOrMany)items5; this.Value6 = items6 == null ? default : (OneOrMany)items6; + + this.HasValue1 = this.Value1.Count > 0; + this.HasValue2 = this.Value2.Count > 0; + this.HasValue3 = this.Value3.Count > 0; + this.HasValue4 = this.Value4.Count > 0; + this.HasValue5 = this.Value5.Count > 0; + this.HasValue6 = this.Value6.Count > 0; } /// diff --git a/Source/Common/Values{T1,T2,T3,T4,T5}.cs b/Source/Common/Values{T1,T2,T3,T4,T5}.cs index b47db17f..c5e6cc17 100644 --- a/Source/Common/Values{T1,T2,T3,T4,T5}.cs +++ b/Source/Common/Values{T1,T2,T3,T4,T5}.cs @@ -167,17 +167,17 @@ public Values(IEnumerable items) } } - this.HasValue1 = items1?.Count > 0; - this.HasValue2 = items2?.Count > 0; - this.HasValue3 = items3?.Count > 0; - this.HasValue4 = items4?.Count > 0; - this.HasValue5 = items5?.Count > 0; - this.Value1 = items1 == null ? default : (OneOrMany)items1; this.Value2 = items2 == null ? default : (OneOrMany)items2; this.Value3 = items3 == null ? default : (OneOrMany)items3; this.Value4 = items4 == null ? default : (OneOrMany)items4; this.Value5 = items5 == null ? default : (OneOrMany)items5; + + this.HasValue1 = this.Value1.Count > 0; + this.HasValue2 = this.Value2.Count > 0; + this.HasValue3 = this.Value3.Count > 0; + this.HasValue4 = this.Value4.Count > 0; + this.HasValue5 = this.Value5.Count > 0; } /// diff --git a/Source/Common/Values{T1,T2,T3,T4}.cs b/Source/Common/Values{T1,T2,T3,T4}.cs index f8775f10..bfb78a07 100644 --- a/Source/Common/Values{T1,T2,T3,T4}.cs +++ b/Source/Common/Values{T1,T2,T3,T4}.cs @@ -134,15 +134,15 @@ public Values(IEnumerable items) } } - this.HasValue1 = items1?.Count > 0; - this.HasValue2 = items2?.Count > 0; - this.HasValue3 = items3?.Count > 0; - this.HasValue4 = items4?.Count > 0; - this.Value1 = items1 == null ? default : (OneOrMany)items1; this.Value2 = items2 == null ? default : (OneOrMany)items2; this.Value3 = items3 == null ? default : (OneOrMany)items3; this.Value4 = items4 == null ? default : (OneOrMany)items4; + + this.HasValue1 = this.Value1.Count > 0; + this.HasValue2 = this.Value2.Count > 0; + this.HasValue3 = this.Value3.Count > 0; + this.HasValue4 = this.Value4.Count > 0; } /// diff --git a/Source/Common/Values{T1,T2,T3}.cs b/Source/Common/Values{T1,T2,T3}.cs index a2990849..a90d3b9c 100644 --- a/Source/Common/Values{T1,T2,T3}.cs +++ b/Source/Common/Values{T1,T2,T3}.cs @@ -105,13 +105,13 @@ public Values(IEnumerable items) } } - this.HasValue1 = items1?.Count > 0; - this.HasValue2 = items2?.Count > 0; - this.HasValue3 = items3?.Count > 0; - this.Value1 = items1 == null ? default : (OneOrMany)items1; this.Value2 = items2 == null ? default : (OneOrMany)items2; this.Value3 = items3 == null ? default : (OneOrMany)items3; + + this.HasValue1 = this.Value1.Count > 0; + this.HasValue2 = this.Value2.Count > 0; + this.HasValue3 = this.Value3.Count > 0; } /// diff --git a/Source/Common/Values{T1,T2}.cs b/Source/Common/Values{T1,T2}.cs index 20926d7f..9724fe49 100644 --- a/Source/Common/Values{T1,T2}.cs +++ b/Source/Common/Values{T1,T2}.cs @@ -80,11 +80,11 @@ public Values(IEnumerable items) } } - this.HasValue1 = items1?.Count > 0; - this.HasValue2 = items2?.Count > 0; - this.Value1 = items1 == null ? default : (OneOrMany)items1; this.Value2 = items2 == null ? default : (OneOrMany)items2; + + this.HasValue1 = this.Value1.Count > 0; + this.HasValue2 = this.Value2.Count > 0; } ///