Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 30a00d0

Browse files
authored
Testing GetHashCode works properly when using string with embedded null (#27296)
* Testing GetHashCode works properly when using string with embedded null Related to #27098 * Adding disabled test for future tracking in netfx for GetHashCode.
1 parent 2b805ce commit 30a00d0

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/System.Runtime.Extensions/tests/System/StringComparer.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,24 @@ public static void TestOrdinal()
2626
VerifyComparer(StringComparer.OrdinalIgnoreCase, true);
2727
}
2828

29+
[Fact]
30+
[ActiveIssue(27098, TargetFrameworkMonikers.NetFramework)]
31+
public static void TestOrdinal_EmbeddedNull_ReturnsDifferentHashCodes()
32+
{
33+
StringComparer sc = StringComparer.Ordinal;
34+
Assert.NotEqual(sc.GetHashCode("\0AAAAAAAAA"), sc.GetHashCode("\0BBBBBBBBBBBB"));
35+
sc = StringComparer.OrdinalIgnoreCase;
36+
Assert.NotEqual(sc.GetHashCode("\0AAAAAAAAA"), sc.GetHashCode("\0BBBBBBBBBBBB"));
37+
}
38+
2939
private static void VerifyComparer(StringComparer sc, bool ignoreCase)
3040
{
3141
String s1 = "Hello";
3242
String s1a = "Hello";
3343
String s1b = "HELLO";
3444
String s2 = "There";
45+
String aa = "\0AAAAAAAAA";
46+
String bb = "\0BBBBBBBBBBBB";
3547

3648
Assert.True(sc.Equals(s1, s1a));
3749
Assert.True(sc.Equals(s1, s1a));
@@ -52,6 +64,12 @@ private static void VerifyComparer(StringComparer sc, bool ignoreCase)
5264
Assert.Equal(ignoreCase, sc.Equals(s1, s1b));
5365
Assert.Equal(ignoreCase, ((IEqualityComparer)sc).Equals(s1, s1b));
5466

67+
Assert.NotEqual(0, ((IComparer)sc).Compare(aa, bb));
68+
Assert.False(sc.Equals(aa, bb));
69+
Assert.False(((IEqualityComparer)sc).Equals(aa, bb));
70+
Assert.True(sc.Compare(aa, bb) < 0);
71+
Assert.True(((IComparer)sc).Compare(aa, bb) < 0);
72+
5573
int result = sc.Compare(s1, s1b);
5674
if (ignoreCase)
5775
Assert.Equal(0, result);

src/System.Runtime/tests/System/StringTests.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,13 @@ public static void GetEnumerator_Generic_Invalid()
10401040
Assert.Throws<InvalidOperationException>(() => enumerator.Current);
10411041
}
10421042

1043+
[Fact]
1044+
[ActiveIssue(27098, TargetFrameworkMonikers.NetFramework)]
1045+
public static void GetHashCode_EmbeddedNull_ReturnsDifferentHashCodes()
1046+
{
1047+
Assert.NotEqual("\0AAAAAAAAA".GetHashCode(), "\0BBBBBBBBBBBB".GetHashCode());
1048+
}
1049+
10431050
[Theory]
10441051
// CurrentCulture
10451052
[InlineData("Hello", "Hello", StringComparison.CurrentCulture, true)]
@@ -1053,6 +1060,7 @@ public static void GetEnumerator_Generic_Invalid()
10531060
[InlineData("", "Hello", StringComparison.CurrentCulture, false)]
10541061
[InlineData("", "", StringComparison.CurrentCulture, true)]
10551062
[InlineData("123", 123, StringComparison.CurrentCulture, false)] // Not a string
1063+
[InlineData("\0AAAAAAAAA", "\0BBBBBBBBBBBB", StringComparison.CurrentCulture, false)]
10561064
// CurrentCultureIgnoreCase
10571065
[InlineData("Hello", "Hello", StringComparison.CurrentCultureIgnoreCase, true)]
10581066
[InlineData("Hello", "hello", StringComparison.CurrentCultureIgnoreCase, true)]
@@ -1065,6 +1073,7 @@ public static void GetEnumerator_Generic_Invalid()
10651073
[InlineData("", "Hello", StringComparison.CurrentCultureIgnoreCase, false)]
10661074
[InlineData("", "", StringComparison.CurrentCultureIgnoreCase, true)]
10671075
[InlineData("123", 123, StringComparison.CurrentCultureIgnoreCase, false)] // Not a string
1076+
[InlineData("\0AAAAAAAAA", "\0BBBBBBBBBBBB", StringComparison.CurrentCultureIgnoreCase, false)]
10681077
// InvariantCulture
10691078
[InlineData("Hello", "Hello", StringComparison.InvariantCulture, true)]
10701079
[InlineData("Hello", "hello", StringComparison.InvariantCulture, false)]
@@ -1076,7 +1085,8 @@ public static void GetEnumerator_Generic_Invalid()
10761085
[InlineData("Hello", "", StringComparison.InvariantCulture, false)]
10771086
[InlineData("", "Hello", StringComparison.InvariantCulture, false)]
10781087
[InlineData("", "", StringComparison.InvariantCulture, true)]
1079-
[InlineData("123", 123, StringComparison.InvariantCultureIgnoreCase, false)] // Not a string
1088+
[InlineData("123", 123, StringComparison.InvariantCulture, false)] // Not a string
1089+
[InlineData("\0AAAAAAAAA", "\0BBBBBBBBBBBB", StringComparison.InvariantCulture, false)]
10801090
// InvariantCultureIgnoreCase
10811091
[InlineData("Hello", "Hello", StringComparison.InvariantCultureIgnoreCase, true)]
10821092
[InlineData("Hello", "hello", StringComparison.InvariantCultureIgnoreCase, true)]
@@ -1089,6 +1099,7 @@ public static void GetEnumerator_Generic_Invalid()
10891099
[InlineData("", "Hello", StringComparison.InvariantCultureIgnoreCase, false)]
10901100
[InlineData("", "", StringComparison.InvariantCultureIgnoreCase, true)]
10911101
[InlineData("123", 123, StringComparison.InvariantCultureIgnoreCase, false)] // Not a string
1102+
[InlineData("\0AAAAAAAAA", "\0BBBBBBBBBBBB", StringComparison.InvariantCultureIgnoreCase, false)]
10921103
// Ordinal
10931104
[InlineData("Hello", "Hello", StringComparison.Ordinal, true)]
10941105
[InlineData("Hello", "hello", StringComparison.Ordinal, false)]
@@ -1118,6 +1129,7 @@ public static void GetEnumerator_Generic_Invalid()
11181129
[InlineData("", "Hello", StringComparison.OrdinalIgnoreCase, false)]
11191130
[InlineData("", "", StringComparison.OrdinalIgnoreCase, true)]
11201131
[InlineData("123", 123, StringComparison.OrdinalIgnoreCase, false)] // Not a string
1132+
[InlineData("\0AAAAAAAAA", "\0BBBBBBBBBBBB", StringComparison.OrdinalIgnoreCase, false)]
11211133
public static void Equals(string s1, object obj, StringComparison comparisonType, bool expected)
11221134
{
11231135
string s2 = obj as string;

0 commit comments

Comments
 (0)