summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Xaml.UnitTests/StaticExtensionTests.cs
blob: 86e02fe7ba517fb1c94429422b009dcf17684083 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System;
using NUnit.Framework;
using System.Xml;

using Xamarin.Forms.Core.UnitTests;
using System.Reflection;

namespace Xamarin.Forms.Xaml.UnitTests
{
	[TestFixture]
	public class StaticExtensionTests : BaseTestFixture
	{
		IXamlTypeResolver typeResolver;

		[SetUp]
		public override void Setup ()
		{
			base.Setup ();
			var nsManager = new XmlNamespaceManager (new NameTable ());
			nsManager.AddNamespace ("local", "clr-namespace:Xamarin.Forms.Xaml.UnitTests;assembly=Xamarin.Forms.Xaml.UnitTests");
			nsManager.AddNamespace ("x", "http://schemas.microsoft.com/winfx/2006/xaml");

			typeResolver = new Internals.XamlTypeResolver (nsManager, XamlParser.GetElementType, Assembly.GetCallingAssembly ());
		}

		[Test]
		public void TestxStatic ()
		{
			//{x:Static Member=prefix:typeName.staticMemberName}
			//{x:Static prefix:typeName.staticMemberName}

			//The code entity that is referenced must be one of the following:
			// - A constant
			// - A static property
			// - A field
			// - An enumeration value
			// All other cases should throw

			var serviceProvider = new Internals.XamlServiceProvider (null, null) { 
				IXamlTypeResolver = typeResolver,
			};

			//Static property
			var markupString = @"{x:Static Member=""local:MockxStatic.MockStaticProperty""}";
			Assert.AreEqual ("Property", (new MarkupExtensionParser ()).ParseExpression (ref markupString, serviceProvider));

			//constant
			markupString = @"{x:Static Member=""local:MockxStatic.MockConstant""}";
			Assert.AreEqual ("Constant", (new MarkupExtensionParser ()).ParseExpression (ref markupString, serviceProvider));

			//field
			markupString = @"{x:Static Member=""local:MockxStatic.MockField""}";
			Assert.AreEqual ("Field", (new MarkupExtensionParser ()).ParseExpression (ref markupString, serviceProvider));

			//enum
			markupString = @"{x:Static Member=""local:MockEnum.Second""}";
			Assert.AreEqual (MockEnum.Second, (new MarkupExtensionParser ()).ParseExpression (ref markupString, serviceProvider));

			//throw on InstanceProperty
			markupString = @"{x:Static Member=""local:MockxStatic.InstanceProperty""}";
			Assert.Throws<XamlParseException> (()=> (new MarkupExtensionParser ()).ParseExpression (ref markupString, serviceProvider));

			//quotes are optional
			markupString = @"{x:Static Member=local:MockxStatic.MockStaticProperty}";
			Assert.AreEqual ("Property", (new MarkupExtensionParser ()).ParseExpression (ref markupString, serviceProvider));

			//Member is optional
			markupString = @"{x:Static local:MockxStatic.MockStaticProperty}";
			Assert.AreEqual ("Property", (new MarkupExtensionParser ()).ParseExpression (ref markupString, serviceProvider));
		}
	}
}