diff --git a/Dango.sln b/Dango.sln
index 83cb503..cb6a19a 100644
--- a/Dango.sln
+++ b/Dango.sln
@@ -1,4 +1,4 @@
-
+
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dango", "src\Dango\Dango.csproj", "{0C1C7D4D-55C2-4083-BB84-8FA2DC171B0E}"
EndProject
@@ -6,7 +6,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dango.Abstractions", "src\D
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{1802D0C6-8F63-40F7-A865-03FC7526E6BE}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dango.Tests", "test\Dango.Tests\Dango.Tests.csproj", "{436B51E5-ACF9-4F52-866B-A4C99F5C01E4}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dango.Tests.Utils", "test\Dango.Tests.Utils\Dango.Tests.Utils.csproj", "{A1B2C3D4-E5F6-4A5B-8C9D-0E1F2A3B4C5D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dango.Unit.Tests", "test\Dango.Unit.Tests\Dango.Unit.Tests.csproj", "{436B51E5-ACF9-4F52-866B-A4C99F5C01E4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -22,12 +24,17 @@ Global
{91D3200F-AAF2-4C9C-9EF1-5549799FAF68}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91D3200F-AAF2-4C9C-9EF1-5549799FAF68}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91D3200F-AAF2-4C9C-9EF1-5549799FAF68}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A1B2C3D4-E5F6-4A5B-8C9D-0E1F2A3B4C5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A1B2C3D4-E5F6-4A5B-8C9D-0E1F2A3B4C5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A1B2C3D4-E5F6-4A5B-8C9D-0E1F2A3B4C5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A1B2C3D4-E5F6-4A5B-8C9D-0E1F2A3B4C5D}.Release|Any CPU.Build.0 = Release|Any CPU
{436B51E5-ACF9-4F52-866B-A4C99F5C01E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{436B51E5-ACF9-4F52-866B-A4C99F5C01E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{436B51E5-ACF9-4F52-866B-A4C99F5C01E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{436B51E5-ACF9-4F52-866B-A4C99F5C01E4}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
+ {A1B2C3D4-E5F6-4A5B-8C9D-0E1F2A3B4C5D} = {1802D0C6-8F63-40F7-A865-03FC7526E6BE}
{436B51E5-ACF9-4F52-866B-A4C99F5C01E4} = {1802D0C6-8F63-40F7-A865-03FC7526E6BE}
EndGlobalSection
EndGlobal
diff --git a/test/Dango.Tests.Utils/Dango.Tests.Utils.csproj b/test/Dango.Tests.Utils/Dango.Tests.Utils.csproj
new file mode 100644
index 0000000..7123146
--- /dev/null
+++ b/test/Dango.Tests.Utils/Dango.Tests.Utils.csproj
@@ -0,0 +1,21 @@
+
+
+
+ net10.0
+ latest
+ enable
+ enable
+ false
+ true
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/Dango.Tests.Utils/EnumDefinitionBuilder.cs b/test/Dango.Tests.Utils/EnumDefinitionBuilder.cs
new file mode 100644
index 0000000..f11fdb1
--- /dev/null
+++ b/test/Dango.Tests.Utils/EnumDefinitionBuilder.cs
@@ -0,0 +1,36 @@
+using System.Text;
+
+namespace Dango.Tests.Utils;
+
+public static class EnumDefinitionBuilder
+{
+ public static string BuildEnumDefinition(string enumName, int valueCount, string? namespaceName = null)
+ {
+ var values = Enumerable.Range(0, valueCount)
+ .Select(i => $"Value{i}")
+ .ToList();
+
+ return BuildEnumDefinitionWithValues(enumName, values, namespaceName);
+ }
+
+ public static string BuildEnumDefinitionWithValues(string enumName, IEnumerable values, string? namespaceName = null)
+ {
+ var sb = new StringBuilder();
+
+ if (!string.IsNullOrEmpty(namespaceName))
+ {
+ sb.AppendLine($"namespace {namespaceName};");
+ sb.AppendLine();
+ }
+
+ sb.AppendLine($"public enum {enumName}");
+ sb.AppendLine("{");
+ foreach (var value in values)
+ {
+ sb.AppendLine($" {value},");
+ }
+ sb.AppendLine("}");
+
+ return sb.ToString();
+ }
+}
diff --git a/test/Dango.Tests.Utils/GeneratorTestHelper.cs b/test/Dango.Tests.Utils/GeneratorTestHelper.cs
new file mode 100644
index 0000000..f2fddad
--- /dev/null
+++ b/test/Dango.Tests.Utils/GeneratorTestHelper.cs
@@ -0,0 +1,47 @@
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+
+namespace Dango.Tests.Utils;
+
+public static class GeneratorTestHelper
+{
+ public static Compilation CreateCompilation(string source, params string[] additionalSources)
+ {
+ var syntaxTrees = new[] { source }
+ .Concat(additionalSources)
+ .Select(s => CSharpSyntaxTree.ParseText(s))
+ .ToArray();
+
+ var references = AppDomain
+ .CurrentDomain.GetAssemblies()
+ .Where(a => !a.IsDynamic && !string.IsNullOrWhiteSpace(a.Location))
+ .Select(a => MetadataReference.CreateFromFile(a.Location))
+ .Cast()
+ .ToList();
+
+ references.Add(
+ MetadataReference.CreateFromFile(
+ typeof(Abstractions.IDangoMapperRegistrar).Assembly.Location
+ )
+ );
+
+ return CSharpCompilation.Create(
+ "Test.Assembly",
+ syntaxTrees,
+ references,
+ new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)
+ );
+ }
+
+ public static GeneratorDriverRunResult RunGenerator(string source, params string[] additionalSources)
+ {
+ var compilation = CreateCompilation(source, additionalSources);
+ var generator = new DangoGenerator();
+ var driver = CSharpGeneratorDriver.Create(generator);
+
+ driver = (CSharpGeneratorDriver)
+ driver.RunGeneratorsAndUpdateCompilation(compilation, out _, out _);
+
+ return driver.GetRunResult();
+ }
+}
diff --git a/test/Dango.Tests.Utils/MappingRegistrarBuilder.cs b/test/Dango.Tests.Utils/MappingRegistrarBuilder.cs
new file mode 100644
index 0000000..b4a83d3
--- /dev/null
+++ b/test/Dango.Tests.Utils/MappingRegistrarBuilder.cs
@@ -0,0 +1,88 @@
+using System.Text;
+
+namespace Dango.Tests.Utils;
+
+public static class MappingRegistrarBuilder
+{
+ public static string BuildRegistrar(
+ IEnumerable<(string SourceEnum, string DestinationEnum, MappingConfig Config)> mappings,
+ string? namespaceName = null,
+ string registrarClassName = "MyRegistrar")
+ {
+ var namespaceDeclaration = string.IsNullOrEmpty(namespaceName)
+ ? ""
+ : $"namespace {namespaceName};\n\n";
+
+ var sb = new StringBuilder();
+
+ sb.AppendLine("using Dango.Abstractions;");
+ sb.AppendLine("using System.Collections.Generic;");
+
+ if (!string.IsNullOrEmpty(namespaceName))
+ {
+ sb.AppendLine();
+ sb.AppendLine($"namespace {namespaceName};");
+ sb.AppendLine();
+ }
+
+ sb.AppendLine($"public class {registrarClassName} : IDangoMapperRegistrar");
+ sb.AppendLine("{");
+ sb.AppendLine(" public void Register(IDangoMapperRegistry registry)");
+ sb.AppendLine(" {");
+
+ foreach (var (sourceEnum, destinationEnum, config) in mappings)
+ {
+ sb.Append($" registry.Enum<{sourceEnum}, {destinationEnum}>()");
+
+ if (config.Strategy == MappingStrategy.ByValue)
+ {
+ sb.Append(".MapByValue()");
+ }
+ else if (config.Strategy == MappingStrategy.ByName)
+ {
+ sb.Append(".MapByName()");
+ }
+
+ if (config.DefaultValue != null)
+ {
+ sb.Append($".WithDefault({destinationEnum}.{config.DefaultValue})");
+ }
+
+ if (config.Overrides != null && config.Overrides.Count > 0)
+ {
+ sb.AppendLine(" .WithOverrides(new Dictionary<");
+ sb.Append($"{sourceEnum}, {destinationEnum}>");
+ sb.AppendLine(" {");
+
+ foreach (var (source, dest) in config.Overrides)
+ {
+ sb.AppendLine($" {{ {sourceEnum}.{source}, {destinationEnum}.{dest} }},");
+ }
+
+ sb.Append(" })");
+ }
+
+ sb.AppendLine(";");
+ }
+
+ sb.AppendLine(" }");
+ sb.AppendLine("}");
+
+ return sb.ToString();
+ }
+}
+
+public class MappingConfig
+{
+ public MappingStrategy Strategy { get; set; } = MappingStrategy.ByName;
+
+ public string? DefaultValue { get; set; }
+
+ public Dictionary? Overrides { get; set; }
+}
+
+public enum MappingStrategy
+{
+ ByName,
+ ByValue
+}
diff --git a/test/Dango.Tests/Dango.Tests.csproj b/test/Dango.Unit.Tests/Dango.Unit.Tests.csproj
similarity index 88%
rename from test/Dango.Tests/Dango.Tests.csproj
rename to test/Dango.Unit.Tests/Dango.Unit.Tests.csproj
index 80ef6b3..8be3eba 100644
--- a/test/Dango.Tests/Dango.Tests.csproj
+++ b/test/Dango.Unit.Tests/Dango.Unit.Tests.csproj
@@ -1,4 +1,4 @@
-
+
net10.0
@@ -23,6 +23,7 @@
+
diff --git a/test/Dango.Tests/DangoGenerator.Basic.cs b/test/Dango.Unit.Tests/DangoGenerator.Basic.cs
similarity index 50%
rename from test/Dango.Tests/DangoGenerator.Basic.cs
rename to test/Dango.Unit.Tests/DangoGenerator.Basic.cs
index 801ed21..d6eae1e 100644
--- a/test/Dango.Tests/DangoGenerator.Basic.cs
+++ b/test/Dango.Unit.Tests/DangoGenerator.Basic.cs
@@ -1,51 +1,11 @@
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.CSharp;
using Dango.ErrorHandling;
+using Dango.Tests.Utils;
-namespace Dango.Tests;
+namespace Dango.Unit.Tests;
[TestFixture]
public partial class DangoGeneratorTests
{
- private static GeneratorDriverRunResult RunGenerator(
- string source,
- params string[] additionalSources
- )
- {
- var syntaxTrees = new[] { source }
- .Concat(additionalSources)
- .Select(s => CSharpSyntaxTree.ParseText(s))
- .ToArray();
-
- var references = AppDomain
- .CurrentDomain.GetAssemblies()
- .Where(a => !a.IsDynamic && !string.IsNullOrWhiteSpace(a.Location))
- .Select(a => MetadataReference.CreateFromFile(a.Location))
- .Cast()
- .ToList();
-
- references.Add(
- MetadataReference.CreateFromFile(
- typeof(Abstractions.IDangoMapperRegistrar).Assembly.Location
- )
- );
-
- var compilation = CSharpCompilation.Create(
- "Test.Assembly",
- syntaxTrees,
- references,
- new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)
- );
-
- var generator = new DangoGenerator();
- var driver = CSharpGeneratorDriver.Create(generator);
-
- driver = (CSharpGeneratorDriver)
- driver.RunGeneratorsAndUpdateCompilation(compilation, out _, out _);
-
- return driver.GetRunResult();
- }
-
[Test]
public void Generator_WithNoRegistrars_GeneratesNoOutputWithWarning()
{
@@ -57,7 +17,7 @@ public class MyClass
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(
result.Diagnostics.Single().Id,
@@ -83,7 +43,7 @@ public class MyRegistrar : IDangoMapperRegistrar
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(
result.Diagnostics.Single().Id,
@@ -109,7 +69,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(result.GeneratedTrees, Is.Empty);
diff --git a/test/Dango.Tests/DangoGeneratorTests.Configuration.cs b/test/Dango.Unit.Tests/DangoGeneratorTests.Configuration.cs
similarity index 95%
rename from test/Dango.Tests/DangoGeneratorTests.Configuration.cs
rename to test/Dango.Unit.Tests/DangoGeneratorTests.Configuration.cs
index 0124941..d72c730 100644
--- a/test/Dango.Tests/DangoGeneratorTests.Configuration.cs
+++ b/test/Dango.Unit.Tests/DangoGeneratorTests.Configuration.cs
@@ -1,4 +1,6 @@
-namespace Dango.Tests;
+using Dango.Tests.Utils;
+
+namespace Dango.Unit.Tests;
public partial class DangoGeneratorTests
{
@@ -23,7 +25,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -86,7 +88,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -150,7 +152,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -222,7 +224,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -261,7 +263,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -304,7 +306,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -380,7 +382,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -457,7 +459,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -534,7 +536,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
diff --git a/test/Dango.Tests/DangoGeneratorTests.Mappings.cs b/test/Dango.Unit.Tests/DangoGeneratorTests.Mappings.cs
similarity index 96%
rename from test/Dango.Tests/DangoGeneratorTests.Mappings.cs
rename to test/Dango.Unit.Tests/DangoGeneratorTests.Mappings.cs
index af9f311..bab3848 100644
--- a/test/Dango.Tests/DangoGeneratorTests.Mappings.cs
+++ b/test/Dango.Unit.Tests/DangoGeneratorTests.Mappings.cs
@@ -1,4 +1,6 @@
-namespace Dango.Tests;
+using Dango.Tests.Utils;
+
+namespace Dango.Unit.Tests;
public partial class DangoGeneratorTests
{
@@ -31,7 +33,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -98,7 +100,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -182,7 +184,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
diff --git a/test/Dango.Tests/DangoGeneratorTests.Naming.cs b/test/Dango.Unit.Tests/DangoGeneratorTests.Naming.cs
similarity index 94%
rename from test/Dango.Tests/DangoGeneratorTests.Naming.cs
rename to test/Dango.Unit.Tests/DangoGeneratorTests.Naming.cs
index afbe15d..3152e86 100644
--- a/test/Dango.Tests/DangoGeneratorTests.Naming.cs
+++ b/test/Dango.Unit.Tests/DangoGeneratorTests.Naming.cs
@@ -1,4 +1,6 @@
-namespace Dango.Tests;
+using Dango.Tests.Utils;
+
+namespace Dango.Unit.Tests;
public partial class DangoGeneratorTests
{
@@ -37,7 +39,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -104,7 +106,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(
@@ -171,7 +173,7 @@ public void Register(IDangoMapperRegistry registry)
}
}";
- var result = RunGenerator(source);
+ var result = GeneratorTestHelper.RunGenerator(source);
Assert.That(result.Diagnostics, Is.Empty);
Assert.That(