Use raw string literals

This commit is contained in:
Oleksii Holub
2022-12-08 03:06:31 +02:00
parent 85a9f157ad
commit aac9c968eb
31 changed files with 2513 additions and 2176 deletions

View File

@@ -13,11 +13,13 @@ public class CommandMustBeAnnotatedAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -28,12 +30,14 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public abstract class MyCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -44,11 +48,13 @@ public abstract class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public abstract class MyCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -59,11 +65,13 @@ public abstract class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class Foo
{
public int Bar { get; set; } = 5;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,12 +13,14 @@ public class CommandMustImplementInterfaceAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -29,12 +31,14 @@ public class MyCommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -45,11 +49,13 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class Foo
{
public int Bar { get; set; } = 5;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,12 +13,14 @@ public class OptionMustBeInsideCommandAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyClass
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -29,15 +31,17 @@ public class MyClass
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -48,12 +52,14 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public abstract class MyCommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -64,14 +70,16 @@ public abstract class MyCommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class OptionMustHaveNameOrShortNameAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -21,7 +22,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -32,15 +34,17 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -51,7 +55,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -59,7 +64,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -70,14 +76,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,18 +13,20 @@ public class OptionMustHaveUniqueNameAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -35,18 +37,20 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
[CommandOption(""bar"")]
[CommandOption("bar")]
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -57,7 +61,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -65,7 +70,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -76,14 +82,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class OptionMustHaveUniqueShortNameAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -24,7 +25,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -35,7 +37,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -46,7 +49,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -57,7 +61,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -68,7 +73,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -79,15 +85,17 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -98,14 +106,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class OptionMustHaveValidConverterAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyConverter
{
public string Convert(string rawValue) => rawValue;
@@ -22,11 +23,12 @@ public class MyConverter
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"", Converter = typeof(MyConverter))]
[CommandOption("foo", Converter = typeof(MyConverter))]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -37,7 +39,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyConverter : BindingConverter<int>
{
public override int Convert(string rawValue) => 42;
@@ -46,11 +49,12 @@ public class MyConverter : BindingConverter<int>
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"", Converter = typeof(MyConverter))]
[CommandOption("foo", Converter = typeof(MyConverter))]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -61,7 +65,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyConverter : BindingConverter<string>
{
public override string Convert(string rawValue) => rawValue;
@@ -70,11 +75,12 @@ public class MyConverter : BindingConverter<string>
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"", Converter = typeof(MyConverter))]
[CommandOption("foo", Converter = typeof(MyConverter))]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -85,7 +91,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyConverter : BindingConverter<int>
{
public override int Convert(string rawValue) => 42;
@@ -94,11 +101,12 @@ public class MyConverter : BindingConverter<int>
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"", Converter = typeof(MyConverter))]
[CommandOption("foo", Converter = typeof(MyConverter))]
public int? Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -109,7 +117,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyConverter : BindingConverter<string>
{
public override string Convert(string rawValue) => rawValue;
@@ -118,11 +127,12 @@ public class MyConverter : BindingConverter<string>
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"", Converter = typeof(MyConverter))]
[CommandOption("foo", Converter = typeof(MyConverter))]
public IReadOnlyList<string> Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -133,15 +143,17 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -152,14 +164,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,15 +13,17 @@ public class OptionMustHaveValidNameAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""f"")]
[CommandOption("f")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -32,15 +34,17 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""1foo"")]
[CommandOption("1foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -51,15 +55,17 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -70,7 +76,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -78,7 +85,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -89,14 +97,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class OptionMustHaveValidShortNameAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -21,7 +22,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -32,7 +34,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -40,7 +43,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -51,15 +55,17 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -70,14 +76,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class OptionMustHaveValidValidatorsAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyValidator
{
public void Validate(string value) {}
@@ -22,11 +23,12 @@ public class MyValidator
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"", Validators = new[] {typeof(MyValidator)})]
[CommandOption("foo", Validators = new[] {typeof(MyValidator)})]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -37,7 +39,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyValidator : BindingValidator<int>
{
public override BindingValidationError Validate(int value) => Ok();
@@ -46,11 +49,12 @@ public class MyValidator : BindingValidator<int>
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"", Validators = new[] {typeof(MyValidator)})]
[CommandOption("foo", Validators = new[] {typeof(MyValidator)})]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -61,7 +65,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyValidator : BindingValidator<string>
{
public override BindingValidationError Validate(string value) => Ok();
@@ -70,11 +75,12 @@ public class MyValidator : BindingValidator<string>
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"", Validators = new[] {typeof(MyValidator)})]
[CommandOption("foo", Validators = new[] {typeof(MyValidator)})]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -85,15 +91,17 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -104,14 +112,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,12 +13,14 @@ public class ParameterMustBeInsideCommandAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyClass
{
[CommandParameter(0)]
public string Foo { get; set; }
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -29,7 +31,8 @@ public class MyClass
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -37,7 +40,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -48,12 +52,14 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public abstract class MyCommand
{
[CommandParameter(0)]
public string Foo { get; set; }
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -64,14 +70,16 @@ public abstract class MyCommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,18 +13,20 @@ public class ParameterMustBeLastIfNonRequiredAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandParameter(0, Name = ""foo"", IsRequired = false)]
[CommandParameter(0, Name = "foo", IsRequired = false)]
public string Foo { get; set; }
[CommandParameter(1, Name = ""bar"")]
[CommandParameter(1, Name = "bar")]
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -35,18 +37,20 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandParameter(0, Name = ""foo"")]
[CommandParameter(0, Name = "foo")]
public string Foo { get; set; }
[CommandParameter(1, Name = ""bar"", IsRequired = false)]
[CommandParameter(1, Name = "bar", IsRequired = false)]
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -57,18 +61,20 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandParameter(0, Name = ""foo"")]
[CommandParameter(0, Name = "foo")]
public string Foo { get; set; }
[CommandParameter(1, Name = ""bar"", IsRequired = true)]
[CommandParameter(1, Name = "bar", IsRequired = true)]
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -79,14 +85,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class ParameterMustBeLastIfNonScalarAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -24,7 +25,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -35,7 +37,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -46,7 +49,8 @@ public class MyCommand : ICommand
public string[] Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -57,7 +61,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -68,7 +73,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -79,14 +85,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class ParameterMustBeSingleIfNonRequiredAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -24,7 +25,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -35,7 +37,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -46,7 +49,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -57,7 +61,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -68,7 +73,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -79,14 +85,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class ParameterMustBeSingleIfNonScalarAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -24,7 +25,8 @@ public class MyCommand : ICommand
public string[] Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -35,7 +37,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -46,7 +49,8 @@ public class MyCommand : ICommand
public string[] Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -57,7 +61,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -68,7 +73,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -79,14 +85,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,18 +13,20 @@ public class ParameterMustHaveUniqueNameAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandParameter(0, Name = ""foo"")]
[CommandParameter(0, Name = "foo")]
public string Foo { get; set; }
[CommandParameter(1, Name = ""foo"")]
[CommandParameter(1, Name = "foo")]
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -35,18 +37,20 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
[CommandParameter(0, Name = ""foo"")]
[CommandParameter(0, Name = "foo")]
public string Foo { get; set; }
[CommandParameter(1, Name = ""bar"")]
[CommandParameter(1, Name = "bar")]
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -57,14 +61,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class ParameterMustHaveUniqueOrderAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -24,7 +25,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -35,7 +37,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -46,7 +49,8 @@ public class MyCommand : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -57,14 +61,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class ParameterMustHaveValidConverterAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyConverter
{
public string Convert(string rawValue) => rawValue;
@@ -26,7 +27,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -37,7 +39,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyConverter : BindingConverter<int>
{
public override int Convert(string rawValue) => 42;
@@ -50,7 +53,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
@@ -62,7 +66,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyConverter : BindingConverter<string>
{
public override string Convert(string rawValue) => rawValue;
@@ -75,7 +80,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -86,7 +92,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyConverter : BindingConverter<int>
{
public override int Convert(string rawValue) => 42;
@@ -95,11 +102,12 @@ public class MyConverter : BindingConverter<int>
[Command]
public class MyCommand : ICommand
{
[CommandOption(""foo"", Converter = typeof(MyConverter))]
[CommandOption("foo", Converter = typeof(MyConverter))]
public int? Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -110,7 +118,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyConverter : BindingConverter<string>
{
public override string Convert(string rawValue) => rawValue;
@@ -123,7 +132,8 @@ public class MyCommand : ICommand
public IReadOnlyList<string> Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -134,7 +144,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -142,7 +153,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -153,14 +165,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,7 +13,8 @@ public class ParameterMustHaveValidValidatorsAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyValidator
{
public void Validate(string value) {}
@@ -26,7 +27,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -37,7 +39,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyValidator : BindingValidator<int>
{
public override BindingValidationError Validate(int value) => Ok();
@@ -50,7 +53,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -61,7 +65,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
public class MyValidator : BindingValidator<string>
{
public override BindingValidationError Validate(string value) => Ok();
@@ -74,7 +79,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -85,7 +91,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -93,7 +100,8 @@ public class MyCommand : ICommand
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -104,14 +112,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -13,16 +13,18 @@ public class SystemConsoleShouldBeAvoidedAnalyzerSpecs
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
Console.WriteLine(""Hello world"");
Console.WriteLine("Hello world");
return default;
}
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -33,7 +35,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -42,7 +45,9 @@ public class MyCommand : ICommand
Console.ForegroundColor = ConsoleColor.Black;
return default;
}
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
}
@@ -52,16 +57,18 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
Console.Error.WriteLine(""Hello world"");
Console.Error.WriteLine("Hello world");
return default;
}
}";
}
""";
// Act & assert
Analyzer.Should().ProduceDiagnostics(code);
@@ -72,16 +79,18 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Hello world"");
console.Output.WriteLine("Hello world");
return default;
}
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -92,14 +101,16 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
public void SomeOtherMethod() => Console.WriteLine(""Test"");
public void SomeOtherMethod() => Console.WriteLine("Test");
public ValueTask ExecuteAsync(IConsole console) => default;
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);
@@ -110,7 +121,8 @@ public class MyCommand : ICommand
{
// Arrange
// language=cs
const string code = @"
const string code =
"""
[Command]
public class MyCommand : ICommand
{
@@ -118,7 +130,8 @@ public class MyCommand : ICommand
{
return default;
}
}";
}
""";
// Act & assert
Analyzer.Should().NotProduceDiagnostics(code);

View File

@@ -21,7 +21,7 @@ public class CancellationSpecs : SpecsBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -34,15 +34,17 @@ public class Command : ICommand
console.RegisterCancellationHandler()
);
console.Output.WriteLine(""Completed successfully"");
console.Output.WriteLine("Completed successfully");
}
catch (OperationCanceledException)
{
console.Output.WriteLine(""Cancelled"");
console.Output.WriteLine("Cancelled");
throw;
}
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)

View File

@@ -48,7 +48,7 @@ public class ConsoleSpecs : SpecsBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -62,13 +62,14 @@ public class Command : ICommand
console.CursorLeft = 42;
console.CursorTop = 24;
console.Output.WriteLine(""Hello "");
console.Error.WriteLine(""world!"");
console.Output.WriteLine("Hello ");
console.Error.WriteLine("world!");
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -108,7 +109,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -121,7 +122,8 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -151,7 +153,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -164,7 +166,8 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)

View File

@@ -21,7 +21,7 @@ public class ConversionSpecs : SpecsBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -34,7 +34,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -59,7 +61,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -72,7 +74,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -97,7 +101,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -109,13 +113,15 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + Foo);
console.Output.WriteLine(""Bar = "" + Bar);
console.Output.WriteLine("Foo = " + Foo);
console.Output.WriteLine("Bar = " + Bar);
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -143,7 +149,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -156,7 +162,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -181,7 +189,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -194,7 +202,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -219,7 +229,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -232,7 +242,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -257,7 +269,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -266,11 +278,13 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(Foo.ToString(""u"", CultureInfo.InvariantCulture));
console.Output.WriteLine(Foo.ToString("u", CultureInfo.InvariantCulture));
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -295,7 +309,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -308,7 +322,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -333,7 +349,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public enum CustomEnum { One = 1, Two = 2, Three = 3 }
[Command]
@@ -348,7 +364,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -373,7 +391,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -385,13 +403,15 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + Foo);
console.Output.WriteLine(""Bar = "" + Bar);
console.Output.WriteLine("Foo = " + Foo);
console.Output.WriteLine("Bar = " + Bar);
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -419,7 +439,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public enum CustomEnum { One = 1, Two = 2, Three = 3 }
[Command]
@@ -433,13 +453,15 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + (int?) Foo);
console.Output.WriteLine(""Bar = "" + (int?) Bar);
console.Output.WriteLine("Foo = " + (int?) Foo);
console.Output.WriteLine("Bar = " + (int?) Bar);
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -467,7 +489,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public class CustomType
{
public string Value { get; }
@@ -487,7 +509,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -512,7 +536,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public class CustomTypeA
{
public string Value { get; }
@@ -544,13 +568,15 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + Foo.Value);
console.Output.WriteLine(""Bar = "" + Bar.Value);
console.Output.WriteLine("Foo = " + Foo.Value);
console.Output.WriteLine("Bar = " + Bar.Value);
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -578,7 +604,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public class CustomConverter : BindingConverter<int>
{
public override int Convert(string rawValue) =>
@@ -597,7 +623,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -622,7 +650,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -637,7 +665,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -666,7 +696,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -681,7 +711,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -710,7 +742,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -725,7 +757,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -754,7 +788,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -769,7 +803,9 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -798,7 +834,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -807,7 +843,9 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -832,7 +870,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public class CustomType {}
[Command]
@@ -843,7 +881,9 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -868,7 +908,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public class CustomType : IEnumerable<object>
{
public IEnumerator<object> GetEnumerator() => Enumerable.Empty<object>().GetEnumerator();
@@ -884,7 +924,9 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -909,7 +951,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public class ValidatorA : BindingValidator<int>
{
public override BindingValidationError Validate(int value) => Ok();
@@ -917,7 +959,7 @@ public class ValidatorA : BindingValidator<int>
public class ValidatorB : BindingValidator<int>
{
public override BindingValidationError Validate(int value) => Error(""Hello world"");
public override BindingValidationError Validate(int value) => Error("Hello world");
}
[Command]
@@ -928,7 +970,9 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)
@@ -953,14 +997,14 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public class CustomType
{
public string Value { get; }
private CustomType(string value) => Value = value;
public static CustomType Parse(string value) => throw new Exception(""Hello world"");
public static CustomType Parse(string value) => throw new Exception("Hello world");
}
[Command]
@@ -971,7 +1015,9 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
.UseConsole(FakeConsole)

View File

@@ -75,13 +75,14 @@ public class DirectivesSpecs : SpecsBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
[Command(""cmd"")]
"""
[Command("cmd")]
public class Command : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)

View File

@@ -25,11 +25,11 @@ public class EnvironmentSpecs : SpecsBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", IsRequired = true, EnvironmentVariable = ""ENV_FOO"")]
[CommandOption("foo", IsRequired = true, EnvironmentVariable = "ENV_FOO")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
@@ -38,7 +38,8 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -67,11 +68,11 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", EnvironmentVariable = ""ENV_FOO"")]
[CommandOption("foo", EnvironmentVariable = "ENV_FOO")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
@@ -80,7 +81,8 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -109,11 +111,11 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", EnvironmentVariable = ""ENV_FOO"")]
[CommandOption("foo", EnvironmentVariable = "ENV_FOO")]
public IReadOnlyList<string> Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
@@ -124,7 +126,8 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -156,11 +159,11 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", EnvironmentVariable = ""ENV_FOO"")]
[CommandOption("foo", EnvironmentVariable = "ENV_FOO")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
@@ -169,7 +172,8 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -198,11 +202,11 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", EnvironmentVariable = ""ENV_FOO"")]
[CommandOption("foo", EnvironmentVariable = "ENV_FOO")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
@@ -211,7 +215,8 @@ public class Command : ICommand
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)

View File

@@ -22,14 +22,15 @@ public class ErrorReportingSpecs : SpecsBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
public ValueTask ExecuteAsync(IConsole console) =>
throw new Exception(""Something went wrong"");
throw new Exception("Something went wrong");
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -60,14 +61,15 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
public ValueTask ExecuteAsync(IConsole console) =>
throw new Exception(""Something went wrong"", new Exception(""Another exception""));
throw new Exception("Something went wrong", new Exception("Another exception"));
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -99,14 +101,15 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
public ValueTask ExecuteAsync(IConsole console) =>
throw new CommandException(""Something went wrong"", 69);
throw new CommandException("Something went wrong", 69);
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -134,14 +137,15 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
public ValueTask ExecuteAsync(IConsole console) =>
throw new CommandException("""", 69);
throw new CommandException("", 69);
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -172,14 +176,15 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
public ValueTask ExecuteAsync(IConsole console) =>
throw new CommandException(""Something went wrong"", 69, true);
throw new CommandException("Something went wrong", 69, true);
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)

View File

@@ -44,13 +44,14 @@ public class HelpTextSpecs : SpecsBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class DefaultCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -77,19 +78,20 @@ public class DefaultCommand : ICommand
// Arrange
var commandTypes = DynamicCommandBuilder.CompileMany(
// language=cs
@"
[Command(""cmd"")]
"""
[Command("cmd")]
public class NamedCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd child"")]
[Command("cmd child")]
public class NamedChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommands(commandTypes)
@@ -116,25 +118,26 @@ public class NamedChildCommand : ICommand
// Arrange
var commandTypes = DynamicCommandBuilder.CompileMany(
// language=cs
@"
"""
[Command]
public class DefaultCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd"", Description = ""Description of a named command."")]
[Command("cmd", Description = "Description of a named command.")]
public class NamedCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd child"")]
[Command("cmd child")]
public class NamedChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommands(commandTypes)
@@ -160,25 +163,26 @@ public class NamedChildCommand : ICommand
// Arrange
var commandTypes = DynamicCommandBuilder.CompileMany(
// language=cs
@"
"""
[Command]
public class DefaultCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd"")]
[Command("cmd")]
public class NamedCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd child"", Description = ""Description of a named child command."")]
[Command("cmd child", Description = "Description of a named child command.")]
public class NamedChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommands(commandTypes)
@@ -257,13 +261,15 @@ public class NamedChildCommand : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
[Command(Description = ""Description of the default command."")]
"""
[Command(Description = "Description of the default command.")]
public class DefaultCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -292,19 +298,21 @@ public class DefaultCommand : ICommand
// Arrange
var commandTypes = DynamicCommandBuilder.CompileMany(
// language=cs
@"
"""
[Command]
public class DefaultCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd"")]
[Command("cmd")]
public class NamedCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommands(commandTypes)
@@ -333,7 +341,8 @@ public class NamedCommand : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -348,7 +357,8 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -378,7 +388,8 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
// Base members appear last in reflection order
public abstract class CommandBase : ICommand
{
@@ -399,7 +410,8 @@ public class Command : CommandBase
public override ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -428,22 +440,24 @@ public class Command : CommandBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", IsRequired = true)]
[CommandOption("foo", IsRequired = true)]
public string Foo { get; set; }
[CommandOption(""bar"")]
[CommandOption("bar")]
public string Bar { get; set; }
[CommandOption(""baz"", IsRequired = true)]
[CommandOption("baz", IsRequired = true)]
public IReadOnlyList<string> Baz { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -472,19 +486,21 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandParameter(0, Name = ""foo"", Description = ""Description of foo."")]
[CommandParameter(0, Name = "foo", Description = "Description of foo.")]
public string Foo { get; set; }
[CommandOption(""bar"", Description = ""Description of bar."")]
[CommandOption("bar", Description = "Description of bar.")]
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -515,13 +531,15 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -551,13 +569,15 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
[Command(""cmd"")]
"""
[Command("cmd")]
public class Command : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -589,7 +609,8 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public enum CustomEnum { One, Two, Three }
[Command]
@@ -598,12 +619,13 @@ public class Command : ICommand
[CommandParameter(0)]
public CustomEnum Foo { get; set; }
[CommandOption(""bar"")]
[CommandOption("bar")]
public CustomEnum Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -634,7 +656,8 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public enum CustomEnum { One, Two, Three }
[Command]
@@ -643,12 +666,13 @@ public class Command : ICommand
[CommandParameter(0)]
public IReadOnlyList<CustomEnum> Foo { get; set; }
[CommandOption(""bar"")]
[CommandOption("bar")]
public IReadOnlyList<CustomEnum> Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -679,7 +703,8 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public enum CustomEnum { One, Two, Three }
[Command]
@@ -688,12 +713,13 @@ public class Command : ICommand
[CommandParameter(0)]
public CustomEnum? Foo { get; set; }
[CommandOption(""bar"")]
[CommandOption("bar")]
public IReadOnlyList<CustomEnum?> Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -724,21 +750,23 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public enum CustomEnum { One, Two, Three }
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", EnvironmentVariable = ""ENV_FOO"")]
[CommandOption("foo", EnvironmentVariable = "ENV_FOO")]
public CustomEnum Foo { get; set; }
[CommandOption(""bar"", EnvironmentVariable = ""ENV_BAR"")]
[CommandOption("bar", EnvironmentVariable = "ENV_BAR")]
public CustomEnum Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -768,39 +796,41 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public enum CustomEnum { One, Two, Three }
[Command]
public class Command : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public object Foo { get; set; } = 42;
[CommandOption(""bar"")]
public string Bar { get; set; } = ""hello"";
[CommandOption("bar")]
public string Bar { get; set; } = "hello";
[CommandOption(""baz"")]
public IReadOnlyList<string> Baz { get; set; } = new[] {""one"", ""two"", ""three""};
[CommandOption("baz")]
public IReadOnlyList<string> Baz { get; set; } = new[] {"one", "two", "three"};
[CommandOption(""qwe"")]
[CommandOption("qwe")]
public bool Qwe { get; set; } = true;
[CommandOption(""qop"")]
[CommandOption("qop")]
public int? Qop { get; set; } = 1337;
[CommandOption(""zor"")]
[CommandOption("zor")]
public TimeSpan Zor { get; set; } = TimeSpan.FromMinutes(123);
[CommandOption(""lol"")]
[CommandOption("lol")]
public CustomEnum Lol { get; set; } = CustomEnum.Two;
[CommandOption(""hmm"", IsRequired = true)]
public string Hmm { get; set; } = ""not printed"";
[CommandOption("hmm", IsRequired = true)]
public string Hmm { get; set; } = "not printed";
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -836,25 +866,27 @@ public class Command : ICommand
// Arrange
var commandTypes = DynamicCommandBuilder.CompileMany(
// language=cs
@"
[Command(""cmd1"", Description = ""Description of one command."")]
"""
[Command("cmd1", Description = "Description of one command.")]
public class FirstCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd2"", Description = ""Description of another command."")]
[Command("cmd2", Description = "Description of another command.")]
public class SecondCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd2 child"", Description = ""Description of another command's child command."")]
[Command("cmd2 child", Description = "Description of another command's child command.")]
public class SecondCommandChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommands(commandTypes)
@@ -890,37 +922,39 @@ public class SecondCommandChildCommand : ICommand
// Arrange
var commandTypes = DynamicCommandBuilder.CompileMany(
// language=cs
@"
[Command(""cmd1"")]
"""
[Command("cmd1")]
public class FirstCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd1 child1"")]
[Command("cmd1 child1")]
public class FirstCommandFirstChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd2"")]
[Command("cmd2")]
public class SecondCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd2 child11"")]
[Command("cmd2 child11")]
public class SecondCommandFirstChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd2 child2"")]
[Command("cmd2 child2")]
public class SecondCommandSecondChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommands(commandTypes)
@@ -950,25 +984,27 @@ public class SecondCommandSecondChildCommand : ICommand
// Arrange
var commandTypes = DynamicCommandBuilder.CompileMany(
// language=cs
@"
[Command(""cmd1"")]
"""
[Command("cmd1")]
public class FirstCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd2 child1"")]
[Command("cmd2 child1")]
public class SecondCommandFirstChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
[Command(""cmd2 child2"")]
[Command("cmd2 child2")]
public class SecondCommandSecondChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console) => default;
}
");
""");
var application = new CliApplicationBuilder()
.AddCommands(commandTypes)

View File

@@ -22,11 +22,11 @@ public class OptionBindingSpecs : SpecsBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public bool Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
@@ -34,7 +34,9 @@ public class Command : ICommand
console.Output.WriteLine(Foo);
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -60,7 +62,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -72,7 +74,9 @@ public class Command : ICommand
console.Output.WriteLine(Foo);
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -98,24 +102,26 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
[CommandOption(""bar"")]
[CommandOption("bar")]
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + Foo);
console.Output.WriteLine(""Bar = "" + Bar);
console.Output.WriteLine("Foo = " + Foo);
console.Output.WriteLine("Bar = " + Bar);
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -144,7 +150,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -156,12 +162,14 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + Foo);
console.Output.WriteLine(""Bar = "" + Bar);
console.Output.WriteLine("Foo = " + Foo);
console.Output.WriteLine("Bar = " + Bar);
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -190,7 +198,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -202,12 +210,14 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + Foo);
console.Output.WriteLine(""Bar = "" + Bar);
console.Output.WriteLine("Foo = " + Foo);
console.Output.WriteLine("Bar = " + Bar);
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -236,11 +246,11 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""Foo"")]
[CommandOption("Foo")]
public IReadOnlyList<string> Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
@@ -250,7 +260,9 @@ public class Command : ICommand
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -280,7 +292,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -294,7 +306,9 @@ public class Command : ICommand
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -324,11 +338,11 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public IReadOnlyList<string> Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
@@ -338,7 +352,9 @@ public class Command : ICommand
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -368,7 +384,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -382,7 +398,9 @@ public class Command : ICommand
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -412,11 +430,11 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", 'f')]
[CommandOption("foo", 'f')]
public IReadOnlyList<string> Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
@@ -426,7 +444,9 @@ public class Command : ICommand
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -456,24 +476,26 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
[CommandOption(""bar"")]
public string Bar { get; set; } = ""hello"";
[CommandOption("bar")]
public string Bar { get; set; } = "hello";
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + Foo);
console.Output.WriteLine(""Bar = "" + Bar);
console.Output.WriteLine("Foo = " + Foo);
console.Output.WriteLine("Bar = " + Bar);
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -502,7 +524,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
public static class SharedContext
{
public static int Foo { get; set; }
@@ -512,7 +534,7 @@ public static class SharedContext
public interface IHasFoo : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public int Foo
{
get => SharedContext.Foo;
@@ -522,7 +544,7 @@ public interface IHasFoo : ICommand
public interface IHasBar : ICommand
{
[CommandOption(""bar"")]
[CommandOption("bar")]
public bool Bar
{
get => SharedContext.Bar;
@@ -538,19 +560,20 @@ public interface IHasBaz : ICommand
[Command]
public class Command : IHasFoo, IHasBar, IHasBaz
{
[CommandOption(""baz"")]
[CommandOption("baz")]
public string Baz { get; set; }
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + SharedContext.Foo);
console.Output.WriteLine(""Bar = "" + SharedContext.Bar);
console.Output.WriteLine(""Baz = "" + Baz);
console.Output.WriteLine("Foo = " + SharedContext.Foo);
console.Output.WriteLine("Bar = " + SharedContext.Bar);
console.Output.WriteLine("Baz = " + Baz);
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -579,11 +602,11 @@ public class Command : IHasFoo, IHasBar, IHasBaz
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
@@ -592,7 +615,9 @@ public class Command : ICommand
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -618,15 +643,17 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", IsRequired = true)]
[CommandOption("foo", IsRequired = true)]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -652,15 +679,17 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", IsRequired = true)]
[CommandOption("foo", IsRequired = true)]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -686,15 +715,17 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"", IsRequired = true)]
[CommandOption("foo", IsRequired = true)]
public IReadOnlyList<string> Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -720,15 +751,17 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -754,15 +787,17 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
[CommandOption(""foo"")]
[CommandOption("foo")]
public string Foo { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)

View File

@@ -21,7 +21,7 @@ public class ParameterBindingSpecs : SpecsBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -33,12 +33,14 @@ public class Command : ICommand
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + Foo);
console.Output.WriteLine(""Bar = "" + Bar);
console.Output.WriteLine("Foo = " + Foo);
console.Output.WriteLine("Bar = " + Bar);
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -67,7 +69,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -80,20 +82,22 @@ public class Command : ICommand
[CommandParameter(2)]
public IReadOnlyList<string> Baz { get; set; }
[CommandOption(""boo"")]
[CommandOption("boo")]
public string Boo { get; set; }
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + Foo);
console.Output.WriteLine(""Bar = "" + Bar);
console.Output.WriteLine("Foo = " + Foo);
console.Output.WriteLine("Bar = " + Bar);
foreach (var i in Baz)
console.Output.WriteLine(""Baz = "" + i);
console.Output.WriteLine("Baz = " + i);
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -125,7 +129,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -133,16 +137,18 @@ public class Command : ICommand
public string Foo { get; set; }
[CommandParameter(1, IsRequired = false)]
public string Bar { get; set; } = ""xyz"";
public string Bar { get; set; } = "xyz";
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""Foo = "" + Foo);
console.Output.WriteLine(""Bar = "" + Bar);
console.Output.WriteLine("Foo = " + Foo);
console.Output.WriteLine("Bar = " + Bar);
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -171,7 +177,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -182,7 +188,9 @@ public class Command : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -208,7 +216,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -219,7 +227,9 @@ public class Command : ICommand
public IReadOnlyList<string> Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -245,7 +255,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -256,7 +266,9 @@ public class Command : ICommand
public string Bar { get; set; }
public ValueTask ExecuteAsync(IConsole console) => default;
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)

View File

@@ -21,37 +21,38 @@ public class RoutingSpecs : SpecsBase
// Arrange
var commandTypes = DynamicCommandBuilder.CompileMany(
// language=cs
@"
"""
[Command]
public class DefaultCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""default"");
console.Output.WriteLine("default");
return default;
}
}
[Command(""cmd"")]
[Command("cmd")]
public class NamedCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""cmd"");
console.Output.WriteLine("cmd");
return default;
}
}
[Command(""cmd child"")]
[Command("cmd child")]
public class NamedChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""cmd child"");
console.Output.WriteLine("cmd child");
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommands(commandTypes)
@@ -77,37 +78,38 @@ public class NamedChildCommand : ICommand
// Arrange
var commandTypes = DynamicCommandBuilder.CompileMany(
// language=cs
@"
"""
[Command]
public class DefaultCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""default"");
console.Output.WriteLine("default");
return default;
}
}
[Command(""cmd"")]
[Command("cmd")]
public class NamedCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""cmd"");
console.Output.WriteLine("cmd");
return default;
}
}
[Command(""cmd child"")]
[Command("cmd child")]
public class NamedChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""cmd child"");
console.Output.WriteLine("cmd child");
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommands(commandTypes)
@@ -133,37 +135,38 @@ public class NamedChildCommand : ICommand
// Arrange
var commandTypes = DynamicCommandBuilder.CompileMany(
// language=cs
@"
"""
[Command]
public class DefaultCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""default"");
console.Output.WriteLine("default");
return default;
}
}
[Command(""cmd"")]
[Command("cmd")]
public class NamedCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""cmd"");
console.Output.WriteLine("cmd");
return default;
}
}
[Command(""cmd child"")]
[Command("cmd child")]
public class NamedChildCommand : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""cmd child"");
console.Output.WriteLine("cmd child");
return default;
}
}
");
"""
);
var application = new CliApplicationBuilder()
.AddCommands(commandTypes)

View File

@@ -23,16 +23,18 @@ public class TypeActivationSpecs : SpecsBase
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""foo"");
console.Output.WriteLine("foo");
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -59,14 +61,16 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
public Command(string foo) {}
public ValueTask ExecuteAsync(IConsole console) => default;
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -93,7 +97,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -106,7 +110,9 @@ public class Command : ICommand
console.Output.WriteLine(_foo);
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)
@@ -133,7 +139,7 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
@@ -146,7 +152,9 @@ public class Command : ICommand
console.Output.WriteLine(_foo);
return default;
}
}");
}
"""
);
var serviceProvider = new ServiceCollection()
.AddSingleton(commandType, Activator.CreateInstance(commandType, "Hello world")!)
@@ -177,16 +185,18 @@ public class Command : ICommand
// Arrange
var commandType = DynamicCommandBuilder.Compile(
// language=cs
@"
"""
[Command]
public class Command : ICommand
{
public ValueTask ExecuteAsync(IConsole console)
{
console.Output.WriteLine(""foo"");
console.Output.WriteLine("foo");
return default;
}
}");
}
"""
);
var application = new CliApplicationBuilder()
.AddCommand(commandType)