public static async Task AddEmbeddedScriptInsideEmbedded() { var resources = Mocks.ResourceProvider( "http://localhost", Mocks.Page(@" document.addEventListener(""DOMNodeInserted"", function(e){ console.log('node added'); }, false); var d = document.createElement('script'); d.id='aaa'; d.async = true; d.innerHTML = ""console.log('in new script');console.log(document.getElementById('aaa') != null ? 'ok' : 'null');""; d.onload = function(){console.log('onload');}; document.head.appendChild(d); console.log('afterappend');")); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resources, console); await engine.OpenUrl("http://localhost"); Thread.Sleep(1000); CollectionAssert.AreEqual(new[] { "in new script", "ok", "node added", "afterappend" }, console.LogHistory); }
public static async Task AddScriptAsync() { var resources = Mocks.ResourceProvider( "http://localhost", Mocks.Page(@" document.addEventListener(""DOMNodeInserted"", function(e){ console.log('nodeadded'); }, false); var d = document.createElement('script'); d.id='aaa'; d.async = true; d.src = ""http://localhost/script.js""; d.onload = function(){console.log('onload');}; document.head.appendChild(d); console.log('afterappend');")).Resource("http://localhost/script.js", "console.log('in new script');"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resources, console); await engine.OpenUrl("http://localhost"); Thread.Sleep(1000); Assert.AreEqual("nodeadded,afterappend,in new script,onload", string.Join(",", console.LogHistory)); }
public static async Task XmlHttpRequestSend() { var resourceProvider = Mocks.ResourceProvider("http://localhost", Mocks.Page( @"var client = new XMLHttpRequest(); client.onreadystatechange = function () { console.log(this.readyState); if(this.readyState == this.DONE) { console.log(this.status); if(this.status == 200 ) { console.log(this.responseText); } } }; client.open(""GET"", ""http://localhost/unicorn.xml"", false); client.send();")) .Resource("http://localhost/unicorn.xml", "hello"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); await engine.OpenUrl("http://localhost"); Thread.Sleep(1000); Mock.Get(resourceProvider).Verify(x => x.SendRequestAsync(It.IsAny <Request>()), Times.Exactly(2)); CollectionAssert.AreEqual(new object[] { 1.0d, 4.0d, 200.0d, "hello" }, console.LogHistory); }
public static async Task CancelSubmit() { var html = @"<form><button id=b>clickme</button></form>"; var js = @" window.onsubmit = function(){console.log('window onsubmit');}; window.onclick = function(){console.log('window onclick')}; var f = document.getElementsByTagName('form')[0]; f.onsubmit = function(){console.log('form onsubmit')}; f.onclick = function(){console.log('form onclick')}; var b = document.getElementById('b'); b.onclick=function(){console.log('button onclick'); return false;};" ; var httpResources = Mocks.HttpResourceProvider() .Resource("http://site.net/", $"{html}<script>{js}</script>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(httpResources, console); engine.OpenUrl("http://site.net").Wait(); var doc = engine.Document; var button = doc.Get <HtmlButtonElement>("#b").First(); button.Click(); Assert.AreEqual(new[] { "button onclick", "form onclick", "window onclick" }, console.LogHistory); }
public static async Task AddScriptThatAddsScriptModifyingDom() { var modifyingScript = "var form = document.body.getElementsByTagName('form')[0];" + " var div = document.createElement('div');" + " div.name = 'generatedDiv'; " + "form.appendChild(document.createElement('div'));"; var scriptThatAddsScript = $@"var script = document.createElement('script'); script.text = ""{modifyingScript}""; document.body.getElementsByTagName('form')[0].appendChild(script);" ; var accesingScript = @"var div = document.getElementsByName('generatedDiv'); console.log(div != null);" ; var resourceProvider = Mocks.ResourceProvider("http://localhost", $"<html><body><form><script id=adding>{scriptThatAddsScript}</script><script id=accessing>{accesingScript}</script></form></body></html>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); var page = await engine.OpenUrl("http://localhost"); page.Assert(x => x.Document.Body.GetElementsByTagName("form")[0].ChildNodes.Count == 4); Assert.AreEqual(new[] { true }, console.LogHistory); }
[TestCase("hello", null)] //bad json public void XmlHttpRequestJson(string json, string expectedMsg) { var resourceProvider = Mocks.ResourceProvider("http://localhost/", @"<html><script> var xhr = new XMLHttpRequest(); xhr.open('GET', 'data.json', true); xhr.responseType = 'json'; xhr.onload = function () { if (xhr.readyState === xhr.DONE) { if (xhr.status === 200) { console.log(xhr.response == null ? null : xhr.response.data); var div = document.createElement('div'); div.id='finished'; document.body.appendChild(div); } } }; xhr.send(null);</script></html>" ) .Resource("http://localhost/data.json", json); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); ((Navigator)engine.Window.Navigator).UserAgent = "My favorite browser"; engine.OpenUrl("http://localhost").Wait(); Assert.IsNotNull(engine.WaitId("finished")); Assert.AreEqual(new[] { expectedMsg }, console.LogHistory); }
public async Task AddScriptAsync() { var resources = Mocks.ResourceProvider("http://localhost/script.js", "console.log('in new script');") .Resource("http://localhost", "<html><head></head></html>"); var console = new TestingConsole(); //todo: rewrite it with JS. current test is not stable due to multithreading. var engine = TestingEngine.BuildJint(resources, console); var page = await engine.OpenUrl("http://localhost"); page.Document.AddEventListener("DOMNodeInserted", @event => { console.Log("nodeadded"); }, false); var onloadSignal = new ManualResetEvent(false); var d = (HtmlScriptElement)page.Document.CreateElement("script"); d.Id = "aaa"; d.Async = true; d.Src = "http://localhost/script.js"; d.OnLoad += e => { console.Log("onload"); onloadSignal.Set(); }; page.Document.Head.AppendChild(d); onloadSignal.WaitOne(10000); CollectionAssert.AreEqual(new[] { "nodeadded", "in new script", "onload" }, console.LogHistory); }
public static async Task CancelSubmitFromWindow(string returnValue, string log) { var html = @"<form><button id=b>clickme</button></form>"; var js = "window.onsubmit=function(){console.log('submit')};" + $"window.onclick=function(){{console.log('click'); return {returnValue};}};"; var httpResources = Mocks.HttpResourceProvider() .Resource("http://site.net/", $"{html}<script>{js}</script>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(httpResources, console); var page = await engine.OpenUrl("http://site.net"); engine.OnUriChanged += () => console.Log("reload"); var button = page.Document.Get <HtmlButtonElement>("#b").First(); button.Click(); await Task.Delay(1000); Assert.AreEqual(log, string.Join(",", console.LogHistory)); }
public async Task DocumentWithEmbeddedImageEventsOrder() { var httpResourceProvider = Mocks.HttpResourceProvider() .Resource("http://localhost/", "<html><body onload='console.log(\"body\")'>" + "<img src='data:image/bmp;base64,{Img64}'/>" + "<script>" + "document.getElementsByTagName('img')[0].onload=function(){console.log('img');}" + "document.addEventListener('DOMContentLoaded', function(){console.log('DOMContentLoaded-C');}, true);" + "document.addEventListener('DOMContentLoaded', function(){console.log('DOMContentLoaded-B');}, false);" + "</script>" + "</body></html>" ); var resourceProvider = new ResourceProvider(httpResourceProvider, null); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); var page = await engine.OpenUrl("http://localhost"); Thread.Sleep(5000); //rewrite Assert.AreEqual(new[] { "DOMContentLoaded-C", "DOMContentLoaded-B", "img", "body" }, console.LogHistory); ((HtmlImageElement)page.Document.GetElementsByTagName(TagsNames.Img).First()) .Assert(img => img.NaturalWidth == 8 && img.NaturalHeight == 4); }
public async Task StyleOnLoad() { var console = new TestingConsole(); var engine = Builder(Mocks.ResourceProvider("http://loc/", @"<html><body></body> <script> document.body.onload=function(){console.log('body onload')}; var style=document.createElement('style'); style.innerHTML='div{border:1px solid red}'; var onLoadCalled = false; style.onload=function(){ console.log('style onload')}; var cnt = document.createElement('div'); cnt.appendChild(style); console.log('add'); document.head.appendChild(style) console.log('added'); </script> <script> console.log('script2') </script></html>")) .Window(w => w.SetConsole(console)) .Build(); var page = await engine.OpenUrl("http://loc/"); Assert.IsNotNull(page.Document.GetElementsByTagName("style").FirstOrDefault()); Assert.AreEqual(new[] { "add", "added", "script2", "style onload", "body onload" }, console.LogHistory); }
public static async Task NavigatorPlugins() { var plugins = new [] { new PluginInfo("Pdf reader", "Pdf document reader", "", "", new PluginMimeTypeInfo[] { new PluginMimeTypeInfo("application/pdf", "", "pdf") }), new PluginInfo("Video plugin", "", "", "", new PluginMimeTypeInfo[] { new PluginMimeTypeInfo("application/mpeg", "", "mpg"), new PluginMimeTypeInfo("application/avi", "", "avi"), }), }; var resourceProvider = Mocks.ResourceProvider("http://localhost", "<html><script>" + "console.log(navigator.mimeTypes.length);" + "console.log(navigator.plugins.length);" + "console.log(navigator.plugins[0].name);" + "console.log(navigator.plugins[0].length);" + "console.log(navigator.plugins[0][0].type)" + "</script></html>"); var console = new TestingConsole(); var engine = EngineBuilder.New() .SetResourceProvider(resourceProvider) .UseJint() .Window(w => w.SetNavigatorPlugins(plugins).SetConsole(console)) .Build(); await engine.OpenUrl("http://localhost"); Assert.AreEqual(new object[] { 3, 2, "Pdf reader", 1, "application/pdf" }, console.LogHistory); }
public async Task HrefJavaScriptOnClickOrder() { var signal = new AutoResetEvent(false); var console = new TestingConsole(); console.OnLog += x => { if (console.LogHistory.Count == 2) { signal.Set(); } }; var resourceProvider = Mocks.ResourceProvider("http://loc/", "<html><body><a id=a href='JavaScript:console.log(1)'><div id=d></div></a>" + "<script>var a = document.getElementById('a');" + "a.click();" + "console.log(2);</script></body></html>"); var engine = EngineBuilder.New() .SetResourceProvider(resourceProvider) .UseJint() .Window(w => w.SetConsole(console)) .Build(); await engine.OpenUrl("http://loc/"); signal.WaitOne(5000); Assert.AreEqual(new object[] { 2d, 1d }, console.LogHistory); }
public async Task On() { var script = @"$('#b').on('click', function() {console.log('hi'); }); var e = document.createElement('div'); e.id = 'loaded'; document.body.appendChild(e);"; var resources = Mocks.ResourceProvider( "http://localhost", "<html><head><script> " + R.JQueryJs + " </script></head><body><div id='b'></div></body><script>" + script + "</script></html>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resources, console); var page = await engine.OpenUrl("http://localhost"); var loaded = page.Document.WaitId("loaded"); Assert.IsNotNull(loaded); var e = engine.Document.CreateEvent("Event"); e.InitEvent("click", true, true); engine.Document.GetElementById("b").DispatchEvent(e); Assert.AreEqual(new[] { "hi" }, console.LogHistory); }
public void XmlHttpRequestUserAgent() { var httpResourceProvider = Mocks.HttpResourceProvider() .Resource("http://localhost/", @"<html><script> function reqListener () { console.log(this.responseText); } var oReq = new XMLHttpRequest(); oReq.onload = reqListener; oReq.open('get', 'data.txt', false); oReq.send();</script></html>" ) .Resource("http://localhost/data.txt", "data!"); var resourceProvider = new ResourceProvider(httpResourceProvider, null); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); ((Navigator)engine.Window.Navigator).UserAgent = "My favorite browser"; engine.OpenUrl("http://localhost").Wait(); Assert.AreEqual(new[] { "data!" }, console.LogHistory); Assert.AreEqual(2, httpResourceProvider.History.Count); Assert.AreEqual("My favorite browser", httpResourceProvider.History[0].Headers["User-Agent"]); Assert.AreEqual("My favorite browser", httpResourceProvider.History[1].Headers["User-Agent"]); }
private static Engine Load(IResourceProvider resourceProvider) { var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); engine.OpenUrl("http://localhost").Wait(); return(engine); }
public void ConsoleLog() { var console = new TestingConsole(); var window = Mock.Of <IWindowEx>(x => x.Console == console); Execute(window, "console.log('hello')"); Assert.AreEqual(new[] { "hello" }, console.LogHistory); }
private Engine Open(string testUrl) { var console = new TestingConsole(); var engine = TestingEngine.BuildJint(console).LogEvents(); engine.OpenUrl(GetTestUrl(testUrl)); engine.WaitDocumentLoad(); return(engine); }
private static List <object> OpenUrlAndGetLog(string url, IResourceProvider resourceProvider) { var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); engine.OpenUrl(url).Wait(); System.Threading.Thread.Sleep(5000); return(console.LogHistory); }
public async Task LoadScriptTest() { var resourceProvider = Mocks.ResourceProvider("http://localhost/script.js", "console.log('hello');") .Resource("http://localhost", "<html><head><script src='http://localhost/script.js'></script></head></html>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); await engine.OpenUrl("http://localhost"); Assert.AreEqual(new[] { "hello" }, console.LogHistory); }
public async Task SetWindowProperty(string code) { var resourceProvider = Mocks.ResourceProvider("http://loc/", $"<html><script>{code}</script></html>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); var page = await engine.OpenUrl("http://loc/"); Assert.AreEqual(new[] { true }, console.LogHistory); }
public static void GetComputedStyle() { var console = new TestingConsole(); var resourceProvider = Mock.Of <IResourceProvider>() .Resource("http://localhost", "<html><head><script src='test.js' defer/></head><body><div id=d></div></body></html>") .Resource("http://localhost/test.js", "console.log(window.getComputedStyle(document.getElementById('d')).getPropertyValue('display'));" + "console.log(getComputedStyle(document.getElementById('d')).getPropertyValue('display'));"); var engine = TestingEngine.BuildJintCss(resourceProvider, console); engine.OpenUrl("http://localhost").Wait(); CollectionAssert.AreEqual(new[] { "block", "block" }, console.LogHistory); }
public static void AddEventListenerNull() { var resourceProvider = Mocks.ResourceProvider("http://localhost", "<html><script>" + "addEventListener('load', null);" + "console.log('no error');" + "</script></html>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); engine.OpenUrl("http://localhost").Wait(); Assert.AreEqual(new object[] { "no error" }, console.LogHistory); }
public async Task JQueryCreate() { var script = "var a = $('<input type=\"file\">');console.log(a?'ok':'error');"; var resources = Mocks.ResourceProvider("http://localhost", "<html><head><script> " + R.JQueryJs + " </script><script defer>" + script + "</script></head><body><div id='uca'></div></body></html>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resources, console); await engine.OpenUrl("http://localhost"); Assert.AreEqual(new[] { "ok" }, console.LogHistory); }
public async Task OverrideBodyOnLoadFromScript() { var console = new TestingConsole(); var engine = TestingEngine.BuildJint(Mocks.ResourceProvider("http://loc/", @"<html><body onload='console.log(""body onload attr"")'></body> <script> document.body.onload=function(){console.log('body onload script')}; </script></html>"), console); var page = await engine.OpenUrl("http://loc/"); Assert.AreEqual(new[] { "body onload script" }, console.LogHistory); }
public static void FormAutoSubmitPrevented() { var resourceProvider = Mocks.ResourceProvider("http://site.net", @"<html><body><form method=get onsubmit=""console.log('onsubmit');event.preventDefault();"" id=f action='http://todosoft.ru/test/file.dat'> <input name=username/> <button type=submit id=b onclick=""console.log('onclick');event.preventDefault();"">Download!</button> </form><script>document.getElementById(""b"").click();</script></body></html>" ); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); engine.OpenUrl("http://site.net/").Wait(); Assert.AreEqual(new[] { "onclick" }, console.LogHistory); }
public static void DomImplementationInstanceIsHidden() { var resourceProvider = Mocks.ResourceProvider("http://localhost", "<html><script>" + "console.log(document.implementation.instance);" + "console.log(document.implementation.Instance);" + "</script></html>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); engine.OpenUrl("http://localhost").Wait(); Assert.AreEqual(new object[] { null, null }, console.LogHistory); }
public async Task Selector(string selector, int exptectedCount) { var script = @"console.log($('" + selector + "').length);"; var resources = Mocks.ResourceProvider( "http://localhost", "<html><head><script> " + R.JQueryJs + " </script></head><body><div class = 'u' id='a'></div><script>" + script + "</script></body></html>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resources, console); await engine.OpenUrl("http://localhost"); Assert.AreEqual(new[] { exptectedCount }, console.LogHistory); }
public async Task ClearTimeout() { var resources = Mocks.ResourceProvider( "http://localhost", Mocks.Page( @"var timer = window.setTimeout(function(){console.log('ok');}, 500); window.clearTimeout(timer);")); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resources, console); await engine.OpenUrl("http://localhost"); Assert.AreEqual(0, console.LogHistory.Count); Thread.Sleep(1000); Assert.AreEqual(0, console.LogHistory.Count); }
public static void NavigatorMimeTypesSmoke() { var resourceProvider = Mocks.ResourceProvider("http://localhost", "<html><script>" + "console.log(navigator.mimeTypes.length);" + "console.log(navigator.mimeTypes[\"application/x-shockwave-flash\"]);" + "console.log('ok');" + "</script></html>"); var console = new TestingConsole(); var engine = TestingEngine.BuildJint(resourceProvider, console); engine.OpenUrl("http://localhost").Wait(); Assert.AreEqual(new object[] { 0, null, "ok" }, console.LogHistory); }
public void DocumentBody() { var script = @"$(function(){console.log(document.body);});"; var console = new TestingConsole(); var resources = Mocks.ResourceProvider( "http://localhost", "<html><head><script> " + R.JQueryJs + " </script><script>" + script + "</script></head><body><div id='b'></div></body></html>"); var engine = TestingEngine.BuildJint(resources, console); var page = engine.OpenUrl("http://localhost"); Thread.Sleep(1000); Assert.AreEqual(1, console.LogHistory.Count); Assert.IsNotNull(console.LogHistory[0]); }