rspec-xml 0.0.2 → 0.0.3
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/Gemfile +3 -2
- data/lib/rspec-xml/version.rb +2 -4
- data/lib/rspec-xml/xml_matchers.rb +84 -0
- data/lib/rspec-xml.rb +9 -4
- data/rspec-xml.gemspec +2 -3
- data/spec/features/have_path.feature +15 -0
- data/spec/features/steps/have_path_steps.rb +22 -0
- data/spec/spec_helper.rb +2 -1
- data/spec/xml_matchers_spec.rb +25 -12
- metadata +8 -5
- data/lib/rspec/xml_matchers.rb +0 -30
- data/lib/rspec.rb +0 -7
data/Gemfile
CHANGED
data/lib/rspec-xml/version.rb
CHANGED
@@ -0,0 +1,84 @@
|
|
1
|
+
module RSpecXML
|
2
|
+
module XMLMatchers
|
3
|
+
class HaveXPath
|
4
|
+
|
5
|
+
def initialize(xpath)
|
6
|
+
self.xpath = xpath
|
7
|
+
@matcher = Matcher.new(:xpath => xpath)
|
8
|
+
end
|
9
|
+
|
10
|
+
def with_text(text)
|
11
|
+
@matcher = TextMatcher.new(:xpath => xpath, :text => text)
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def matches?(xml)
|
16
|
+
@matcher.matches?(xml)
|
17
|
+
end
|
18
|
+
|
19
|
+
def failure_message_for_should
|
20
|
+
@matcher.failure_message_for_should
|
21
|
+
end
|
22
|
+
|
23
|
+
def failure_message_for_should_not
|
24
|
+
@matcher.failure_message_for_should_not
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_accessor :xpath
|
30
|
+
|
31
|
+
class Matcher
|
32
|
+
|
33
|
+
def initialize(options={})
|
34
|
+
self.xpath = options[:xpath]
|
35
|
+
end
|
36
|
+
|
37
|
+
def matches?(xml)
|
38
|
+
::Nokogiri::XML(xml).xpath(@xpath).count > 0
|
39
|
+
end
|
40
|
+
|
41
|
+
def failure_message_for_should
|
42
|
+
"expected #{xpath} to exist"
|
43
|
+
end
|
44
|
+
|
45
|
+
def failure_message_for_should_not
|
46
|
+
"expected #{xpath} to not exist"
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
attr_accessor :xpath
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
class TextMatcher
|
56
|
+
|
57
|
+
def initialize(options)
|
58
|
+
self.xpath = options[:xpath]
|
59
|
+
self.text = options[:text]
|
60
|
+
end
|
61
|
+
|
62
|
+
def matches?(xml)
|
63
|
+
::Nokogiri::XML(xml).xpath(xpath).text == text
|
64
|
+
end
|
65
|
+
|
66
|
+
def failure_message_for_should
|
67
|
+
"expected #{xpath} to contain #{text}"
|
68
|
+
end
|
69
|
+
|
70
|
+
def failure_message_for_should_not
|
71
|
+
"expected #{xpath} to contain #{text}"
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
attr_accessor :text, :xpath
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def have_xpath(xpath)
|
81
|
+
HaveXPath.new(xpath)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/rspec-xml.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
module RSpecXML
|
5
|
+
end
|
6
|
+
|
1
7
|
require "rspec-xml/version"
|
8
|
+
require 'rspec-xml/xml_matchers'
|
2
9
|
|
3
|
-
|
4
|
-
|
5
|
-
# Your code goes here...
|
6
|
-
end
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.include RSpecXML::XMLMatchers
|
7
12
|
end
|
data/rspec-xml.gemspec
CHANGED
@@ -4,7 +4,7 @@ require "rspec-xml/version"
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "rspec-xml"
|
7
|
-
s.version =
|
7
|
+
s.version = RSpecXML::VERSION
|
8
8
|
s.authors = ["Dan Carper"]
|
9
9
|
s.email = ["dcarper@dreamagile.com"]
|
10
10
|
s.homepage = ""
|
@@ -17,8 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
|
-
|
21
|
-
s.add_development_dependency 'bundler'
|
20
|
+
s.add_development_dependency 'turnip'
|
22
21
|
|
23
22
|
s.add_runtime_dependency 'rspec'
|
24
23
|
s.add_runtime_dependency 'nokogiri'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Feature: "some xml".should have_xpath('//something').with_text('Budweiser') ---
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given there is a string of XML
|
5
|
+
|
6
|
+
@wip
|
7
|
+
Scenario: the matcher should pass when the node contains the text
|
8
|
+
Given the best node contains the text: Budweiser
|
9
|
+
When I test for the text: Budweiser within the best node
|
10
|
+
Then the test should pass
|
11
|
+
@wop
|
12
|
+
Scenario: the matcher should fail when the node doesn't contain the text
|
13
|
+
Given the best node contains the text: Budweiser
|
14
|
+
When I test for the text: Miller within the best node
|
15
|
+
Then the test should fail
|
@@ -0,0 +1,22 @@
|
|
1
|
+
steps_for :have_path do
|
2
|
+
step 'there is a string of XML' do
|
3
|
+
@xml = lambda { |insides| "<xml>#{insides}</xml>" }
|
4
|
+
end
|
5
|
+
|
6
|
+
step 'the :node_name node contains the text: :text' do |node_name, text|
|
7
|
+
@xml = @xml.call "<#{node_name}>#{text}</#{node_name}>"
|
8
|
+
end
|
9
|
+
|
10
|
+
step 'I test for the text: :text within the :node_name node' do |text, node_name|
|
11
|
+
@test = lambda { @xml.should have_xpath("//#{node_name}").with_text(text) }
|
12
|
+
end
|
13
|
+
|
14
|
+
step 'the test should pass' do
|
15
|
+
@test.should_not raise_error(RSpec::Expectations::ExpectationNotMetError)
|
16
|
+
end
|
17
|
+
|
18
|
+
step 'the test should fail' do
|
19
|
+
@test.should raise_error(RSpec::Expectations::ExpectationNotMetError)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
require File.expand_path('../../lib/rspec', __FILE__)
|
1
|
+
require File.expand_path('../../lib/rspec-xml', __FILE__)
|
2
|
+
require 'pry'
|
data/spec/xml_matchers_spec.rb
CHANGED
@@ -1,19 +1,32 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe XMLMatchers do
|
3
|
+
describe RSpecXML::XMLMatchers do
|
4
4
|
describe '#have_xpath' do
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
context '#with_text' do
|
6
|
+
it 'should pass if the xpath exists containing the supplied text' do
|
7
|
+
"<node>HAI</node>".should have_xpath('/node').with_text('HAI')
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
it "should fail if the xpath does not exist" do
|
11
|
+
lambda { "<node>HAI</node>".should have_xpath('/ne').with_text('HAI')}.
|
12
|
+
should raise_error(RSpec::Expectations::ExpectationNotMetError)
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
it 'should fail if the xpath does not contain the supplied text' do
|
16
|
+
lambda { "<node>HAI</node>".should have_xpath('/ne').with_text('HI')}.
|
17
|
+
should raise_error(RSpec::Expectations::ExpectationNotMetError)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'without specifying text' do
|
22
|
+
it 'should pass if the node exists' do
|
23
|
+
'<node>something</node>'.should have_xpath('/node')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should fail if the node does not exist' do
|
27
|
+
lambda { "<node>HAI</node>".should have_xpath('/ne')}.
|
28
|
+
should raise_error(RSpec::Expectations::ExpectationNotMetError)
|
29
|
+
end
|
30
|
+
end
|
18
31
|
end
|
19
32
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,10 +9,10 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: turnip
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
@@ -71,10 +71,11 @@ files:
|
|
71
71
|
- Rakefile
|
72
72
|
- lib/rspec-xml.rb
|
73
73
|
- lib/rspec-xml/version.rb
|
74
|
-
- lib/rspec.rb
|
75
|
-
- lib/rspec/xml_matchers.rb
|
74
|
+
- lib/rspec-xml/xml_matchers.rb
|
76
75
|
- readme.md
|
77
76
|
- rspec-xml.gemspec
|
77
|
+
- spec/features/have_path.feature
|
78
|
+
- spec/features/steps/have_path_steps.rb
|
78
79
|
- spec/spec_helper.rb
|
79
80
|
- spec/xml_matchers_spec.rb
|
80
81
|
homepage: ''
|
@@ -102,5 +103,7 @@ signing_key:
|
|
102
103
|
specification_version: 3
|
103
104
|
summary: Spec your XML
|
104
105
|
test_files:
|
106
|
+
- spec/features/have_path.feature
|
107
|
+
- spec/features/steps/have_path_steps.rb
|
105
108
|
- spec/spec_helper.rb
|
106
109
|
- spec/xml_matchers_spec.rb
|
data/lib/rspec/xml_matchers.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
module XMLMatchers
|
2
|
-
class HaveXPath
|
3
|
-
|
4
|
-
def initialize(xpath)
|
5
|
-
@xpath = xpath
|
6
|
-
end
|
7
|
-
|
8
|
-
def with_text(text)
|
9
|
-
@text = text
|
10
|
-
self
|
11
|
-
end
|
12
|
-
|
13
|
-
def matches?(xml)
|
14
|
-
::Nokogiri::XML(xml).xpath(@xpath).text == @text
|
15
|
-
end
|
16
|
-
|
17
|
-
def failure_message_for_should
|
18
|
-
"expected #{@xpath} to exist"
|
19
|
-
end
|
20
|
-
|
21
|
-
def failure_message_for_should_not
|
22
|
-
"expected #{@xpath} to not exist"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def have_xpath(xpath)
|
27
|
-
HaveXPath.new(xpath)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|