rspec-xml 0.0.4 → 0.0.6

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/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ ## 0.0.5 (2012-09-07)
2
+
3
+ * Added require for rspec in rspec-xml.rb
4
+ Fixes RSpec NameError problem when bundled.
5
+ @suranyami (David Parry)
6
+
@@ -1,3 +1,3 @@
1
1
  module RSpecXML
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -6,21 +6,27 @@ module RSpecXML
6
6
  class Matcher
7
7
  def initialize(options={})
8
8
  self.xpath = options[:xpath]
9
+ self.example_group = options[:example_group]
9
10
  end
10
11
 
11
12
  def matches?(xml)
12
- ::Nokogiri::XML(xml).xpath(@xpath).count > 0
13
+ ::Nokogiri::XML(xml).xpath(full_xpath).count > 0
13
14
  end
14
15
 
15
16
  def failure_message_for_should
16
- "expected #{xpath} to exist"
17
+ "expected #{full_xpath} to exist"
17
18
  end
18
19
 
19
20
  def failure_message_for_should_not
20
- "expected #{xpath} to not exist"
21
+ "expected #{full_xpath} to not exist"
21
22
  end
22
23
 
23
- attr_accessor :xpath
24
+ def full_xpath
25
+ xpath_stack = example_group.instance_variable_get(:@xpath_stack) || []
26
+ xpath_stack.join.concat(xpath)
27
+ end
28
+
29
+ attr_accessor :xpath, :example_group
24
30
  end
25
31
  end
26
32
  end
@@ -2,13 +2,16 @@ module RSpecXML
2
2
  module XMLMatchers
3
3
  class HaveXPath
4
4
 
5
- def initialize(xpath)
6
- self.matcher = Matcher.new(:xpath => xpath)
5
+ def initialize(xpath, example_group)
6
+ self.matcher = Matcher.new(
7
+ :xpath => xpath,
8
+ :example_group => example_group
9
+ )
7
10
  end
8
11
 
9
12
  def with_text(text)
10
13
  self.matcher = TextMatcher.new(
11
- :xpath => matcher.xpath,
14
+ :xpath => matcher.full_xpath,
12
15
  :text => text.to_s )
13
16
  self
14
17
  end
@@ -7,7 +7,18 @@ module RSpecXML
7
7
  module XMLMatchers
8
8
 
9
9
  def have_xpath(xpath)
10
- HaveXPath.new(xpath)
10
+ HaveXPath.new(xpath, self)
11
+ end
12
+
13
+ def within(xpath, &example_group_block)
14
+ return unless block_given?
15
+
16
+ instance_exec(example_group_block) do
17
+ @xpath_stack ||= []
18
+ @xpath_stack.push xpath
19
+ yield
20
+ @xpath_stack.pop
21
+ end
11
22
  end
12
23
 
13
24
  end
data/lib/rspec-xml.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'nokogiri'
3
+ require 'rspec'
3
4
 
4
5
  module RSpecXML
5
6
  end
@@ -1,3 +1,4 @@
1
+ @have_path
1
2
  Feature: "some xml".should have_xpath('//something').with_text('Budweiser') ---
2
3
 
3
4
  Background:
@@ -0,0 +1,31 @@
1
+ steps_for :within do
2
+ step 'there is a string of XML' do
3
+ @xml = lambda { |insides| "<xml><elem>#{insides}</elem></xml>" }
4
+ end
5
+
6
+ step 'there are the following nodes:' do |table|
7
+ text = table.hashes.map { |h| "<#{h["node"]}>#{h["value"]}</#{h["node"]}>" }
8
+ @xml = @xml[text.join]
9
+ end
10
+
11
+ step 'I test for the following text within the corresponding nodes:' do |table|
12
+ @test = lambda do
13
+ within('xml') do
14
+ within('/elem') do
15
+ table.hashes.each do |hash|
16
+ @xml.should have_xpath("/#{hash["node"]}").with_text(hash["text"])
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ step 'the test should pass' do
24
+ @test.should_not raise_error(RSpec::Expectations::ExpectationNotMetError)
25
+ end
26
+
27
+ step 'the test should fail' do
28
+ @test.should raise_error(RSpec::Expectations::ExpectationNotMetError)
29
+ end
30
+ end
31
+
@@ -0,0 +1,24 @@
1
+ @within
2
+ Feature: within should be able to accept block as arugment
3
+
4
+ Background:
5
+ Given there is a string of XML
6
+ Given there are the following nodes:
7
+ | node | value |
8
+ | property1 | value1 |
9
+ | property2 | value2 |
10
+
11
+ Scenario: the matcher should pass when the nodes contains the text
12
+ When I test for the following text within the corresponding nodes:
13
+ | node | text |
14
+ | property1 | value1 |
15
+ | property2 | value2 |
16
+ Then the test should pass
17
+
18
+ Scenario: the matcher should fail when the node doesn't contain the text
19
+ When I test for the following text within the corresponding nodes:
20
+ | node | text |
21
+ | property1 | value1 |
22
+ | property2 | value9 |
23
+ Then the test should fail
24
+
@@ -1,18 +1,23 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Factory
4
+ def self.example_group
5
+ @example_group ||= Class.new
6
+ end
4
7
  def self.xpath_matcher(xpath)
5
- RSpecXML::XMLMatchers::HaveXPath.new(xpath)
8
+ RSpecXML::XMLMatchers::HaveXPath.new(xpath, example_group)
6
9
  end
7
10
  end
8
11
 
9
12
  describe RSpecXML::XMLMatchers::HaveXPath do
13
+ let(:example_group) { Factory.example_group }
14
+
10
15
  describe '#intialize' do
11
16
  it 'should build and save a matcher containing the supplied xpath' do
12
17
 
13
18
  RSpecXML::XMLMatchers::HaveXPath::Matcher.
14
19
  expects(:new).
15
- with(:xpath => 'fake xpath').
20
+ with(:xpath => 'fake xpath', :example_group => example_group).
16
21
  returns(:flag)
17
22
 
18
23
  xpath_matcher = Factory.xpath_matcher('fake xpath')
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe RSpecXML::XMLMatchers do
4
+ describe '#within' do
5
+
6
+ it 'should create instance variable @xpath_stack inside within block' do
7
+ @xpath_stack.should be_nil
8
+ within("foo/bar") do
9
+ @xpath_stack.should == ["foo/bar"]
10
+ end
11
+ end
12
+
13
+ it 'should increase @xpath_stack properly when blocks are nested' do
14
+ within("foo") do
15
+ within("/bar") do
16
+ @xpath_stack.should == ["foo", "/bar"]
17
+ end
18
+ end
19
+ end
20
+
21
+ it 'should reduce @xpath_stack on exit from block' do
22
+ within("foo") do
23
+ within("/bar") do
24
+ end
25
+ @xpath_stack.should == ["foo"]
26
+ end
27
+ @xpath_stack.should == []
28
+ end
29
+
30
+ end
31
+ end
32
+
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require File.expand_path('../../lib/rspec-xml', __FILE__)
2
2
 
3
+ Dir.glob('spec/features/steps/**/*.rb') { |f| require File.expand_path(f) }
4
+
3
5
  RSpec.configure do |config|
4
6
  config.mock_with :mocha
5
7
  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
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-21 00:00:00.000000000 Z
12
+ date: 2012-09-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: turnip
@@ -83,6 +83,7 @@ extensions: []
83
83
  extra_rdoc_files: []
84
84
  files:
85
85
  - .gitignore
86
+ - CHANGELOG.md
86
87
  - Gemfile
87
88
  - Rakefile
88
89
  - lib/rspec-xml.rb
@@ -96,9 +97,12 @@ files:
96
97
  - rspec-xml.gemspec
97
98
  - spec/features/have_path.feature
98
99
  - spec/features/steps/have_path_steps.rb
100
+ - spec/features/steps/within_steps.rb
101
+ - spec/features/within.feature
99
102
  - spec/rspec-xml/xml_matchers/have_xpath/matcher_spec.rb
100
103
  - spec/rspec-xml/xml_matchers/have_xpath/text_matcher_spec.rb
101
104
  - spec/rspec-xml/xml_matchers/have_xpath_matcher_spec.rb
105
+ - spec/rspec-xml/xml_matchers_spec.rb
102
106
  - spec/spec_helper.rb
103
107
  homepage: ''
104
108
  licenses: []
@@ -120,14 +124,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
124
  version: '0'
121
125
  requirements: []
122
126
  rubyforge_project: rspec-xml
123
- rubygems_version: 1.8.23
127
+ rubygems_version: 1.8.19
124
128
  signing_key:
125
129
  specification_version: 3
126
130
  summary: Spec your XML
127
131
  test_files:
128
132
  - spec/features/have_path.feature
129
133
  - spec/features/steps/have_path_steps.rb
134
+ - spec/features/steps/within_steps.rb
135
+ - spec/features/within.feature
130
136
  - spec/rspec-xml/xml_matchers/have_xpath/matcher_spec.rb
131
137
  - spec/rspec-xml/xml_matchers/have_xpath/text_matcher_spec.rb
132
138
  - spec/rspec-xml/xml_matchers/have_xpath_matcher_spec.rb
139
+ - spec/rspec-xml/xml_matchers_spec.rb
133
140
  - spec/spec_helper.rb
141
+ has_rdoc: