From 25b2471bccef4e7b3f5d8a10631a4a25656eea02 Mon Sep 17 00:00:00 2001 From: Anirudh Agnihotry Date: Thu, 13 Jun 2019 15:14:00 -0700 Subject: [PATCH] Tests for nullable reference types in Span apis (dotnet/corefx#38468) Commit migrated from https://github.com/dotnet/corefx/commit/159fbc07c938f5ee6f136c60559ca16dc295d859 --- .../System.Memory/tests/ReadOnlySpan/IndexOf.T.cs | 8 ++++ .../tests/ReadOnlySpan/IndexOfSequence.T.cs | 8 ++++ .../tests/ReadOnlySpan/LastIndexOf.T.cs | 8 ++++ .../tests/ReadOnlySpan/LastIndexOfSequence.T.cs | 8 ++++ .../System.Memory/tests/Span/IndexOf.T.cs | 8 ++++ .../System.Memory/tests/Span/IndexOfSequence.T.cs | 8 ++++ .../System.Memory/tests/Span/LastIndexOf.T.cs | 8 ++++ .../tests/Span/LastIndexOfSequence.T.cs | 8 ++++ src/libraries/System.Memory/tests/TestHelpers.cs | 52 ++++++++++++++++++++++ 9 files changed, 116 insertions(+) diff --git a/src/libraries/System.Memory/tests/ReadOnlySpan/IndexOf.T.cs b/src/libraries/System.Memory/tests/ReadOnlySpan/IndexOf.T.cs index 2c80369..db9eaad 100644 --- a/src/libraries/System.Memory/tests/ReadOnlySpan/IndexOf.T.cs +++ b/src/libraries/System.Memory/tests/ReadOnlySpan/IndexOf.T.cs @@ -185,5 +185,13 @@ namespace System.SpanTests Assert.Equal(length - 2, idx); } } + + [Theory] + [MemberData(nameof(TestHelpers.IndexOfNullData), MemberType = typeof(TestHelpers))] + public static void IndexOfNull_String(string[] spanInput, int expected) + { + ReadOnlySpan theStrings = spanInput; + Assert.Equal(expected, theStrings.IndexOf((string)null)); + } } } diff --git a/src/libraries/System.Memory/tests/ReadOnlySpan/IndexOfSequence.T.cs b/src/libraries/System.Memory/tests/ReadOnlySpan/IndexOfSequence.T.cs index 401e7c6..796a0f6 100644 --- a/src/libraries/System.Memory/tests/ReadOnlySpan/IndexOfSequence.T.cs +++ b/src/libraries/System.Memory/tests/ReadOnlySpan/IndexOfSequence.T.cs @@ -231,5 +231,13 @@ namespace System.SpanTests int index = span.IndexOf(value); Assert.Equal(-1, index); } + + [Theory] + [MemberData(nameof(TestHelpers.IndexOfNullSequenceData), MemberType = typeof(TestHelpers))] + public static void IndexOfNullSequence_String(string[] spanInput, string[] searchInput, int expected) + { + ReadOnlySpan theStrings = spanInput; + Assert.Equal(expected, theStrings.IndexOf(searchInput)); + } } } diff --git a/src/libraries/System.Memory/tests/ReadOnlySpan/LastIndexOf.T.cs b/src/libraries/System.Memory/tests/ReadOnlySpan/LastIndexOf.T.cs index 9738142..f1913ba 100644 --- a/src/libraries/System.Memory/tests/ReadOnlySpan/LastIndexOf.T.cs +++ b/src/libraries/System.Memory/tests/ReadOnlySpan/LastIndexOf.T.cs @@ -185,5 +185,13 @@ namespace System.SpanTests Assert.Equal(length - 1, idx); } } + + [Theory] + [MemberData(nameof(TestHelpers.LastIndexOfNullData), MemberType = typeof(TestHelpers))] + public static void LastIndexOfNull_String(string[] spanInput, int expected) + { + ReadOnlySpan theStrings = spanInput; + Assert.Equal(expected, theStrings.LastIndexOf((string)null)); + } } } diff --git a/src/libraries/System.Memory/tests/ReadOnlySpan/LastIndexOfSequence.T.cs b/src/libraries/System.Memory/tests/ReadOnlySpan/LastIndexOfSequence.T.cs index 2dde13b..4885b0b 100644 --- a/src/libraries/System.Memory/tests/ReadOnlySpan/LastIndexOfSequence.T.cs +++ b/src/libraries/System.Memory/tests/ReadOnlySpan/LastIndexOfSequence.T.cs @@ -241,5 +241,13 @@ namespace System.SpanTests int index = span.LastIndexOf(value); Assert.Equal(-1, index); } + + [Theory] + [MemberData(nameof(TestHelpers.LastIndexOfNullSequenceData), MemberType = typeof(TestHelpers))] + public static void LastIndexOfNullSequence_String(string[] spanInput, string[] searchInput, int expected) + { + ReadOnlySpan theStrings = spanInput; + Assert.Equal(expected, theStrings.LastIndexOf(searchInput)); + } } } diff --git a/src/libraries/System.Memory/tests/Span/IndexOf.T.cs b/src/libraries/System.Memory/tests/Span/IndexOf.T.cs index 0da12ed..e58cb71 100644 --- a/src/libraries/System.Memory/tests/Span/IndexOf.T.cs +++ b/src/libraries/System.Memory/tests/Span/IndexOf.T.cs @@ -185,5 +185,13 @@ namespace System.SpanTests Assert.Equal(length - 2, idx); } } + + [Theory] + [MemberData(nameof(TestHelpers.IndexOfNullData), MemberType = typeof(TestHelpers))] + public static void IndexOfNull_String(string[] spanInput, int expected) + { + Span theStrings = spanInput; + Assert.Equal(expected, theStrings.IndexOf((string)null)); + } } } diff --git a/src/libraries/System.Memory/tests/Span/IndexOfSequence.T.cs b/src/libraries/System.Memory/tests/Span/IndexOfSequence.T.cs index e8c270c..697d5ce 100644 --- a/src/libraries/System.Memory/tests/Span/IndexOfSequence.T.cs +++ b/src/libraries/System.Memory/tests/Span/IndexOfSequence.T.cs @@ -231,5 +231,13 @@ namespace System.SpanTests int index = span.IndexOf(value); Assert.Equal(-1, index); } + + [Theory] + [MemberData(nameof(TestHelpers.IndexOfNullSequenceData), MemberType = typeof(TestHelpers))] + public static void IndexOfNullSequence_String(string[] spanInput, string[] searchInput, int expected) + { + Span theStrings = spanInput; + Assert.Equal(expected, theStrings.IndexOf(searchInput)); + } } } diff --git a/src/libraries/System.Memory/tests/Span/LastIndexOf.T.cs b/src/libraries/System.Memory/tests/Span/LastIndexOf.T.cs index e15858e..404be57 100644 --- a/src/libraries/System.Memory/tests/Span/LastIndexOf.T.cs +++ b/src/libraries/System.Memory/tests/Span/LastIndexOf.T.cs @@ -185,5 +185,13 @@ namespace System.SpanTests Assert.Equal(length - 1, idx); } } + + [Theory] + [MemberData(nameof(TestHelpers.LastIndexOfNullData), MemberType = typeof(TestHelpers))] + public static void LastIndexOfNull_String(string[] spanInput, int expected) + { + Span theStrings = spanInput; + Assert.Equal(expected, theStrings.LastIndexOf((string)null)); + } } } diff --git a/src/libraries/System.Memory/tests/Span/LastIndexOfSequence.T.cs b/src/libraries/System.Memory/tests/Span/LastIndexOfSequence.T.cs index 833d80c..90134c4 100644 --- a/src/libraries/System.Memory/tests/Span/LastIndexOfSequence.T.cs +++ b/src/libraries/System.Memory/tests/Span/LastIndexOfSequence.T.cs @@ -241,5 +241,13 @@ namespace System.SpanTests int index = span.LastIndexOf(value); Assert.Equal(-1, index); } + + [Theory] + [MemberData(nameof(TestHelpers.LastIndexOfNullSequenceData), MemberType = typeof(TestHelpers))] + public static void LastIndexOfNullSequence_String(string[] spanInput, string[] searchInput, int expected) + { + Span theStrings = spanInput; + Assert.Equal(expected, theStrings.LastIndexOf(searchInput)); + } } } diff --git a/src/libraries/System.Memory/tests/TestHelpers.cs b/src/libraries/System.Memory/tests/TestHelpers.cs index 1d8abb5..f68a235 100644 --- a/src/libraries/System.Memory/tests/TestHelpers.cs +++ b/src/libraries/System.Memory/tests/TestHelpers.cs @@ -410,5 +410,57 @@ namespace System /// Creates a with the specified values in its backing field. public static ReadOnlyMemory DangerousCreateReadOnlyMemory(object obj, int offset, int length) => DangerousCreateMemory(obj, offset, length); + + public static TheoryData IndexOfNullData => new TheoryData() + { + { new string[] { "1", null, "2" }, 1}, + { new string[] { "1", "3", "2" }, -1}, + { null, -1}, + { new string[] { "1", null, null }, 1}, + { new string[] { null, null, null }, 0}, + }; + + public static TheoryData IndexOfNullSequenceData => new TheoryData() + { + { new string[] { "1", null, "2" }, new string[] { "1", null, "2" }, 0}, + { new string[] { "1", null, "2" }, new string[] { null }, 1}, + { new string[] { "1", null, "2" }, (string[])null, 0}, + + { new string[] { "1", "3", "2" }, new string[] { "1", null, "2" }, -1}, + { new string[] { "1", "3", "2" }, new string[] { null }, -1}, + { new string[] { "1", "3", "2" }, (string[])null, 0}, + + { null, new string[] { "1", null, "2" }, -1}, + + { new string[] { "1", null, null }, new string[] { null, null, "2" }, -1}, + { new string[] { null, null, null }, new string[] { null, null }, 0}, + }; + + public static TheoryData LastIndexOfNullData => new TheoryData() + { + { new string[] { "1", null, "2" }, 1}, + { new string[] { "1", "3", "2" }, -1}, + { null, -1}, + { new string[] { "1", null, null }, 2}, + { new string[] { null, null, null }, 2}, + { new string[] { null, null, "3" }, 1}, + }; + + public static TheoryData LastIndexOfNullSequenceData => new TheoryData() + { + { new string[] { "1", null, "2" }, new string[] { "1", null, "2" }, 0}, + { new string[] { "1", null, "2" }, new string[] { null }, 1}, + { new string[] { "1", null, "2" }, (string[])null, 0}, + + { new string[] { "1", "3", "1" }, new string[] { "1", null, "2" }, -1}, + { new string[] { "1", "3", "1" }, new string[] { "1" }, 2}, + { new string[] { "1", "3", "1" }, new string[] { null }, -1}, + { new string[] { "1", "3", "1" }, (string[])null, 0}, + + { null, new string[] { "1", null, "2" }, -1}, + + { new string[] { "1", null, null }, new string[] { null, null, "2" }, -1}, + { new string[] { null, null, null }, new string[] { null, null }, 1}, + }; } } -- 2.7.4