earl-report 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ $:.unshift "."
3
3
  require 'spec_helper'
4
4
 
5
5
  describe EarlReport do
6
- subject {
6
+ let!(:earl) {
7
7
  EarlReport.new(
8
8
  File.expand_path("../test-files/report-complete.ttl", __FILE__),
9
9
  :bibRef => "[[TURTLE]]",
@@ -11,6 +11,7 @@ describe EarlReport do
11
11
  :verbose => false,
12
12
  :manifest => File.expand_path("../test-files/manifest.ttl", __FILE__))
13
13
  }
14
+ subject {earl}
14
15
 
15
16
  describe ".new" do
16
17
  let(:manifest) {
@@ -33,7 +34,7 @@ describe EarlReport do
33
34
  }
34
35
 
35
36
  it "requires a :manifest option" do
36
- lambda {EarlReport.new}.should raise_error("Test Manifest must be specified with :manifest option")
37
+ lambda {EarlReport.new}.should raise_error("Test Manifests must be specified with :manifest option")
37
38
  end
38
39
 
39
40
  context "with base" do
@@ -162,28 +163,25 @@ describe EarlReport do
162
163
  end
163
164
 
164
165
  describe "#json_hash" do
165
- let(:json) {
166
- subject.send(:json_hash)
167
- }
168
- specify {json.should be_a(Hash)}
166
+ let(:json) {earl.send(:json_hash)}
167
+ subject {json}
168
+ it {should be_a(Hash)}
169
169
  {
170
170
  "@id" => "",
171
- "@type" => "earl:Report",
171
+ "@type" => ["earl:Software", "doap:Project"],
172
172
  'bibRef' => "[[TURTLE]]",
173
- 'title' => "Turtle Test Results"
173
+ 'name' => "Turtle Test Results"
174
174
  }.each do |prop, value|
175
- specify(prop) {json[prop].should == value}
175
+ specify(prop) {subject[prop].should == value}
176
176
  end
177
177
 
178
- %w(assertions generatedBy testSubjects tests).each do |key|
179
- specify {json.keys.should include(key)}
178
+ %w(assertions generatedBy testSubjects entries).each do |key|
179
+ its(:keys) {should include(key)}
180
180
  end
181
181
 
182
182
  context "parsing to RDF" do
183
- let(:graph) do
184
- @graph ||= begin
185
- RDF::Graph.new << JSON::LD::Reader.new(json.to_json, :base_uri => "http://example.com/report")
186
- end
183
+ let!(:graph) do
184
+ RDF::Graph.new << JSON::LD::Reader.new(subject.to_json, :base_uri => "http://example.com/report")
187
185
  end
188
186
 
189
187
  it "has Report" do
@@ -209,9 +207,10 @@ describe EarlReport do
209
207
  end
210
208
 
211
209
  describe "#json_test_subject_info" do
212
- let(:json) {subject.send(:json_test_subject_info)}
213
- specify {json.should be_a(Array)}
214
- specify("have length 1") {json.length.should == 1}
210
+ let(:json) {earl.send(:json_test_subject_info)}
211
+ subject {json}
212
+ it {should be_a(Array)}
213
+ its(:length) {should == 1}
215
214
 
216
215
  context "test subject" do
217
216
  let(:ts) {json.first}
@@ -240,51 +239,67 @@ describe EarlReport do
240
239
  end
241
240
  end
242
241
  end
243
-
242
+
244
243
  describe "#json_result_info" do
245
- let(:json) {subject.send(:json_result_info)}
246
- specify {json.should be_a(Array)}
247
- specify("have 2 entries") {json.length.should == 2}
244
+ let(:json) {earl.send(:json_result_info)}
245
+ subject {json}
246
+ it {should be_a(Array)}
247
+ its(:length) {should == 1}
248
248
 
249
- context "test case" do
250
- let(:tc) {json.first}
249
+ context 'entries' do
250
+ let(:ts) {json.first}
251
251
  {
252
- "@id" => "http://example/manifest.ttl#testeval00",
253
- "@type" => %w(earl:TestCriterion earl:TestCase),
254
- title: "subm-test-00",
255
- description: "Blank subject",
256
- testAction: "http://example/test-00.ttl",
257
- testResult: "http://example/test-00.out",
252
+ "@id" => "http://example/manifest.ttl",
253
+ "@type" => %w(earl:Report mf:Manifest),
254
+ title: "Example Test Cases"
258
255
  }.each do |prop, value|
259
- specify(prop) {tc[prop.to_s].should == value}
256
+ specify(prop) {ts[prop.to_s].should == value}
260
257
  end
261
258
 
262
- context('assertions') do
263
- specify { tc['assertions'].should be_a(Array)}
264
- specify('has one entry') { tc['assertions'].length.should == 1}
259
+ it "should have two entries" do
260
+ ts['entries'].length.should == 2
265
261
  end
266
262
 
267
- context "assertion" do
268
- let(:as) {tc['assertions'].first}
269
- specify {as.should be_a(Hash)}
263
+ context "test case" do
264
+ let(:tc) {ts['entries'].first}
270
265
  {
271
- "@type" => %(earl:Assertion),
272
- assertedBy: "http://greggkellogg.net/foaf#me",
273
- mode: "earl:automatic",
274
- subject: "http://rubygems.org/gems/rdf-turtle",
275
- test: "http://example/manifest.ttl#testeval00",
266
+ "@id" => "http://example/manifest.ttl#testeval00",
267
+ "@type" => %w(earl:TestCriterion earl:TestCase http://www.w3.org/ns/rdftest#TestTurtleEval),
268
+ title: "subm-test-00",
269
+ description: "Blank subject",
270
+ testAction: "http://example/test-00.ttl",
271
+ testResult: "http://example/test-00.out",
276
272
  }.each do |prop, value|
277
- specify(prop) {as[prop.to_s].should == value}
273
+ specify(prop) {tc[prop.to_s].should == value}
274
+ end
275
+
276
+ context('assertions') do
277
+ specify { tc['assertions'].should be_a(Array)}
278
+ specify('has one entry') { tc['assertions'].length.should == 1}
278
279
  end
279
280
 
280
- context "result" do
281
- let(:rs) {as['result']}
282
- specify {rs.should be_a(Hash)}
281
+ context "assertion" do
282
+ let(:as) {tc['assertions'].first}
283
+ specify {as.should be_a(Hash)}
283
284
  {
284
- "@type" => %(earl:TestResult),
285
- outcome: "earl:passed",
285
+ "@type" => %(earl:Assertion),
286
+ assertedBy: "http://greggkellogg.net/foaf#me",
287
+ mode: "earl:automatic",
288
+ subject: "http://rubygems.org/gems/rdf-turtle",
289
+ test: "http://example/manifest.ttl#testeval00",
286
290
  }.each do |prop, value|
287
- specify(prop) {rs[prop.to_s].should == value}
291
+ specify(prop) {as[prop.to_s].should == value}
292
+ end
293
+
294
+ context "result" do
295
+ let(:rs) {as['result']}
296
+ specify {rs.should be_a(Hash)}
297
+ {
298
+ "@type" => %(earl:TestResult),
299
+ outcome: "earl:passed",
300
+ }.each do |prop, value|
301
+ specify(prop) {rs[prop.to_s].should == value}
302
+ end
288
303
  end
289
304
  end
290
305
  end
@@ -292,176 +307,152 @@ describe EarlReport do
292
307
  end
293
308
 
294
309
  describe "#test_subject_turtle" do
295
- context "test subject" do
296
- let(:desc) {{
297
- "@id" => "http://rubygems.org/gems/rdf-turtle",
298
- "@type" => %w(earl:TestSubject doap:Project),
299
- 'doapDesc' => "RDF::Turtle is an Turtle reader/writer for the RDF.rb library suite.",
300
- 'homepage' => "http://ruby-rdf.github.com/rdf-turtle",
301
- 'language' => "Ruby",
302
- 'name' => "RDF::Turtle",
303
- 'developer' => {
304
- '@id' => "http://greggkellogg.net/foaf#me",
305
- '@type' => %w(foaf:Person earl:Assertor),
306
- 'foaf:name' => "Gregg Kellogg"
307
- }
308
- }}
309
- let(:ttl) {subject.send(:test_subject_turtle, desc)}
310
- specify {ttl.length.should > 0}
311
- it "has subject subject" do
312
- ttl.should match(/<#{desc['@id']}> a/)
313
- end
314
- it "has types" do
315
- ttl.should match(/ a #{desc['@type'].join(', ')}\s*[;\.]$/)
316
- end
317
- it "has name" do
318
- ttl.should match(/ doap:name "#{desc['name']}"\s*[;\.]$/)
319
- end
320
- it "has description" do
321
- ttl.should match(/ doap:description """#{desc['doapDesc']}"""@en\s*[;\.]$/)
322
- end
323
- it "has doap:programming-language" do
324
- ttl.should match(/ doap:programming-language "#{desc['language']}"\s*[;\.]$/)
325
- end
326
- it "has doap:developer" do
327
- ttl.should match(/ doap:developer <#{desc['developer']['@id']}>/)
328
- end
329
-
330
- context "developer" do
331
- let(:dev) {desc['developer']}
332
- it "has subject subject" do
333
- ttl.should match(/<#{dev['@id']}> a/)
334
- end
335
- it "has types" do
336
- ttl.should match(/ a #{dev['@type'].join(', ')}\s*[;\.]$/)
337
- end
338
- it "has name" do
339
- ttl.should match(/ foaf:name "#{dev['foaf:name']}"\s*[;\.]$/)
340
- end
341
- end
310
+ let(:desc) {{
311
+ "@id" => "http://rubygems.org/gems/rdf-turtle",
312
+ "@type" => %w(earl:TestSubject doap:Project),
313
+ 'doapDesc' => "RDF::Turtle is an Turtle reader/writer for the RDF.rb library suite.",
314
+ 'homepage' => "http://ruby-rdf.github.com/rdf-turtle",
315
+ 'language' => "Ruby",
316
+ 'name' => "RDF::Turtle",
317
+ 'developer' => {
318
+ '@id' => "http://greggkellogg.net/foaf#me",
319
+ '@type' => %w(foaf:Person earl:Assertor),
320
+ 'foaf:name' => "Gregg Kellogg"
321
+ }
322
+ }}
323
+ let(:ttl) {earl.send(:test_subject_turtle, desc)}
324
+ subject {ttl}
325
+
326
+ its(:length) {should > 0}
327
+ specify {should match(/<#{desc['@id']}> a/)}
328
+ specify {should match(/ a #{desc['@type'].join(', ')}\s*[;\.]$/)}
329
+ specify {should match(/ doap:name "#{desc['name']}"\s*[;\.]$/)}
330
+ specify {should match(/ doap:description """#{desc['doapDesc']}"""@en\s*[;\.]$/)}
331
+ specify {should match(/ doap:programming-language "#{desc['language']}"\s*[;\.]$/)}
332
+ specify {should match(/ doap:developer <#{desc['developer']['@id']}>/)}
333
+
334
+ context "developer" do
335
+ let(:dev) {desc['developer']}
336
+ specify {should match(/<#{dev['@id']}> a/)}
337
+ specify {should match(/ a #{dev['@type'].join(', ')}\s*[;\.]$/)}
338
+ specify {should match(/ foaf:name "#{dev['foaf:name']}"\s*[;\.]$/)}
342
339
  end
343
340
  end
344
341
 
345
342
  describe "#tc_turtle" do
346
- context "test case" do
347
- let(:tc) {{
348
- "@id" => "http://example/manifest.ttl#testeval00",
349
- "@type" => %w(earl:TestCriterion earl:TestCase),
350
- 'title' => "subm-test-00",
351
- 'description' => "Blank subject",
352
- 'testAction' => "http://example/test-00.ttl",
353
- 'testResult' => "http://example/test-00.out",
354
- 'assertions' => [{
355
- "@type" => %(earl:Assertion),
356
- 'assertedBy' =>"http://greggkellogg.net/foaf#me",
357
- 'mode' => "earl:automatic",
358
- 'subject' => "http://rubygems.org/gems/rdf-turtle",
359
- 'test' => "http://example/manifest.ttl#testeval00",
360
- 'result' => {
361
- "@type" => %(earl:TestResult),
362
- 'outcome' => "earl:passed",
363
- }
364
- }]
365
- }}
366
- let(:ttl) {subject.send(:tc_turtle, tc)}
367
- specify {ttl.length.should > 0}
368
- it "has subject subject" do
369
- ttl.should match(/<#{tc['@id']}> a/)
370
- end
371
- it "has types" do
372
- ttl.should match(/ a #{tc['@type'].join(', ')}\s*[;\.]$/)
373
- end
374
- it "has dc:title" do
375
- ttl.should match(/ dc:title "#{tc['title']}"\s*[;\.]$/)
376
- end
377
- it "has dc:description" do
378
- ttl.should match(/ dc:description """#{tc['description']}"""@en\s*[;\.]$/)
379
- end
380
- it "has mf:action" do
381
- ttl.should match(/ mf:action <#{tc['testAction']}>\s*[;\.]$/)
382
- end
383
- it "has mf:result" do
384
- ttl.should match(/ mf:result <#{tc['testResult']}>\s*[;\.]$/)
385
- end
386
- it "has earl:assertions" do
387
- ttl.should match(/ earl:assertions \(\s*\[ a earl:Assertion/m)
388
- end
389
- end
390
- end
391
-
392
- describe "#as_turtle" do
393
- context "assertion" do
394
- let(:as) {{
395
- "@type" => %w(earl:Assertion),
396
- 'assertedBy' => "http://greggkellogg.net/foaf#me",
343
+ let(:tc) {{
344
+ "@id" => "http://example/manifest.ttl#testeval00",
345
+ "@type" => %w(earl:TestCriterion earl:TestCase),
346
+ 'title' => "subm-test-00",
347
+ 'description' => "Blank subject",
348
+ 'testAction' => "http://example/test-00.ttl",
349
+ 'testResult' => "http://example/test-00.out",
350
+ 'assertions' => [{
351
+ "@type" => %(earl:Assertion),
352
+ 'assertedBy' =>"http://greggkellogg.net/foaf#me",
397
353
  'mode' => "earl:automatic",
398
354
  'subject' => "http://rubygems.org/gems/rdf-turtle",
399
355
  'test' => "http://example/manifest.ttl#testeval00",
400
356
  'result' => {
401
- '@type' => 'earl:TestResult',
402
- 'outcome' => 'earl:passed'
357
+ "@type" => %(earl:TestResult),
358
+ 'outcome' => "earl:passed",
403
359
  }
404
- }}
405
- let(:ttl) {subject.send(:as_turtle, as)}
406
- specify {ttl.length.should > 0}
407
- it "has type" do
408
- ttl.should match(/ a #{as['@type'].join(', ')}\s*[;\.]$/)
409
- end
410
- it "has earl:assertedBy" do
411
- ttl.should match(/ earl:assertedBy <#{as['assertedBy']}>\s*[;\.]$/)
412
- end
413
- it "has earl:test" do
414
- ttl.should match(/ earl:test <#{as['test']}>\s*[;\.]$/)
415
- end
416
- it "has earl:subject" do
417
- ttl.should match(/ earl:subject <#{as['subject']}>\s*[;\.]$/)
418
- end
419
- it "has earl:mode" do
420
- ttl.should match(/ earl:mode #{as['mode']}\s*[;\.]$/)
421
- end
422
- it "has earl:result" do
423
- ttl.should match(/ earl:result \[ a #{as['result']['@type']}; earl:outcome #{as['result']['outcome']} \]\]/)
424
- end
360
+ }]
361
+ }}
362
+ let(:ttl) {earl.send(:tc_turtle, tc)}
363
+ subject {ttl}
364
+ its(:length) {should > 0}
365
+ specify {should match(/<#{tc['@id']}> a/)}
366
+ specify {should match(/ a #{tc['@type'].join(', ')}\s*[;\.]$/)}
367
+ specify {should match(/ dc:title "#{tc['title']}"\s*[;\.]$/)}
368
+ specify {should match(/ dc:description """#{tc['description']}"""@en\s*[;\.]$/)}
369
+ specify {should match(/ mf:action <#{tc['testAction']}>\s*[;\.]$/)}
370
+ specify {should match(/ mf:result <#{tc['testResult']}>\s*[;\.]$/)}
371
+ specify {should match(/ earl:assertions \(\s*\[ a earl:Assertion/m)}
372
+ end
373
+
374
+ describe "#as_turtle" do
375
+ let(:as) {{
376
+ "@type" => %w(earl:Assertion),
377
+ 'assertedBy' => "http://greggkellogg.net/foaf#me",
378
+ 'mode' => "earl:automatic",
379
+ 'subject' => "http://rubygems.org/gems/rdf-turtle",
380
+ 'test' => "http://example/manifest.ttl#testeval00",
381
+ 'result' => {
382
+ '@type' => 'earl:TestResult',
383
+ 'outcome' => 'earl:passed'
384
+ }
385
+ }}
386
+ let(:ttl) {earl.send(:as_turtle, as)}
387
+ subject {ttl}
388
+ its(:length) {should > 0}
389
+ specify {should match(/ a #{as['@type'].join(', ')}\s*[;\.]$/)}
390
+ specify {should match(/ earl:assertedBy <#{as['assertedBy']}>\s*[;\.]$/)}
391
+ specify {should match(/ earl:test <#{as['test']}>\s*[;\.]$/)}
392
+ specify {should match(/ earl:subject <#{as['subject']}>\s*[;\.]$/)}
393
+ specify {should match(/ earl:mode #{as['mode']}\s*[;\.]$/)}
394
+ specify {should match(/ earl:result \[ a #{as['result']['@type']}; earl:outcome #{as['result']['outcome']} \]\]/)}
395
+ it "has type" do
396
+ ttl.should match(/ a #{as['@type'].join(', ')}\s*[;\.]$/)
397
+ end
398
+ it "has earl:assertedBy" do
399
+ ttl.should match(/ earl:assertedBy <#{as['assertedBy']}>\s*[;\.]$/)
400
+ end
401
+ it "has earl:test" do
402
+ ttl.should match(/ earl:test <#{as['test']}>\s*[;\.]$/)
403
+ end
404
+ it "has earl:subject" do
405
+ ttl.should match(/ earl:subject <#{as['subject']}>\s*[;\.]$/)
406
+ end
407
+ it "has earl:mode" do
408
+ ttl.should match(/ earl:mode #{as['mode']}\s*[;\.]$/)
409
+ end
410
+ it "has earl:result" do
411
+ ttl.should match(/ earl:result \[ a #{as['result']['@type']}; earl:outcome #{as['result']['outcome']} \]\]/)
425
412
  end
426
413
  end
427
414
 
428
415
  describe "#earl_turtle" do
429
- let(:json_hash) {subject.send(:json_hash)}
416
+ let(:json_hash) {earl.send(:json_hash)}
430
417
  let(:output) {
431
418
  @output ||= begin
432
419
  sio = StringIO.new
433
- subject.send(:earl_turtle, {io: sio})
420
+ earl.send(:earl_turtle, {io: sio})
434
421
  sio.rewind
435
422
  sio.read
436
423
  end
437
424
  }
425
+ subject {output}
438
426
  let(:ts) {json_hash['testSubjects'].first}
439
- let(:tc) {json_hash['tests'].first}
427
+ let(:tm) {json_hash['entries'].first}
428
+ let(:tc) {tm['entries'].first}
440
429
  let(:as) {tc['assertions'].first}
441
430
 
442
431
  context "prefixes" do
443
432
  %w(dc doap earl foaf mf owl rdf rdfs xsd).each do |pfx|
444
- it "should have prefix #{pfx}" do
445
- output.should match(/@prefix #{pfx}: </)
446
- end
433
+ specify {should match(/@prefix #{pfx}: </)}
447
434
  end
448
435
  end
449
436
 
450
437
  context "earl:Software" do
451
- specify {output.should match(/<> a earl:Report\s*[;\.]$/)}
452
- specify {output.should match(/ dc:title "#{json_hash['title']}"\s*[;\.]$/)}
438
+ specify {should match(/<> a earl:Software, doap:Project\s*[;\.]$/)}
439
+ specify {should match(/ doap:name "#{json_hash['name']}"\s*[;\.]$/)}
453
440
  end
454
441
 
455
442
  context "Subject Definitions" do
456
- specify {output.should match(/<#{ts['@id']}> a #{ts['@type'].join(', ')}\s*[;\.]$/)}
443
+ specify {should match(/<#{ts['@id']}> a #{ts['@type'].join(', ')}\s*[;\.]$/)}
444
+ end
445
+
446
+ context "Manifest Definitions" do
447
+ specify {should match(/<#{tm['@id']}> a #{tm['@type'].join(', ')}\s*[;\.]$/)}
457
448
  end
458
449
 
459
450
  context "Test Case Definitions" do
460
- specify {output.should match(/<#{tc['@id']}> a #{tc['@type'].join(', ')}\s*[;\.]$/)}
451
+ specify {should match(/<#{tc['@id']}> a #{tc['@type'].join(', ')}\s*[;\.]$/)}
461
452
  end
462
453
 
463
454
  context "Assertion" do
464
- specify {output.should match(/\[ a #{as['@type']}\s*[;\.]$/)}
455
+ specify {should match(/\[ a #{as['@type']}\s*[;\.]$/)}
465
456
  end
466
457
 
467
458
  context "parsing to RDF" do
@@ -533,15 +524,19 @@ describe EarlReport do
533
524
  PREFIX dc: <http://purl.org/dc/terms/>
534
525
  PREFIX doap: <http://usefulinc.com/ns/doap#>
535
526
  PREFIX earl: <http://www.w3.org/ns/earl#>
536
-
527
+ PREFIX mf: <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#>
528
+
537
529
  ASK WHERE {
538
- ?uri a earl:Report;
539
- dc:title "Turtle Test Results";
530
+ ?uri a earl:Software, doap:Project;
531
+ doap:name "Turtle Test Results";
540
532
  dc:bibliographicCitation "[[TURTLE]]";
541
533
  earl:generatedBy ?generatedBy;
542
534
  earl:assertions ?assertionFile;
543
535
  earl:testSubjects (<http://rubygems.org/gems/rdf-turtle>);
544
- earl:tests (
536
+ mf:entries (<http://example/manifest.ttl>) .
537
+
538
+ <http://example/manifest.ttl> a earl:Report, mf:Manifest;
539
+ mf:entries (
545
540
  <http://example/manifest.ttl#testeval00>
546
541
  ?test01
547
542
  ) .
@@ -578,7 +573,7 @@ describe EarlReport do
578
573
 
579
574
  ASK WHERE {
580
575
  <http://example/manifest.ttl#testeval00> a earl:TestCriterion, earl:TestCase;
581
- dc:title "subm-test-00";
576
+ #dc:title "subm-test-00";
582
577
  dc:description """Blank subject"""@en;
583
578
  mf:action <http://example/test-00.ttl>;
584
579
  mf:result <http://example/test-00.out>;