diff options
Diffstat (limited to 'test/Mono.Linker.Tests.Cases/TypeForwarding')
8 files changed, 205 insertions, 0 deletions
diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeFwd.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeFwd.cs new file mode 100644 index 000000000..7145725e4 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeFwd.cs @@ -0,0 +1 @@ +[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.C1))] diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs new file mode 100644 index 000000000..ec8389b0d --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs @@ -0,0 +1,6 @@ +namespace Mono.Linker.Tests.Cases.TypeForwarding +{ + public class C1 + { + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs new file mode 100644 index 000000000..58dc0d77b --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs @@ -0,0 +1,6 @@ +namespace Mono.Linker.Tests.Cases.TypeForwarding +{ + public class C2 + { + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteForwarders.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteForwarders.cs new file mode 100644 index 000000000..cb79a2f0d --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteForwarders.cs @@ -0,0 +1,4 @@ +[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.C))] +[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.G<>))] +[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.I))] +[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.TypeForwarding.S))]
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteLib.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteLib.cs new file mode 100644 index 000000000..6c5c01fff --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/Dependencies/TypeForwardersRewriteLib.cs @@ -0,0 +1,24 @@ +namespace Mono.Linker.Tests.Cases.TypeForwarding +{ + public class C + { + + } + + public class G<T> + { + public class N + { + } + } + + public struct S + { + + } + + public interface I + { + public void Test (C c); + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardedIsUpdatedForMissingType.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardedIsUpdatedForMissingType.cs new file mode 100644 index 000000000..a5e019cb0 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardedIsUpdatedForMissingType.cs @@ -0,0 +1,33 @@ +using System; +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; + +namespace Mono.Linker.Tests.Cases.TypeForwarding +{ + [SkipUnresolved (true)] + [KeepTypeForwarderOnlyAssemblies ("false")] + [SetupCompileBefore ("Lib.dll", new[] { "Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs" })] + [SetupCompileBefore ("AnotherLibrary.dll", new[] { "Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs" })] + + [SetupCompileAfter ("AnotherLibrary.dll", new[] { "Dependencies/TypeForwardedIsUpdatedForMissingTypeLib2.cs" })] + [SetupCompileAfter ("Implementation.dll", new[] { "Dependencies/TypeForwardedIsUpdatedForMissingTypeLib.cs" }, removeFromLinkerInput: true)] + [SetupCompileAfter ("Lib.dll", new[] { "Dependencies/TypeForwardedIsUpdatedForMissingTypeFwd.cs" }, references: new[] { "Implementation.dll" })] + + public class TypeForwardedIsUpdatedForMissingType + { + public static void Main () + { + Test (null); + } + + // It's important that the assembly reference to AnotherLibrary is added before Lib + public void DependencyWhichIsRemovedFromAssemblyList (C2 c) + { + } + + [Kept] + static void Test (C1 c) + { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardersRewrite.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardersRewrite.cs new file mode 100644 index 000000000..754d2c282 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/TypeForwardersRewrite.cs @@ -0,0 +1,130 @@ +using System; +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; + +namespace Mono.Linker.Tests.Cases.TypeForwarding +{ + // Actions: + // link - This assembly, Forwarder.dll and Implementation.dll + [KeepTypeForwarderOnlyAssemblies ("false")] + + [SetupLinkerArgument ("--skip-unresolved", "true")] + + [SetupCompileArgument ("/unsafe")] + [SetupCompileBefore ("Forwarder.dll", new[] { "Dependencies/TypeForwardersRewriteLib.cs" })] + + [SetupCompileAfter ("Implementation.dll", new[] { "Dependencies/TypeForwardersRewriteLib.cs" })] + [SetupCompileAfter ("Forwarder.dll", new[] { "Dependencies/TypeForwardersRewriteForwarders.cs" }, references: new[] { "Implementation.dll" })] + + [RemovedAssembly ("Forwarder.dll")] + [RemovedAssemblyReference ("test", "Forwarder")] + unsafe class TypeForwardersRewrite + { + static void Main () + { +#if NETCOREAPP + Test (null); +#endif + Test2 (null); + Test3<C> (ref c); + Test4 (null, null); + Test5 (null); + Test6<string> (null); + c = null; + g = null; + e += null; + I tc = new TC (); + tc.Test (null); + I ti = new TS (); + ti.Test (null); + var gc = new GC<TC> (); + } + + [Kept] + static C c; + [Kept] + static G<C> g; + + [Kept] + [KeptBackingField] + [KeptEventAddMethod] + [KeptEventRemoveMethod] + static event D e; + + [Kept] + [KeptBaseType (typeof (MulticastDelegate))] + [KeptMember (".ctor(System.Object,System.IntPtr)")] + [KeptMember ("Invoke()")] + delegate C D (); + +#if NETCOREAPP + [Kept] + static void Test (delegate*<C, S*> arg) + { + } +#endif + + [Kept] + static C Test2 (C c) + { + C lv = null; + return lv; + } + + [Kept] + static C[] Test3<T> (ref C c) where T : C + { + return null; + } + + [Kept] + static G<C> Test4 (G<C>[] a, object b) + { + Console.WriteLine (typeof (C)); + Console.WriteLine (typeof (G<>)); + Console.WriteLine (typeof (G<>.N)); + C c = (C) b; + Console.WriteLine (c); + return null; + } + + [Kept] + static G<C>.N Test5 (G<C>.N arg) + { + return null; + } + + [Kept] + static void Test6<T> (G<T>.N arg) + { + } + + [Kept] + [KeptBaseType (typeof (C))] + [KeptMember (".ctor()")] + [KeptInterface (typeof (I))] + class TC : C, I + { + [Kept] + void I.Test (C c) + { + } + } + + [Kept] + [KeptInterface (typeof (I))] + struct TS : I + { + [Kept] + public void Test (C c) + { + } + } + + [Kept] + [KeptMember (".ctor()")] + class GC<T> where T : I + { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/TypeForwarding/UsedForwarderIsRemovedWhenLink.cs b/test/Mono.Linker.Tests.Cases/TypeForwarding/UsedForwarderIsRemovedWhenLink.cs index deef0e497..23b8ddc1e 100644 --- a/test/Mono.Linker.Tests.Cases/TypeForwarding/UsedForwarderIsRemovedWhenLink.cs +++ b/test/Mono.Linker.Tests.Cases/TypeForwarding/UsedForwarderIsRemovedWhenLink.cs @@ -18,6 +18,7 @@ namespace Mono.Linker.Tests.Cases.TypeForwarding [SetupCompileAfter ("Forwarder.dll", new[] { "Dependencies/ForwarderLibrary.cs" }, references: new[] { "Implementation.dll" })] [RemovedAssembly ("Forwarder.dll")] + [RemovedAssemblyReference ("test", "Forwarder")] [KeptMemberInAssembly ("Implementation.dll", typeof (ImplementationLibrary), "GetSomeValue()")] [KeptMemberInAssembly ("Library.dll", typeof (LibraryUsingForwarder), "GetValueFromOtherAssembly()")] class UsedForwarderIsRemovedWhenLink |