rspec-html 0.3.0 → 0.3.2
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -2
- data/README.md +14 -1
- data/lib/rspec/html/version.rb +1 -1
- data/lib/rspec_html/browser.rb +36 -0
- data/lib/rspec_html/element.rb +10 -0
- data/lib/rspec_html/matchers/match_text.rb +10 -2
- data/lib/rspec_html/search.rb +6 -3
- data/lib/rspec_html.rb +2 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 654cc8f392f2bde8068c50baedce33357749605760fe00d46558d6aef072a21f
|
4
|
+
data.tar.gz: 7d207122c82ceb3681ab65cd00c05871c73fbe2628855943fa6c6758ab957451
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1295ec0d0106dcfc7dc4157be1a56527137b2c671d814e1a62226a062a8e83844bf2571cbd42a90e2317033b4f39a8b4c433b2733ae3e186aed9ce6af1d6e7e
|
7
|
+
data.tar.gz: 8e5b3027c778ccbbf5ddc46b3b915ee87de9b3e0cbdbd022c196b6a81e4cb2912faccf8eebaab6b76e4ce517d3c957e91a79bb5f2c28c7f2a20193e5e0e1dd8c
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rspec-html (0.3.
|
4
|
+
rspec-html (0.3.2)
|
5
5
|
nokogiri (~> 1.10)
|
6
6
|
rspec (~> 3.0)
|
7
7
|
|
@@ -21,8 +21,10 @@ GEM
|
|
21
21
|
i18n (1.13.0)
|
22
22
|
concurrent-ruby (~> 1.0)
|
23
23
|
json (2.6.3)
|
24
|
+
mini_portile2 (2.8.2)
|
24
25
|
minitest (5.18.0)
|
25
|
-
nokogiri (1.13.10
|
26
|
+
nokogiri (1.13.10)
|
27
|
+
mini_portile2 (~> 2.8.0)
|
26
28
|
racc (~> 1.4)
|
27
29
|
paint (2.3.0)
|
28
30
|
parallel (1.23.0)
|
data/README.md
CHANGED
@@ -27,6 +27,19 @@ require 'rspec/html'
|
|
27
27
|
|
28
28
|
Several [matchers](#matchers) are provided to identify text and _HTML_ elements within the _DOM_. These matchers can only be used with the provided [object interface](#object-interface).
|
29
29
|
|
30
|
+
### Browser Inspection
|
31
|
+
|
32
|
+
To open the current document in your operating system's default browser, call `document.open`. Use this to inspect _HTML_ content while debugging.
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
it 'has complex HTML' do
|
36
|
+
get '/my/path'
|
37
|
+
document.open
|
38
|
+
end
|
39
|
+
```
|
40
|
+
|
41
|
+
Alternatively `document.html_path` writes the current document to a temporary file and returns its path.
|
42
|
+
|
30
43
|
### Object Interface
|
31
44
|
<a name="object-interface"></a>
|
32
45
|
|
@@ -47,7 +60,7 @@ This method can also be used for _ActionMailer_ emails:
|
|
47
60
|
let(:document) { parse_html(ActionMailer::Base.deliveries.last.body.decoded) }
|
48
61
|
```
|
49
62
|
|
50
|
-
**Changed in 0.3.0**: `parse_html` no longer
|
63
|
+
**Changed in 0.3.0**: `parse_html` no longer assigns `document` automatically, you must use a `let` block to assign it yourself.
|
51
64
|
|
52
65
|
To navigate the _DOM_ by a sequence of tag names use chained method calls on the `document` object:
|
53
66
|
|
data/lib/rspec/html/version.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSpecHTML
|
4
|
+
# Convenience utility for loading a provided path in the operating system's default browser.
|
5
|
+
# Used for inspecting documents while debugging tests.
|
6
|
+
class Browser
|
7
|
+
def self.open(path)
|
8
|
+
new(path).open
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(path)
|
12
|
+
@path = path
|
13
|
+
end
|
14
|
+
|
15
|
+
def open
|
16
|
+
log_launch_browser_event
|
17
|
+
system `#{command} '#{path}'`
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
attr_reader :path
|
23
|
+
|
24
|
+
def log_launch_browser_event
|
25
|
+
warn "\e[35m[rspec-html] Opening document in browser from: \e[32m#{caller[3]}\e[0m"
|
26
|
+
end
|
27
|
+
|
28
|
+
def command
|
29
|
+
return 'start' if RUBY_PLATFORM =~ /mswin|mingw|cygwin/
|
30
|
+
return 'open' if RUBY_PLATFORM =~ /darwin/
|
31
|
+
return 'xdg-open' if RUBY_PLATFORM =~ /linux|bsd/
|
32
|
+
|
33
|
+
raise ArgumentError, "Unable to detect operating system from #{RUBY_PLATFORM}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/rspec_html/element.rb
CHANGED
@@ -22,6 +22,16 @@ module RSpecHTML
|
|
22
22
|
@search = Search.new(@element, @siblings, self)
|
23
23
|
end
|
24
24
|
|
25
|
+
def open
|
26
|
+
Browser.open(html_path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def html_path
|
30
|
+
@html_path ||= Pathname.new(Dir.mktmpdir('rspec-html')).join('document.html').tap do |path|
|
31
|
+
path.write(@element.inner_html)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
25
35
|
def present?
|
26
36
|
return true if name == :document
|
27
37
|
|
@@ -29,7 +29,11 @@ module RSpecHTML
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def regexp_siblings_match?(actual)
|
32
|
-
actual.siblings.
|
32
|
+
matching_siblings = actual.siblings.select { |sibling| @expected.match(sibling&.text || '') }
|
33
|
+
@actual_count = matching_siblings.size
|
34
|
+
return matching_siblings.size.positive? if @expected_count.nil?
|
35
|
+
|
36
|
+
matching_siblings.size.positive? && count_match?
|
33
37
|
end
|
34
38
|
|
35
39
|
def string_match?(actual)
|
@@ -40,7 +44,11 @@ module RSpecHTML
|
|
40
44
|
end
|
41
45
|
|
42
46
|
def string_siblings_match?(actual)
|
43
|
-
actual.siblings.
|
47
|
+
matching_siblings = actual.siblings.select { |sibling| (sibling&.text || '').include?(@expected.to_s) }
|
48
|
+
@actual_count = matching_siblings.size
|
49
|
+
return matching_siblings.size.positive? if @expected_count.nil?
|
50
|
+
|
51
|
+
matching_siblings.size.positive? && count_match?
|
44
52
|
end
|
45
53
|
|
46
54
|
def raise_argument_error
|
data/lib/rspec_html/search.rb
CHANGED
@@ -117,12 +117,12 @@ module RSpecHTML
|
|
117
117
|
|
118
118
|
def index(val)
|
119
119
|
zero_index_error if val.zero?
|
120
|
-
|
120
|
+
Element.new(@siblings[val - 1], @element.name)
|
121
121
|
end
|
122
122
|
|
123
123
|
def range(val)
|
124
124
|
zero_index_error if val.first.zero?
|
125
|
-
|
125
|
+
@siblings[(val.first - 1)..(val.last - 1)].map { |element| Element.new(element, @element.name) }
|
126
126
|
end
|
127
127
|
|
128
128
|
def zero_index_error
|
@@ -149,7 +149,10 @@ module RSpecHTML
|
|
149
149
|
|
150
150
|
def where_xpath(tag, query)
|
151
151
|
conditions = "[#{where_conditions(query)}]" unless query.compact.empty?
|
152
|
-
@element&.xpath(".//#{tag}#{conditions}")
|
152
|
+
result = @element&.xpath(".//#{tag}#{conditions}")
|
153
|
+
return result unless @siblings.is_a?(Nokogiri::XML::NodeSet) && (result.nil? || result.empty?)
|
154
|
+
|
155
|
+
@siblings.xpath(".//#{tag}#{conditions}")
|
153
156
|
end
|
154
157
|
|
155
158
|
def where_conditions(query)
|
data/lib/rspec_html.rb
CHANGED
@@ -4,6 +4,7 @@ require 'nokogiri'
|
|
4
4
|
|
5
5
|
require 'pathname'
|
6
6
|
require 'forwardable'
|
7
|
+
require 'tempfile'
|
7
8
|
|
8
9
|
require 'rspec_html/tags'
|
9
10
|
require 'rspec_html/element'
|
@@ -11,6 +12,7 @@ require 'rspec_html/search'
|
|
11
12
|
require 'rspec_html/reconstituted_element'
|
12
13
|
require 'rspec_html/countable'
|
13
14
|
require 'rspec_html/matchers'
|
15
|
+
require 'rspec_html/browser'
|
14
16
|
|
15
17
|
# Support module for rspec/html
|
16
18
|
module RSpecHTML
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-html
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bob Farrell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- lib/rspec/html.rb
|
62
62
|
- lib/rspec/html/version.rb
|
63
63
|
- lib/rspec_html.rb
|
64
|
+
- lib/rspec_html/browser.rb
|
64
65
|
- lib/rspec_html/countable.rb
|
65
66
|
- lib/rspec_html/element.rb
|
66
67
|
- lib/rspec_html/matchers.rb
|