Skip to content

Commit ebc6856

Browse files
committed
Skip mutable and writable tests unless resource is mutable or writable. This is better than testing separately in each test.
1 parent 2362361 commit ebc6856

3 files changed

Lines changed: 119 additions & 159 deletions

File tree

lib/rdf/spec/mutable.rb

Lines changed: 65 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
raise 'mutable must be defined with let(:mutable)' unless
99
defined? mutable
1010

11+
skip "Immutable resource" unless mutable.mutable?
1112
@statements = RDF::Spec.triples
1213
@supports_named_graphs = mutable.respond_to?(:supports?) && mutable.supports?(:graph_name)
1314
end
@@ -50,23 +51,21 @@
5051
end
5152

5253
it "should accept a string filename argument" do
53-
expect { subject.load(RDF::Spec::TRIPLES_FILE) }.not_to raise_error if subject.mutable?
54+
expect { subject.load(RDF::Spec::TRIPLES_FILE) }.not_to raise_error
5455
end
5556

5657
it "should accept an optional hash argument" do
57-
expect { subject.load(RDF::Spec::TRIPLES_FILE, {}) }.not_to raise_error if subject.mutable?
58+
expect { subject.load(RDF::Spec::TRIPLES_FILE, {}) }.not_to raise_error
5859
end
5960

6061
it "should load statements" do
61-
if subject.mutable?
62-
subject.load RDF::Spec::TRIPLES_FILE
63-
expect(subject.size).to eq File.readlines(RDF::Spec::TRIPLES_FILE).size
64-
is_expected.to have_subject(resource)
65-
end
62+
subject.load RDF::Spec::TRIPLES_FILE
63+
expect(subject.size).to eq File.readlines(RDF::Spec::TRIPLES_FILE).size
64+
is_expected.to have_subject(resource)
6665
end
6766

6867
it "should load statements with a graph_name override" do
69-
if subject.mutable? && @supports_named_graphs
68+
if @supports_named_graphs
7069
subject.load RDF::Spec::TRIPLES_FILE, graph_name: graph_name
7170
is_expected.to have_graph(graph_name)
7271
expect(subject.query(graph_name: graph_name).size).to eq subject.size
@@ -98,24 +97,20 @@
9897

9998
it "should not raise errors" do
10099
s1_updated = RDF::Statement(resource, RDF::URI.new("urn:predicate:1"), RDF::URI.new("urn:object:2"))
101-
expect { subject.update(s1_updated) }.not_to raise_error if subject.mutable?
100+
expect { subject.update(s1_updated) }.not_to raise_error
102101
end
103102

104103
it "should support updating one statement at a time with an object" do
105-
if subject.mutable?
106-
s1_updated = RDF::Statement(resource, RDF::URI.new("urn:predicate:1"), RDF::URI.new("urn:object:2"))
107-
subject.update(s1_updated)
108-
expect(subject.has_statement?(s1_updated)).to be true
109-
expect(subject.has_statement?(s1)).to be false
110-
end
104+
s1_updated = RDF::Statement(resource, RDF::URI.new("urn:predicate:1"), RDF::URI.new("urn:object:2"))
105+
subject.update(s1_updated)
106+
expect(subject.has_statement?(s1_updated)).to be true
107+
expect(subject.has_statement?(s1)).to be false
111108
end
112109

113110
it "should support updating one statement at a time without an object" do
114-
if subject.mutable?
115-
s1_deleted = RDF::Statement(resource, RDF::URI.new("urn:predicate:1"), nil)
116-
subject.update(s1_deleted)
117-
expect(subject.has_statement?(s1)).to be false
118-
end
111+
s1_deleted = RDF::Statement(resource, RDF::URI.new("urn:predicate:1"), nil)
112+
subject.update(s1_deleted)
113+
expect(subject.has_statement?(s1)).to be false
119114
end
120115

121116
it "should support updating an array of statements at a time" do
@@ -147,60 +142,52 @@
147142
end
148143

149144
it "should not raise errors" do
150-
expect { subject.delete(non_bnode_statements.first) }.not_to raise_error if subject.mutable?
145+
expect { subject.delete(non_bnode_statements.first) }.not_to raise_error
151146
end
152147

153148
it "should support deleting one statement at a time" do
154-
if subject.mutable?
155-
subject.delete(non_bnode_statements.first)
156-
is_expected.not_to have_statement(non_bnode_statements.first)
157-
end
149+
subject.delete(non_bnode_statements.first)
150+
is_expected.not_to have_statement(non_bnode_statements.first)
158151
end
159152

160153
it "should support deleting multiple statements at a time" do
161-
if subject.mutable?
162-
subject.delete(*@statements)
163-
expect(subject.find { |s| subject.has_statement?(s) }).to be_nil
164-
end
154+
subject.delete(*@statements)
155+
expect(subject.find { |s| subject.has_statement?(s) }).to be_nil
165156
end
166157

167158
it "should support wildcard deletions" do
168-
if subject.mutable?
169-
# nothing deleted
170-
require 'digest/sha1'
171-
count = subject.count
172-
subject.delete([nil, nil, Digest::SHA1.hexdigest(File.read(__FILE__))])
173-
is_expected.not_to be_empty
174-
expect(subject.count).to eq count
175-
176-
# everything deleted
177-
subject.delete([nil, nil, nil])
178-
is_expected.to be_empty
179-
end
159+
# nothing deleted
160+
require 'digest/sha1'
161+
count = subject.count
162+
subject.delete([nil, nil, Digest::SHA1.hexdigest(File.read(__FILE__))])
163+
is_expected.not_to be_empty
164+
expect(subject.count).to eq count
165+
166+
# everything deleted
167+
subject.delete([nil, nil, nil])
168+
is_expected.to be_empty
180169
end
181170

182171
it "should only delete statements when the graph_name matches" do
183-
if subject.mutable?
184-
# Setup three statements identical except for graph_name
185-
count = subject.count + (@supports_named_graphs ? 3 : 1)
186-
s1 = RDF::Statement.new(resource, RDF::URI.new("urn:predicate:1"), RDF::URI.new("urn:object:1"))
187-
s2 = s1.dup
188-
s2.graph_name = RDF::URI.new("urn:graph_name:1")
189-
s3 = s1.dup
190-
s3.graph_name = RDF::URI.new("urn:graph_name:2")
191-
subject.insert(s1)
192-
subject.insert(s2)
193-
subject.insert(s3)
194-
expect(subject.count).to eq count
195-
196-
# Delete one by one
197-
subject.delete(s1)
198-
expect(subject.count).to eq count - (@supports_named_graphs ? 1 : 1)
199-
subject.delete(s2)
200-
expect(subject.count).to eq count - (@supports_named_graphs ? 2 : 1)
201-
subject.delete(s3)
202-
expect(subject.count).to eq count - (@supports_named_graphs ? 3 : 1)
203-
end
172+
# Setup three statements identical except for graph_name
173+
count = subject.count + (@supports_named_graphs ? 3 : 1)
174+
s1 = RDF::Statement.new(resource, RDF::URI.new("urn:predicate:1"), RDF::URI.new("urn:object:1"))
175+
s2 = s1.dup
176+
s2.graph_name = RDF::URI.new("urn:graph_name:1")
177+
s3 = s1.dup
178+
s3.graph_name = RDF::URI.new("urn:graph_name:2")
179+
subject.insert(s1)
180+
subject.insert(s2)
181+
subject.insert(s3)
182+
expect(subject.count).to eq count
183+
184+
# Delete one by one
185+
subject.delete(s1)
186+
expect(subject.count).to eq count - (@supports_named_graphs ? 1 : 1)
187+
subject.delete(s2)
188+
expect(subject.count).to eq count - (@supports_named_graphs ? 2 : 1)
189+
subject.delete(s3)
190+
expect(subject.count).to eq count - (@supports_named_graphs ? 3 : 1)
204191
end
205192

206193
describe '#delete_insert' do
@@ -211,41 +198,33 @@
211198
end
212199

213200
it 'deletes and inserts' do
214-
if subject.mutable?
215-
subject.delete_insert(@statements, [statement])
216-
is_expected.to contain_exactly statement
217-
end
201+
subject.delete_insert(@statements, [statement])
202+
is_expected.to contain_exactly statement
218203
end
219204

220205
it 'deletes before inserting' do
221-
if subject.mutable?
222-
subject.delete_insert(@statements, [@statements.first])
223-
is_expected.to contain_exactly @statements.first
224-
end
206+
subject.delete_insert(@statements, [@statements.first])
207+
is_expected.to contain_exactly @statements.first
225208
end
226209

227210
it 'deletes patterns' do
228-
if subject.mutable?
229-
pattern = [non_bnode_statements.first.subject, nil, nil]
230-
expect { subject.delete_insert([pattern], []) }
231-
.to change { subject.has_subject?(non_bnode_statements.first.subject) }
232-
.from(true).to(false)
233-
end
211+
pattern = [non_bnode_statements.first.subject, nil, nil]
212+
expect { subject.delete_insert([pattern], []) }
213+
.to change { subject.has_subject?(non_bnode_statements.first.subject) }
214+
.from(true).to(false)
234215
end
235216

236217
it 'handles Enumerables' do
237-
if subject.mutable?
238-
dels = non_bnode_statements.take(10)
239-
dels.extend(RDF::Enumerable)
240-
ins = RDF::Graph.new << statement
241-
expect { subject.delete_insert(dels, ins) }
242-
.to change { dels.find { |s| subject.include?(s) } }.to be_nil
243-
is_expected.to include statement
244-
end
218+
dels = non_bnode_statements.take(10)
219+
dels.extend(RDF::Enumerable)
220+
ins = RDF::Graph.new << statement
221+
expect { subject.delete_insert(dels, ins) }
222+
.to change { dels.find { |s| subject.include?(s) } }.to be_nil
223+
is_expected.to include statement
245224
end
246225

247226
it 'handles Graph names' do
248-
if subject.mutable? && @supports_named_graphs
227+
if @supports_named_graphs
249228
dels = non_bnode_statements.take(10).map do |st|
250229
RDF::Statement.from(st.to_hash.merge(graph_name: RDF::URI('fake')))
251230
end
@@ -258,7 +237,7 @@
258237

259238
context 'when transactions are supported' do
260239
it 'updates atomically' do
261-
if subject.mutable? && subject.supports?(:transactions)
240+
if subject.supports?(:transactions)
262241
contents = subject.statements.to_a
263242

264243
expect { subject.delete_insert(@statements, [nil]) }

lib/rdf/spec/repository.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,17 @@
2727
context "when updating" do
2828
require 'rdf/spec/mutable'
2929

30-
before { mutable.clear }
30+
before { mutable.clear if mutable.mutable? }
3131
it_behaves_like 'an RDF::Mutable'
3232

3333
describe '#delete_insert' do
3434
it 'updates transactionally' do
35-
expect(mutable).to receive(:commit_transaction).and_call_original
36-
statement = RDF::Statement(:s, RDF::URI.new("urn:predicate:1"), :o)
35+
if mutable.mutable?
36+
expect(mutable).to receive(:commit_transaction).and_call_original
37+
statement = RDF::Statement(:s, RDF::URI.new("urn:predicate:1"), :o)
3738

38-
mutable.delete_insert([statement], [statement])
39+
mutable.delete_insert([statement], [statement])
40+
end
3941
end
4042
end
4143
end

0 commit comments

Comments
 (0)