Skip to content

Commit 07fa490

Browse files
committed
SAVEPOINT
1 parent 9ede640 commit 07fa490

26 files changed

+332
-264
lines changed

Build/_build.csproj.DotSettings

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_ANONYMOUSMETHOD_ON_SINGLE_LINE/@EntryValue">False</s:Boolean>
1414
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
1515
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
16+
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=4a98fdf6_002D7d98_002D4f5a_002Dafeb_002Dea44ad98c70c/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;Kind Name="READONLY_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
17+
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=f9fce829_002De6f4_002D4cb2_002D80f1_002D5497c44f51df/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
1618
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpAttributeForSingleLineMethodUpgrade/@EntryIndexedValue">True</s:Boolean>
1719
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
1820
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
@@ -21,4 +23,5 @@
2123
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
2224
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
2325
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
24-
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
26+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean>
27+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EPredefinedNamingRulesToUserRulesUpgrade/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

Directory.Build.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<LangVersion>11.0</LangVersion>
44
<CheckEolTargetFramework>false</CheckEolTargetFramework>
55
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
6+
<WarningsNotAsErrors>NU1903</WarningsNotAsErrors>
67
</PropertyGroup>
78

89
<!-- To reduce build times, we only enable analyzers for the newest TFM -->

FluentAssertions.DataSets.sln.DotSettings

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@
104104
<s:String x:Key="/Default/CodeStyle/CSharpVarKeywordUsage/ForSimpleTypes/@EntryValue">UseExplicitType</s:String>
105105
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /&gt;</s:String>
106106
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /&gt;</s:String>
107+
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=4a98fdf6_002D7d98_002D4f5a_002Dafeb_002Dea44ad98c70c/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;Kind Name="READONLY_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="aaBb" /&gt;&lt;/Policy&gt;</s:String>
108+
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=f9fce829_002De6f4_002D4cb2_002D80f1_002D5497c44f51df/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="aaBb" /&gt;&lt;/Policy&gt;</s:String>
107109
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FBLOCK_005FSCOPE_005FCONSTANT/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /&gt;</s:String>
108110
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FBLOCK_005FSCOPE_005FVARIABLE/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /&gt;</s:String>
109111
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FCONSTRUCTOR/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
@@ -154,6 +156,7 @@
154156
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
155157
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
156158
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean>
159+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EPredefinedNamingRulesToUserRulesUpgrade/@EntryIndexedValue">True</s:Boolean>
157160
<s:String x:Key="/Default/Environment/UnitTesting/MsTestProvider/RunConfigurationFilename/@EntryValue">D:\Workspaces\FluentAssertions\Default.testsettings</s:String>
158161
<s:Int64 x:Key="/Default/Environment/UnitTesting/ParallelProcessesCount/@EntryValue">4</s:Int64>
159162
<s:Boolean x:Key="/Default/Environment/UnitTesting/ShadowCopy/@EntryValue">False</s:Boolean>

Src/FluentAssertions.DataSets/AssertionExtensions.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using FluentAssertions.Collections;
44
using FluentAssertions.DataSets;
55
using FluentAssertions.DataSets.Common;
6+
using FluentAssertions.Execution;
67
using JetBrains.Annotations;
78

89
// ReSharper disable once CheckNamespace
@@ -21,7 +22,7 @@ public static class AssertionExtensions
2122
public static GenericCollectionAssertions<DataTable> Should(this DataTableCollection actualValue)
2223
{
2324
return new GenericCollectionAssertions<DataTable>(
24-
ReadOnlyNonGenericCollectionWrapper.Create(actualValue));
25+
ReadOnlyNonGenericCollectionWrapper.Create(actualValue), AssertionChain.GetOrCreate());
2526
}
2627

2728
/// <summary>
@@ -31,7 +32,7 @@ public static GenericCollectionAssertions<DataTable> Should(this DataTableCollec
3132
public static GenericCollectionAssertions<DataColumn> Should(this DataColumnCollection actualValue)
3233
{
3334
return new GenericCollectionAssertions<DataColumn>(
34-
ReadOnlyNonGenericCollectionWrapper.Create(actualValue));
35+
ReadOnlyNonGenericCollectionWrapper.Create(actualValue), AssertionChain.GetOrCreate());
3536
}
3637

3738
/// <summary>
@@ -41,7 +42,7 @@ public static GenericCollectionAssertions<DataColumn> Should(this DataColumnColl
4142
public static GenericCollectionAssertions<DataRow> Should(this DataRowCollection actualValue)
4243
{
4344
return new GenericCollectionAssertions<DataRow>(
44-
ReadOnlyNonGenericCollectionWrapper.Create(actualValue));
45+
ReadOnlyNonGenericCollectionWrapper.Create(actualValue), AssertionChain.GetOrCreate());
4546
}
4647

4748
/// <summary>
@@ -51,6 +52,6 @@ public static GenericCollectionAssertions<DataRow> Should(this DataRowCollection
5152
[Pure]
5253
public static DataColumnAssertions Should(this DataColumn actualValue)
5354
{
54-
return new DataColumnAssertions(actualValue);
55+
return new DataColumnAssertions(actualValue, AssertionChain.GetOrCreate());
5556
}
5657
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using FluentAssertions.Equivalency;
2+
using FluentAssertions.Execution;
3+
4+
namespace FluentAssertions.DataSets.Common;
5+
6+
internal static class AssertionChainExtensions
7+
{
8+
/// <summary>
9+
/// Updates the <see cref="AssertionChain"/> with the relevant information from the current <see cref="IEquivalencyValidationContext"/>, including the correct
10+
/// caller identification path.
11+
/// </summary>
12+
public static AssertionChain For(this AssertionChain chain, IEquivalencyValidationContext context)
13+
{
14+
chain.OverrideCallerIdentifier(() => context.CurrentNode.Description);
15+
16+
return chain
17+
.WithReportable("configuration", () => context.Options.ToString())
18+
.BecauseOf(context.Reason);
19+
}
20+
21+
}

Src/FluentAssertions.DataSets/DataColumnAssertions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ namespace FluentAssertions.DataSets;
1515
[DebuggerNonUserCode]
1616
public class DataColumnAssertions : ReferenceTypeAssertions<DataColumn, DataColumnAssertions>
1717
{
18-
public DataColumnAssertions(DataColumn dataColumn)
19-
: base(dataColumn)
18+
public DataColumnAssertions(DataColumn dataColumn, AssertionChain assertionChain)
19+
: base(dataColumn, assertionChain)
2020
{
2121
}
2222

@@ -123,7 +123,7 @@ public AndConstraint<DataColumnAssertions> BeEquivalentTo(DataColumn expectation
123123
IDataEquivalencyAssertionOptions<DataColumn> options = config(defaults);
124124

125125
var context =
126-
new EquivalencyValidationContext(Node.From<DataColumn>(() => AssertionScope.Current.CallerIdentity), options)
126+
new EquivalencyValidationContext(Node.From<DataColumn>(() => CallerIdentifier.DetermineCallerIdentity()), options)
127127
{
128128
Reason = new Reason(because, becauseArgs),
129129
TraceWriter = options.TraceWriter

Src/FluentAssertions.DataSets/DataColumnCollectionAssertionExtensions.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public static AndConstraint<GenericCollectionAssertions<DataColumn>> BeSameAs(
3535
{
3636
var actualSubject = wrapper.UnderlyingCollection;
3737

38-
Execute.Assertion
38+
assertion.CurrentAssertionChain
3939
.UsingLineBreaks
4040
.ForCondition(ReferenceEquals(actualSubject, expected))
4141
.BecauseOf(because, becauseArgs)
@@ -45,7 +45,7 @@ public static AndConstraint<GenericCollectionAssertions<DataColumn>> BeSameAs(
4545
}
4646
else
4747
{
48-
Execute.Assertion
48+
assertion.CurrentAssertionChain
4949
.BecauseOf(because, becauseArgs)
5050
.FailWith(
5151
"Invalid expectation: Expected {context:column collection} to refer to an instance of " +
@@ -80,15 +80,15 @@ public static AndConstraint<GenericCollectionAssertions<DataColumn>> NotBeSameAs
8080
{
8181
var actualSubject = wrapper.UnderlyingCollection;
8282

83-
Execute.Assertion
83+
assertion.CurrentAssertionChain
8484
.UsingLineBreaks
8585
.ForCondition(!ReferenceEquals(actualSubject, unexpected))
8686
.BecauseOf(because, becauseArgs)
8787
.FailWith("Did not expect {context:column collection} to refer to {0}{reason}.", unexpected);
8888
}
8989
else
9090
{
91-
Execute.Assertion
91+
assertion.CurrentAssertionChain
9292
.BecauseOf(because, becauseArgs)
9393
.FailWith(
9494
"Invalid expectation: Expected {context:column collection} to refer to a different instance of " +
@@ -119,7 +119,7 @@ public static AndConstraint<GenericCollectionAssertions<DataColumn>> HaveSameCou
119119
Guard.ThrowIfArgumentIsNull(
120120
otherCollection, nameof(otherCollection), "Cannot verify count against a <null> collection.");
121121

122-
Execute.Assertion
122+
assertion.CurrentAssertionChain
123123
.BecauseOf(because, becauseArgs)
124124
.WithExpectation("Expected {context:collection} to have ")
125125
.Given(() => assertion.Subject)
@@ -157,7 +157,7 @@ public static AndConstraint<GenericCollectionAssertions<DataColumn>> NotHaveSame
157157
Guard.ThrowIfArgumentIsNull(
158158
otherCollection, nameof(otherCollection), "Cannot verify count against a <null> collection.");
159159

160-
Execute.Assertion
160+
assertion.CurrentAssertionChain
161161
.BecauseOf(because, becauseArgs)
162162
.WithExpectation("Expected {context:collection} to not have ")
163163
.Given(() => assertion.Subject)

Src/FluentAssertions.DataSets/DataEquivalencyAssertionOptions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace FluentAssertions.DataSets;
99

10-
internal class DataEquivalencyAssertionOptions<T> : EquivalencyAssertionOptions<T>, IDataEquivalencyAssertionOptions<T>
10+
internal class DataEquivalencyAssertionOptions<T> : EquivalencyOptions<T>, IDataEquivalencyAssertionOptions<T>
1111
{
1212
private readonly HashSet<string> excludeTableNames = new();
1313
private readonly HashSet<string> excludeColumnNames = new();
@@ -25,7 +25,7 @@ internal class DataEquivalencyAssertionOptions<T> : EquivalencyAssertionOptions<
2525

2626
public ISet<string> ExcludeColumnNames => excludeColumnNames;
2727

28-
public DataEquivalencyAssertionOptions(EquivalencyAssertionOptions<T> defaults)
28+
public DataEquivalencyAssertionOptions(EquivalencyOptions<T> defaults)
2929
: base(defaults)
3030
{
3131
}

Src/FluentAssertions.DataSets/DataRowAssertionExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Data;
22
using System.Diagnostics;
33
using FluentAssertions.DataSets;
4+
using FluentAssertions.Execution;
45
using JetBrains.Annotations;
56

67
// ReSharper disable once CheckNamespace
@@ -20,6 +21,6 @@ public static class DataRowAssertionExtensions
2021
public static DataRowAssertions<TDataRow> Should<TDataRow>(this TDataRow actualValue)
2122
where TDataRow : DataRow
2223
{
23-
return new DataRowAssertions<TDataRow>(actualValue);
24+
return new DataRowAssertions<TDataRow>(actualValue, AssertionChain.GetOrCreate());
2425
}
2526
}

Src/FluentAssertions.DataSets/DataRowAssertions.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ namespace FluentAssertions.DataSets;
1818
public class DataRowAssertions<TDataRow> : ReferenceTypeAssertions<TDataRow, DataRowAssertions<TDataRow>>
1919
where TDataRow : DataRow
2020
{
21-
public DataRowAssertions(TDataRow dataRow)
22-
: base(dataRow)
21+
public DataRowAssertions(TDataRow dataRow, AssertionChain assertionChain)
22+
: base(dataRow, assertionChain)
2323
{
2424
}
2525

@@ -41,14 +41,14 @@ public AndWhichConstraint<DataRowAssertions<TDataRow>, DataColumn> HaveColumn(st
4141

4242
if (Subject is null)
4343
{
44-
Execute.Assertion
44+
CurrentAssertionChain
4545
.BecauseOf(because, becauseArgs)
4646
.FailWith("Expected {context:DataRow} to contain a column named {0}{reason}, but found <null>.",
4747
expectedColumnName);
4848
}
4949
else if (!Subject.Table.Columns.Contains(expectedColumnName))
5050
{
51-
Execute.Assertion
51+
CurrentAssertionChain
5252
.BecauseOf(because, becauseArgs)
5353
.FailWith("Expected {context:DataRow} to contain a column named {0}{reason}, but it does not.",
5454
expectedColumnName);
@@ -84,18 +84,18 @@ public AndConstraint<DataRowAssertions<TDataRow>> HaveColumns(params string[] ex
8484
public AndConstraint<DataRowAssertions<TDataRow>> HaveColumns(IEnumerable<string> expectedColumnNames, string because = "",
8585
params object[] becauseArgs)
8686
{
87-
bool success = Execute.Assertion
87+
CurrentAssertionChain
8888
.ForCondition(Subject is not null)
8989
.BecauseOf(because, becauseArgs)
9090
.FailWith(
9191
"Expected {context:DataRow} to be in a table containing {0} column(s) with specific names{reason}, but found <null>.",
9292
() => expectedColumnNames.Count());
9393

94-
if (success)
94+
if (CurrentAssertionChain.Succeeded)
9595
{
9696
foreach (var expectedColumnName in expectedColumnNames)
9797
{
98-
Execute.Assertion
98+
CurrentAssertionChain
9999
.ForCondition(Subject.Table.Columns.Contains(expectedColumnName))
100100
.BecauseOf(because, becauseArgs)
101101
.FailWith("Expected table containing {context:DataRow} to contain a column named {0}{reason}, but it does not.",
@@ -194,7 +194,7 @@ public AndConstraint<DataRowAssertions<TDataRow>> BeEquivalentTo(DataRow expecta
194194
var defaults = new DataEquivalencyAssertionOptions<DataRow>(AssertionOptions.CloneDefaults<DataRow>());
195195
IDataEquivalencyAssertionOptions<DataRow> options = config(defaults);
196196

197-
var context = new EquivalencyValidationContext(Node.From<DataRow>(() => AssertionScope.Current.CallerIdentity), options)
197+
var context = new EquivalencyValidationContext(Node.From<DataRow>(() => CallerIdentifier.DetermineCallerIdentity()), options)
198198
{
199199
Reason = new Reason(because, becauseArgs),
200200
TraceWriter = options.TraceWriter

0 commit comments

Comments
 (0)