Skip to main content
Version: 20 Mar 2024

MLWebViewTests.cs

Types Documentation

WebView

using WebView =  UnityEngine.XR.MagicLeap.MLWebView;

Source code

using NUnit.Framework;
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.TestTools;
using UnityEngine.XR.MagicLeap;
using WebView = UnityEngine.XR.MagicLeap.MLWebView;

namespace UnitySDKPlayTests
{
public partial class MLWebViewTests
{
private const uint Width = 640;
private const uint Height = 320;
private const String HomeUrl = "https://www.magicleap.com/en-us/";
private const String ExampleUrl = "https://www.example.com/";

WebView webView = null;
private bool callbackReceived = false;
private bool loadEnded = false;
private bool errorLoaded = false;

// [Test]
public void MLWebView_CheckPermission()
{
Assert.IsTrue(CheckWebViewPermissions());
}

[Test]
public void MLWebView_Create()
{
Assert.NotNull(webView);
}

[Test]
public void MLWebView_Destroy()
{
callbackReceived = false;
MLResult result = webView.Destroy();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_GoTo()
{
ResetFlags();
var result = webView.GoTo(HomeUrl);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_Reload()
{
ResetFlags();
webView.GoTo(HomeUrl);
ResetFlags();
var result = webView.Reload();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_GetURL()
{
ResetFlags();
webView.GoTo(HomeUrl);
ResetFlags();
var result = webView.GetURL();
Assert.That(result == HomeUrl, result);
}

[Test]
public void MLWebView_CanGoBackPositive()
{
ResetFlags();
webView.GoTo(ExampleUrl);
ResetFlags();
webView.GoTo(HomeUrl);
ResetFlags();
var result = webView.CanGoBack();
Assert.IsTrue(result);
}

[Test]
public void MLWebView_CanGoBackNegative()
{
var result = webView.CanGoBack();
Assert.IsFalse(result);
}

[Test]
public void MLWebView_GoBackPositive()
{
ResetFlags();
webView.GoTo(ExampleUrl);
ResetFlags();
webView.GoTo(HomeUrl);
ResetFlags();
var result = webView.GoBack();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_GoBackNegative()
{
ResetFlags();
var result = webView.GoBack();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_CanGoForwardPositive()
{
ResetFlags();
webView.GoTo(ExampleUrl);
ResetFlags();
webView.GoTo(HomeUrl);
ResetFlags();
webView.GoBack();
ResetFlags();
var result = webView.CanGoForward();
Assert.IsTrue(result);
}

[Test]
public void MLWebView_CanGoForwardNegative()
{
ResetFlags();
var result = webView.CanGoForward();
Assert.IsFalse(result);
}

[Test]
public void MLWebView_GoForwardPositive()
{
ResetFlags();
webView.GoTo(ExampleUrl);
ResetFlags();
webView.GoTo(HomeUrl);
ResetFlags();
webView.GoBack();
ResetFlags();
var result = webView.GoForward();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_GoForwardNegative()
{
ResetFlags();
var result = webView.GoForward();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_GetZoomFactor()
{
ResetFlags();
try
{
var result = webView.GetZoomFactor();
Assert.IsNotNull(result);
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}
}

[Test]
public void MLWebView_ClearCache()
{
ResetFlags();
var result = webView.ClearCache();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_RemoveAllCookies()
{
ResetFlags();
var result = webView.RemoveAllCookies();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_PauseDiscard()
{
ResetFlags();
var result = webView.Pause(WebView.PauseType.Discard);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_PauseMultiMedia()
{
ResetFlags();
var result = webView.Pause(WebView.PauseType.MultiMedia);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_PauseTimers()
{
ResetFlags();
var result = webView.Pause(WebView.PauseType.Timers);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_ResumeDiscard()
{
ResetFlags();
var result = webView.Pause(WebView.PauseType.Discard);
result = webView.Resume();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_ResumeMultiMedia()
{
ResetFlags();
var result = webView.Pause(WebView.PauseType.MultiMedia);
result = webView.Resume();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_ResumeTimers()
{
ResetFlags();
var result = webView.Pause(WebView.PauseType.Timers);
result = webView.Resume();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_ZoomIn()
{
ResetFlags();
var result = webView.ZoomIn();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_InjectMouseMove()
{
ResetFlags();
var result = webView.InjectMouseMove(0u, 0u, WebView.EventFlags.None);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_InjectMouseButtonDown_LeftMouseButton()
{
ResetFlags();
var result = webView.InjectMouseButtonDown(0u, 0u, WebView.EventFlags.LeftMouseButton);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_InjectMouseButtonUp_LeftMouseButton()
{
ResetFlags();
var result = webView.InjectMouseButtonUp(0u, 0u, WebView.EventFlags.LeftMouseButton);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_InjectMouseButtonDown_MiddleMouseButton()
{
ResetFlags();
var result = webView.InjectMouseButtonDown(0u, 0u, WebView.EventFlags.MiddleMouseButton);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_InjectMouseButtonUp_MiddleMouseButton()
{
ResetFlags();
var result = webView.InjectMouseButtonUp(0u, 0u, WebView.EventFlags.MiddleMouseButton);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_InjectMouseButtonDown_RightMouseButton()
{
ResetFlags();
var result = webView.InjectMouseButtonDown(0u, 0u, WebView.EventFlags.RightMouseButton);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_InjectMouseButtonUp_RightMouseButton()
{
ResetFlags();
var result = webView.InjectMouseButtonUp(0u, 0u, WebView.EventFlags.RightMouseButton);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_InjectChar_w()
{
ResetFlags();
var result = webView.InjectChar('w');
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_InjectKeyDown_Back()
{
ResetFlags();
var result = webView.InjectKeyDown(WebView.KeyCode.Back, (uint)WebView.EventFlags.None);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_InjectKeyUp_Back()
{
ResetFlags();
var result = webView.InjectKeyUp(WebView.KeyCode.Back, (uint)WebView.EventFlags.None);
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_ZoomOut()
{
ResetFlags();
var result = webView.ZoomOut();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_ResetZoomNoChange()
{
ResetFlags();
var result = webView.ResetZoom();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_ResetZoomIn()
{
ResetFlags();
webView.ZoomIn();
var result = webView.ResetZoom();
Assert.That(result.IsOk, result.Result.ToString());
}

[Test]
public void MLWebView_ResetZoomOut()
{
ResetFlags();
webView.ZoomOut();
var result = webView.ResetZoom();
Assert.That(result.IsOk, result.Result.ToString());
}

[UnitySetUp]
private void SetUp()
{
//CheckWebViewPermissions();
webView = WebView.Create(Width, Height);
RegisterCallbacks();
Assert.IsNotNull(webView);
// yield return new WaitUntil(() => callbackReceived);
}

[UnityTearDown]
private void TearDown()
{
ResetFlags();
MLResult result = webView.Destroy();
Assert.That(result.IsOk, result.Result.ToString());
}

private IEnumerator TearDownYieldCallback(MLResult result)
{
yield return new WaitUntil(() => callbackReceived || result.IsOk);
UnregisterCallbacks();
webView = null;
}

private void RegisterCallbacks()
{
webView.OnBeforeResourceLoaded += OnBeforeResourceLoaded;
webView.OnCertificateErrorLoaded += OnCertificateErrorLoaded;
webView.OnErrorLoaded += OnErrorLoaded;
webView.OnKeyboardDismissed += OnKeyboardDismissed;
webView.OnKeyboardShown += OnKeyboardShown;
webView.OnLoadEnded += OnLoadEnded;
webView.OnServiceConnected += OnServiceConnected;
webView.OnServiceDisconnected += OnServiceDisconnected;
webView.OnServiceFailed += OnServiceFailed;
webView.OnWebViewDestroyed += OnWebViewDestroyed;
}

private void UnregisterCallbacks()
{
webView.OnBeforeResourceLoaded -= OnBeforeResourceLoaded;
webView.OnCertificateErrorLoaded -= OnCertificateErrorLoaded;
webView.OnErrorLoaded -= OnErrorLoaded;
webView.OnKeyboardDismissed -= OnKeyboardDismissed;
webView.OnKeyboardShown -= OnKeyboardShown;
webView.OnLoadEnded -= OnLoadEnded;
webView.OnServiceConnected -= OnServiceConnected;
webView.OnServiceDisconnected -= OnServiceDisconnected;
webView.OnServiceFailed -= OnServiceFailed;
webView.OnWebViewDestroyed -= OnWebViewDestroyed;
}

private void ResetFlags()
{
callbackReceived = false;
loadEnded = false;
errorLoaded = false;
}

private void OnBeforeResourceLoaded(WebView webView, string resourceURL)
{
Debug.Log("OnBeforeResourceLoaded");
callbackReceived = true;
}

void OnCertificateErrorLoaded(WebView webView, int errorCode, string url, string errorMessage, string details, bool certificateErrorIgnored)
{
Assert.Fail("OnCertificateErrorLoaded");
callbackReceived = true;
}

void OnErrorLoaded(WebView webView, bool isMainFrame, int httpStatusCode, string errorStr, string failedUrl)
{
Assert.Fail($"OnErrorLoaded: {errorStr} for URL: {failedUrl}");
callbackReceived = true;
errorLoaded = true;
}

void OnKeyboardDismissed(WebView webView)
{
Debug.Log("OnKeyboardDismissed");
callbackReceived = true;
}

void OnKeyboardShown(WebView webView, WebView.InputFieldData keyboardShowData)
{
Debug.Log("OnKeyboardShown");
callbackReceived = true;
}

void OnLoadEnded(WebView webView, bool isMainFrame, int httpStatusCode)
{
Debug.Log("OnLoadEnded");
callbackReceived = true;
loadEnded = true;
}

void OnServiceConnected(WebView webView)
{
Debug.Log("OnServiceConnected");
callbackReceived = true;
}

void OnServiceDisconnected(WebView webView)
{
Debug.Log("OnServiceDisconnected");
callbackReceived = true;
}

void OnServiceFailed(WebView webView, MLResult result)
{
Assert.Fail("OnServiceFailed");
callbackReceived = true;
}

void OnWebViewDestroyed(WebView webView)
{
Debug.Log("OnWebViewDestroyed");
callbackReceived = true;
}

private static bool CheckWebViewPermissions()
{
MLPermissions.RequestPermission(MLPermission.WebView, new MLPermissions.Callbacks());

return MLPermissions.CheckPermission(MLPermission.WebView).IsOk;
}
}
}