summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core.UnitTests/DataTemplateSelectorTests.cs
blob: 552f784b92eb43ce2106af3a8093f1cf34d8b85d (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System;
using NUnit.Framework;
using Xamarin.Forms;

namespace Xamarin.Forms.Core.UnitTests
{
	[TestFixture]
	public class DataTemplateSelectorTests : BaseTestFixture
	{
		[TearDown]
		public override void TearDown()
		{
			base.TearDown();
			Device.PlatformServices = null;
		}

		[SetUp]
		public override void Setup()
		{
			base.Setup();
			Device.PlatformServices = new MockPlatformServices();
		}

		class TemplateOne : DataTemplate
		{
			public TemplateOne () : base (typeof (ViewCell))
			{
				
			}
		}

		class TemplateTwo : DataTemplate
		{
			public TemplateTwo () : base (typeof (EntryCell))
			{
				
			}
		}

		class TestDTS : DataTemplateSelector
		{
			public TestDTS ()
			{
				templateOne = new TemplateOne ();
				templateTwo = new TemplateTwo ();
			}

			protected override DataTemplate OnSelectTemplate (object item, BindableObject container)
			{
				if (item is double)
					return templateOne;
				if (item is byte)
					return new TestDTS ();
				return templateTwo;
			}

			readonly DataTemplate templateOne;
			readonly DataTemplate templateTwo;
		}

		[Test]
		public void Constructor ()
		{
			var dts = new TestDTS ();
		}

		[Test]
		public void ReturnsCorrectType ()
		{
			var dts = new TestDTS ();
			Assert.IsInstanceOf<TemplateOne> (dts.SelectTemplate (1d, null));
			Assert.IsInstanceOf<TemplateTwo> (dts.SelectTemplate ("test", null));
		}

		[Test]
		public void ListViewSupport ()
		{
			var listView = new ListView(ListViewCachingStrategy.RecycleElement);
			listView.ItemsSource = new object[] { 0d, "test" };

			listView.ItemTemplate = new TestDTS ();
			Assert.IsInstanceOf<ViewCell> (listView.TemplatedItems[0]);
			Assert.IsInstanceOf<EntryCell> (listView.TemplatedItems[1]);
		}

		[Test]
		public void NestingThrowsException ()
		{
			var dts = new TestDTS ();
			Assert.Throws<NotSupportedException> (() => dts.SelectTemplate ((byte)0, null));
		}
	}
}