diff options
author | Sven Boemer <sbomer@gmail.com> | 2019-02-20 01:16:58 +0300 |
---|---|---|
committer | Marek Safar <marek.safar@gmail.com> | 2019-02-20 01:16:58 +0300 |
commit | fa9ccbdaf6907c69ef1bb117906f8f012218d57f (patch) | |
tree | 4d4cbe2d4079a35edca350a4e444831c2f9dd19a /test/Mono.Linker.Tests.Cases/LinkXml | |
parent | e64148792193bf7d706428a64632ebf7f8023d3b (diff) |
Adopt new directory layout (#466)
This organizes the source and test projects as follows:
- source projects go in `src/project/projectfile.csproj`
- test projects go in `test/project/projectfile.csproj`
The uniform layout of projects is part of the arcade onboarding (see https://github.com/mono/linker/issues/452).
Diffstat (limited to 'test/Mono.Linker.Tests.Cases/LinkXml')
77 files changed, 1479 insertions, 0 deletions
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.cs b/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.cs new file mode 100644 index 000000000..f02913bc5 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.cs @@ -0,0 +1,31 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + [KeptMember (".ctor()")] + public class AssemblyWithPreserveAll { + public static void Main () + { + } + + [Kept] + [KeptMember (".ctor()")] + class UnusedType { + [Kept] + public int UnusedField; + + [Kept] + [KeptBackingField] + public int UnusedProperty { [Kept] get; [Kept] set; } + + [Kept] + public void UnusedMethod () + { + } + + [Kept] + [KeptMember (".ctor()")] + class UnusedNestedType { + } + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.xml b/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.xml new file mode 100644 index 000000000..a1a96721e --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.xml @@ -0,0 +1,4 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all"> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.cs b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.cs new file mode 100644 index 000000000..bbf26c1d4 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.cs @@ -0,0 +1,19 @@ +using System; +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; +using Mono.Linker.Tests.Cases.LinkXml.Dependencies; + +namespace Mono.Linker.Tests.Cases.LinkXml +{ + [KeepTypeForwarderOnlyAssemblies ("false")] + [SetupCompileBefore ("Library.dll", new[] { "Dependencies/CanPreserveAnExportedType_Library.cs" })] + // Add another assembly in that uses the forwarder just to make things a little more complex + [SetupCompileBefore ("Forwarder.dll", new[] { "Dependencies/CanPreserveAnExportedType_Forwarder.cs" }, references: new[] { "Library.dll" })] + + [RemovedAssembly ("Forwarder.dll")] + [KeptMemberInAssembly ("Library.dll", typeof (CanPreserveAnExportedType_Library), "Field1", "Method()", ".ctor()")] + class CanPreserveAnExportedType { + public static void Main () { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.xml b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.xml new file mode 100644 index 000000000..f469bb982 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.xml @@ -0,0 +1,6 @@ +<linker> + <assembly fullname="Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.Dependencies.CanPreserveAnExportedType_Library" preserve="all"> + </type> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.cs b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.cs new file mode 100644 index 000000000..0016d7272 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.cs @@ -0,0 +1,24 @@ +using System; +using System.Runtime.InteropServices; +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; + +namespace Mono.Linker.Tests.Cases.LinkXml { + [SetupLinkerArgument ("--exclude-feature", "com")] + public class CanPreserveExcludedFeatureCom { + public static void Main() + { + var a = new A (); + } + } + + [Kept] + [KeptMember (".ctor()")] + [KeptAttributeAttribute (typeof(GuidAttribute))] + [ComImport] + [Guid ("D7BB1889-3AB7-4681-A115-60CA9158FECA")] + class A + { + private int field; + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.xml b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.xml new file mode 100644 index 000000000..bcd942aaf --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.xml @@ -0,0 +1,6 @@ +<linker> + <assembly fullname="mscorlib"> + <type fullname="System.Runtime.InteropServices.GuidAttribute" preserve="all"> + </type> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.cs b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.cs new file mode 100644 index 000000000..d122d98f3 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.cs @@ -0,0 +1,19 @@ +using System; +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; +using Mono.Linker.Tests.Cases.LinkXml.Dependencies; + +namespace Mono.Linker.Tests.Cases.LinkXml +{ + [KeepTypeForwarderOnlyAssemblies ("false")] + [SetupCompileBefore ("Library.dll", new [] { "Dependencies/CanPreserveAnExportedType_Library.cs" })] + // Add another assembly in that uses the forwarder just to make things a little more complex + [SetupCompileBefore ("Forwarder.dll", new [] { "Dependencies/CanPreserveAnExportedType_Forwarder.cs" }, references: new [] { "Library.dll" })] + + [RemovedAssembly ("Forwarder.dll")] + [KeptMemberInAssembly ("Library.dll", typeof (CanPreserveAnExportedType_Library), "Field1", "Method()", ".ctor()")] + class CanPreserveExportedTypesUsingRegex { + public static void Main () { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.xml b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.xml new file mode 100644 index 000000000..b5827e265 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.xml @@ -0,0 +1,6 @@ +<linker> + <assembly fullname="Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Can*" preserve="all"> + </type> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.cs b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.cs new file mode 100644 index 000000000..0eb9542d2 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.cs @@ -0,0 +1,32 @@ +using System; +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml +{ + [KeptMember (".ctor()")] + class CanPreserveTypesUsingRegex { + public static void Main () { + } + + [Kept] + void UnusedHelper () { + } + + [Kept] + [KeptMember (".ctor()")] + class Bar { + } + } +} + +namespace Mono.Linker.Tests.Cases.LinkXml.PreserveNamespace { + [Kept] + [KeptMember (".ctor()")] + class Type1 { + } + + [Kept] + [KeptMember (".ctor()")] + class Type2 { + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.xml b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.xml new file mode 100644 index 000000000..12f870c04 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.xml @@ -0,0 +1,6 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Can*" /> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.PreserveNamespace*" /> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Forwarder.cs b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Forwarder.cs new file mode 100644 index 000000000..cb6f81e48 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Forwarder.cs @@ -0,0 +1,3 @@ +using System; + +[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.LinkXml.Dependencies.CanPreserveAnExportedType_Library))] diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Library.cs b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Library.cs new file mode 100644 index 000000000..38814d986 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Library.cs @@ -0,0 +1,11 @@ +using System; + +namespace Mono.Linker.Tests.Cases.LinkXml.Dependencies +{ + public class CanPreserveAnExportedType_Library { + public int Field1; + + public void Method () { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Base.cs b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Base.cs new file mode 100644 index 000000000..d9803fada --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Base.cs @@ -0,0 +1,7 @@ +namespace Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod { + public class Base { + public virtual void VirtualMethodFromBase () + { + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.cs b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.cs new file mode 100644 index 000000000..3c1158922 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.cs @@ -0,0 +1,17 @@ +namespace Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod { + public class Library1 : Base { + public override void VirtualMethodFromBase () + { + } + } + + /// <summary> + /// This is here to confirm that derived types in the same assembly as the embedded resource are correctly taken into + /// consideration + /// </summary> + public class Library1Secondary : Base { + public override void VirtualMethodFromBase () + { + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.xml b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.xml new file mode 100644 index 000000000..58f90df91 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.xml @@ -0,0 +1,14 @@ +<linker> + <assembly fullname="Library1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.Library1Secondary" preserve="nothing"> + <!-- Need to preserve a ctor so that an instance of the type is possible--> + <method name=".ctor"/> + </type> + </assembly> + <assembly fullname="Library2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.Library2" preserve="nothing"> + <!-- Need to preserve a ctor so that an instance of the type is possible--> + <method name=".ctor"/> + </type> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library2.cs b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library2.cs new file mode 100644 index 000000000..b977a5834 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library2.cs @@ -0,0 +1,7 @@ +namespace Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod { + public class Library2 : Base { + public override void VirtualMethodFromBase () + { + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.cs b/test/Mono.Linker.Tests.Cases/LinkXml/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.cs new file mode 100644 index 000000000..6111bc713 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.cs @@ -0,0 +1,31 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; +using Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod; + +namespace Mono.Linker.Tests.Cases.LinkXml { + [SetupCompileBefore ("Base.dll", + new []{"Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Base.cs"})] + [SetupCompileBefore ("Library1.dll", + new [] { "Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.cs"}, + new [] { "Base.dll"}, + resources: new [] { "Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.xml"})] + [SetupCompileBefore("Library2.dll", + new [] {"Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library2.cs"}, + new [] {"Base.dll"}, + addAsReference: false)] + [IncludeBlacklistStep (true)] + + [KeptMemberInAssembly ("Library1.dll", typeof (Library1), "VirtualMethodFromBase()")] + [KeptMemberInAssembly ("Library1.dll", typeof (Library1Secondary), "VirtualMethodFromBase()")] + + // Library1's embedded link xml will preserve the Library2 type. Because Library2 shares a base class with Library1 + // Library2's override should be kept as well + [KeptMemberInAssembly ("Library2.dll", "Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.Library2", "VirtualMethodFromBase()")] + public class EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod { + public static void Main () + { + var tmp = new Library1 (); + tmp.VirtualMethodFromBase (); + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib1.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib1.cs new file mode 100644 index 000000000..1e0c0a738 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib1.cs @@ -0,0 +1,10 @@ +namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.Dependencies { + public class OnAssembly_Lib1 { + public static void UsedSoCompilerDoesntRemoveReference () + { + } + + public class FeatureOneClass { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib2.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib2.cs new file mode 100644 index 000000000..0a7731e79 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib2.cs @@ -0,0 +1,10 @@ +namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.Dependencies { + public class OnAssembly_Lib2 { + public static void UsedSoCompilerDoesntRemoveReference () + { + } + + public class FeatureTwoClass { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.cs new file mode 100644 index 000000000..cbdfb5509 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.cs @@ -0,0 +1,18 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; +using Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.Dependencies; + +namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude { + [SetupLinkerArgument ("--exclude-feature", "one")] + [SetupCompileBefore ("library1.dll", new[] {typeof (OnAssembly_Lib1)})] + [SetupCompileBefore ("library2.dll", new[] {typeof (OnAssembly_Lib2)})] + [RemovedTypeInAssembly ("library1.dll", typeof (OnAssembly_Lib1.FeatureOneClass))] + [KeptTypeInAssembly ("library2.dll", typeof (OnAssembly_Lib2.FeatureTwoClass))] + public class OnAssembly { + public static void Main () + { + OnAssembly_Lib1.UsedSoCompilerDoesntRemoveReference (); + OnAssembly_Lib2.UsedSoCompilerDoesntRemoveReference (); + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.xml new file mode 100644 index 000000000..9583b20ee --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.xml @@ -0,0 +1,8 @@ +<linker> + <assembly fullname="library1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" feature="one"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.Dependencies.OnAssembly_Lib1/FeatureOneClass"/> + </assembly> + <assembly fullname="library2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" feature="two"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.Dependencies.OnAssembly_Lib2/FeatureTwoClass"/> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.cs new file mode 100644 index 000000000..e733ab2d1 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.cs @@ -0,0 +1,17 @@ +using System; +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; + +namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude { + [SetupLinkerArgument ("--exclude-feature", "one")] + public class OnEvent { + public static void Main () + { + } + + public event EventHandler<EventArgs> FeatureOne; + + [Kept] + public event EventHandler<EventArgs> FeatureTwo {[Kept] add {}[Kept] remove {} } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.xml new file mode 100644 index 000000000..d0fdc860d --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.xml @@ -0,0 +1,10 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnEvent"> + <event signature="System.EventHandler`1<System.EventArgs> FeatureOne" feature="one"/> + </type> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnEvent"> + <event signature="System.EventHandler`1<System.EventArgs> FeatureTwo" feature="two"/> + </type> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.cs new file mode 100644 index 000000000..93a61f0ab --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.cs @@ -0,0 +1,16 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; + +namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude { + [SetupLinkerArgument ("--exclude-feature", "one")] + public class OnField { + public static void Main () + { + } + + private int _featureOne; + + [Kept] + private int _featureTwo; + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.xml new file mode 100644 index 000000000..b7a251bf8 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.xml @@ -0,0 +1,10 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnField"> + <field signature="System.Int32 _featureOne" feature="one"/> + </type> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnField"> + <field signature="System.Int32 _featureTwo" feature="two"/> + </type> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.cs new file mode 100644 index 000000000..11feb7a6a --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.cs @@ -0,0 +1,20 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; + +namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude { + [SetupLinkerArgument ("--exclude-feature", "one")] + public class OnMethod { + public static void Main () + { + } + + public void FeatureOne () + { + } + + [Kept] + public void FeatureTwo () + { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.xml new file mode 100644 index 000000000..5aaf4c06f --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.xml @@ -0,0 +1,10 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnMethod"> + <method signature="System.Void FeatureOne()" feature="one"/> + </type> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnMethod"> + <method signature="System.Void FeatureTwo()" feature="two"/> + </type> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.cs new file mode 100644 index 000000000..b6e78b255 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.cs @@ -0,0 +1,17 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; + +namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude { + [SetupLinkerArgument ("--exclude-feature", "one")] + public class OnProperty { + public static void Main () + { + } + + public int FeatureOne { get; set; } + + [Kept] + [KeptBackingField] + public int FeatureTwo {[Kept] get; [Kept] set; } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.xml new file mode 100644 index 000000000..3b2ee6fcb --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.xml @@ -0,0 +1,10 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnProperty"> + <property signature="System.Int32 FeatureOne" accessors="all" feature="one"/> + </type> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnProperty"> + <property signature="System.Int32 FeatureTwo" accessors="all" feature="two"/> + </type> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.cs new file mode 100644 index 000000000..368812fcc --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.cs @@ -0,0 +1,20 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; +using Mono.Linker.Tests.Cases.Expectations.Metadata; + +namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude { + [SetupLinkerArgument ("--exclude-feature", "one")] + public class OnType { + public static void Main () + { + } + + class FeatureOneClass + { + } + + [Kept] + [KeptMember(".ctor()")] + class FeatureTwoClass { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.xml new file mode 100644 index 000000000..a2e91e062 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.xml @@ -0,0 +1,6 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnType/FeatureOneClass" feature="one"/> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnType/FeatureTwoClass" feature="two"/> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.cs new file mode 100644 index 000000000..c319c1442 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.cs @@ -0,0 +1,18 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml +{ + abstract class PreserveBackingFieldWhenPropertyIsKept + { + public static void Main () + { + Prop = 1; + } + + public abstract int Base { set; } + + [Kept] + [KeptBackingField] + public static int Prop { get; [Kept] set; } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.xml new file mode 100644 index 000000000..256f50a84 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.xml @@ -0,0 +1,6 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.PreserveBackingFieldWhenPropertyIsKept" preserve="fields"> + </type> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.cs new file mode 100644 index 000000000..623ee17ca --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.cs @@ -0,0 +1,61 @@ + + +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml +{ + class TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved { + public static void Main () { + } + + [Kept] + class Unused : IFoo<int>, IFoo<string>, IFoo<Cat>, IFoo2<int>, IFoo3<int, string, char>, IDog, IFoo<IFoo<int>> { + [Kept] + public int Field1; + + [Kept] + public IFoo<int> Field2; + + public IFoo<int> Property1 { get; set; } + + string IDog.Name { get; set; } + + int IFoo<int>.Bar { get; set; } + + int IFoo<string>.Bar { get; set; } + + int IFoo<Cat>.Bar { get; set; } + + int Bar2 { get; set; } + + int IFoo2<int>.Bar2 { get; set; } + + int Bar3 { get; set; } + + int IFoo3<int, string, char>.Bar3 { get; set; } + + int IFoo<IFoo<int>>.Bar { get; set; } + } + + interface IDog { + string Name { get; set; } + } + + [Kept] + interface IFoo<T> { + + int Bar { get; set; } + } + + interface IFoo2<T> { + int Bar2 { get; set; } + } + + interface IFoo3<T, K, J> { + int Bar3 { get; set; } + } + + class Cat { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.xml new file mode 100644 index 000000000..338ee7f76 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.xml @@ -0,0 +1,6 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved/Unused" preserve="fields"> + </type> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.cs new file mode 100644 index 000000000..fb8536a2f --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.cs @@ -0,0 +1,15 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + [KeptMember (".ctor()")] + public class UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved { + public static void Main () + { + } + + [Kept] + [KeptMember (".ctor()")] + class Unused { + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.xml new file mode 100644 index 000000000..ca7da2c44 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.xml @@ -0,0 +1,4 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.cs new file mode 100644 index 000000000..594b5bd87 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.cs @@ -0,0 +1,37 @@ +using System; + +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedEventPreservedByLinkXmlIsKept { + public static void Main () + { + } + + [Kept] + class Unused { + [Kept] + [KeptBackingField] + [KeptEventAddMethod] + [KeptEventRemoveMethod] + public event EventHandler<EventArgs> Preserved; + + [Kept] + public event EventHandler<EventArgs> Preserved1 { [Kept] add { } [Kept] remove { } } + + [Kept] + [KeptBackingField] + [KeptEventAddMethod] + [KeptEventRemoveMethod] + public event EventHandler Preserved2; + + [Kept] + [KeptBackingField] + [KeptEventAddMethod] + [KeptEventRemoveMethod] + public event EventHandler Preserved3; + + public event EventHandler<EventArgs> NotPreserved; + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.xml new file mode 100644 index 000000000..027cc59d1 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.xml @@ -0,0 +1,10 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedEventPreservedByLinkXmlIsKept/Unused"> + <event signature="System.EventHandler`1<System.EventArgs> Preserved" /> + <event signature="System.EventHandler`1<System.EventArgs> Preserved1" /> + <event signature="System.EventHandler Preserved2" /> + <event name="Preserved3" /> + </type> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.cs new file mode 100644 index 000000000..d41e23716 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedFieldPreservedByLinkXmlIsKept { + public static void Main () + { + } + + [Kept] + class Unused { + [Kept] + private int _preserved; + + [Kept] + private int _preserved2; + + [Kept] + private List<int> _preserved3; + + private int _notPreserved; + } + + [Kept] + class UnusedWithGenerics<T> { + [Kept] + private List<T> _preserved1; + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.xml new file mode 100644 index 000000000..82daa710c --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.xml @@ -0,0 +1,12 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedFieldPreservedByLinkXmlIsKept/Unused"> + <field signature="System.Int32 _preserved" /> + <field name="_preserved2" /> + <field signature="System.Collections.Generic.List`1<System.Int32> _preserved3" /> + </type> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedFieldPreservedByLinkXmlIsKept/UnusedWithGenerics`1"> + <field signature="System.Collections.Generic.List`1<T> _preserved1" /> + </type> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.cs new file mode 100644 index 000000000..659d4c5d1 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.cs @@ -0,0 +1,85 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + public class UnusedGenericTypeWithPreserveAllHasAllMembersPreserved { + public static void Main () + { + } + + [Kept] + [KeptMember (".ctor()")] + class Unused<T1, T2, T3> { + [Kept] + public int Field1; + + [Kept] + private int Field2; + + [Kept] + internal int Field3; + + [Kept] + public static int Field4; + + [Kept] + private static int Field5; + + [Kept] + internal static int Field6; + + [Kept] + [KeptBackingField] + public string Property1 { [Kept] get; [Kept] set;} + + [Kept] + [KeptBackingField] + private string Property2 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + internal string Property3 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + public static string Property4 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + private static string Property5 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + internal static string Property6 { [Kept] get; [Kept] set; } + + [Kept] + public void Method1 () + { + } + + [Kept] + private void Method2 () + { + } + + [Kept] + internal void Method3 () + { + } + + [Kept] + public static void Method4 () + { + } + + [Kept] + private static void Method5 () + { + } + + [Kept] + internal static void Method6 () + { + } + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.xml new file mode 100644 index 000000000..b2da72420 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedGenericTypeWithPreserveAllHasAllMembersPreserved/Unused`3" preserve="all" /> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.cs new file mode 100644 index 000000000..8e362a4d8 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.cs @@ -0,0 +1,19 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + public class UnusedInterfaceTypeOnTypeWithPreserveAllIsKept { + public static void Main () + { + } + + [Kept] + interface IFoo { + } + + [Kept] + [KeptMember (".ctor()")] + [KeptInterface (typeof (IFoo))] + class Bar : IFoo { + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.xml new file mode 100644 index 000000000..48d80c17d --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedInterfaceTypeOnTypeWithPreserveAllIsKept/Bar" preserve="all"/> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.cs new file mode 100644 index 000000000..968d0d1e6 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.cs @@ -0,0 +1,16 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + public class UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved { + public static void Main () + { + } + + interface IFoo { + } + + [Kept] + class Bar : IFoo { + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.xml new file mode 100644 index 000000000..0cd063a84 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved/Bar" preserve="nothing"/> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.cs new file mode 100644 index 000000000..9fe2b353b --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedMethodPreservedByLinkXmlIsKept { + public static void Main () + { + } + + [Kept] + class Unused { + [Kept] + private void PreservedMethod () + { + } + + [Kept] + private void PreservedMethod2 (int arg1, string arg2) + { + } + + [Kept] + private void PreservedMethod3 () + { + } + + [Kept] + private void PreservedMethod4 (List<int> arg1) + { + } + + private void NotPreservedMethod () + { + } + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.xml new file mode 100644 index 000000000..d5af5b146 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.xml @@ -0,0 +1,10 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedMethodPreservedByLinkXmlIsKept/Unused"> + <method signature="System.Void PreservedMethod()" /> + <method signature="System.Void PreservedMethod2(System.Int32,System.String)" /> + <method name="PreservedMethod3" /> + <method signature="System.Void PreservedMethod4(System.Collections.Generic.List`1<System.Int32>)" /> + </type> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.cs new file mode 100644 index 000000000..5e319acfd --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.cs @@ -0,0 +1,14 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedNestedTypePreservedByLinkXmlIsKept { + public static void Main () + { + } + + [Kept] + [KeptMember (".ctor()")] + class Unused { + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.xml new file mode 100644 index 000000000..7990e8fec --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedNestedTypePreservedByLinkXmlIsKept/Unused" /> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.cs new file mode 100644 index 000000000..8175ee32e --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.cs @@ -0,0 +1,10 @@ +namespace Mono.Linker.Tests.Cases.LinkXml { + public class UnusedNonRequiredTypeIsRemoved { + public static void Main () + { + } + + class Unused { + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.xml new file mode 100644 index 000000000..168b5aa2c --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedNonRequiredTypeIsRemoved/Unused" preserve="all" required="0"/> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.cs new file mode 100644 index 000000000..6f21e7b55 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.cs @@ -0,0 +1,46 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedPropertyPreservedByLinkXmlIsKept { + public static void Main () + { + } + + [Kept] + class Unused { + [Kept] + [KeptBackingField] + public int PreservedProperty1 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + public int PreservedProperty2 { [Kept] get; set; } + + [Kept] + [KeptBackingField] + public int PreservedProperty3 { get; [Kept] set; } + + [Kept] + [KeptBackingField] + public int PreservedProperty4 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + public int PreservedProperty5 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + public int PreservedProperty6 { [Kept] get; set; } + + [Kept] + [KeptBackingField] + public int PreservedProperty7 { get; [Kept] set; } + + [Kept] + [KeptBackingField] + public int PreservedProperty8 { [Kept] get; [Kept] set; } + + public int NotPreservedProperty { get; set; } + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.xml new file mode 100644 index 000000000..c606c5445 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.xml @@ -0,0 +1,17 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedPropertyPreservedByLinkXmlIsKept/Unused"> + <method signature="System.Int32 get_PreservedProperty1()" /> + <method signature="System.Void set_PreservedProperty1(System.Int32)" /> + <method signature="System.Int32 get_PreservedProperty2()" /> + <method signature="System.Void set_PreservedProperty3(System.Int32)" /> + + <property signature="System.Int32 PreservedProperty4" /> + <property signature="System.Int32 PreservedProperty5" accessors="all" /> + <property signature="System.Int32 PreservedProperty6" accessors="get" /> + <property signature="System.Int32 PreservedProperty7" accessors="set" /> + + <property name="PreservedProperty8" /> + </type> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.cs new file mode 100644 index 000000000..bd2b15ba3 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.cs @@ -0,0 +1,27 @@ +using System; +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + public class UnusedTypeDeclarationPreservedByLinkXmlIsKept { + public static void Main () + { + } + } + + [Kept] + [KeptBaseType (typeof (UnusedTypeDeclarationPreservedByLinkXmlIsKeptUnusedTypeBase))] + class UnusedTypeDeclarationPreservedByLinkXmlIsKeptUnusedType : UnusedTypeDeclarationPreservedByLinkXmlIsKeptUnusedTypeBase + { + int field; + static void Method () + { + } + + string Prop { get; set; } + } + + [Kept] + class UnusedTypeDeclarationPreservedByLinkXmlIsKeptUnusedTypeBase + { + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.xml new file mode 100644 index 000000000..c99f6b46b --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeDeclarationPreservedByLinkXmlIsKeptUnusedType" preserve="nothing" /> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs new file mode 100644 index 000000000..246c80af6 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs @@ -0,0 +1,20 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + + [KeptMember(".ctor()")] + class UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved { + public static void Main () + { + } + + [Kept] + [KeptMember (".ctor()")] + class Unused { + [Kept] + void Foo () + { + } + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml new file mode 100644 index 000000000..7ecdb6c22 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml @@ -0,0 +1,3 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all" /> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.cs new file mode 100644 index 000000000..edaff63eb --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.cs @@ -0,0 +1,14 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedTypePreservedByLinkXmlIsKept { + public static void Main () + { + } + } + + [Kept] + [KeptMember (".ctor()")] + class UnusedTypePreservedByLinkXmlIsKeptUnusedType { + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.xml new file mode 100644 index 000000000..ffb652e1e --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypePreservedByLinkXmlIsKeptUnusedType" /> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.cs new file mode 100644 index 000000000..fe077d530 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.cs @@ -0,0 +1,15 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedTypePreservedByLinkXmlWithCommentIsKept { + public static void Main () + { + } + } + + [Kept] + [KeptMember (".ctor()")] + class UnusedTypePreservedByLinkXmlWithCommentIsKeptUnusedType + { + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.xml new file mode 100644 index 000000000..a6e5643a2 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.xml @@ -0,0 +1,6 @@ +<!-- this is a comment --> +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypePreservedByLinkXmlWithCommentIsKeptUnusedType" /> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.cs new file mode 100644 index 000000000..840d7f474 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.cs @@ -0,0 +1,86 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved + { + public static void Main () + { + } + + [Kept] + [KeptMember (".ctor()")] + class Unused { + [Kept] + public int Field1; + + [Kept] + private int Field2; + + [Kept] + internal int Field3; + + [Kept] + public static int Field4; + + [Kept] + private static int Field5; + + [Kept] + internal static int Field6; + + [Kept] + [KeptBackingField] + public string Property1 { [Kept] get; [Kept] set;} + + [Kept] + [KeptBackingField] + private string Property2 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + internal string Property3 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + public static string Property4 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + private static string Property5 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + internal static string Property6 { [Kept] get; [Kept] set; } + + [Kept] + public void Method1 () + { + } + + [Kept] + private void Method2 () + { + } + + [Kept] + internal void Method3 () + { + } + + [Kept] + public static void Method4 () + { + } + + [Kept] + private static void Method5 () + { + } + + [Kept] + internal static void Method6 () + { + } + } + } +} diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.xml new file mode 100644 index 000000000..d84df95e0 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved/Unused" /> + </assembly> +</linker> diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.cs new file mode 100644 index 000000000..02fb956f2 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.cs @@ -0,0 +1,85 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedTypeWithPreserveAllHasAllMembersPreserved { + public static void Main () + { + } + + [Kept] + [KeptMember (".ctor()")] + class Unused { + [Kept] + public int Field1; + + [Kept] + private int Field2; + + [Kept] + internal int Field3; + + [Kept] + public static int Field4; + + [Kept] + private static int Field5; + + [Kept] + internal static int Field6; + + [Kept] + [KeptBackingField] + public string Property1 { [Kept] get; [Kept] set;} + + [Kept] + [KeptBackingField] + private string Property2 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + internal string Property3 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + public static string Property4 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + private static string Property5 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + internal static string Property6 { [Kept] get; [Kept] set; } + + [Kept] + public void Method1 () + { + } + + [Kept] + private void Method2 () + { + } + + [Kept] + internal void Method3 () + { + } + + [Kept] + public static void Method4 () + { + } + + [Kept] + private static void Method5 () + { + } + + [Kept] + internal static void Method6 () + { + } + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.xml new file mode 100644 index 000000000..7987a7765 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithPreserveAllHasAllMembersPreserved/Unused" preserve="all" /> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.cs new file mode 100644 index 000000000..1af6f4530 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.cs @@ -0,0 +1,66 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedTypeWithPreserveFieldsHasMethodsRemoved { + public static void Main () + { + } + + [Kept] + class Unused { + [Kept] + public int Field1; + + [Kept] + private int Field2; + + [Kept] + internal int Field3; + + [Kept] + public static int Field4; + + [Kept] + private static int Field5; + + [Kept] + internal static int Field6; + + public string Property1 { get; set; } + private string Property2 { get; set; } + internal string Property3 { get; set; } + public static string Property4 { get; set; } + private static string Property5 { get; set; } + internal static string Property6 { get; set; } + + [Kept] + public void PreservedMethod () + { + } + + public void Method1 () + { + } + + private void Method2 () + { + } + + internal void Method3 () + { + } + + public static void Method4 () + { + } + + private static void Method5 () + { + } + + internal static void Method6 () + { + } + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.xml new file mode 100644 index 000000000..619a8db26 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.xml @@ -0,0 +1,7 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithPreserveFieldsHasMethodsRemoved/Unused" preserve="fields"> + <method signature="System.Void PreservedMethod()" /> + </type> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.cs new file mode 100644 index 000000000..8a79d2d2b --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.cs @@ -0,0 +1,74 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedTypeWithPreserveMethodsHasFieldsRemoved { + public static void Main () + { + } + + [Kept] + [KeptMember (".ctor()")] + class Unused { + public int Field1; + private int Field2; + internal int Field3; + public static int Field4; + private static int Field5; + internal static int Field6; + + [Kept] + [KeptBackingField] + public string Property1 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + private string Property2 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + internal string Property3 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + public static string Property4 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + private static string Property5 { [Kept] get; [Kept] set; } + + [Kept] + [KeptBackingField] + internal static string Property6 { [Kept] get; [Kept] set; } + + [Kept] + public void Method1 () + { + } + + [Kept] + private void Method2 () + { + } + + [Kept] + internal void Method3 () + { + } + + [Kept] + public static void Method4 () + { + } + + [Kept] + private static void Method5 () + { + } + + [Kept] + internal static void Method6 () + { + } + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.xml new file mode 100644 index 000000000..20723f8ed --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithPreserveMethodsHasFieldsRemoved/Unused" preserve="methods" /> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.cs new file mode 100644 index 000000000..b9d404f22 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.cs @@ -0,0 +1,26 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedTypeWithPreserveNothingAndPreserveMembers { + public static void Main () + { + } + + [Kept] + class Unused { + [Kept] + public int Field1; + + private int Field2; + + [Kept] + public void Method1 () + { + } + + private void Method2 () + { + } + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.xml new file mode 100644 index 000000000..d672e9e09 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.xml @@ -0,0 +1,8 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithPreserveNothingAndPreserveMembers/Unused" preserve="nothing"> + <field signature="System.Int32 Field1" /> + <method signature="System.Void Method1()" /> + </type> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.cs new file mode 100644 index 000000000..d6ea29b89 --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.cs @@ -0,0 +1,50 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + class UnusedTypeWithPreserveNothingHasMembersRemoved { + public static void Main () + { + } + + [Kept] + class Unused { + public int Field1; + private int Field2; + internal int Field3; + public static int Field4; + private static int Field5; + internal static int Field6; + + public string Property1 { get; set; } + private string Property2 { get; set; } + internal string Property3 { get; set; } + public static string Property4 { get; set; } + private static string Property5 { get; set; } + internal static string Property6 { get; set; } + + public void Method1 () + { + } + + private void Method2 () + { + } + + internal void Method3 () + { + } + + public static void Method4 () + { + } + + private static void Method5 () + { + } + + internal static void Method6 () + { + } + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.xml new file mode 100644 index 000000000..f76df307a --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.xml @@ -0,0 +1,5 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithPreserveNothingHasMembersRemoved/Unused" preserve="nothing" /> + </assembly> +</linker>
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.cs new file mode 100644 index 000000000..37cce219c --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.cs @@ -0,0 +1,52 @@ +using Mono.Linker.Tests.Cases.Expectations.Assertions; + +namespace Mono.Linker.Tests.Cases.LinkXml { + public class UsedNonRequiredTypeIsKept { + public static void Main () + { + var tmp = typeof (Used1).ToString (); + tmp = typeof (Used2).ToString (); + tmp = typeof (Used3).ToString (); + } + + class Used1 { + [Kept] + public int field; + + public void Method () + { + } + + public int Property { get; set; } + } + + [KeptMember (".ctor()")] + class Used2 { + public int field; + + [Kept] + public void Method () + { + } + + [Kept] + [KeptBackingField] + public int Property { [Kept] get; [Kept] set; } + } + + [KeptMember (".ctor()")] + class Used3 { + [Kept] + public int field; + + [Kept] + public void Method () + { + } + + [Kept] + [KeptBackingField] + public int Property { [Kept] get; [Kept] set; } + } + } +}
\ No newline at end of file diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.xml new file mode 100644 index 000000000..2294c4f4f --- /dev/null +++ b/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.xml @@ -0,0 +1,7 @@ +<linker> + <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UsedNonRequiredTypeIsKept/Used1" preserve="fields" required="0"/> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UsedNonRequiredTypeIsKept/Used2" preserve="methods" required="0"/> + <type fullname="Mono.Linker.Tests.Cases.LinkXml.UsedNonRequiredTypeIsKept/Used3" preserve="all" required="0"/> + </assembly> +</linker>
\ No newline at end of file |