summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core.UnitTests/WebViewUnitTests.cs
blob: d441f4b844fccaf6951ecf331ad4905b3397cc0c (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 System.Collections.Generic;
using System.Linq;

using NUnit.Framework;

namespace Xamarin.Forms.Core.UnitTests
{
	[TestFixture]
	public class WebViewUnitTests : BaseTestFixture
	{
		[Test]
		public void TestSourceImplicitConversion ()
		{
			var web = new WebView ();
			Assert.Null (web.Source);
			web.Source = "http://www.google.com";
			Assert.NotNull (web.Source);
			Assert.True (web.Source is UrlWebViewSource);
			Assert.AreEqual ("http://www.google.com", ((UrlWebViewSource)web.Source).Url);
		}

		[Test]
		public void TestSourceChangedPropagation ()
		{
			var source = new UrlWebViewSource {Url ="http://www.google.com"};
			var web = new WebView { Source = source };
			bool signaled = false;
			web.PropertyChanged += (sender, args) => {
				if (args.PropertyName == WebView.SourceProperty.PropertyName)
					signaled = true;
			};
			Assert.False (signaled);
			source.Url = "http://www.xamarin.com";
			Assert.True (signaled);
		}

		[Test]
		public void TestSourceDisconnected ()
		{
			var source = new UrlWebViewSource {Url="http://www.google.com"};
			var web = new WebView { Source = source };
			web.Source = new UrlWebViewSource {Url="Foo"};
			bool signaled = false;
			web.PropertyChanged += (sender, args) => {
				if (args.PropertyName == WebView.SourceProperty.PropertyName)
					signaled = true;
			};
			Assert.False (signaled);
			source.Url = "http://www.xamarin.com";
			Assert.False (signaled);
		}

		class ViewModel
		{
			public string HTML { get; set; } = "<html><body><p>This is a WebView!</p></body></html>";

			public string URL { get; set; } = "http://xamarin.com";

		}

		[Test]
		public void TestBindingContextPropagatesToSource ()
		{
			var htmlWebView = new WebView {
			};
			var urlWebView = new WebView {
			};

			var htmlSource = new HtmlWebViewSource ();
			htmlSource.SetBinding (HtmlWebViewSource.HtmlProperty, "HTML");
			htmlWebView.Source = htmlSource;

			var urlSource = new UrlWebViewSource ();
			urlSource.SetBinding (UrlWebViewSource.UrlProperty, "URL");
			urlWebView.Source = urlSource;

			var viewModel = new ViewModel ();

			var container = new StackLayout {
				BindingContext = viewModel,
				Padding = new Size (20, 20),
				Children = {
					htmlWebView,
					urlWebView
				}
			};

			Assert.AreEqual ("<html><body><p>This is a WebView!</p></body></html>", htmlSource.Html);
			Assert.AreEqual ("http://xamarin.com", urlSource.Url);
		}
	}
}