Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions MvvmAIO.R3.SourceGenerators.Tests/R3CommandGeneratorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,108 @@ private void Save()
return Verifier.Verify(GeneratorTestHarness.ToSnapshot(output));
}

[Fact]
public void Generates_command_property_for_void_method_with_parameter()
{
const string source = """
namespace Demo;

public partial class ShellViewModel
{
[MvvmAIO.R3.R3Command]
private void Delete(int id)
{
}
}
""";

GeneratorRunOutput output = GeneratorTestHarness.Run(
source,
generators: new IIncrementalGenerator[] { new R3CommandGenerator() });
string snapshot = GeneratorTestHarness.ToSnapshot(output);

Assert.Contains("ReactiveCommand<int>", snapshot);
Assert.Contains("DeleteCommand", snapshot);
Assert.DoesNotContain("R3SG", snapshot.Split("Generated Sources:")[0]);
}

[Fact]
public void Generates_command_property_for_async_task_method()
{
const string source = """
namespace Demo;

public partial class ShellViewModel
{
[MvvmAIO.R3.R3Command]
private System.Threading.Tasks.Task SaveAsync()
{
return System.Threading.Tasks.Task.CompletedTask;
}
}
""";

GeneratorRunOutput output = GeneratorTestHarness.Run(
source,
generators: new IIncrementalGenerator[] { new R3CommandGenerator() });
string snapshot = GeneratorTestHarness.ToSnapshot(output);

Assert.Contains("ReactiveCommand", snapshot);
Assert.Contains("SaveAsyncCommand", snapshot);
Assert.Contains("ValueTask", snapshot);
Assert.DoesNotContain("R3SG", snapshot.Split("Generated Sources:")[0]);
}

[Fact]
public void Generates_command_property_for_async_task_of_T_method()
{
const string source = """
namespace Demo;

public partial class ShellViewModel
{
[MvvmAIO.R3.R3Command]
private System.Threading.Tasks.Task<string> FetchData(int pageIndex)
{
return System.Threading.Tasks.Task.FromResult("data");
}
}
""";

GeneratorRunOutput output = GeneratorTestHarness.Run(
source,
generators: new IIncrementalGenerator[] { new R3CommandGenerator() });
string snapshot = GeneratorTestHarness.ToSnapshot(output);

Assert.Contains("ReactiveCommand<int, string>", snapshot);
Assert.Contains("FetchDataCommand", snapshot);
Assert.DoesNotContain("R3SG", snapshot.Split("Generated Sources:")[0]);
}

[Fact]
public void Supports_custom_command_name()
{
const string source = """
namespace Demo;

public partial class ShellViewModel
{
[MvvmAIO.R3.R3Command(CommandName = "Submit")]
private void Save()
{
}
}
""";

GeneratorRunOutput output = GeneratorTestHarness.Run(
source,
generators: new IIncrementalGenerator[] { new R3CommandGenerator() });
string snapshot = GeneratorTestHarness.ToSnapshot(output);

Assert.Contains("Submit", snapshot);
Assert.DoesNotContain("SaveCommand", snapshot);
}

[Fact]
public Task Reports_diagnostic_when_containing_type_is_not_partial()
{
Expand Down
2 changes: 1 addition & 1 deletion MvvmAIO.R3.SourceGenerators/R3CommandGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

namespace MvvmAIO.R3.SourceGenerators;

// [Generator(LanguageNames.CSharp)]
[Generator(LanguageNames.CSharp)]
public sealed class R3CommandGenerator : IIncrementalGenerator
{
private const string AttributeMetadataName = "MvvmAIO.R3.R3CommandAttribute";
Expand Down
Loading