Skip to content

Commit b91a428

Browse files
committed
Update enumerable spec to not check for existance of specific BNodes. This addresses issue #22
1 parent c2c2592 commit b91a428

1 file changed

Lines changed: 20 additions & 16 deletions

File tree

lib/rdf/spec/enumerable.rb

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ module RDF_Enumerable
2121
end
2222

2323
describe RDF::Enumerable do
24+
let(:subject_count) {@statements.map(&:subject).uniq.length}
25+
let(:bnode_subject_count) {@statements.map(&:subject).uniq.select(&:node?).length}
26+
let(:non_bnode_statements) {@statements.reject {|s| s.subject.node? || s.object.node?}}
27+
2428
subject {@enumerable}
2529
it {should respond_to(:supports?)}
2630

@@ -69,15 +73,15 @@ module RDF_Enumerable
6973
let(:unknown_statement) {RDF::Statement.new(RDF::Node.new, RDF::URI.new("http://example.org/unknown"), RDF::Node.new)}
7074
it "should have all statements" do
7175
# Don't check for BNodes, as equivalence depends on their being exactly the same, not just the same identifier. If subject is loaded separately, these won't match.
72-
@statements.reject {|s| s.to_a.any?(&:node?)}.each do |statement|
76+
non_bnode_statements.each do |statement|
7377
subject.has_statement?(statement).should be_true
7478
end
7579
end
7680

7781
it "does not have statement in different context" do
7882
if @supports_context
7983
context = RDF::URI.new("urn:context:1")
80-
@statements.each do |statement|
84+
non_bnode_statements.each do |statement|
8185
s = statement.dup
8286
s.context = context
8387
subject.has_statement?(s).should be_false
@@ -122,7 +126,7 @@ module RDF_Enumerable
122126

123127
context "#has_triple?" do
124128
specify do
125-
@statements.each do |statement|
129+
non_bnode_statements.each do |statement|
126130
subject.has_triple?(statement.to_triple).should be_true
127131
end
128132
end
@@ -157,7 +161,7 @@ module RDF_Enumerable
157161
context "#has_quad?" do
158162
specify do
159163
if @supports_context
160-
@statements.each do |statement|
164+
non_bnode_statements.each do |statement|
161165
subject.has_quad?(statement.to_quad).should be_true
162166
end
163167
end
@@ -179,6 +183,7 @@ module RDF_Enumerable
179183
end
180184

181185
context "when enumerating subjects" do
186+
let(:subjects) {subject.map { |s| s.subject }.reject(&:node?).uniq}
182187
it {should respond_to(:subjects)}
183188
it {should respond_to(:has_subject?)}
184189
it {should respond_to(:each_subject)}
@@ -199,7 +204,7 @@ module RDF_Enumerable
199204
context "#has_subject?" do
200205
specify do
201206
checked = []
202-
@statements.each do |statement|
207+
non_bnode_statements.each do |statement|
203208
@enumerable.has_subject?(statement.subject).should be_true unless checked.include?(statement.subject)
204209
checked << statement.subject
205210
end
@@ -210,22 +215,22 @@ module RDF_Enumerable
210215

211216
its(:each_subject) {should be_an_enumerator}
212217
context "#each_subject" do
213-
let(:subjects) {@statements.map { |s| s.subject }.uniq}
214-
specify {subject.each_subject.to_a.size.should == subjects.size}
218+
specify {subject.each_subject.reject(&:node?).size.should == subjects.size}
215219
specify {subject.each_subject {|value| value.should be_a_resource}}
216-
specify {subject.each_subject {|value| subjects.should include(value)}}
220+
specify {subject.each_subject {|value| subjects.should include(value) unless value.node?}}
217221
end
218222

219223
its(:enum_subject) {should be_an_enumerator}
220224
its(:enum_subject) {should be_countable}
221225
context "#enum_subject" do
222226
it "should enumerate all subjects" do
223-
subject.enum_subject.to_a.should == @enumerable.each_subject.to_a
227+
subject.enum_subject.reject(&:node?).should == subjects
224228
end
225229
end
226230
end
227231

228232
context "when enumerating predicates" do
233+
let(:predicates) {@statements.map { |s| s.predicate }.uniq}
229234
it {should respond_to(:predicates)}
230235
it {should respond_to(:has_predicate?)}
231236
it {should respond_to(:each_predicate)}
@@ -257,7 +262,6 @@ module RDF_Enumerable
257262

258263
its(:each_predicate) {should be_an_enumerator}
259264
context "#each_predicate" do
260-
let(:predicates) {@statements.map { |s| s.predicate }.uniq}
261265
specify {subject.each_predicate.to_a.size.should == predicates.size}
262266
specify {subject.each_predicate {|value| value.should be_a_uri}}
263267
specify {subject.each_predicate {|value| predicates.should include(value)}}
@@ -267,12 +271,13 @@ module RDF_Enumerable
267271
its(:enum_predicate) {should be_countable}
268272
context "#enum_predicate" do
269273
it "should enumerate all predicates" do
270-
subject.enum_predicate.to_a.should == @enumerable.each_predicate.to_a
274+
subject.enum_predicate.to_a.should == predicates
271275
end
272276
end
273277
end
274278

275279
context "when enumerating objects" do
280+
let(:objects) {subject.map(&:object).reject(&:node?).uniq}
276281
it {should respond_to(:objects)}
277282
it {should respond_to(:has_object?)}
278283
it {should respond_to(:each_object)}
@@ -293,7 +298,7 @@ module RDF_Enumerable
293298
context "#has_object?" do
294299
specify do
295300
checked = []
296-
@statements.each do |statement|
301+
non_bnode_statements.each do |statement|
297302
@enumerable.has_object?(statement.object).should be_true unless checked.include?(statement.object)
298303
checked << statement.object
299304
end
@@ -304,17 +309,16 @@ module RDF_Enumerable
304309

305310
its(:each_object) {should be_an_enumerator}
306311
context "#each_object" do
307-
let(:objects) {@statements.map { |s| s.object }.uniq}
308-
specify {subject.each_object.to_a.size.should == objects.size}
312+
specify {subject.each_object.reject(&:node?).size.should == objects.size}
309313
specify {subject.each_object {|value| value.should be_a_term}}
310-
specify {subject.each_object {|value| objects.should include(value)}}
314+
specify {subject.each_object {|value| objects.should include(value) unless value.node?}}
311315
end
312316

313317
its(:enum_object) {should be_an_enumerator}
314318
its(:enum_object) {should be_countable}
315319
context "#enum_object" do
316320
it "should enumerate all objects" do
317-
subject.enum_object.to_a.should == @enumerable.each_object.to_a
321+
subject.enum_object.reject(&:node?).should == objects
318322
end
319323
end
320324
end

0 commit comments

Comments
 (0)