2011-04-19 05:07:42 -04:00
|
|
|
# -*- encoding: UTF-8 -*-
|
|
|
|
|
2011-02-26 17:02:00 -05:00
|
|
|
require 'spec_helper'
|
|
|
|
require 'capybara-webkit'
|
|
|
|
|
|
|
|
describe Capybara::Session do
|
2011-04-14 10:16:56 -04:00
|
|
|
subject { Capybara::Session.new(:reusable_webkit, @app) }
|
|
|
|
after { subject.reset! }
|
|
|
|
|
|
|
|
context "slow javascript app" do
|
|
|
|
before(:all) do
|
|
|
|
@app = lambda do |env|
|
|
|
|
body = <<-HTML
|
|
|
|
<html><body>
|
|
|
|
<form action="/next" id="submit_me"><input type="submit" value="Submit" /></form>
|
|
|
|
<p id="change_me">Hello</p>
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
var form = document.getElementById('submit_me');
|
|
|
|
form.addEventListener("submit", function (event) {
|
|
|
|
event.preventDefault();
|
|
|
|
setTimeout(function () {
|
|
|
|
document.getElementById("change_me").innerHTML = 'Good' + 'bye';
|
|
|
|
}, 500);
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
</body></html>
|
|
|
|
HTML
|
|
|
|
[200,
|
|
|
|
{ 'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s },
|
|
|
|
[body]]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
|
|
|
@default_wait_time = Capybara.default_wait_time
|
|
|
|
Capybara.default_wait_time = 1
|
|
|
|
end
|
|
|
|
|
|
|
|
after { Capybara.default_wait_time = @default_wait_time }
|
|
|
|
|
|
|
|
it "waits for a request to load" do
|
|
|
|
subject.visit("/")
|
|
|
|
subject.find_button("Submit").click
|
|
|
|
subject.should have_content("Goodbye");
|
|
|
|
end
|
|
|
|
end
|
2011-04-14 10:33:40 -04:00
|
|
|
|
|
|
|
context "simple app" do
|
|
|
|
before(:all) do
|
|
|
|
@app = lambda do |env|
|
|
|
|
body = <<-HTML
|
|
|
|
<html><body>
|
|
|
|
<strong>Hello</strong>
|
2011-04-19 05:07:42 -04:00
|
|
|
<span>UTF8文字列</span>
|
2011-04-19 07:51:38 -04:00
|
|
|
<input type="button" value="ボタン" />
|
2011-04-14 10:33:40 -04:00
|
|
|
</body></html>
|
|
|
|
HTML
|
|
|
|
[200,
|
2011-04-19 05:07:42 -04:00
|
|
|
{ 'Content-Type' => 'text/html; charset=UTF-8', 'Content-Length' => body.length.to_s },
|
2011-04-14 10:33:40 -04:00
|
|
|
[body]]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2011-04-19 05:07:42 -04:00
|
|
|
before do
|
2011-04-14 10:33:40 -04:00
|
|
|
subject.visit("/")
|
2011-04-19 05:07:42 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "inspects nodes" do
|
2011-04-14 10:33:40 -04:00
|
|
|
subject.all(:xpath, "//strong").first.inspect.should include("strong")
|
|
|
|
end
|
2011-04-19 05:07:42 -04:00
|
|
|
|
2011-04-19 07:51:38 -04:00
|
|
|
it "can read utf8 string" do
|
2011-04-19 05:07:42 -04:00
|
|
|
utf8str = subject.all(:xpath, "//span").first.text
|
|
|
|
utf8str.should eq('UTF8文字列')
|
|
|
|
end
|
2011-04-19 07:51:38 -04:00
|
|
|
|
|
|
|
it "can click utf8 string" do
|
|
|
|
subject.click_button('ボタン')
|
|
|
|
end
|
2011-04-14 10:33:40 -04:00
|
|
|
end
|
2011-08-23 11:18:08 -04:00
|
|
|
|
2011-08-26 10:10:20 -04:00
|
|
|
context "response headers with status code" do
|
2011-08-23 02:58:20 -04:00
|
|
|
before(:all) do
|
|
|
|
@app = lambda do |env|
|
|
|
|
params = ::Rack::Utils.parse_query(env['QUERY_STRING'])
|
|
|
|
if params["img"] == "true"
|
2011-08-23 11:18:08 -04:00
|
|
|
body = 'not found'
|
|
|
|
return [404, { 'Content-Type' => 'image/gif', 'Content-Length' => body.length.to_s }, [body]]
|
2011-08-23 02:58:20 -04:00
|
|
|
end
|
|
|
|
body = <<-HTML
|
|
|
|
<html>
|
|
|
|
<body>
|
|
|
|
<img src="?img=true">
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
HTML
|
|
|
|
[200,
|
2011-08-26 10:10:20 -04:00
|
|
|
{ 'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s, 'X-Capybara' => 'WebKit'},
|
2011-08-23 02:58:20 -04:00
|
|
|
[body]]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "should get status code" do
|
|
|
|
subject.visit '/'
|
|
|
|
subject.status_code.should == 200
|
|
|
|
end
|
2011-08-26 09:58:31 -04:00
|
|
|
|
|
|
|
it "should reset status code" do
|
|
|
|
subject.visit '/'
|
|
|
|
subject.status_code.should == 200
|
|
|
|
subject.reset!
|
|
|
|
subject.status_code.should == 0
|
|
|
|
end
|
2011-08-26 10:10:20 -04:00
|
|
|
|
|
|
|
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
|
2011-08-23 02:58:20 -04:00
|
|
|
end
|
2011-04-14 10:16:56 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
describe Capybara::Session, "with TestApp" do
|
2011-02-26 17:02:00 -05:00
|
|
|
before do
|
2011-04-14 10:16:56 -04:00
|
|
|
@session = Capybara::Session.new(:reusable_webkit, TestApp)
|
2011-02-26 17:02:00 -05:00
|
|
|
end
|
|
|
|
|
2011-07-22 15:21:17 -04:00
|
|
|
it_should_behave_like "session"
|
2011-07-29 15:00:13 -04:00
|
|
|
it_should_behave_like "session with javascript support"
|
2011-02-26 17:02:00 -05:00
|
|
|
end
|