@@ -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