public async Task ImportPageWithDirectCycle() { var content = "<!doctype html><link rel=import href=http://example.com/test.html>"; var requester = new MockRequester(); var requestCount = 0; requester.OnRequest = request => requestCount++; requester.BuildResponse(request => content); var config = Configuration.Default.WithDefaultLoader(setup => setup.IsResourceLoadingEnabled = true, new[] { requester }); var document = await BrowsingContext.New(config).OpenAsync(m => m.Content(content)); var link = document.QuerySelector<IHtmlLinkElement>("link"); Assert.AreEqual("import", link.Relation); Assert.IsNotNull(link.Import); Assert.AreEqual(1, requestCount); }
public async Task ImportPageFromVirtualRequest() { var requester = new MockRequester(); var receivedRequest = new TaskCompletionSource<String>(); requester.OnRequest = request => receivedRequest.SetResult(request.Address.Href); var config = Configuration.Default.WithDefaultLoader(setup => setup.IsResourceLoadingEnabled = true, new[] { requester }); var document = await BrowsingContext.New(config).OpenAsync(m => m.Content("<!doctype html><link rel=import href=http://example.com/test.html>")); var link = document.QuerySelector<IHtmlLinkElement>("link"); var result = await receivedRequest.Task; Assert.AreEqual("import", link.Relation); Assert.IsNotNull(link.Import); Assert.AreEqual("http://example.com/test.html", result); }
public async Task DocumentWriteDynamicallyWithCustomScriptEngineAndSource() { var scripting = new TestScriptEngine(options => options.Document.Write("<b>Dynamically written</b>")); var mockRequester = new MockRequester(); var config = Configuration.Default .With(new TestScriptService(scripting)) .WithDefaultLoader(setup => setup.IsResourceLoadingEnabled = true, new[] { mockRequester }); var baseAddress = "http://www.example.com"; var filename = "foo.cs"; var hasFoo = false; mockRequester.OnRequest = request => hasFoo = request.Address.Href == baseAddress + "/" + filename; var source = "<title>Some title</title><body><script type='c-sharp' src='" + filename + "'></script>"; var doc = await BrowsingContext.New(config).OpenAsync(m => m.Content(source).Address(baseAddress)); Assert.IsTrue(hasFoo); Assert.AreEqual("Dynamically written", doc.Body.TextContent); Assert.AreEqual(1, doc.QuerySelectorAll("b").Length); var bold = doc.QuerySelector("b"); Assert.AreEqual("Dynamically written", bold.TextContent); }
static Task<IDocument> CreateDocumentWithOptions(String source) { var mockRequester = new MockRequester(); mockRequester.BuildResponse(request => { if (request.Address.Path.EndsWith("a.css")) { return "div#A { color: blue; }"; } else if (request.Address.Path.EndsWith("b.css")) { return "div#B { color: red; }"; } return null; }); var config = Configuration.Default.WithCss().WithMockRequester(mockRequester); var context = BrowsingContext.New(config); return context.OpenAsync(m => m.Content(source)); }
public async Task DocumentWriteDynamicallyWithCustomScriptEngineAndSourceNested() { var index = 0; var content = new[] { "<script type='c-sharp' src='foo2.cs'></script>", "<b>Dynamically written</b>" }; var scripting = new TestScriptEngine(options => options.Document.Write(content[index++])); var mockRequester = new MockRequester(); var config = Configuration.Default .With(new TestScriptService(scripting)) .WithDefaultLoader(setup => setup.IsResourceLoadingEnabled = true, new[] { mockRequester }); var source = "<title>Some title</title><body><script type='c-sharp' src='foo.cs'></script>"; var doc = await BrowsingContext.New(config).OpenAsync(m => m.Content(source).Address("http://www.example.com")); Assert.AreEqual("Dynamically written", doc.Body.TextContent); Assert.AreEqual(1, doc.QuerySelectorAll("b").Length); var bold = doc.QuerySelector("b"); Assert.AreEqual("Dynamically written", bold.TextContent); Assert.AreEqual(2, index); }
public async Task FilteringRequestsWork() { var requester = new MockRequester(); var requests = new List<IRequest>(); var filtered = new List<IRequest>(); requester.OnRequest = request => requests.Add(request); var content = "<!doctype><html><link rel=stylesheet type=text/css href=test.css><div><img src=foo.jpg><iframe src=test.html></iframe></div>"; var config = Configuration.Default.WithDefaultLoader(setup => { setup.IsResourceLoadingEnabled = true; setup.Filter = request => { filtered.Add(request); return !request.Address.Href.EndsWith(".jpg"); }; }, new[] { requester }); var context = BrowsingContext.New(config); var document = await context.OpenAsync(m => m.Content(content).Address("http://localhost")); Assert.IsNotNull(document); Assert.AreEqual(2, requests.Count); Assert.AreEqual(3, filtered.Count); Assert.AreEqual("test.css", requests[0].Address.Path); Assert.AreEqual("test.html", requests[1].Address.Path); }