public void ShouldChangeSelectedCookiesOnRedirect_Issue548() { var requester = new MockRequester(); var mcp = new MemoryCookieProvider(); var config = Configuration.Default.With(mcp).With(requester).WithDefaultLoader(); var context = BrowsingContext.New(config); var receivedCookieHeader = "THECOOKIE=value1"; var url = new Url("http://example.com/path1"); //request 1: /path1, set a cookie THECOOKIE=value1 requester.BuildResponse(req => VirtualResponse.Create(r => r .Address("http://example.com/path1") .Content("") .Header(HeaderNames.SetCookie, receivedCookieHeader))); context.OpenAsync("http://example.com/path1"); //request 2: /path1/somefile.jsp redirects to /path2/file2.jsp requester.BuildResponses(new Func <Request, IResponse>[] { req => VirtualResponse.Create(r => r .Address("http://example.com/path1/somefile.jsp") .Content("") .Status(System.Net.HttpStatusCode.Redirect) .Header(HeaderNames.Location, "http://example.com/path2/file2.jsp")), req => { receivedCookieHeader = req.Headers.GetOrDefault(HeaderNames.Cookie, String.Empty); return(VirtualResponse.Create(r => r .Address("http://example.com/path2/file2.jsp") .Content(""))); } }); context.OpenAsync("http://example.com/path1/somefile.jsp"); Assert.AreEqual(String.Empty, receivedCookieHeader); }
public async Task ImportPageWithIndirectCycle() { var content = "<!doctype html><link rel=import href=http://example.com/test.html>"; var nested = new Queue <String>(new [] { "<!doctype html><link rel=import href=http://example.com/foo.html>", "<!doctype html><link rel=import href=http://example.com/bar.html>", "<!doctype html><link rel=import href=http://example.com/test.html>", "<!doctype html><link rel=import href=http://example.com/foo.html>" }); var requester = new MockRequester(); var requestCount = 0; requester.OnRequest = request => requestCount++; requester.BuildResponse(request => nested.Dequeue()); var config = Configuration.Default.With(requester).WithDefaultLoader(new LoaderOptions { IsResourceLoadingEnabled = true }); 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(3, requestCount); }
private static Task <IDocument> LoadDocumentWithFakeRequesterAndCookie(IResponse initialResponse, Func <IRequest, IResponse> onRequest) { var requester = new MockRequester(); requester.BuildResponse(onRequest); var config = Configuration.Default.WithDefaultLoader(setup => setup.IsResourceLoadingEnabled = true, new[] { requester }).WithCookies(); return(BrowsingContext.New(config).OpenAsync(initialResponse, System.Threading.CancellationToken.None)); }
private static Task <IDocument> LoadDocumentWithFakeRequesterAndCookie(IResponse initialResponse, Func <Request, IResponse> onRequest) { var requester = new MockRequester(); requester.BuildResponse(onRequest); var config = Configuration.Default.With(requester) .WithDefaultLoader(new LoaderOptions { IsResourceLoadingEnabled = true }).WithDefaultCookies(); return(BrowsingContext.New(config).OpenAsync(initialResponse, CancellationToken.None)); }
private 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))); }
private static Task<IDocument> LoadDocumentWithFakeRequesterAndCookie(IResponse initialResponse, Func<IRequest, IResponse> onRequest) { var requester = new MockRequester(); requester.BuildResponse(onRequest); var config = Configuration.Default.WithDefaultLoader(setup => setup.IsResourceLoadingEnabled = true, new[] { requester }).WithCookies(); return BrowsingContext.New(config).OpenAsync(initialResponse, System.Threading.CancellationToken.None); }