diff --git a/src/System.Runtime/ref/System.Runtime.cs b/src/System.Runtime/ref/System.Runtime.cs index c0f6003eff9f..fff02e447d75 100644 --- a/src/System.Runtime/ref/System.Runtime.cs +++ b/src/System.Runtime/ref/System.Runtime.cs @@ -1937,6 +1937,12 @@ public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, in public string Remove(int startIndex, int count) { return default(string); } public string Replace(char oldChar, char newChar) { return default(string); } public string Replace(string oldValue, string newValue) { return default(string); } +#if netcoreapp11 + public string[] Split(char separator, System.StringSplitOptions options = System.StringSplitOptions.None) { return default(string[]); } + public string[] Split(char separator, int count, System.StringSplitOptions options = System.StringSplitOptions.None) { return default(string[]); } + public string[] Split(string separator, System.StringSplitOptions options = System.StringSplitOptions.None) { return default(string[]); } + public string[] Split(string separator, int count, System.StringSplitOptions options = System.StringSplitOptions.None) { return default(string[]); } +#endif public string[] Split(params char[] separator) { return default(string[]); } public string[] Split(char[] separator, int count) { return default(string[]); } public string[] Split(char[] separator, int count, System.StringSplitOptions options) { return default(string[]); } diff --git a/src/System.Runtime/tests/Performance/Perf.String.cs b/src/System.Runtime/tests/Performance/Perf.String.cs index 28c7cb4e194a..04f2a43a894a 100644 --- a/src/System.Runtime/tests/Performance/Perf.String.cs +++ b/src/System.Runtime/tests/Performance/Perf.String.cs @@ -185,10 +185,11 @@ public void Split(int size) PerfUtils utils = new PerfUtils(); string testString = utils.CreateString(size); string existingValue = testString.Substring(testString.Length / 2, 1); + string[] separator = new string[] { existingValue }; foreach (var iteration in Benchmark.Iterations) using (iteration.StartMeasurement()) for (int i = 0; i < 10000; i++) - testString.Split(existingValue); + testString.Split(separator, StringSplitOptions.None); } [Benchmark] diff --git a/src/System.Runtime/tests/Performance/System.Runtime.Performance.Tests.csproj b/src/System.Runtime/tests/Performance/System.Runtime.Performance.Tests.csproj index 89d63321ab31..41137536f8a7 100644 --- a/src/System.Runtime/tests/Performance/System.Runtime.Performance.Tests.csproj +++ b/src/System.Runtime/tests/Performance/System.Runtime.Performance.Tests.csproj @@ -27,7 +27,6 @@ - Common\System\PerfUtils.cs diff --git a/src/System.Runtime/tests/System.Runtime.Tests.csproj b/src/System.Runtime/tests/System.Runtime.Tests.csproj index e5d64cd8f6f7..e7830a8cec2a 100644 --- a/src/System.Runtime/tests/System.Runtime.Tests.csproj +++ b/src/System.Runtime/tests/System.Runtime.Tests.csproj @@ -109,6 +109,9 @@ + + + diff --git a/src/System.Runtime/tests/System/String.SplitTests.cs b/src/System.Runtime/tests/System/String.SplitTests.cs index 1ff8c9aa1839..174b3c817e23 100644 --- a/src/System.Runtime/tests/System/String.SplitTests.cs +++ b/src/System.Runtime/tests/System/String.SplitTests.cs @@ -2,45 +2,10 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System; using Xunit; namespace System.Tests { - // TODO: Remove these extension methods when the actual methods are available on String in System.Runtime.dll - internal static class TemporaryStringSplitExtensions - { - public static string[] Split(this string value, char separator) - { - return value.Split(new[] { separator }); - } - - public static string[] Split(this string value, char separator, StringSplitOptions options) - { - return value.Split(new[] { separator }, options); - } - - public static string[] Split(this string value, char separator, int count, StringSplitOptions options) - { - return value.Split(new[] { separator }, count, options); - } - - public static string[] Split(this string value, string separator) - { - return value.Split(new[] { separator }, StringSplitOptions.None); - } - - public static string[] Split(this string value, string separator, StringSplitOptions options) - { - return value.Split(new[] { separator }, options); - } - - public static string[] Split(this string value, string separator, int count, StringSplitOptions options) - { - return value.Split(new[] { separator }, count, options); - } - } - public static class StringSplitTests { [Fact] @@ -50,11 +15,13 @@ public static void SplitInvalidCount() const int count = -1; const StringSplitOptions options = StringSplitOptions.None; - Assert.Throws(() => value.Split(',', count, options)); - Assert.Throws(() => value.Split(new[] { ',' }, count)); - Assert.Throws(() => value.Split(new[] { ',' }, count, options)); - Assert.Throws(() => value.Split(",", count, options)); - Assert.Throws(() => value.Split(new[] { "," }, count, options)); + Assert.Throws("count", () => value.Split(',', count)); + Assert.Throws("count", () => value.Split(',', count, options)); + Assert.Throws("count", () => value.Split(new[] { ',' }, count)); + Assert.Throws("count", () => value.Split(new[] { ',' }, count, options)); + Assert.Throws("count", () => value.Split(",", count)); + Assert.Throws("count", () => value.Split(",", count, options)); + Assert.Throws("count", () => value.Split(new[] { "," }, count, options)); } [Fact] @@ -92,9 +59,11 @@ public static void SplitZeroCountEmptyResult() string[] expected = new string[0]; + Assert.Equal(expected, value.Split(',', count)); Assert.Equal(expected, value.Split(',', count, options)); Assert.Equal(expected, value.Split(new[] { ',' }, count)); Assert.Equal(expected, value.Split(new[] { ',' }, count, options)); + Assert.Equal(expected, value.Split(",", count)); Assert.Equal(expected, value.Split(",", count, options)); Assert.Equal(expected, value.Split(new[] { "," }, count, options)); } @@ -127,9 +96,11 @@ public static void SplitOneCountSingleResult() string[] expected = new[] { value }; + Assert.Equal(expected, value.Split(',', count)); Assert.Equal(expected, value.Split(',', count, options)); Assert.Equal(expected, value.Split(new[] { ',' }, count)); Assert.Equal(expected, value.Split(new[] { ',' }, count, options)); + Assert.Equal(expected, value.Split(",", count)); Assert.Equal(expected, value.Split(",", count, options)); Assert.Equal(expected, value.Split(new[] { "," }, count, options)); } @@ -472,6 +443,15 @@ public static void SplitStringSeparator(string value, string separator, int coun Assert.Equal(expected, value.Split(new[] { separator }, count, options)); } + [Fact] + public static void SplitNullCharArraySeparator_BindsToCharArrayOverload() + { + string value = "a b c"; + string[] expected = new[] { "a", "b", "c" }; + // Ensure Split(null) compiles successfully as a call to Split(char[]) + Assert.Equal(expected, value.Split(null)); + } + [Theory] [InlineData("a b c", null, M, StringSplitOptions.None, new[] { "a", "b", "c" })] [InlineData("a b c", new char[0], M, StringSplitOptions.None, new[] { "a", "b", "c" })] diff --git a/src/System.Runtime/tests/System/StringSplitExtensions.cs b/src/System.Runtime/tests/System/StringSplitExtensions.cs new file mode 100644 index 000000000000..ed3608c0059e --- /dev/null +++ b/src/System.Runtime/tests/System/StringSplitExtensions.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Tests +{ + // Allows the string.Split tests to run on targets that *do not* have the new string.Split overloads. + internal static class StringSplitExtensions + { + public static string[] Split(this string value, char separator, StringSplitOptions options = StringSplitOptions.None) => + value.Split(new[] { separator }, options); + + public static string[] Split(this string value, char separator, int count, StringSplitOptions options = StringSplitOptions.None) => + value.Split(new[] { separator }, count, options); + + public static string[] Split(this string value, string separator, StringSplitOptions options = StringSplitOptions.None) => + value.Split(new[] { separator }, options); + + public static string[] Split(this string value, string separator, int count, StringSplitOptions options = StringSplitOptions.None) => + value.Split(new[] { separator }, count, options); + } +}