コード例 #1
0
        public void TestCreateMatchMethodsForFSharpModule()
        {
            //Arrange
            var methodsClassCode =
@"[CreateMatchMethods(typeof(DataObjectHelper.Tests.FSharpProject.Module))]
public static class Methods
{

}";

            var expectedMethodsClassCodeAfterRefactoring =
@"[CreateMatchMethods(typeof (DataObjectHelper.Tests.FSharpProject.Module))]
public static class Methods
{
    public static TResult Match<TResult>(
        this DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion instance,
        System.Func<DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.Option1, TResult> option1Case,
        System.Func<TResult> option2Case)
    {
        if (instance is DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.Option1 option1)
            return option1Case(option1);
        if (instance.IsOption2)
            return option2Case();
        throw new System.Exception(""Invalid FSharpDiscriminatedUnion type"");
    }

    public static void Match(
        this DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion instance,
        System.Action<DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.Option1> option1Case,
        System.Action option2Case)
    {
        if (instance is DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.Option1 option1)
        {
            option1Case(option1);
            return;
        }

        if (instance.IsOption2)
        {
            option2Case();
            return;
        }

        throw new System.Exception(""Invalid FSharpDiscriminatedUnion type"");
    }

    public static TResult Match<a, TResult>(
        this DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<a> instance,
        System.Func<DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<a>.Option1, TResult> option1Case,
        System.Func<TResult> option2Case)
    {
        if (instance is DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<a>.Option1 option1)
            return option1Case(option1);
        if (instance.IsOption2)
            return option2Case();
        throw new System.Exception(""Invalid GenericFSharpDiscriminatedUnion type"");
    }

    public static void Match<a>(
        this DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<a> instance,
        System.Action<DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<a>.Option1> option1Case,
        System.Action option2Case)
    {
        if (instance is DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<a>.Option1 option1)
        {
            option1Case(option1);
            return;
        }

        if (instance.IsOption2)
        {
            option2Case();
            return;
        }

        throw new System.Exception(""Invalid GenericFSharpDiscriminatedUnion type"");
    }
}";
            var content = Utilities.MergeParts(createMatchMethodsAttributeCode, methodsClassCode);

            var expectedContentAfterRefactoring =
                Utilities.NormalizeCode(
                    Utilities.MergeParts(createMatchMethodsAttributeCode, expectedMethodsClassCodeAfterRefactoring));

            //Act
            var actualContentAfterRefactoring =
                Utilities.NormalizeCode(
                    Utilities.ApplyRefactoring(
                        content,
                        SelectSpanWhereCreateMatchMethodsAttributeIsApplied,
                        Utilities.GetFsharpTestProjectReference()));

            //Assert
            Assert.AreEqual(expectedContentAfterRefactoring, actualContentAfterRefactoring);
        }