@@ -23,6 +23,8 @@ module RDF_Queryable
2323
2424 describe RDF ::Queryable do
2525 subject { @queryable }
26+ let ( :query ) { RDF ::Query . new { pattern [ :s , :p , :o ] } }
27+
2628 ##
2729 # @see RDF::Queryable#query
2830 describe "#query" do
@@ -54,6 +56,10 @@ module RDF_Queryable
5456 expect { subject . query ( { } ) } . not_to raise_error
5557 end
5658
59+ it "accepts an RDF::Query argument" do
60+ expect { subject . query ( RDF ::Query . new ) } . not_to raise_error
61+ end
62+
5763 it "does not alter a given hash argument" do
5864 query = { :subject => resource , :predicate => RDF ::DOAP . name , :object => RDF ::FOAF . Person }
5965 original_query = query . dup
@@ -66,9 +72,32 @@ module RDF_Queryable
6672 end
6773
6874 context "with a block" do
69- it "yields statements" do
70- subject . query ( [ nil , nil , nil ] ) do |statement |
71- statement . should be_a_statement
75+ context "with a triple argument" do
76+ it "yields statements" do
77+ subject . query ( [ nil , nil , nil ] ) do |statement |
78+ statement . should be_a_statement
79+ statement . should_not be_a RDF ::Query ::Solution
80+ end
81+ end
82+
83+ it "calls #query_pattern" do
84+ subject . should_receive ( :query_pattern )
85+ subject . should_not_receive ( :query_execute )
86+ subject . query ( [ :s , :p , :o ] ) { }
87+ end
88+ end
89+ context "with a Query argument" do
90+ it "yields statements" do
91+ subject . query ( query ) do |solution |
92+ solution . should_not be_a_statement
93+ solution . should be_a RDF ::Query ::Solution
94+ end
95+ end
96+
97+ it "calls #query_execute" do
98+ subject . should_receive ( :query_execute )
99+ subject . should_not_receive ( :query_pattern )
100+ subject . query ( query ) { }
72101 end
73102 end
74103 end
@@ -86,9 +115,17 @@ module RDF_Queryable
86115 subject . query ( [ nil , nil , nil ] ) . should be_queryable
87116 end
88117
89- it "returns statements" do
118+ it "returns statements given a triple " do
90119 subject . query ( [ nil , nil , nil ] ) . each do |statement |
91120 statement . should be_a_statement
121+ statement . should_not be_a RDF ::Query ::Solution
122+ end
123+ end
124+
125+ it "returns solutions given a query" do
126+ subject . query ( query ) . each do |solution |
127+ solution . should_not be_a_statement
128+ solution . should be_a RDF ::Query ::Solution
92129 end
93130 end
94131
@@ -102,10 +139,14 @@ module RDF_Queryable
102139
103140 it "returns the correct number of results for hash queries" do
104141 subject . query ( { } ) . size . should == @statements . size
105- subject . query ( :subject => resource ) . size . should == File . readlines ( @doap ) . grep ( /^<http:\/ \/ rubygems\. org\/ gems\/ rdf>/ ) . size
142+ subject . query ( :subject => resource ) . size . should == File . readlines ( @doap ) . grep ( /^<http:\/ \/ rubygems\. org\/ gems\/ rdf>/ ) . size
106143 subject . query ( :subject => resource , :predicate => RDF ::DOAP . name ) . size . should == 1
107144 subject . query ( :object => RDF ::DOAP . Project ) . size . should == 1
108145 end
146+
147+ it "returns the correct number of results for query queries" do
148+ subject . query ( query ) . size . should == @statements . size
149+ end
109150 end
110151
111152 context "with specific patterns from SPARQL" do
@@ -149,6 +190,30 @@ module RDF_Queryable
149190 end
150191 end
151192
193+ ##
194+ # @see RDF::Queryable#query_execute
195+ describe "#query_execute" do
196+ it "defines a protected #query_execute method" do
197+ subject . class . protected_method_defined? ( :query_execute ) . should be_true
198+ end
199+
200+ context "when called" do
201+ it "requires an argument" do
202+ expect { subject . send ( :query_execute ) } . to raise_error ( ArgumentError )
203+ end
204+
205+ it "yields to the given block" do
206+ expect { |b | subject . send ( :query_execute , query , &b ) } . to yield_control . exactly ( @queryable . count ) . times
207+ end
208+
209+ it "yields solutions" do
210+ subject . send ( :query_execute , query ) do |solution |
211+ solution . should be_a RDF ::Query ::Solution
212+ end
213+ end
214+ end
215+ end
216+
152217 ##
153218 # @see RDF::Queryable#query_pattern
154219 describe "#query_pattern" do
@@ -162,12 +227,7 @@ module RDF_Queryable
162227 end
163228
164229 it "yields to the given block" do
165- called = false
166- subject . send ( :query_pattern , RDF ::Query ::Pattern . new ) do |statement |
167- called = true
168- break
169- end
170- called . should be_true
230+ expect { |b | subject . send ( :query_pattern , RDF ::Query ::Pattern . new , &b ) } . to yield_control . exactly ( @queryable . count ) . times
171231 end
172232
173233 it "yields statements" do
0 commit comments