equivalent-xml 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +1 -0
- data/lib/equivalent-xml/rspec_matchers.rb +12 -12
- data/spec/equivalent-xml_spec.rb +46 -46
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
N2UyN2Q1OTkwM2EwOGVmYjc3OTk1ZDI3NDVjMGIwNzAzMDY4MTViNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ODlkOGEwZTZjNjg1NzE5ODI2YmFmMjUyMDM0YzFjMzAyYWUxZGEwMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NzUyYmEzNjVjYzhjZGE0YTFmMDg4YTlhMGRkNGEzYThhYmYzZTA5MTNlOGRi
|
10
|
+
ODk3ZGQ4ZmJlOTljMDlhY2Y2ZWE4NWUwMDJhNzk4NWEyOWE4ZDI0NjY4MzQy
|
11
|
+
NGY2YjllNmMxOWNkMWE5NmJlNjAwMTIxNzY0ZDkwMjdkOTA2NmE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OGIyMWRlZTVhYmFmZGE5MTE4MzQ5MjkxNmJjNjNkZDVlNTljM2MxNmZhNmQ4
|
14
|
+
MjYyZDQ4Y2ZiMzA3ODg0Zjg4ODA0NTY0M2MyMmNjZTgzNWQ1Nzk2ZDIyMmNl
|
15
|
+
NzYxNGNjMzBhNzc4MDk0MmY0NTIxYTY0NmQ0YzBmM2U1ZmViOGE=
|
data/README.md
CHANGED
@@ -106,6 +106,7 @@ Chained modifiers:
|
|
106
106
|
|
107
107
|
## History
|
108
108
|
|
109
|
+
- <b>0.4.3</b> - Updates for rspec 3
|
109
110
|
- <b>0.4.2</b> - Move version back into gemspec for now
|
110
111
|
- <b>0.4.1</b> - Improved RSpec version checking (contrib. by elandesign)
|
111
112
|
- <b>0.4.0</b> - Added :ignore_attr_values option (contrib. by ivannovosad)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'equivalent-xml'
|
2
2
|
|
3
3
|
begin
|
4
|
-
require 'rspec
|
4
|
+
require 'rspec/expectations'
|
5
5
|
rescue LoadError
|
6
6
|
end
|
7
7
|
|
@@ -16,7 +16,7 @@ module EquivalentXml::RSpecMatchers
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# Determine if the receiver is equivalent to the argument as defined
|
19
|
-
# in {file:README.rdoc README.rdoc} and {EquivalentXml.equivalent? EquivalentXml.equivalent?}.
|
19
|
+
# in {file:README.rdoc README.rdoc} and {EquivalentXml.equivalent? EquivalentXml.equivalent?}.
|
20
20
|
# node.should be_equivalent_to(other_node)
|
21
21
|
# node.should_not be_equivalent_to(other_node)
|
22
22
|
# node.should be_equivalent_to(other_node).respecting_element_order
|
@@ -29,31 +29,31 @@ module EquivalentXml::RSpecMatchers
|
|
29
29
|
end
|
30
30
|
|
31
31
|
rspec_namespace.define :be_equivalent_to do |expected|
|
32
|
-
|
32
|
+
opts = {}
|
33
33
|
match do |actual|
|
34
|
-
EquivalentXml.equivalent?(actual,expected
|
34
|
+
EquivalentXml.equivalent?(actual,expected,opts)
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
chain :respecting_element_order do
|
38
|
-
|
38
|
+
opts[:element_order] = true
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
chain :with_whitespace_intact do
|
42
|
-
|
42
|
+
opts[:normalize_whitespace] = false
|
43
43
|
end
|
44
44
|
|
45
45
|
chain :ignoring_content_of do |paths|
|
46
|
-
|
46
|
+
opts[:ignore_content] = paths
|
47
47
|
end
|
48
48
|
|
49
49
|
chain :ignoring_attr_values do
|
50
|
-
|
50
|
+
opts[:ignore_attr_values] = true
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
failure_message_for_should do |actual|
|
54
54
|
[ 'expected:', expected.to_s, 'got:', actual.to_s ].join("\n")
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
failure_message_for_should_not do |actual|
|
58
58
|
[ 'expected:', actual.to_s, 'not to be equivalent to:', expected.to_s ].join("\n")
|
59
59
|
end
|
data/spec/equivalent-xml_spec.rb
CHANGED
@@ -11,81 +11,81 @@ describe EquivalentXml do
|
|
11
11
|
|
12
12
|
it "should consider a document equivalent to itself" do
|
13
13
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
14
|
-
doc1.
|
14
|
+
expect(doc1).to be_equivalent_to(doc1)
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
it "should compare non-XML content based on its string representation" do
|
18
|
-
nil.
|
19
|
-
''.
|
20
|
-
''.
|
21
|
-
'foo'.
|
22
|
-
'foo'.
|
18
|
+
expect(nil).to be_equivalent_to(nil)
|
19
|
+
expect('').to be_equivalent_to('')
|
20
|
+
expect('').to be_equivalent_to(nil)
|
21
|
+
expect('foo').to be_equivalent_to('foo')
|
22
|
+
expect('foo').not_to be_equivalent_to('bar')
|
23
23
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first order='1'>foo bar baz</first><second>things</second></doc>")
|
24
|
-
doc1.
|
24
|
+
expect(doc1).not_to be_equivalent_to(nil)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should ensure that attributes match" do
|
28
28
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first order='1'>foo bar baz</first><second>things</second></doc>")
|
29
29
|
doc2 = Nokogiri::XML("<doc xmlns='foo:bar'><first order='2'>foo bar baz</first><second>things</second></doc>")
|
30
|
-
doc1.
|
30
|
+
expect(doc1).not_to be_equivalent_to(doc2)
|
31
31
|
|
32
32
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first order='1'>foo bar baz</first><second>things</second></doc>")
|
33
33
|
doc2 = Nokogiri::XML("<doc xmlns='foo:bar'><first order='1'>foo bar baz</first><second>things</second></doc>")
|
34
|
-
doc1.
|
34
|
+
expect(doc1).to be_equivalent_to(doc2)
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
it "shouldn't care about attribute order" do
|
38
38
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first order='1' value='quux'>foo bar baz</first><second>things</second></doc>")
|
39
39
|
doc2 = Nokogiri::XML("<doc xmlns='foo:bar'><first value='quux' order='1'>foo bar baz</first><second>things</second></doc>")
|
40
|
-
doc1.
|
40
|
+
expect(doc1).to be_equivalent_to(doc2)
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it "shouldn't care about element order by default" do
|
44
44
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
45
45
|
doc2 = Nokogiri::XML("<doc xmlns='foo:bar'><second>things</second><first>foo bar baz</first></doc>")
|
46
|
-
doc1.
|
46
|
+
expect(doc1).to be_equivalent_to(doc2)
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
it "should care about element order if :element_order => true is specified" do
|
50
50
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
51
51
|
doc2 = Nokogiri::XML("<doc xmlns='foo:bar'><second>things</second><first>foo bar baz</first></doc>")
|
52
|
-
doc1.
|
52
|
+
expect(doc1).not_to be_equivalent_to(doc2).respecting_element_order
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
it "should ensure nodesets have the same number of elements" do
|
56
56
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
57
57
|
doc2 = Nokogiri::XML("<doc xmlns='foo:bar'><second>things</second><first>foo bar baz</first><third/></doc>")
|
58
|
-
doc1.
|
58
|
+
expect(doc1).not_to be_equivalent_to(doc2)
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should ensure namespaces match" do
|
62
62
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
63
63
|
doc2 = Nokogiri::XML("<doc xmlns='foo:baz'><first>foo bar baz</first><second>things</second></doc>")
|
64
|
-
doc1.
|
64
|
+
expect(doc1).not_to be_equivalent_to(doc2)
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should compare namespaces based on URI, not on prefix" do
|
68
68
|
doc1 = Nokogiri::XML("<doc xmlns:foo='foo:bar'><foo:first>foo bar baz</foo:first><foo:second>things</foo:second></doc>")
|
69
69
|
doc2 = Nokogiri::XML("<doc xmlns:baz='foo:bar'><baz:first>foo bar baz</baz:first><baz:second>things</baz:second></doc>")
|
70
|
-
doc1.
|
70
|
+
expect(doc1).to be_equivalent_to(doc2)
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should ignore declared but unused namespaces" do
|
74
74
|
doc1 = Nokogiri::XML("<doc xmlns:foo='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
75
75
|
doc2 = Nokogiri::XML("<doc><first>foo bar baz</first><second>things</second></doc>")
|
76
|
-
doc1.
|
76
|
+
expect(doc1).to be_equivalent_to(doc2)
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should normalize simple whitespace by default" do
|
80
80
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
81
81
|
doc2 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
82
|
-
doc1.
|
82
|
+
expect(doc1).to be_equivalent_to(doc2)
|
83
83
|
end
|
84
84
|
|
85
85
|
it "shouldn't normalize simple whitespace if :normalize_whitespace => false is specified" do
|
86
86
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
87
87
|
doc2 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
88
|
-
doc1.
|
88
|
+
expect(doc1).not_to be_equivalent_to(doc2).with_whitespace_intact
|
89
89
|
end
|
90
90
|
|
91
91
|
it "should normalize complex whitespace by default" do
|
@@ -97,9 +97,9 @@ describe EquivalentXml do
|
|
97
97
|
bar baz
|
98
98
|
</first>
|
99
99
|
</doc>})
|
100
|
-
doc1.
|
100
|
+
expect(doc1).to be_equivalent_to(doc2)
|
101
101
|
end
|
102
|
-
|
102
|
+
|
103
103
|
it "shouldn't normalize complex whitespace if :normalize_whitespace => false is specified" do
|
104
104
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
105
105
|
doc2 = Nokogiri::XML(%{<doc xmlns='foo:bar'>
|
@@ -109,7 +109,7 @@ describe EquivalentXml do
|
|
109
109
|
bar baz
|
110
110
|
</first>
|
111
111
|
</doc>})
|
112
|
-
doc1.
|
112
|
+
expect(doc1).not_to be_equivalent_to(doc2).with_whitespace_intact
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should ignore comment nodes" do
|
@@ -122,33 +122,33 @@ describe EquivalentXml do
|
|
122
122
|
bar baz
|
123
123
|
</first>
|
124
124
|
</doc>})
|
125
|
-
doc1.
|
125
|
+
expect(doc1).to be_equivalent_to(doc2)
|
126
126
|
end
|
127
|
-
|
127
|
+
|
128
128
|
it "should properly handle a mixture of text and element nodes" do
|
129
129
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><phrase>This phrase <b>has bold text</b> in it.</phrase></doc>")
|
130
130
|
doc2 = Nokogiri::XML("<doc xmlns='foo:bar'><phrase>This phrase in <b>has bold text</b> it.</phrase></doc>")
|
131
|
-
doc1.
|
131
|
+
expect(doc1).not_to be_equivalent_to(doc2)
|
132
132
|
end
|
133
133
|
|
134
134
|
it "should properly handle documents passed in as strings" do
|
135
135
|
doc1 = "<doc xmlns='foo:bar'><first order='1'>foo bar baz</first><second>things</second></doc>"
|
136
136
|
doc2 = "<doc xmlns='foo:bar'><first order='1'>foo bar baz</first><second>things</second></doc>"
|
137
|
-
doc1.
|
137
|
+
expect(doc1).to be_equivalent_to(doc2)
|
138
138
|
|
139
139
|
doc1 = "<doc xmlns='foo:bar'><first order='1'>foo bar baz</first><second>things</second></doc>"
|
140
140
|
doc2 = "<doc xmlns='foo:bar'><first order='1'>foo bar baz quux</first><second>things</second></doc>"
|
141
|
-
doc1.
|
141
|
+
expect(doc1).not_to be_equivalent_to(doc2)
|
142
142
|
end
|
143
143
|
|
144
144
|
it "should compare nodesets" do
|
145
145
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
146
|
-
doc1.root.children.
|
146
|
+
expect(doc1.root.children).to be_equivalent_to(doc1.root.children)
|
147
147
|
end
|
148
|
-
|
148
|
+
|
149
149
|
it "should compare nodeset with string" do
|
150
150
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first>foo bar baz</first><second>things</second></doc>")
|
151
|
-
doc1.root.children.
|
151
|
+
expect(doc1.root.children).to be_equivalent_to("<first xmlns='foo:bar'>foo bar baz</first><second xmlns='foo:bar'>things</second>")
|
152
152
|
end
|
153
153
|
|
154
154
|
context "with the :ignore_content_paths option set to a CSS selector" do
|
@@ -156,47 +156,47 @@ describe EquivalentXml do
|
|
156
156
|
doc1 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>1234</SerialNumber></Device></Devices>")
|
157
157
|
doc2 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>5678</SerialNumber></Device></Devices>")
|
158
158
|
|
159
|
-
EquivalentXml.equivalent?(doc1, doc2, :ignore_content => "SerialNumber").
|
160
|
-
EquivalentXml.equivalent?(doc1, doc2, :ignore_content => "Devices>Device>SerialNumber").
|
159
|
+
expect(EquivalentXml.equivalent?(doc1, doc2, :ignore_content => "SerialNumber")).to eq(true)
|
160
|
+
expect(EquivalentXml.equivalent?(doc1, doc2, :ignore_content => "Devices>Device>SerialNumber")).to eq(true)
|
161
161
|
|
162
|
-
doc1.
|
163
|
-
doc1.
|
162
|
+
expect(doc1).to be_equivalent_to(doc2).ignoring_content_of("SerialNumber")
|
163
|
+
expect(doc1).to be_equivalent_to(doc2).ignoring_content_of("Devices>Device>SerialNumber")
|
164
164
|
end
|
165
165
|
|
166
166
|
it "ignores the text content of a node that matches the given CSS selector when comparing with a matcher" do
|
167
167
|
doc1 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>1234</SerialNumber></Device></Devices>")
|
168
168
|
doc2 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>5678</SerialNumber></Device></Devices>")
|
169
169
|
|
170
|
-
doc1.
|
171
|
-
doc1.
|
170
|
+
expect(doc1).to be_equivalent_to(doc2).ignoring_content_of("SerialNumber")
|
171
|
+
expect(doc1).to be_equivalent_to(doc2).ignoring_content_of("Devices>Device>SerialNumber")
|
172
172
|
end
|
173
173
|
|
174
174
|
it "ignores all children of a node that matches the given selector when comparing for equivalence" do
|
175
175
|
doc1 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>1234</SerialNumber></Device></Devices>")
|
176
176
|
doc2 = Nokogiri::XML("<Devices><Device><Name>iPad</Name><SerialNumber>5678</SerialNumber></Device></Devices>")
|
177
177
|
|
178
|
-
doc1.
|
178
|
+
expect(doc1).to be_equivalent_to(doc2).ignoring_content_of("Device")
|
179
179
|
end
|
180
180
|
|
181
181
|
it "still considers the number of elements even if they match the given CSS selector" do
|
182
182
|
doc1 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>1234</SerialNumber></Device></Devices>")
|
183
183
|
doc2 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>1234</SerialNumber></Device><Device><Name>iPad</Name><SerialNumber>5678</SerialNumber></Device></Devices>")
|
184
184
|
|
185
|
-
doc1.
|
185
|
+
expect(doc1).not_to be_equivalent_to(doc2).ignoring_content_of("Device")
|
186
186
|
end
|
187
187
|
|
188
188
|
it "still considers attributes on the matched path when comparing for equivalence" do
|
189
189
|
doc1 = Nokogiri::XML("<Devices><Device status='owned'><Name>iPhone</Name><SerialNumber>1234</SerialNumber></Device></Devices>")
|
190
190
|
doc2 = Nokogiri::XML("<Devices><Device status='rented'><Name>iPhone</Name><SerialNumber>1234</SerialNumber></Device></Devices>")
|
191
191
|
|
192
|
-
doc1.
|
192
|
+
expect(doc1).not_to be_equivalent_to(doc2).ignoring_content_of("Device")
|
193
193
|
end
|
194
194
|
|
195
195
|
it "ignores all matches of the CSS selector" do
|
196
196
|
doc1 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>1001</SerialNumber></Device><Device><Name>iPad</Name><SerialNumber>2001</SerialNumber></Device></Devices>")
|
197
197
|
doc2 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>1002</SerialNumber></Device><Device><Name>iPad</Name><SerialNumber>2002</SerialNumber></Device></Devices>")
|
198
198
|
|
199
|
-
doc1.
|
199
|
+
expect(doc1).to be_equivalent_to(doc2).ignoring_content_of("SerialNumber")
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
@@ -205,7 +205,7 @@ describe EquivalentXml do
|
|
205
205
|
doc1 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>1234</SerialNumber><ICCID>AAAA</ICCID></Device></Devices>")
|
206
206
|
doc2 = Nokogiri::XML("<Devices><Device><Name>iPhone</Name><SerialNumber>5678</SerialNumber><ICCID>BBBB</ICCID></Device></Devices>")
|
207
207
|
|
208
|
-
doc1.
|
208
|
+
expect(doc1).to be_equivalent_to(doc2).ignoring_content_of(["SerialNumber", "ICCID"])
|
209
209
|
end
|
210
210
|
end
|
211
211
|
|
@@ -213,7 +213,7 @@ describe EquivalentXml do
|
|
213
213
|
it "ignores the values of attributes when comparing for equivalence" do
|
214
214
|
doc1 = Nokogiri::XML("<doc xmlns='foo:bar'><first order='1'>foo bar baz</first><second>things</second></doc>")
|
215
215
|
doc2 = Nokogiri::XML("<doc xmlns='foo:bar'><first order='2'>foo bar baz</first><second>things</second></doc>")
|
216
|
-
doc1.
|
216
|
+
expect(doc1).to be_equivalent_to(doc2).ignoring_attr_values
|
217
217
|
end
|
218
218
|
end
|
219
219
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: equivalent-xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael B. Klein
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|