rspec-xml 0.0.6 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4198e8dd85cad2e5bfbd99519de7376b323b94ce
4
+ data.tar.gz: cfa2a5428ccffbe5e7e16294d4b367dc2a98c3cd
5
+ SHA512:
6
+ metadata.gz: 104efcd3f80764495b0878dfe782958a30a14554990ff24e3090ba3dbc095f1cbe5818bb731922f3a692f7413c041618511d305d69175b25c0aed876f2807d4d
7
+ data.tar.gz: ff19d27bb3d121a7ba1082424397f4ee23a2516870d90e64ab768c7acad44663be0f79df31c089620e55b40202edd980bfe11a66293010bb8d3cde28b8237207
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ -r turnip/rspec
@@ -1,3 +1,3 @@
1
1
  module RSpecXML
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -0,0 +1,34 @@
1
+ module RSpecXML
2
+ module XMLMatchers
3
+ class HaveXPath
4
+
5
+ private
6
+
7
+ class AttrMatcher
8
+
9
+ def initialize(options={})
10
+ self.xpath = options[:xpath]
11
+ self.attr = options[:attr]
12
+ end
13
+
14
+ def matches?(xml)
15
+ attr.each do |k, v|
16
+ ::Nokogiri::XML(xml).xpath(xpath).attr(k.to_s).value == v.to_s
17
+ end
18
+ end
19
+
20
+ def failure_message_for_should
21
+ "expected #{xpath} to contain #{attr}"
22
+ end
23
+
24
+ def failure_message_for_should_not
25
+ "expected #{xpath} to not exist with attribute: #{attr}"
26
+ end
27
+
28
+ private
29
+
30
+ attr_accessor :attr, :xpath
31
+ end
32
+ end
33
+ end
34
+ end
@@ -13,6 +13,10 @@ module RSpecXML
13
13
  ::Nokogiri::XML(xml).xpath(full_xpath).count > 0
14
14
  end
15
15
 
16
+ def description
17
+ "have xpath #{full_xpath}"
18
+ end
19
+
16
20
  def failure_message_for_should
17
21
  "expected #{full_xpath} to exist"
18
22
  end
@@ -15,6 +15,10 @@ module RSpecXML
15
15
  ::Nokogiri::XML(xml).xpath(xpath).text == text
16
16
  end
17
17
 
18
+ def description
19
+ "have xpath #{xpath} with text #{text}"
20
+ end
21
+
18
22
  def failure_message_for_should
19
23
  "expected #{xpath} to contain #{text}"
20
24
  end
@@ -12,7 +12,18 @@ module RSpecXML
12
12
  def with_text(text)
13
13
  self.matcher = TextMatcher.new(
14
14
  :xpath => matcher.full_xpath,
15
- :text => text.to_s )
15
+ :text => text.to_s
16
+ )
17
+
18
+ self
19
+ end
20
+
21
+ def with_attr(attr)
22
+ self.matcher = AttrMatcher.new(
23
+ :xpath => matcher.full_xpath,
24
+ :attr => attr
25
+ )
26
+
16
27
  self
17
28
  end
18
29
 
@@ -1,6 +1,7 @@
1
1
  root = File.dirname(__FILE__)
2
2
  require "#{root}/xml_matchers/have_xpath/matcher"
3
3
  require "#{root}/xml_matchers/have_xpath/text_matcher"
4
+ require "#{root}/xml_matchers/have_xpath/attr_matcher"
4
5
  require "#{root}/xml_matchers/have_xpath"
5
6
 
6
7
  module RSpecXML
data/readme.md CHANGED
@@ -21,13 +21,9 @@ gem 'rspec-xml'
21
21
  ### Builder
22
22
 
23
23
  ```ruby
24
- xml = ''
25
- builder = Builder::XmlMarkup.new(:target => xml)
26
- builder.instruct!
24
+ xml = Nokogiri::XML::Builder.new do |xml|
25
+ xml.send("inner", "stuff", "Country" => "USA", "City" => "New York")
26
+ end.to_xml
27
27
 
28
- builder.some_xml do |xml|
29
- xml.inner 'stuff'
30
- end
31
-
32
- xml.should have_xpath('//some_xml/inner').with_text('stuff')
33
- ```
28
+ xml.should have_xpath('//some_xml/inner').with_text('stuff').with_attr({"Country" => "USA", "City" =>"New York"})
29
+ ```
@@ -1,5 +1,5 @@
1
1
  @have_path
2
- Feature: "some xml".should have_xpath('//something').with_text('Budweiser') ---
2
+ Feature: "some xml".should have_xpath('//something').with_text('Budweiser').with_attr("Category" => "Alcohol") ---
3
3
 
4
4
  Background:
5
5
  Given there is a string of XML
@@ -13,3 +13,8 @@ Feature: "some xml".should have_xpath('//something').with_text('Budweiser') ---
13
13
  Given the best node contains the text: Budweiser
14
14
  When I test for the text: Miller within the best node
15
15
  Then the test should fail
16
+
17
+ Scenario: the matcher should pass when the node contains the attribute
18
+ Given the best node contains the attribute Category with value: Alcohol
19
+ When I test for the attribute: "Category" to be "Alcohol" within the best node
20
+ Then the test should pass
@@ -11,8 +11,16 @@ steps_for :have_path do
11
11
  @test = lambda { @xml.should have_xpath("//#{node_name}").with_text(text) }
12
12
  end
13
13
 
14
+ step 'the :node_name node contains the attribute :key with value: :value' do |node_name, key, value|
15
+ @xml = @xml.call "<#{node_name} #{key}=\"#{value}\"></#{node_name}>"
16
+ end
17
+
18
+ step 'I test for the attribute: :key to be :value within the :node_name node' do |key, value, node_name|
19
+ @test = lambda { @xml.should have_xpath("//#{node_name}").with_attr({key => value}) }
20
+ end
21
+
14
22
  step 'the test should pass' do
15
- @test.should_not raise_error(RSpec::Expectations::ExpectationNotMetError)
23
+ @test.should_not raise_error
16
24
  end
17
25
 
18
26
  step 'the test should fail' do
@@ -21,7 +21,7 @@ steps_for :within do
21
21
  end
22
22
 
23
23
  step 'the test should pass' do
24
- @test.should_not raise_error(RSpec::Expectations::ExpectationNotMetError)
24
+ @test.should_not raise_error
25
25
  end
26
26
 
27
27
  step 'the test should fail' do
@@ -13,12 +13,12 @@ describe RSpecXML::XMLMatchers::HaveXPath::Matcher do
13
13
 
14
14
  it 'should return true if the supplied xml contains the xpath' do
15
15
  matcher = subject.class.new(:xpath => '//hi')
16
- matcher.matches?('<hi></hi>').should be_true
16
+ matcher.matches?('<hi></hi>').should == true
17
17
  end
18
18
 
19
19
  it 'should return false if the supplied xml contains the xpath' do
20
20
  matcher = subject.class.new(:xpath => '//hi')
21
- matcher.matches?('<no></no>').should be_false
21
+ matcher.matches?('<no></no>').should == false
22
22
  end
23
23
  end
24
24
 
@@ -35,4 +35,11 @@ describe RSpecXML::XMLMatchers::HaveXPath::Matcher do
35
35
  subject.failure_message_for_should_not.should == "expected xpath to not exist"
36
36
  end
37
37
  end
38
+
39
+ describe '#description' do
40
+ it 'should return a message describing the xpath matcher' do
41
+ subject.stubs(:xpath).returns('/expr')
42
+ subject.description.should == 'have xpath /expr'
43
+ end
44
+ end
38
45
  end
@@ -19,17 +19,17 @@ describe RSpecXML::XMLMatchers::HaveXPath::TextMatcher do
19
19
 
20
20
  it 'should return true if the supplied xml contains the xpath with supplied text' do
21
21
  matcher = subject.class.new(:xpath => '//hi', :text => 'hi')
22
- matcher.matches?('<hi>hi</hi>').should be_true
22
+ matcher.matches?('<hi>hi</hi>').should == true
23
23
  end
24
24
 
25
25
  it 'should return false if the supplied xml contains the xpath but not the text' do
26
26
  matcher = subject.class.new(:xpath => '//hi', :text => 'what')
27
- matcher.matches?('<hi></hi>').should be_false
27
+ matcher.matches?('<hi></hi>').should == false
28
28
  end
29
29
 
30
30
  it 'should return false if the supplied xml does not contain the xpath' do
31
31
  matcher = subject.class.new(:xpath => '//hi', :text => 'what')
32
- matcher.matches?('<no></no>').should be_false
32
+ matcher.matches?('<no></no>').should == false
33
33
  end
34
34
 
35
35
  end
@@ -50,4 +50,11 @@ describe RSpecXML::XMLMatchers::HaveXPath::TextMatcher do
50
50
  end
51
51
  end
52
52
 
53
+ describe '#description' do
54
+ it 'should return a message describing the text matcher' do
55
+ subject.stubs(:xpath).returns('/expr')
56
+ subject.stubs(:text).returns('text')
57
+ subject.description.should == 'have xpath /expr with text text'
58
+ end
59
+ end
53
60
  end
@@ -40,6 +40,19 @@ describe RSpecXML::XMLMatchers::HaveXPath do
40
40
  end
41
41
  end
42
42
 
43
+ describe '#with_attr' do
44
+ it 'should build a new attribute matcher containing supplied xpath and attributes' do
45
+
46
+ RSpecXML::XMLMatchers::HaveXPath::AttrMatcher.
47
+ expects(:new).
48
+ with(:xpath => 'fake xpath', :attr => {"name" => "John Doe"}).
49
+ returns(:flag)
50
+
51
+ xpath_matcher = Factory.xpath_matcher('fake xpath').with_attr({"name" => "John Doe"})
52
+ xpath_matcher.send(:matcher).should == :flag
53
+ end
54
+ end
55
+
43
56
  describe '#failure_message_for_should' do
44
57
  it 'should delegate to the matcher' do
45
58
  xpath_matcher = Factory.xpath_matcher('whatever')
metadata CHANGED
@@ -1,78 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
5
- prerelease:
4
+ version: 0.0.8
6
5
  platform: ruby
7
6
  authors:
8
7
  - Dan Carper
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-09-08 00:00:00.000000000 Z
11
+ date: 2014-08-31 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: turnip
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: mocha
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: nokogiri
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  description: One simple matcher for now
@@ -82,7 +73,8 @@ executables: []
82
73
  extensions: []
83
74
  extra_rdoc_files: []
84
75
  files:
85
- - .gitignore
76
+ - ".gitignore"
77
+ - ".rspec"
86
78
  - CHANGELOG.md
87
79
  - Gemfile
88
80
  - Rakefile
@@ -90,6 +82,7 @@ files:
90
82
  - lib/rspec-xml/version.rb
91
83
  - lib/rspec-xml/xml_matchers.rb
92
84
  - lib/rspec-xml/xml_matchers/have_xpath.rb
85
+ - lib/rspec-xml/xml_matchers/have_xpath/attr_matcher.rb
93
86
  - lib/rspec-xml/xml_matchers/have_xpath/matcher.rb
94
87
  - lib/rspec-xml/xml_matchers/have_xpath/text_matcher.rb
95
88
  - license.txt
@@ -106,27 +99,26 @@ files:
106
99
  - spec/spec_helper.rb
107
100
  homepage: ''
108
101
  licenses: []
102
+ metadata: {}
109
103
  post_install_message:
110
104
  rdoc_options: []
111
105
  require_paths:
112
106
  - lib
113
107
  required_ruby_version: !ruby/object:Gem::Requirement
114
- none: false
115
108
  requirements:
116
- - - ! '>='
109
+ - - ">="
117
110
  - !ruby/object:Gem::Version
118
111
  version: '0'
119
112
  required_rubygems_version: !ruby/object:Gem::Requirement
120
- none: false
121
113
  requirements:
122
- - - ! '>='
114
+ - - ">="
123
115
  - !ruby/object:Gem::Version
124
116
  version: '0'
125
117
  requirements: []
126
118
  rubyforge_project: rspec-xml
127
- rubygems_version: 1.8.19
119
+ rubygems_version: 2.2.2
128
120
  signing_key:
129
- specification_version: 3
121
+ specification_version: 4
130
122
  summary: Spec your XML
131
123
  test_files:
132
124
  - spec/features/have_path.feature
@@ -138,4 +130,3 @@ test_files:
138
130
  - spec/rspec-xml/xml_matchers/have_xpath_matcher_spec.rb
139
131
  - spec/rspec-xml/xml_matchers_spec.rb
140
132
  - spec/spec_helper.rb
141
- has_rdoc: