public static void IndexOf_AllSubstrings(string s, string value, int startIndex, StringComparison comparison)
{
bool ignoringCase = comparison == StringComparison.OrdinalIgnoreCase || comparison == StringComparison.CurrentCultureIgnoreCase;
// First find the substring. We should be able to with all comparison types.
Assert.Equal(startIndex, s.IndexOf(value, comparison)); // in the whole string
Assert.Equal(startIndex, s.IndexOf(value, startIndex, comparison)); // starting at substring
if (startIndex > 0)
{
Assert.Equal(startIndex, s.IndexOf(value, startIndex - 1, comparison)); // starting just before substring
}
Assert.Equal(-1, s.IndexOf(value, startIndex + 1, comparison)); // starting just after start of substring
// Shouldn't be able to find the substring if the count is less than substring's length
Assert.Equal(-1, s.IndexOf(value, 0, value.Length - 1, comparison));
// Now double the source. Make sure we find the first copy of the substring.
int halfLen = s.Length;
s += s;
Assert.Equal(startIndex, s.IndexOf(value, comparison));
// Now change the case of a letter.
s = s.ToUpperInvariant();
Assert.Equal(ignoringCase ? startIndex : -1, s.IndexOf(value, comparison));
}