diff --git a/spec/integration/session_spec.rb b/spec/integration/session_spec.rb index 57b1ff1..3258b4b 100644 --- a/spec/integration/session_spec.rb +++ b/spec/integration/session_spec.rb @@ -79,6 +79,52 @@ describe Capybara::Session do subject.click_button('ボタン') end end + + context "response headers with status code" do + before(:all) do + @app = lambda do |env| + params = ::Rack::Utils.parse_query(env['QUERY_STRING']) + if params["img"] == "true" + body = 'not found' + return [404, { 'Content-Type' => 'image/gif', 'Content-Length' => body.length.to_s }, [body]] + end + body = <<-HTML + +
+ + + + HTML + [200, + { 'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s, 'X-Capybara' => 'WebKit'}, + [body]] + end + end + + it "should get status code" do + subject.visit '/' + subject.status_code.should == 200 + end + + it "should reset status code" do + subject.visit '/' + subject.status_code.should == 200 + subject.reset! + subject.status_code.should == 0 + end + + it "should get response headers" do + subject.visit '/' + subject.response_headers['X-Capybara'].should == 'WebKit' + end + + it "should reset response headers" do + subject.visit '/' + subject.response_headers['X-Capybara'].should == 'WebKit' + subject.reset! + subject.response_headers['X-Capybara'].should == nil + end + end end describe Capybara::Session, "with TestApp" do diff --git a/src/Reset.cpp b/src/Reset.cpp index b7a92e9..e5663ea 100644 --- a/src/Reset.cpp +++ b/src/Reset.cpp @@ -11,8 +11,9 @@ void Reset::start(QStringList &arguments) { page()->triggerAction(QWebPage::Stop); page()->currentFrame()->setHtml(""); page()->networkAccessManager()->setCookieJar(new QNetworkCookieJar()); - page()->setNetworkAccessManager(new NetworkAccessManager()); + page()->setCustomNetworkAccessManager(); page()->setUserAgent(NULL); + page()->resetResponseHeaders(); emit finished(new Response(true)); } diff --git a/src/WebPage.cpp b/src/WebPage.cpp index 9dfb15e..18cfcad 100644 --- a/src/WebPage.cpp +++ b/src/WebPage.cpp @@ -9,10 +9,7 @@ WebPage::WebPage(QObject *parent) : QWebPage(parent) { setUserStylesheet(); m_loading = false; - - NetworkAccessManager *manager = new NetworkAccessManager(); - this->setNetworkAccessManager(manager); - connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); + this->setCustomNetworkAccessManager(); connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted())); connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); @@ -20,6 +17,12 @@ WebPage::WebPage(QObject *parent) : QWebPage(parent) { this, SLOT(frameCreated(QWebFrame *))); } +void WebPage::setCustomNetworkAccessManager() { + NetworkAccessManager *manager = new NetworkAccessManager(); + this->setNetworkAccessManager(manager); + connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); +} + void WebPage::loadJavascript() { QResource javascript(":/capybara.js"); if (javascript.isCompressed()) { @@ -168,20 +171,27 @@ QString WebPage::getLastAttachedFileName() { } void WebPage::replyFinished(QNetworkReply *reply) { - QStringList headers; - lastStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - QList