@@ -29,14 +29,24 @@ module RDF_Enumerable
2929 it { should respond_to ( :supports? ) }
3030
3131 describe "valid?" do
32- it { should be_valid }
32+ it "reports validity" do
33+ if subject . supports? ( :validity )
34+ should be_valid
35+ else
36+ expect { subject . valid? } . to raise_error ( NotImplementedError )
37+ end
38+ end
3339
3440 it "returns false if any statement is invalid" do
3541 if subject . respond_to? ( :<< ) && ( subject . writable? rescue true )
3642 s = RDF ::Statement . from ( [ nil , nil , nil ] )
37- expect ( s ) . not_to be_valid
38- subject << s
39- expect ( subject ) . not_to be_valid
43+ if subject . supports? ( :validity )
44+ expect ( s ) . not_to be_valid
45+ subject << s
46+ expect ( subject ) . not_to be_valid
47+ else
48+ expect { subject . valid? } . to raise_error ( NotImplementedError )
49+ end
4050 else
4151 pending ( "can't add statement to immutable enumerable" )
4252 end
@@ -107,7 +117,11 @@ module RDF_Enumerable
107117 its ( :enum_statement ) { should be_queryable }
108118 context "#enum_statement" do
109119 it "should enumerate all statements" do
110- expect ( subject . enum_statement . to_a ) . to include ( *@enumerable . each_statement . to_a )
120+ expect ( subject . enum_statement . count ) . to eq @enumerable . each_statement . count
121+ subject . enum_statement . each do |s |
122+ expect ( s ) . to be_a_statement
123+ expect ( @enumerable . each_statement . to_a ) . to include ( s ) unless s . has_blank_nodes?
124+ end
111125 end
112126 end
113127 end
@@ -135,13 +149,23 @@ module RDF_Enumerable
135149 its ( :each_triple ) { should be_an_enumerator }
136150 context "#each_triple" do
137151 specify { subject . each_triple { |*triple | expect ( triple ) . to be_a_triple } }
152+ it "should iterate over all triples" do
153+ subject . each_triple do |*triple |
154+ triple . each { |r | expect ( r ) . to be_a_term }
155+ expect ( @enumerable ) . to have_triple ( triple ) unless triple . any? ( &:node? )
156+ end
157+ end
138158 end
139159
140160 its ( :enum_triple ) { should be_an_enumerator }
141161 its ( :enum_triple ) { should be_countable }
142162 context "#enum_triple" do
143163 it "should enumerate all triples" do
144- expect ( subject . enum_triple . to_a ) . to include ( *@enumerable . each_triple . to_a )
164+ expect ( subject . enum_triple . count ) . to eq @enumerable . each_triple . count
165+ subject . enum_triple . each do |s , p , o |
166+ [ s , p , o ] . each { |r | expect ( r ) . to be_a_term }
167+ expect ( @enumerable ) . to have_triple ( [ s , p , o ] ) unless [ s , p , o ] . any? ( &:node? )
168+ end
145169 end
146170 end
147171 end
@@ -171,13 +195,23 @@ module RDF_Enumerable
171195 its ( :each_quad ) { should be_an_enumerator }
172196 context "#each_quad" do
173197 specify { subject . each_quad { |*quad | expect ( quad ) . to be_a_quad } }
198+ it "should iterate over all quads" do
199+ subject . each_quad do |*quad |
200+ quad . compact . each { |r | expect ( r ) . to be_a_term }
201+ expect ( @enumerable ) . to have_quad ( quad ) unless quad . compact . any? ( &:node? )
202+ end
203+ end
174204 end
175205
176206 its ( :enum_quad ) { should be_an_enumerator }
177207 its ( :enum_quad ) { should be_countable }
178208 context "#enum_quad" do
179209 it "should enumerate all quads" do
180- expect ( subject . enum_quad . to_a ) . to include ( *@enumerable . each_quad . to_a )
210+ expect ( subject . enum_quad . count ) . to eq @enumerable . each_quad . count
211+ subject . enum_quad . each do |s , p , o , c |
212+ [ s , p , o , c ] . compact . each { |r | expect ( r ) . to be_a_term }
213+ expect ( @enumerable ) . to have_quad ( [ s , p , o , c ] ) unless [ s , p , o ] . any? ( &:node? )
214+ end
181215 end
182216 end
183217 end
@@ -215,16 +249,20 @@ module RDF_Enumerable
215249
216250 its ( :each_subject ) { should be_an_enumerator }
217251 context "#each_subject" do
218- specify { expect ( subject . each_subject . reject ( &:node? ) . size ) . to eq subjects . size }
252+ specify { expect ( subject . each_subject . reject ( &:node? ) . size ) . to eq subjects . reject ( & :node? ) . size }
219253 specify { subject . each_subject { |value | expect ( value ) . to be_a_resource } }
220254 specify { subject . each_subject { |value | expect ( subjects ) . to include ( value ) unless value . node? } }
221255 end
222256
223257 its ( :enum_subject ) { should be_an_enumerator }
224258 its ( :enum_subject ) { should be_countable }
225259 context "#enum_subject" do
260+ specify { expect ( subject . enum_subject . to_a . reject ( &:node? ) . size ) . to eq subjects . reject ( &:node? ) . size }
226261 it "should enumerate all subjects" do
227- expect ( subject . enum_subject . reject ( &:node? ) ) . to include ( *subjects )
262+ subject . enum_subject . each do |s |
263+ expect ( s ) . to be_a_resource
264+ expect ( subjects . to_a ) . to include ( s ) unless s . node?
265+ end
228266 end
229267 end
230268 end
@@ -318,7 +356,10 @@ module RDF_Enumerable
318356 its ( :enum_object ) { should be_countable }
319357 context "#enum_object" do
320358 it "should enumerate all objects" do
321- expect ( subject . enum_object . reject ( &:node? ) ) . to include ( *objects )
359+ subject . enum_object . each do |o |
360+ expect ( o ) . to be_a_term
361+ expect ( objects . to_a ) . to include ( o ) unless o . node?
362+ end
322363 end
323364 end
324365 end
@@ -389,15 +430,17 @@ module RDF_Enumerable
389430 describe "#each_graph" do
390431 subject { @enumerable . each_graph }
391432 it { should be_an_enumerator }
392- specify { subject . each { |value | expect ( value ) . to be_a_graph } }
433+ it "are all graphs" do
434+ subject . each { |value | expect ( value ) . to be_a_graph } if @supports_context
435+ end
393436 end
394437
395438 describe "#enum_graph" do
396439 subject { @enumerable . enum_graph }
397440 it { should be_an_enumerator }
398441 it { should be_countable }
399- it "enumerates the same as #each_graph" do
400- subject . to_a . should =~ @enumerable . each_graph . to_a # expect with match problematic
442+ it "enumerates the same as #each_graph" , :pending => "graph inclusion issue" do
443+ expect ( subject . to_a ) . to include ( * @enumerable . each_graph . to_a ) if @supports_context # expect with match problematic
401444 end
402445 end
403446 end
0 commit comments