capybara-celerity 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ .rvmrc
4
+ Gemfile.lock
5
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --tty
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in capybara-culerity.gemspec
4
+ gemspec
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "capybara/celerity/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "capybara-celerity"
7
+ s.version = Capybara::Celerity::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Gabriel Sobrinho"]
10
+ s.email = ["gabriel.sobrinho@gmail.com"]
11
+ s.homepage = "https://github.com/sobrinho/capybara-celerity"
12
+ s.summary = %q{Capybara driver for celerity}
13
+ s.description = %q{Capybara driver for celerity}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_dependency "capybara", ">= 0.4.1"
21
+ s.add_dependency "celerity", ">= 0.7.9"
22
+
23
+ s.add_development_dependency "rspec", "~> 2.5"
24
+ s.add_development_dependency "sinatra", "~> 1.0"
25
+ end
@@ -0,0 +1,3 @@
1
+ require 'capybara'
2
+ require 'capybara/celerity/version'
3
+ require 'capybara/driver/celerity'
@@ -0,0 +1,5 @@
1
+ module Capybara
2
+ module Celerity
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,163 @@
1
+ class Capybara::Driver::Celerity < Capybara::Driver::Base
2
+ class Node < Capybara::Driver::Node
3
+ def text
4
+ native.text
5
+ end
6
+
7
+ def [](name)
8
+ value = native.attribute_value(name.to_sym)
9
+ return value if value and not value.to_s.empty?
10
+ end
11
+
12
+ def value
13
+ if tag_name == "select" and native.multiple?
14
+ find(".//option[@selected]").map { |n| if n.has_value? then n.value else n.text end }
15
+ else
16
+ native.value
17
+ end
18
+ end
19
+
20
+ def set(value)
21
+ native.set(value)
22
+ end
23
+
24
+ def select_option
25
+ native.click
26
+ end
27
+
28
+ def unselect_option
29
+ unless select_node.native.multiple?
30
+ raise Capybara::UnselectNotAllowed, "Cannot unselect option from single select box."
31
+ end
32
+
33
+ # FIXME: couldn't find a clean way to unselect, so clear and reselect
34
+ selected_nodes = select_node.find('.//option[@selected]')
35
+ select_node.native.clear
36
+ selected_nodes.each { |n| n.click unless n.path == path }
37
+ end
38
+
39
+ def click
40
+ native.click
41
+ end
42
+
43
+ def drag_to(element)
44
+ native.fire_event('mousedown')
45
+ element.native.fire_event('mousemove')
46
+ element.native.fire_event('mouseup')
47
+ end
48
+
49
+ def tag_name
50
+ # FIXME: this might be the dumbest way ever of getting the tag name
51
+ # there has to be something better...
52
+ native.to_xml[/^\s*<([a-z0-9\-\:]+)/, 1]
53
+ end
54
+
55
+ def visible?
56
+ native.visible?
57
+ end
58
+
59
+ def checked?
60
+ native.checked?
61
+ rescue # https://github.com/langalex/culerity/issues/issue/33
62
+ false
63
+ end
64
+
65
+ def selected?
66
+ native.selected?
67
+ rescue # https://github.com/langalex/culerity/issues/issue/33
68
+ false
69
+ end
70
+
71
+ def path
72
+ native.xpath
73
+ end
74
+
75
+ def trigger(event)
76
+ native.fire_event(event.to_s)
77
+ end
78
+
79
+ def find(locator)
80
+ noko_node = Nokogiri::HTML(driver.body).xpath(native.xpath).first
81
+ all_nodes = noko_node.xpath(locator).map { |n| n.path }.join(' | ')
82
+ if all_nodes.empty? then [] else driver.find(all_nodes) end
83
+ end
84
+
85
+ protected
86
+
87
+ # a reference to the select node if this is an option node
88
+ def select_node
89
+ find('./ancestor::select').first
90
+ end
91
+
92
+ def has_value?
93
+ native.object.hasAttribute('value')
94
+ end
95
+ end
96
+
97
+ attr_reader :app, :rack_server, :options
98
+
99
+ def initialize(app, options={})
100
+ @app = app
101
+ @options = options
102
+ @rack_server = Capybara::Server.new(@app)
103
+ @rack_server.boot if Capybara.run_server
104
+ end
105
+
106
+ def visit(path)
107
+ browser.goto(url(path))
108
+ end
109
+
110
+ def current_url
111
+ browser.url
112
+ end
113
+
114
+ def source
115
+ browser.html
116
+ end
117
+
118
+ def body
119
+ browser.document.as_xml
120
+ end
121
+
122
+ def response_headers
123
+ browser.response_headers
124
+ end
125
+
126
+ def status_code
127
+ browser.status_code
128
+ end
129
+
130
+ def find(selector)
131
+ browser.elements_by_xpath(selector).map { |node| Node.new(self, node) }
132
+ end
133
+
134
+ def wait?; true; end
135
+
136
+ def execute_script(script)
137
+ browser.execute_script script
138
+ nil
139
+ end
140
+
141
+ def evaluate_script(script)
142
+ browser.execute_script "#{script}"
143
+ end
144
+
145
+ def browser
146
+ unless @_browser
147
+ require 'celerity'
148
+ @_browser = ::Celerity::Browser.new(options)
149
+ end
150
+
151
+ @_browser
152
+ end
153
+
154
+ def reset!
155
+ browser.clear_cookies
156
+ end
157
+
158
+ private
159
+
160
+ def url(path)
161
+ rack_server.url(path)
162
+ end
163
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+ require 'capybara/spec/driver'
3
+
4
+ describe Capybara::Driver::Celerity do
5
+ before(:all) do
6
+ @driver = Capybara::Driver::Celerity.new(TestApp)
7
+ end
8
+
9
+ it_should_behave_like "driver"
10
+ it_should_behave_like "driver with javascript support"
11
+ it_should_behave_like "driver with header support"
12
+ it_should_behave_like "driver with status code support"
13
+ it_should_behave_like "driver with cookies support"
14
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+ require 'capybara/spec/session'
3
+
4
+ describe Capybara::Driver::Celerity do
5
+ before(:all) do
6
+ @session = Capybara::Session.new(:celerity, TestApp)
7
+ end
8
+
9
+ describe '#driver' do
10
+ it "should be a celerity driver" do
11
+ @session.driver.should be_an_instance_of(Capybara::Driver::Celerity)
12
+ end
13
+ end
14
+
15
+ describe '#mode' do
16
+ it "should remember the mode" do
17
+ @session.mode.should == :celerity
18
+ end
19
+ end
20
+
21
+ it_should_behave_like "session"
22
+ it_should_behave_like "session with javascript support"
23
+ it_should_behave_like "session with headers support"
24
+ it_should_behave_like "session with status code support"
25
+ end
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'capybara/celerity'
4
+
5
+ alias :running :lambda
6
+
7
+ Capybara.default_wait_time = 0
8
+
9
+ RSpec.configure do |config|
10
+ config.before do
11
+ Capybara.configure do |config|
12
+ config.default_selector = :xpath
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capybara-celerity
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Gabriel Sobrinho
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-03-08 00:00:00 -03:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: capybara
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 4
30
+ - 1
31
+ version: 0.4.1
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: celerity
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 7
44
+ - 9
45
+ version: 0.7.9
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 2
57
+ - 5
58
+ version: "2.5"
59
+ type: :development
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: sinatra
63
+ prerelease: false
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 1
70
+ - 0
71
+ version: "1.0"
72
+ type: :development
73
+ version_requirements: *id004
74
+ description: Capybara driver for celerity
75
+ email:
76
+ - gabriel.sobrinho@gmail.com
77
+ executables: []
78
+
79
+ extensions: []
80
+
81
+ extra_rdoc_files: []
82
+
83
+ files:
84
+ - .gitignore
85
+ - .rspec
86
+ - Gemfile
87
+ - Rakefile
88
+ - capybara-celerity.gemspec
89
+ - lib/capybara/celerity.rb
90
+ - lib/capybara/celerity/version.rb
91
+ - lib/capybara/driver/celerity.rb
92
+ - spec/driver/celerity_driver_spec.rb
93
+ - spec/session/celerity_session_spec.rb
94
+ - spec/spec_helper.rb
95
+ has_rdoc: true
96
+ homepage: https://github.com/sobrinho/capybara-celerity
97
+ licenses: []
98
+
99
+ post_install_message:
100
+ rdoc_options: []
101
+
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ segments:
109
+ - 0
110
+ version: "0"
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ requirements: []
119
+
120
+ rubyforge_project:
121
+ rubygems_version: 1.3.6
122
+ signing_key:
123
+ specification_version: 3
124
+ summary: Capybara driver for celerity
125
+ test_files:
126
+ - spec/driver/celerity_driver_spec.rb
127
+ - spec/session/celerity_session_spec.rb
128
+ - spec/spec_helper.rb