locator 0.0.6 → 0.0.7

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.
data/Rakefile CHANGED
@@ -9,23 +9,4 @@ task :default => :test
9
9
  desc 'Run all tests.'
10
10
  Rake::TestTask.new(:test) do |t|
11
11
  load 'test/all.rb'
12
- end
13
-
14
- begin
15
- require 'jeweler'
16
- Jeweler::Tasks.new do |s|
17
- require File.expand_path("../lib/locator/version", __FILE__)
18
-
19
- s.name = "locator"
20
- s.version = Locator::VERSION
21
- s.summary = "Generic html element locators for integration testing"
22
- s.email = "svenfuchs@artweb-design.de"
23
- s.homepage = "http://github.com/svenfuchs/locator"
24
- s.description = "Generic html element locators for integration testing"
25
- s.authors = ['Sven Fuchs']
26
- s.files = FileList["[A-Z]*", "{lib,test,vendor}/**/*"]
27
- s.add_dependency 'htmlentities'
28
- end
29
- rescue LoadError
30
- puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
31
- end
12
+ end
@@ -1,70 +1,84 @@
1
1
  module Locator
2
2
  module Matcher
3
- autoload :HaveTag, 'locator/matcher/have_tag'
3
+ autoload :HaveTag, 'locator/matcher/have_tag'
4
+ autoload :HaveCssClass, 'locator/matcher/have_css_class'
4
5
 
5
6
  # Matches an HTML document with whatever string is given
6
7
  def contain(*args)
7
8
  HaveTag.new(*args)
8
9
  end
9
10
 
11
+ def have_tag(*args, &block)
12
+ HaveTag.new(*args, &block)
13
+ end
14
+
15
+ def have_xpath(xpath, options = {}, &block)
16
+ HaveTag.new(options.delete(:content), options.merge(:xpath => xpath), &block)
17
+ end
18
+
19
+ def have_css(css, options = {}, &block)
20
+ HaveTag.new(options.delete(:content), options.merge(:css => css), &block)
21
+ end
22
+
23
+ def have_css_class(css_class)
24
+ HaveCssClass.new(css_class)
25
+ end
26
+
10
27
  # Asserts that the response body contains the given string or regexp
11
- def assert_contain(*args)
28
+ def assert_contains(*args)
12
29
  matcher = contain(*args)
13
30
  assert matcher.matches?(response.body), matcher.failure_message
14
31
  end
15
32
 
16
33
  # Asserts that the response body does not contain the given string or regexp
17
- def assert_not_contain(*args)
34
+ def assert_does_not_contain(*args)
18
35
  matcher = contain(*args)
19
36
  assert !matcher.matches?(response.body), matcher.negative_failure_message
20
37
  end
21
38
 
22
- def have_tag(*args, &block)
23
- HaveTag.new(*args, &block)
24
- end
25
-
26
- def assert_have_tag(html, *args, &block)
39
+ def assert_has_tag(html, *args, &block)
27
40
  matcher = have_tag(*args, &block)
28
41
  assert matcher.matches?(response.body), matcher.failure_message
29
42
  end
30
43
 
31
- def assert_have_no_tag(html, *args, &block)
44
+ def assert_no_tag(html, *args, &block)
32
45
  matcher = have_tag(*args, &block)
33
46
  assert !matcher.matches?(response.body), matcher.negative_failure_message
34
47
  end
35
48
 
36
- # Matches HTML content against an XPath
37
- def have_xpath(xpath, options = {}, &block)
38
- HaveTag.new(options.delete(:content), options.merge(:xpath => xpath), &block)
39
- end
40
-
41
49
  # Asserts that the response body matches the given XPath
42
- def assert_have_xpath(html, *args, &block)
50
+ def assert_has_xpath(html, *args, &block)
43
51
  matcher = have_xpath(*args, &block)
44
52
  assert matcher.matches?(response.body), matcher.failure_message
45
53
  end
46
54
 
47
55
  # Asserts that the response body does not match the given XPath
48
- def assert_have_no_xpath(html, *args, &block)
56
+ def assert_no_xpath(html, *args, &block)
49
57
  matcher = have_xpath(*args, &block)
50
58
  assert !matcher.matches?(response.body), matcher.negative_failure_message
51
59
  end
52
60
 
53
- # Matches HTML content against a CSS selector.
54
- def have_css(css, options = {}, &block)
55
- HaveTag.new(options.delete(:content), options.merge(:css => css), &block)
56
- end
57
-
58
61
  # Asserts that the response body matches the given CSS selector
59
- def assert_have_css(html, *args, &block)
62
+ def assert_has_css(html, *args, &block)
60
63
  matcher = have_css(*args, &block)
61
64
  assert matcher.matches?(response.body), matcher.failure_message
62
65
  end
63
66
 
64
67
  # Asserts that the response body does not match the given CSS selector
65
- def assert_have_no_css(html, *args, &block)
68
+ def assert_no_css(html, *args, &block)
66
69
  matcher = have_css(*args, &block)
67
70
  assert !matcher.matches?(response.body), matcher.negative_failure_message
68
71
  end
72
+
73
+ def assert_css_class(css_classes, css_class)
74
+ matcher = HaveCssClass.new(css_class)
75
+ assert matcher.matches?(css_classes.body), matcher.failure_message
76
+ end
77
+
78
+ def assert_no_css_class(css_classes, css_class)
79
+ matcher = HaveCssClass.new(css_class)
80
+ assert matcher.matches?(css_classes.body), matcher.negative_failure_message
81
+ end
82
+
69
83
  end
70
84
  end
@@ -0,0 +1,24 @@
1
+ module Locator
2
+ module Matcher
3
+ class HaveCssClass
4
+ attr_reader :target, :css_class
5
+
6
+ def initialize(css_class)
7
+ @css_class = css_class
8
+ end
9
+
10
+ def matches?(target = nil)
11
+ @target = target
12
+ " #{target} ".include?(" #{css_class} ")
13
+ end
14
+
15
+ def failure_message
16
+ "expected #{target.inspect} to include the css class #{css_class.inspect}"
17
+ end
18
+
19
+ def negative_failure_message
20
+ "expected #{target.inspect} not to include the css class #{css_class.inspect}"
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module Locator
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 6
9
- version: 0.0.6
8
+ - 7
9
+ version: 0.0.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sven Fuchs
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-02 00:00:00 +02:00
17
+ date: 2010-04-14 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -25,37 +25,33 @@ dependencies:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  segments:
28
+ - 4
29
+ - 2
28
30
  - 0
29
- version: "0"
31
+ version: 4.2.0
30
32
  type: :runtime
31
33
  version_requirements: *id001
32
- description: Generic html element locators for integration testing
34
+ description: Generic html element locators for integration testing.
33
35
  email: svenfuchs@artweb-design.de
34
36
  executables: []
35
37
 
36
38
  extensions: []
37
39
 
38
- extra_rdoc_files:
39
- - README.textile
40
- - TODO
40
+ extra_rdoc_files: []
41
+
41
42
  files:
42
- - README.textile
43
- - Rakefile
44
- - TODO
45
43
  - lib/core_ext/hash/except.rb
46
44
  - lib/core_ext/hash/slice.rb
47
45
  - lib/core_ext/string/underscore.rb
48
- - lib/locator.rb
49
46
  - lib/locator/boolean.rb
50
47
  - lib/locator/decoding.rb
51
- - lib/locator/dom.rb
52
- - lib/locator/dom/htmlunit.rb
53
48
  - lib/locator/dom/htmlunit/element.rb
54
49
  - lib/locator/dom/htmlunit/page.rb
55
- - lib/locator/dom/nokogiri.rb
50
+ - lib/locator/dom/htmlunit.rb
56
51
  - lib/locator/dom/nokogiri/element.rb
57
52
  - lib/locator/dom/nokogiri/page.rb
58
- - lib/locator/element.rb
53
+ - lib/locator/dom/nokogiri.rb
54
+ - lib/locator/dom.rb
59
55
  - lib/locator/element/area.rb
60
56
  - lib/locator/element/button.rb
61
57
  - lib/locator/element/check_box.rb
@@ -74,38 +70,24 @@ files:
74
70
  - lib/locator/element/select.rb
75
71
  - lib/locator/element/select_option.rb
76
72
  - lib/locator/element/text_area.rb
77
- - lib/locator/matcher.rb
73
+ - lib/locator/element.rb
74
+ - lib/locator/matcher/have_css_class.rb
78
75
  - lib/locator/matcher/have_tag.rb
76
+ - lib/locator/matcher.rb
79
77
  - lib/locator/result.rb
80
78
  - lib/locator/version.rb
81
79
  - lib/locator/xpath.rb
82
- - test/all.rb
83
- - test/locator/boolean_test.rb
84
- - test/locator/dom/htmlunit_test.rb
85
- - test/locator/dom/nokogiri_test.rb
86
- - test/locator/element/button_test.rb
87
- - test/locator/element/field_test.rb
88
- - test/locator/element/form_test.rb
89
- - test/locator/element/hidden_field_test.rb
90
- - test/locator/element/label_test.rb
91
- - test/locator/element/link_test.rb
92
- - test/locator/element/select_option_test.rb
93
- - test/locator/element/select_test.rb
94
- - test/locator/element/text_area_test.rb
95
- - test/locator/element_test.rb
96
- - test/locator/matcher/have_content_test.rb
97
- - test/locator/matcher/have_tag_test.rb
98
- - test/locator/xpath_test.rb
99
- - test/locator_test.rb
100
- - test/test_helper.rb
101
- - test/webrat.rb
80
+ - lib/locator.rb
81
+ - Rakefile
82
+ - README.textile
83
+ - TODO
102
84
  has_rdoc: true
103
85
  homepage: http://github.com/svenfuchs/locator
104
86
  licenses: []
105
87
 
106
88
  post_install_message:
107
- rdoc_options:
108
- - --charset=UTF-8
89
+ rdoc_options: []
90
+
109
91
  require_paths:
110
92
  - lib
111
93
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -120,33 +102,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
102
  - - ">="
121
103
  - !ruby/object:Gem::Version
122
104
  segments:
123
- - 0
124
- version: "0"
105
+ - 1
106
+ - 3
107
+ - 6
108
+ version: 1.3.6
125
109
  requirements: []
126
110
 
127
- rubyforge_project:
111
+ rubyforge_project: "[none]"
128
112
  rubygems_version: 1.3.6
129
113
  signing_key:
130
114
  specification_version: 3
131
115
  summary: Generic html element locators for integration testing
132
- test_files:
133
- - test/all.rb
134
- - test/locator/boolean_test.rb
135
- - test/locator/dom/htmlunit_test.rb
136
- - test/locator/dom/nokogiri_test.rb
137
- - test/locator/element/button_test.rb
138
- - test/locator/element/field_test.rb
139
- - test/locator/element/form_test.rb
140
- - test/locator/element/hidden_field_test.rb
141
- - test/locator/element/label_test.rb
142
- - test/locator/element/link_test.rb
143
- - test/locator/element/select_option_test.rb
144
- - test/locator/element/select_test.rb
145
- - test/locator/element/text_area_test.rb
146
- - test/locator/element_test.rb
147
- - test/locator/matcher/have_content_test.rb
148
- - test/locator/matcher/have_tag_test.rb
149
- - test/locator/xpath_test.rb
150
- - test/locator_test.rb
151
- - test/test_helper.rb
152
- - test/webrat.rb
116
+ test_files: []
117
+
data/test/all.rb DELETED
@@ -1,6 +0,0 @@
1
- files = Dir[File.dirname(__FILE__) + '/**/*_test.rb']
2
- # files.reject! { |file| file.include?('htmlunit') }
3
-
4
- files.each do |filename|
5
- require filename # unless filename.include?('_locator')
6
- end
@@ -1,40 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
- require 'locator/xpath'
3
-
4
- class XpathBooleanTest < Test::Unit::TestCase
5
- Or, And = Locator::Boolean::Or, Locator::Boolean::And
6
-
7
- def setup
8
- Or.operator, And.operator = ' | ', ' & '
9
- end
10
-
11
- test "a | b => a | b" do
12
- path = Or.new('a', 'b').to_s
13
- assert_equal "a | b", path
14
- end
15
-
16
- test "a & b => a & b" do
17
- path = And.new('a', 'b').to_s
18
- assert_equal "a & b", path
19
- end
20
-
21
- test "(a & b) | c => a & b | c" do
22
- path = And.new('a', 'b').or('c').to_s
23
- assert_equal "a & b | c", path
24
- end
25
-
26
- test "(a | b) & c => a & c | b & c" do
27
- path = Or.new('a', 'b').and('c').to_s
28
- assert_equal "a & c | b & c", path
29
- end
30
-
31
- test "(a & b | c) & d => a & b & d | c & d" do
32
- path = And.new('a', 'b').or('c').and('d').to_s
33
- assert_equal "a & b & d | c & d", path
34
- end
35
-
36
- test "(a & b | c) & (d | e) => a & b & d | a & b & e | c & d | c & e" do
37
- path = And.new('a', 'b').or('c').and(Or.new('d', 'e')).to_s
38
- assert_equal "a & b & d | a & b & e | c & d | c & e", path
39
- end
40
- end
@@ -1,81 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- $: << '~/Development/projects/steam/lib'
4
- begin
5
- require 'steam'
6
- include Steam
7
-
8
- Java.load(Dir["#{Steam.config[:html_unit][:java_path]}/*.jar"].join(':'))
9
- Java.import 'com.gargoylesoftware.htmlunit.WebClient'
10
- Java.import 'com.gargoylesoftware.htmlunit.BrowserVersion'
11
-
12
- class HtmlunitElementTest < Test::Unit::TestCase
13
- include Locator, Java::Com::Gargoylesoftware::Htmlunit
14
-
15
- def setup
16
- connection = Connection::Mock.new
17
- client = WebClient.new(BrowserVersion.FIREFOX_3)
18
- client.setWebConnection(Rjb::bind(Browser::HtmlUnit::Connection.new(connection), 'com.gargoylesoftware.htmlunit.WebConnection'))
19
-
20
- connection.mock(:get, 'http://localhost:3000/', '<a href="#" class="foo">the link</a><div id="bar"></div>')
21
- @dom = Dom::Htmlunit::Page.new(client.getPage('http://localhost:3000/'))
22
- end
23
-
24
- test "Element takes a Htmlunit::Page adapter" do
25
- element = Element::Link.new.locate(@dom, 'the link', :class => 'foo')
26
- assert element.name
27
- end
28
-
29
- test "responds to name" do
30
- element = Element::Link.new.locate(@dom, 'the link')
31
- assert_equal 'a', element.name
32
- end
33
-
34
- test "responds to xpath" do
35
- element = Element::Link.new.locate(@dom, 'the link')
36
- assert_equal '/html/body/a', element.xpath
37
- end
38
-
39
- test "responds to to_s" do
40
- element = Element::Link.new.locate(@dom, 'the link')
41
- assert_equal "<a href=\"#\" class=\"foo\">\n the link\n</a>\n", element.to_s
42
- end
43
-
44
- test "responds to content" do
45
- element = Element::Link.new.locate(@dom, 'the link')
46
- assert_equal "the link", element.content
47
- end
48
-
49
- test "responds to attribute" do
50
- element = Element::Link.new.locate(@dom, 'the link')
51
- assert_equal 'foo', element.attribute('class')
52
- end
53
-
54
- test "responds to element_by_id" do
55
- element = Element.new(:html).locate(@dom)
56
- assert_equal 'bar', element.element_by_id('bar').attribute('id')
57
- end
58
-
59
- test "responds to element_by_xpath" do
60
- element = Element.new(:html).locate(@dom)
61
- assert_equal 'bar', element.element_by_xpath('//html/body/div[@id="bar"]').attribute('id')
62
- end
63
-
64
- test "responds to elements_by_xpath" do
65
- element = Element::Link.new.locate(@dom, 'the link')
66
- assert_equal 'foo', element.attribute('class')
67
- end
68
-
69
- test "responds to ancestors" do
70
- element = Element.new(:a).locate(@dom)
71
- assert_equal %w(html body), element.ancestors.map { |e| e.name }
72
- end
73
-
74
- test "responds to ancestor_of?" do
75
- element = Element.new(:a).locate(@dom)
76
- assert_equal %w(html body), element.ancestors.map { |e| e.name }
77
- end
78
- end
79
- rescue LoadError
80
- puts "skipping HtmlUnit tests because Steam is not available"
81
- end