Example #1
0
        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);
        }
Example #2
0
        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));
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        [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);
        }
Example #7
0
        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);
        }
Example #8
0
        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));
        }
Example #9
0
        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);
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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"]);
        }
Example #15
0
        private static Engine Load(IResourceProvider resourceProvider)
        {
            var console = new TestingConsole();
            var engine  = TestingEngine.BuildJint(resourceProvider, console);

            engine.OpenUrl("http://localhost").Wait();
            return(engine);
        }
Example #16
0
        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);
        }
Example #17
0
        private Engine Open(string testUrl)
        {
            var console = new TestingConsole();
            var engine  = TestingEngine.BuildJint(console).LogEvents();

            engine.OpenUrl(GetTestUrl(testUrl));
            engine.WaitDocumentLoad();
            return(engine);
        }
Example #18
0
        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);
        }
Example #19
0
        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);
        }
Example #20
0
        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);
        }
Example #21
0
        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);
        }
Example #22
0
        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);
        }
Example #23
0
        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);
        }
Example #24
0
        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);
        }
Example #25
0
        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);
        }
Example #26
0
        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);
        }
Example #27
0
        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);
        }
Example #28
0
        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);
        }
Example #29
0
        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);
        }
Example #30
0
        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]);
        }