in src/EditorFeatures/CSharpTest/ValidateFormatString/ValidateFormatStringTests.cs [316:749]
public async Task WithTripleBraces()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
string.Format("" {{{2}} This {1[||]} is {2} {{ my {0} test }}"", ""teststring1"", ""teststring2"", ""teststring3"");
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task NamedParameters()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(arg0: ""test"", arg1: ""also"", format: ""This {0} {[||]1} works"");
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task NamedParametersWithIFormatProvider()
{
await TestDiagnosticMissingAsync(@" using System.Globalization;
class Program
{
static void Main(string[] args)
{
string.Format(arg0: ""test"", provider: new CultureInfo(""pt-BR"", useUserOverride: false), format: ""This {0[||]} works"");
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task NamespaceAliasForStringClass()
{
await TestDiagnosticMissingAsync(@" using stringAlias = System.String;
class Program
{
static void Main(string[] args)
{
stringAlias.Format(""This {0[||]} works"", ""test"");
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task MethodCallAsAnArgumentToAnotherMethod()
{
await TestDiagnosticMissingAsync(@" using System.IO;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(string.Format(format: ""This {0[||]} works"", arg0:""test""));
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task VerbatimMultipleLines()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(@""This {0}
{1} {2[||]} works"", ""multiple"", ""line"", ""test""));
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task Interpolated()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
var Name = ""Peter"";
var Age = 30;
string.Format($""{Name,[||] 20} is {Age:D3} "");
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task Empty()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(""[||]"");
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task LeftParenOnly()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
string.Format([||];
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task ParenthesesOnly()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
string.Format([||]);
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task EmptyString()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(""[||]"");
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task FormatOnly_NoStringDot()
{
await TestDiagnosticMissingAsync(@" using static System.String
class Program
{
static void Main(string[] args)
{
Format(""[||]"");
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task NamedParameters_BlankName()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
string.Format( : ""value""[||]));
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task DuplicateNamedArgs()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(format:""This [||] "", format:"" test "");
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task GenericIdentifier()
{
await TestDiagnosticMissingAsync(@"using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace Generics_CSharp
{
public class String<T>
{
public void Format<T>(string teststr)
{
Console.WriteLine(teststr);
}
}
class Generics
{
static void Main(string[] args)
{
String<int> testList = new String<int>();
testList.Format<int>(""Test[||]String"");
}
}
}
");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task ClassNamedString()
{
await TestDiagnosticMissingAsync(@"using System;
namespace System
{
public class String
{
public static String Format(string format, object arg0) { return new String(); }
}
}
class C
{
static void Main(string[] args)
{
Console.WriteLine(String.Format(""test {[||]5} "", 1));
}
}
");
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task WarningTurnedOff()
{
await TestDiagnosticMissingAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(""This {1[||]} works"", ""test"");
}
}
", new TestParameters(options: CSharpOptionOffVBOptionOn()));
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task WarningTurnedOn()
{
await TestDiagnosticInfoAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(""This [|{1}|] is my test"", ""teststring1"");
}
}",
options: CSharpOptionOnVBOptionOff(),
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task OnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(""This [|{1}|] is my test"", ""teststring1"");
}
}",
options: null,
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task TwoPlaceholdersWithOnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(""This [|{2}|] is my test"", ""teststring1"", ""teststring2"");
}
}",
options: null,
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task ThreePlaceholdersWithOnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(""This{0}{1}{2}[|{3}|] is my test"", ""teststring1"", ""teststring2"", ""teststring3"");
}
}",
options: null,
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task FourPlaceholdersWithOnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" class Program
{
static void Main(string[] args)
{
string.Format(""This{0}{1}{2}{3}[|{4}|] is my test"", ""teststring1"", ""teststring2"",
""teststring3"", ""teststring4"");
}
}",
options: null,
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task iFormatProviderAndOnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" using System.Globalization;
class Program
{
static void Main(string[] args)
{
string.Format(new CultureInfo(""pt-BR"", useUserOverride: false), ""This [|{1}|] is my test"", ""teststring1"");
}
}",
options: null,
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task iFormatProviderAndTwoPlaceholdersWithOnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" using System.Globalization;
class Program
{
static void Main(string[] args)
{
string.Format(new CultureInfo(""pt-BR"", useUserOverride: false), ""This [|{2}|] is my test"", ""teststring1"", ""teststring2"");
}
}",
options: null,
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task IFormatProviderAndThreePlaceholdersWithOnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" using System.Globalization;
class Program
{
static void Main(string[] args)
{
string.Format(new CultureInfo(""pt-BR"", useUserOverride: false), ""This{0}{1}{2}[|{3}|] is my test"", ""teststring1"",
""teststring2"", ""teststring3"");
}
}",
options: null,
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task IFormatProviderAndFourPlaceholdersWithOnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" using System.Globalization;
class Program
{
static void Main(string[] args)
{
string.Format(new CultureInfo(""pt-BR"", useUserOverride: false), ""This{0}{1}{2}{3}[|{4}|] is my test"", ""teststring1"",
""teststring2"", ""teststring3"", ""teststring4"");
}
}",
options: null,
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task PlaceholderAtBeginningWithOnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" class Program
{
static void Main(string[] args)
{
string.Format( ""[|{1}|]is my test"", ""teststring1"");
}
}",
options: null,
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task PlaceholderAtEndWithOnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" class Program
{
static void Main(string[] args)
{
string.Format( ""is my test [|{2}|]"", ""teststring1"", ""teststring2"");
}
}",
options: null,
diagnosticId: IDEDiagnosticIds.ValidateFormatStringDiagnosticID,
diagnosticSeverity: DiagnosticSeverity.Warning,
diagnosticMessage: FeaturesResources.Format_string_contains_invalid_placeholder);
}
[Fact, Trait(Traits.Feature, Traits.Features.ValidateFormatString)]
public async Task DoubleBracesAtBeginningWithOnePlaceholderOutOfBounds()
{
await TestDiagnosticInfoAsync(@" class Program
{
static void Main(string[] args)
{
string.Format( ""}}is my test [|{2}|]"", ""teststring1"", ""teststring2"");
}
}",