public void TestCreateMatchMethodsForClosedGenericFSharpDiscriminatedUnion() { //Arrange var methodsClassCode = @"[CreateMatchMethods(typeof(DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<System.String>))] public static class Methods { }"; var expectedMethodsClassCodeAfterRefactoring = @"[CreateMatchMethods(typeof (DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<System.String>))] public static class Methods { public static TResult Match<TResult>( this DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<System.String> instance, System.Func<DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<System.String>.Option1, TResult> option1Case, System.Func<TResult> option2Case) { if (instance is DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<System.String>.Option1 option1) return option1Case(option1); if (instance.IsOption2) return option2Case(); throw new System.Exception(""Invalid GenericFSharpDiscriminatedUnion type""); } public static void Match( this DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<System.String> instance, System.Action<DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<System.String>.Option1> option1Case, System.Action option2Case) { if (instance is DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpDiscriminatedUnion<System.String>.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); }
public void TestCreateWithMethodsForFSharpDiscriminatedUnionGeneratesMethodsForCases() { //Arrange var methodsClassCode = @"[CreateWithMethods(typeof(DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion))] public static class Methods { }"; var expectedMethodsClassCodeAfterRefactoring = @"[CreateWithMethods(typeof(DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion))] public static class Methods { public static DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.Option1 WithAge( this DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.Option1 instance, System.Int32 newValue) { return (DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.Option1)DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.NewOption1(age: newValue, name: instance.Name); } public static DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.Option1 WithName( this DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.Option1 instance, System.String newValue) { return (DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.Option1)DataObjectHelper.Tests.FSharpProject.Module.FSharpDiscriminatedUnion.NewOption1(age: instance.Age, name: newValue); } }"; var content = Utilities.MergeParts( createWithMethodsAttributeCode, methodsClassCode); var expectedContentAfterRefactoring = Utilities.NormalizeCode( Utilities.MergeParts( createWithMethodsAttributeCode, expectedMethodsClassCodeAfterRefactoring)); //Act var actualContentAfterRefactoring = Utilities.NormalizeCode( Utilities.ApplyRefactoring( content, SelectSpanWhereCreateWithMethodsAttributeIsApplied, Utilities.GetFsharpTestProjectReference())); //Assert Assert.AreEqual(expectedContentAfterRefactoring, actualContentAfterRefactoring); }
public void TestCreateWithMethodsForOpenGenericFSharpRecords() { //Arrange var methodsClassCode = @"[CreateWithMethods(typeof(DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpRecord<>))] public static class Methods { }"; var expectedMethodsClassCodeAfterRefactoring = @"[CreateWithMethods(typeof(DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpRecord<>))] public static class Methods { public static DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpRecord<a> WithAge<a>( this DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpRecord<a> instance, System.Int32 newValue) { return new DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpRecord<a>(age: newValue, name: instance.Name); } public static DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpRecord<a> WithName<a>( this DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpRecord<a> instance, a newValue) { return new DataObjectHelper.Tests.FSharpProject.Module.GenericFSharpRecord<a>(age: instance.Age, name: newValue); } }"; var content = Utilities.MergeParts( createWithMethodsAttributeCode, methodsClassCode); var expectedContentAfterRefactoring = Utilities.NormalizeCode( Utilities.MergeParts( createWithMethodsAttributeCode, expectedMethodsClassCodeAfterRefactoring)); //Act var actualContentAfterRefactoring = Utilities.NormalizeCode( Utilities.ApplyRefactoring( content, SelectSpanWhereCreateWithMethodsAttributeIsApplied, Utilities.GetFsharpTestProjectReference())); //Assert Assert.AreEqual(expectedContentAfterRefactoring, actualContentAfterRefactoring); }