summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Xaml.UnitTests/XamlC/MethodReferenceExtensionsTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Xaml.UnitTests/XamlC/MethodReferenceExtensionsTests.cs')
-rw-r--r--Xamarin.Forms.Xaml.UnitTests/XamlC/MethodReferenceExtensionsTests.cs92
1 files changed, 92 insertions, 0 deletions
diff --git a/Xamarin.Forms.Xaml.UnitTests/XamlC/MethodReferenceExtensionsTests.cs b/Xamarin.Forms.Xaml.UnitTests/XamlC/MethodReferenceExtensionsTests.cs
new file mode 100644
index 00000000..ab7925ac
--- /dev/null
+++ b/Xamarin.Forms.Xaml.UnitTests/XamlC/MethodReferenceExtensionsTests.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Linq;
+
+using Mono.Cecil;
+
+using Xamarin.Forms.Build.Tasks;
+
+using NUnit.Framework;
+using System.Collections.Generic;
+
+namespace Xamarin.Forms.Xaml.XamlcUnitTests
+{
+ [TestFixture]
+ public class MethodReferenceExtensionsTests
+ {
+ ModuleDefinition module;
+
+ [SetUp]
+ public void SetUp ()
+ {
+ module = ModuleDefinition.CreateModule ("foo", ModuleKind.Dll);
+ }
+
+ [Test]
+ public void ResolveRowDefAdder ()
+ {
+ var propertyType = module.Import(typeof (RowDefinitionCollection));
+ var adderT = propertyType.GetMethods ((md, tr) => md.Name == "Add", module).Single ();
+ var adder = adderT.Item1;
+ var ptype = adderT.Item2;
+ Assert.AreEqual ("System.Void Xamarin.Forms.DefinitionCollection`1::Add(T)", adder.FullName);
+ Assert.AreEqual ("Xamarin.Forms.DefinitionCollection`1<Xamarin.Forms.RowDefinition>", ptype.FullName);
+ var adderRef = module.Import (adder);
+ Assert.AreEqual ("System.Void Xamarin.Forms.DefinitionCollection`1::Add(T)", adderRef.FullName);
+ adderRef = adderRef.ResolveGenericParameters (ptype, module);
+ Assert.AreEqual ("System.Void Xamarin.Forms.DefinitionCollection`1<Xamarin.Forms.RowDefinition>::Add(T)", adderRef.FullName);
+ }
+
+ [Test]
+ public void GenericGetter ()
+ {
+ TypeReference declaringTypeReference;
+ var type = module.Import (typeof (StackLayout));
+ var property = type.GetProperty (pd => pd.Name == "Children", out declaringTypeReference);
+ Assert.AreEqual ("System.Collections.Generic.IList`1<T> Xamarin.Forms.Layout`1::Children()", property.FullName);
+ Assert.AreEqual ("Xamarin.Forms.Layout`1<Xamarin.Forms.View>", declaringTypeReference.FullName);
+ var propertyGetter = property.GetMethod;
+ Assert.AreEqual ("System.Collections.Generic.IList`1<T> Xamarin.Forms.Layout`1::get_Children()", propertyGetter.FullName);
+ var propertyGetterRef = module.Import (propertyGetter);
+ Assert.AreEqual ("System.Collections.Generic.IList`1<T> Xamarin.Forms.Layout`1::get_Children()", propertyGetterRef.FullName);
+
+ propertyGetterRef = module.Import (propertyGetterRef.ResolveGenericParameters (declaringTypeReference, module));
+ Assert.AreEqual ("System.Collections.Generic.IList`1<T> Xamarin.Forms.Layout`1<Xamarin.Forms.View>::get_Children()", propertyGetterRef.FullName);
+ var returnType = propertyGetterRef.ReturnType.ResolveGenericParameters (declaringTypeReference);
+ Assert.AreEqual ("System.Collections.Generic.IList`1<Xamarin.Forms.View>", returnType.FullName);
+ }
+
+ [Test]
+ public void GetterWithGenericReturnType ()
+ {
+ TypeReference declaringTypeReference;
+ var type = module.Import (typeof (Style));
+ var property = type.GetProperty (pd => pd.Name == "Setters", out declaringTypeReference);
+ Assert.AreEqual ("System.Collections.Generic.IList`1<Xamarin.Forms.Setter> Xamarin.Forms.Style::Setters()", property.FullName);
+ Assert.AreEqual ("Xamarin.Forms.Style", declaringTypeReference.FullName);
+ var propertyGetter = property.GetMethod;
+ Assert.AreEqual ("System.Collections.Generic.IList`1<Xamarin.Forms.Setter> Xamarin.Forms.Style::get_Setters()", propertyGetter.FullName);
+
+ var propertyGetterRef = module.Import (propertyGetter);
+ Assert.AreEqual ("System.Collections.Generic.IList`1<Xamarin.Forms.Setter> Xamarin.Forms.Style::get_Setters()", propertyGetterRef.FullName);
+ propertyGetterRef = module.Import (propertyGetterRef.ResolveGenericParameters (declaringTypeReference, module));
+ Assert.AreEqual ("System.Collections.Generic.IList`1<Xamarin.Forms.Setter> Xamarin.Forms.Style::get_Setters()", propertyGetterRef.FullName);
+ var returnType = propertyGetterRef.ReturnType.ResolveGenericParameters (declaringTypeReference);
+ Assert.AreEqual ("System.Collections.Generic.IList`1<Xamarin.Forms.Setter>", returnType.FullName);
+ }
+
+ [Test]
+ public void ResolveChildren ()
+ {
+ var propertyType = module.Import (typeof (IList<View>));
+ var adderT = propertyType.GetMethods (md => md.Name == "Add" && md.Parameters.Count == 1, module).Single ();
+ var adder = adderT.Item1;
+ var ptype = adderT.Item2;
+ Assert.AreEqual ("System.Void System.Collections.Generic.ICollection`1::Add(T)", adder.FullName);
+ Assert.AreEqual ("System.Collections.Generic.ICollection`1<Xamarin.Forms.View>", ptype.FullName);
+ var adderRef = module.Import (adder);
+ Assert.AreEqual ("System.Void System.Collections.Generic.ICollection`1::Add(T)", adderRef.FullName);
+ adderRef = adderRef.ResolveGenericParameters (ptype, module);
+ Assert.AreEqual ("System.Void System.Collections.Generic.ICollection`1<Xamarin.Forms.View>::Add(T)", adderRef.FullName);
+ }
+ }
+} \ No newline at end of file