Skip to content

Commit 4db71b1

Browse files
committed
Finish QueryNormalization
2 parents 41e611e + c044735 commit 4db71b1

1 file changed

Lines changed: 71 additions & 11 deletions

File tree

lib/rdf/spec/queryable.rb

Lines changed: 71 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)