Skip to content

Commit

Permalink
Add tests for KeyValuePair<> equivalence (including Dictionaries with…
Browse files Browse the repository at this point in the history
… collections as values)
  • Loading branch information
bradwilson committed Jul 6, 2022
1 parent 32d21fb commit 878d209
Show file tree
Hide file tree
Showing 2 changed files with 145 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/xunit.assert/Asserts
Submodule Asserts updated 1 files
+39 −2 Sdk/AssertHelper.cs
144 changes: 144 additions & 0 deletions test/test.xunit.assert/Asserts/EquivalenceAssertsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -901,6 +901,24 @@ public void Success()
Assert.Equivalent(expected, actual, strict: false);
}

[Fact]
public void SuccessWithArrayValues()
{
var expected = new Dictionary<string, int[]> { ["Foo"] = new[] { 42 } };
var actual = new Dictionary<string, int[]> { ["Foo"] = new[] { 42 }, ["Bar"] = new[] { 2112 } };

Assert.Equivalent(expected, actual, strict: false);
}

[Fact]
public void SuccessWithListValues()
{
var expected = new Dictionary<string, List<int>> { ["Foo"] = new List<int> { 42 } };
var actual = new Dictionary<string, List<int>> { ["Foo"] = new List<int> { 42 }, ["Bar"] = new List<int> { 2112 } };

Assert.Equivalent(expected, actual, strict: false);
}

[Fact]
public void Success_EmbeddedDictionary()
{
Expand All @@ -927,6 +945,40 @@ public void Failure()
);
}

[Fact]
public void FailureWithArrayValues()
{
var expected = new Dictionary<string, int[]> { ["Foo"] = new[] { 16 } };
var actual = new Dictionary<string, int[]> { ["Foo"] = new[] { 42 }, ["Bar"] = new[] { 2112 } };

var ex = Record.Exception(() => Assert.Equivalent(expected, actual, strict: false));

Assert.IsType<EquivalentException>(ex);
Assert.Equal(
"Assert.Equivalent() Failure: Collection value not found" + Environment.NewLine +
"Expected: [\"Foo\"] = [16]" + Environment.NewLine +
"In: [[\"Foo\"] = [42], [\"Bar\"] = [2112]]",
ex.Message
);
}

[Fact]
public void FailureWithListValues()
{
var expected = new Dictionary<string, List<int>> { ["Foo"] = new List<int> { 16 } };
var actual = new Dictionary<string, List<int>> { ["Foo"] = new List<int> { 42 }, ["Bar"] = new List<int> { 2112 } };

var ex = Record.Exception(() => Assert.Equivalent(expected, actual, strict: false));

Assert.IsType<EquivalentException>(ex);
Assert.Equal(
"Assert.Equivalent() Failure: Collection value not found" + Environment.NewLine +
"Expected: [\"Foo\"] = [16]" + Environment.NewLine +
"In: [[\"Foo\"] = [42], [\"Bar\"] = [2112]]",
ex.Message
);
}

[Fact]
public void Failure_EmbeddedDictionary()
{
Expand Down Expand Up @@ -1034,6 +1086,98 @@ public void Failure_EmbeddedDictionary_ExtraValueInActual()
}
}

public class KeyValuePairs_NotStrict
{
[Fact]
public void Success()
{
var expected = new KeyValuePair<int, int[]>(42, new[] { 1, 4 });
var actual = new KeyValuePair<int, int[]>(42, new[] { 9, 4, 1 });

Assert.Equivalent(expected, actual, strict: false);
}

[Fact]
public void Failure_Key()
{
var expected = new KeyValuePair<int, int[]>(42, new[] { 1, 4 });
var actual = new KeyValuePair<int, int[]>(41, new[] { 9, 4, 1 });

var ex = Record.Exception(() => Assert.Equivalent(expected, actual, strict: false));

Assert.IsType<EquivalentException>(ex);
Assert.Equal(
"Assert.Equivalent() Failure: Mismatched value on member 'Key'" + Environment.NewLine +
"Expected: 42" + Environment.NewLine +
"Actual: 41",
ex.Message
);
}

[Fact]
public void Failure_Value()
{
var expected = new KeyValuePair<int, int[]>(42, new[] { 1, 6 });
var actual = new KeyValuePair<int, int[]>(42, new[] { 9, 4, 1 });

var ex = Record.Exception(() => Assert.Equivalent(expected, actual, strict: false));

Assert.IsType<EquivalentException>(ex);
Assert.Equal(
"Assert.Equivalent() Failure: Collection value not found in member 'Value'" + Environment.NewLine +
"Expected: 6" + Environment.NewLine +
"In: [9, 4, 1]",
ex.Message
);
}
}

public class KeyValuePairs_Strict
{
[Fact]
public void Success()
{
var expected = new KeyValuePair<int, int[]>(42, new[] { 1, 4 });
var actual = new KeyValuePair<int, int[]>(42, new[] { 4, 1 });

Assert.Equivalent(expected, actual, strict: true);
}

[Fact]
public void Failure_Key()
{
var expected = new KeyValuePair<int, int[]>(42, new[] { 1, 4 });
var actual = new KeyValuePair<int, int[]>(41, new[] { 4, 1 });

var ex = Record.Exception(() => Assert.Equivalent(expected, actual, strict: true));

Assert.IsType<EquivalentException>(ex);
Assert.Equal(
"Assert.Equivalent() Failure: Mismatched value on member 'Key'" + Environment.NewLine +
"Expected: 42" + Environment.NewLine +
"Actual: 41",
ex.Message
);
}

[Fact]
public void Failure_Value()
{
var expected = new KeyValuePair<int, int[]>(42, new[] { 1, 6 });
var actual = new KeyValuePair<int, int[]>(42, new[] { 4, 1 });

var ex = Record.Exception(() => Assert.Equivalent(expected, actual, strict: true));

Assert.IsType<EquivalentException>(ex);
Assert.Equal(
"Assert.Equivalent() Failure: Collection value not found in member 'Value'" + Environment.NewLine +
"Expected: 6" + Environment.NewLine +
"In: [4, 1]",
ex.Message
);
}
}

public class CircularReferences
{
[Fact]
Expand Down

0 comments on commit 878d209

Please sign in to comment.