using System; using System.Collections.Generic; using System.Linq; using System.Net; using NUnit.Framework; using Xamarin.Forms.PlatformConfiguration; using Xamarin.Forms.PlatformConfiguration.AndroidSpecific; using Xamarin.Forms.PlatformConfiguration.WindowsSpecific; using WindowsOS = Xamarin.Forms.PlatformConfiguration.Windows; 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; } = "

This is a WebView!

"; 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("

This is a WebView!

", htmlSource.Html); Assert.AreEqual("http://xamarin.com", urlSource.Url); } [Test] public void TestAndroidMixedContent() { var defaultWebView = new WebView(); var mixedContentWebView = new WebView(); mixedContentWebView.On().SetMixedContentMode(MixedContentHandling.AlwaysAllow); Assert.AreEqual(defaultWebView.On().MixedContentMode(), MixedContentHandling.NeverAllow); Assert.AreEqual(mixedContentWebView.On().MixedContentMode(), MixedContentHandling.AlwaysAllow); } [Test] public void TestEnableZoomControls() { var defaultWebView = new WebView(); var enableZoomControlsWebView = new WebView(); enableZoomControlsWebView.On().SetEnableZoomControls(true); Assert.AreEqual(defaultWebView.On().ZoomControlsEnabled(), false); Assert.AreEqual(enableZoomControlsWebView.On().ZoomControlsEnabled(), true); } [Test] public void TestDisplayZoomControls() { var defaultWebView = new WebView(); var displayZoomControlsWebView = new WebView(); displayZoomControlsWebView.On().SetDisplayZoomControls(false); Assert.AreEqual(defaultWebView.On().ZoomControlsDisplayed(), true); Assert.AreEqual(displayZoomControlsWebView.On().ZoomControlsDisplayed(), false); } [Test] public void TestWindowsSetAllowJavaScriptAlertsFlag() { var defaultWebView = new WebView(); var jsAlertsAllowedWebView = new WebView(); jsAlertsAllowedWebView.On().SetIsJavaScriptAlertEnabled(true); Assert.AreEqual(defaultWebView.On().IsJavaScriptAlertEnabled(), false); Assert.AreEqual(jsAlertsAllowedWebView.On().IsJavaScriptAlertEnabled(), true); } [Test] public void TestSettingOfCookie() { var defaultWebView = new WebView(); var CookieContainer = new CookieContainer(); CookieContainer.Add(new Cookie("TestCookie", "My Test Cookie...", "/", "microsoft.com")); defaultWebView.Cookies = CookieContainer; defaultWebView.Source = "http://xamarin.com"; Assert.IsNotNull(defaultWebView.Cookies); } } }