yaml-ld 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/AUTHORS +1 -0
  3. data/README.md +150 -0
  4. data/UNLICENSE +24 -0
  5. data/VERSION +1 -0
  6. data/lib/yaml_ld/api.rb +295 -0
  7. data/lib/yaml_ld/format.rb +56 -0
  8. data/lib/yaml_ld/reader.rb +40 -0
  9. data/lib/yaml_ld/version.rb +20 -0
  10. data/lib/yaml_ld/writer.rb +42 -0
  11. data/lib/yaml_ld.rb +37 -0
  12. data/spec/api_spec.rb +92 -0
  13. data/spec/compact_spec.rb +358 -0
  14. data/spec/expand_spec.rb +565 -0
  15. data/spec/flatten_spec.rb +225 -0
  16. data/spec/format_spec.rb +54 -0
  17. data/spec/frame_spec.rb +662 -0
  18. data/spec/from_rdf_spec.rb +730 -0
  19. data/spec/matchers.rb +22 -0
  20. data/spec/reader_spec.rb +138 -0
  21. data/spec/spec_helper.rb +265 -0
  22. data/spec/support/extensions.rb +44 -0
  23. data/spec/test-files/test-1-compacted.jsonld +10 -0
  24. data/spec/test-files/test-1-context.jsonld +7 -0
  25. data/spec/test-files/test-1-expanded.jsonld +5 -0
  26. data/spec/test-files/test-1-input.yamlld +8 -0
  27. data/spec/test-files/test-1-rdf.ttl +8 -0
  28. data/spec/test-files/test-2-compacted.jsonld +20 -0
  29. data/spec/test-files/test-2-context.jsonld +7 -0
  30. data/spec/test-files/test-2-expanded.jsonld +16 -0
  31. data/spec/test-files/test-2-input.yamlld +16 -0
  32. data/spec/test-files/test-2-rdf.ttl +14 -0
  33. data/spec/test-files/test-3-compacted.jsonld +11 -0
  34. data/spec/test-files/test-3-context.jsonld +8 -0
  35. data/spec/test-files/test-3-expanded.jsonld +10 -0
  36. data/spec/test-files/test-3-input.yamlld +13 -0
  37. data/spec/test-files/test-3-rdf.ttl +8 -0
  38. data/spec/test-files/test-4-compacted.jsonld +10 -0
  39. data/spec/test-files/test-4-context.jsonld +7 -0
  40. data/spec/test-files/test-4-expanded.jsonld +6 -0
  41. data/spec/test-files/test-4-input.yamlld +9 -0
  42. data/spec/test-files/test-4-rdf.ttl +5 -0
  43. data/spec/test-files/test-5-compacted.jsonld +13 -0
  44. data/spec/test-files/test-5-context.jsonld +7 -0
  45. data/spec/test-files/test-5-expanded.jsonld +9 -0
  46. data/spec/test-files/test-5-input.yamlld +10 -0
  47. data/spec/test-files/test-5-rdf.ttl +7 -0
  48. data/spec/test-files/test-6-compacted.jsonld +10 -0
  49. data/spec/test-files/test-6-context.jsonld +7 -0
  50. data/spec/test-files/test-6-expanded.jsonld +10 -0
  51. data/spec/test-files/test-6-input.yamlld +12 -0
  52. data/spec/test-files/test-6-rdf.ttl +6 -0
  53. data/spec/test-files/test-7-compacted.jsonld +23 -0
  54. data/spec/test-files/test-7-context.jsonld +4 -0
  55. data/spec/test-files/test-7-expanded.jsonld +20 -0
  56. data/spec/test-files/test-7-input.yamlld +16 -0
  57. data/spec/test-files/test-7-rdf.ttl +14 -0
  58. data/spec/test-files/test-8-compacted.jsonld +34 -0
  59. data/spec/test-files/test-8-context.jsonld +11 -0
  60. data/spec/test-files/test-8-expanded.jsonld +24 -0
  61. data/spec/test-files/test-8-frame.jsonld +18 -0
  62. data/spec/test-files/test-8-framed.jsonld +25 -0
  63. data/spec/test-files/test-8-input.yamlld +24 -0
  64. data/spec/test-files/test-8-rdf.ttl +15 -0
  65. data/spec/test-files/test-9-compacted.jsonld +20 -0
  66. data/spec/test-files/test-9-context.jsonld +13 -0
  67. data/spec/test-files/test-9-expanded.jsonld +14 -0
  68. data/spec/test-files/test-9-input.yamlld +16 -0
  69. data/spec/to_rdf_spec.rb +556 -0
  70. data/spec/writer_spec.rb +441 -0
  71. metadata +350 -0
@@ -0,0 +1,662 @@
1
+ # coding: utf-8
2
+ require_relative 'spec_helper'
3
+
4
+ describe YAML_LD::API do
5
+ let(:logger) {RDF::Spec.logger}
6
+
7
+ describe ".frame" do
8
+ {
9
+ "exact @type match": {
10
+ frame: %(
11
+ "@context":
12
+ ex: http://example.org/
13
+ "@type": ex:Type1
14
+ ),
15
+ input: %(
16
+ - "@context":
17
+ ex: http://example.org/
18
+ "@id": ex:Sub1
19
+ "@type": ex:Type1
20
+ - "@context":
21
+ ex: http://example.org/
22
+ "@id": ex:Sub2
23
+ "@type": ex:Type2
24
+ ),
25
+ output: %(---
26
+ "@context":
27
+ ex: http://example.org/
28
+ "@graph":
29
+ - "@id": ex:Sub1
30
+ "@type": ex:Type1
31
+ )
32
+ },
33
+ "wildcard @type match": {
34
+ frame: %(
35
+ "@context":
36
+ ex: http://example.org/
37
+ "@type": {}
38
+ ),
39
+ input: %(
40
+ - "@context":
41
+ ex: http://example.org/
42
+ "@id": ex:Sub1
43
+ "@type": ex:Type1
44
+ - "@context":
45
+ ex: http://example.org/
46
+ "@id": ex:Sub2
47
+ "@type": ex:Type2
48
+ ),
49
+ output: %(
50
+ "@context":
51
+ ex: http://example.org/
52
+ "@graph":
53
+ - "@id": ex:Sub1
54
+ "@type": ex:Type1
55
+ - "@id": ex:Sub2
56
+ "@type": ex:Type2
57
+ )
58
+ },
59
+ "match none @type match": {
60
+ frame: %(
61
+ "@context":
62
+ ex: http://example.org/
63
+ "@type": []
64
+ ),
65
+ input: %(
66
+ - "@context":
67
+ ex: http://example.org/
68
+ "@id": ex:Sub1
69
+ "@type": ex:Type1
70
+ ex:p: Foo
71
+ - "@context":
72
+ ex: http://example.org/
73
+ "@id": ex:Sub2
74
+ ex:p: Bar
75
+ ),
76
+ output: %(
77
+ "@context":
78
+ ex: http://example.org/
79
+ "@graph":
80
+ - "@id": ex:Sub2
81
+ ex:p: Bar
82
+ )
83
+ },
84
+ "multiple matches on @type": {
85
+ frame: %(
86
+ "@context":
87
+ ex: http://example.org/
88
+ "@type": ex:Type1
89
+ ),
90
+ input: %(
91
+ - "@context":
92
+ ex: http://example.org/
93
+ "@id": ex:Sub1
94
+ "@type": ex:Type1
95
+ - "@context":
96
+ ex: http://example.org/
97
+ "@id": ex:Sub2
98
+ "@type": ex:Type1
99
+ - "@context":
100
+ ex: http://example.org/
101
+ "@id": ex:Sub3
102
+ "@type":
103
+ - ex:Type1
104
+ - ex:Type2
105
+ ),
106
+ output: %(
107
+ "@context":
108
+ ex: http://example.org/
109
+ "@graph":
110
+ - "@id": ex:Sub1
111
+ "@type": ex:Type1
112
+ - "@id": ex:Sub2
113
+ "@type": ex:Type1
114
+ - "@id": ex:Sub3
115
+ "@type":
116
+ - ex:Type1
117
+ - ex:Type2
118
+ )
119
+ },
120
+ "single @id match": {
121
+ frame: %(
122
+ "@context":
123
+ ex: http://example.org/
124
+ "@id": ex:Sub1
125
+ ),
126
+ input: %(
127
+ - "@context":
128
+ ex: http://example.org/
129
+ "@id": ex:Sub1
130
+ "@type": ex:Type1
131
+ - "@context":
132
+ ex: http://example.org/
133
+ "@id": ex:Sub2
134
+ "@type": ex:Type2
135
+ ),
136
+ output: %(
137
+ "@context":
138
+ ex: http://example.org/
139
+ "@graph":
140
+ - "@id": ex:Sub1
141
+ "@type": ex:Type1
142
+ )
143
+ },
144
+ "multiple @id match": {
145
+ frame: %(
146
+ "@context":
147
+ ex: http://example.org/
148
+ "@id":
149
+ - ex:Sub1
150
+ - ex:Sub2
151
+ ),
152
+ input: %(
153
+ - "@context":
154
+ ex: http://example.org/
155
+ "@id": ex:Sub1
156
+ "@type": ex:Type1
157
+ - "@context":
158
+ ex: http://example.org/
159
+ "@id": ex:Sub2
160
+ "@type": ex:Type2
161
+ - "@context":
162
+ ex: http://example.org/
163
+ "@id": ex:Sub3
164
+ "@type": ex:Type3
165
+ ),
166
+ output: %(
167
+ "@context":
168
+ ex: http://example.org/
169
+ "@graph":
170
+ - "@id": ex:Sub1
171
+ "@type": ex:Type1
172
+ - "@id": ex:Sub2
173
+ "@type": ex:Type2
174
+ )
175
+ },
176
+ "wildcard and match none": {
177
+ frame: %(
178
+ "@context":
179
+ ex: http://example.org/
180
+ ex:p: []
181
+ ex:q: {}
182
+ ),
183
+ input: %(
184
+ - "@context":
185
+ ex: http://example.org/
186
+ "@id": ex:Sub1
187
+ ex:q: bar
188
+ - "@context":
189
+ ex: http://example.org/
190
+ "@id": ex:Sub2
191
+ ex:p: foo
192
+ ex:q: bar
193
+ ),
194
+ output: %(
195
+ "@context":
196
+ ex: http://example.org/
197
+ "@graph":
198
+ - "@id": ex:Sub1
199
+ ex:p:
200
+ ex:q: bar
201
+ )
202
+ },
203
+ "match on any property if @requireAll is false": {
204
+ frame: %(
205
+ "@context":
206
+ ex: http://example.org/
207
+ "@requireAll": false
208
+ ex:p: {}
209
+ ex:q: {}
210
+ ),
211
+ input: %(
212
+ - "@context":
213
+ ex: http://example.org/
214
+ "@id": ex:Sub1
215
+ ex:p: foo
216
+ - "@context":
217
+ ex: http://example.org/
218
+ "@id": ex:Sub2
219
+ ex:q: bar
220
+ ),
221
+ output: %(
222
+ "@context":
223
+ ex: http://example.org/
224
+ "@graph":
225
+ - "@id": ex:Sub1
226
+ ex:p: foo
227
+ ex:q:
228
+ - "@id": ex:Sub2
229
+ ex:p:
230
+ ex:q: bar
231
+ )
232
+ },
233
+ "match on defeaults if @requireAll is true and at least one property matches": {
234
+ frame: %(
235
+ "@context":
236
+ ex: http://example.org/
237
+ "@requireAll": true
238
+ ex:p:
239
+ "@default": Foo
240
+ ex:q:
241
+ "@default": Bar
242
+ ),
243
+ input: %(
244
+ - "@context":
245
+ ex: http://example.org/
246
+ "@id": ex:Sub1
247
+ ex:p: foo
248
+ - "@context":
249
+ ex: http://example.org/
250
+ "@id": ex:Sub2
251
+ ex:q: bar
252
+ - "@context":
253
+ ex: http://example.org/
254
+ "@id": ex:Sub3
255
+ ex:p: foo
256
+ ex:q: bar
257
+ - "@context":
258
+ ex: http://example.org/
259
+ "@id": ex:Sub4
260
+ ex:r: baz
261
+ ),
262
+ output: %(
263
+ "@context":
264
+ ex: http://example.org/
265
+ "@graph":
266
+ - "@id": ex:Sub1
267
+ ex:p: foo
268
+ ex:q: Bar
269
+ - "@id": ex:Sub2
270
+ ex:p: Foo
271
+ ex:q: bar
272
+ - "@id": ex:Sub3
273
+ ex:p: foo
274
+ ex:q: bar
275
+ )
276
+ },
277
+ "issue #40 - example": {
278
+ frame: %(
279
+ "@context":
280
+ "@version": 1.1
281
+ "@vocab": https://schema.org/
282
+ "@type": Person
283
+ "@requireAll": true
284
+ givenName: John
285
+ familyName: Doe
286
+ ),
287
+ input: %(
288
+ "@context":
289
+ "@version": 1.1
290
+ "@vocab": https://schema.org/
291
+ "@graph":
292
+ - "@id": '1'
293
+ "@type": Person
294
+ name: John Doe
295
+ givenName: John
296
+ familyName: Doe
297
+ - "@id": '2'
298
+ "@type": Person
299
+ name: Jane Doe
300
+ givenName: Jane
301
+ ),
302
+ output: %(
303
+ "@context":
304
+ "@version": 1.1
305
+ "@vocab": https://schema.org/
306
+ "@id": '1'
307
+ "@type": Person
308
+ familyName: Doe
309
+ givenName: John
310
+ name: John Doe
311
+ ),
312
+ processingMode: 'json-ld-1.1'
313
+ },
314
+ "mixed content": {
315
+ frame: %(
316
+ "@context":
317
+ ex: http://example.org/
318
+ ex:mixed:
319
+ "@embed": "@never"
320
+ ),
321
+ input: %(
322
+ "@context":
323
+ ex: http://example.org/
324
+ "@id": ex:Sub1
325
+ ex:mixed:
326
+ - "@id": ex:Sub2
327
+ - literal1
328
+ ),
329
+ output: %(
330
+ "@context":
331
+ ex: http://example.org/
332
+ "@graph":
333
+ - "@id": ex:Sub1
334
+ ex:mixed:
335
+ - "@id": ex:Sub2
336
+ - literal1
337
+ )
338
+ },
339
+ "framed list": {
340
+ frame: %(
341
+ "@context":
342
+ ex: http://example.org/
343
+ list:
344
+ "@id": ex:list
345
+ "@container": "@list"
346
+ list:
347
+ - "@type": ex:Element
348
+ ),
349
+ input: %(
350
+ "@context":
351
+ ex: http://example.org/
352
+ list:
353
+ "@id": ex:list
354
+ "@container": "@list"
355
+ "@id": ex:Sub1
356
+ "@type": ex:Type1
357
+ list:
358
+ - "@id": ex:Sub2
359
+ "@type": ex:Element
360
+ - literal1
361
+ ),
362
+ output: %(
363
+ "@context":
364
+ ex: http://example.org/
365
+ list:
366
+ "@id": ex:list
367
+ "@container": "@list"
368
+ "@graph":
369
+ - "@id": ex:Sub1
370
+ "@type": ex:Type1
371
+ list:
372
+ - "@id": ex:Sub2
373
+ "@type": ex:Element
374
+ - literal1
375
+ )
376
+ },
377
+ "presentation example": {
378
+ frame: %(
379
+ "@context":
380
+ primaryTopic:
381
+ "@id": http://xmlns.com/foaf/0.1/primaryTopic
382
+ "@type": "@id"
383
+ sameAs:
384
+ "@id": http://www.w3.org/2002/07/owl#sameAs
385
+ "@type": "@id"
386
+ primaryTopic:
387
+ "@type": http://dbpedia.org/class/yago/Buzzwords
388
+ sameAs: {}
389
+ ),
390
+ input: %(
391
+ - "@id": http://en.wikipedia.org/wiki/Linked_Data
392
+ http://xmlns.com/foaf/0.1/primaryTopic:
393
+ "@id": http://dbpedia.org/resource/Linked_Data
394
+ - "@id": http://www4.wiwiss.fu-berlin.de/flickrwrappr/photos/Linked_Data
395
+ http://www.w3.org/2002/07/owl#sameAs:
396
+ "@id": http://dbpedia.org/resource/Linked_Data
397
+ - "@id": http://dbpedia.org/resource/Linked_Data
398
+ "@type": http://dbpedia.org/class/yago/Buzzwords
399
+ http://www.w3.org/2002/07/owl#sameAs:
400
+ "@id": http://rdf.freebase.com/ns/m/02r2kb1
401
+ - "@id": http://mpii.de/yago/resource/Linked_Data
402
+ http://www.w3.org/2002/07/owl#sameAs:
403
+ "@id": http://dbpedia.org/resource/Linked_Data
404
+ ),
405
+ output: %(
406
+ "@context":
407
+ primaryTopic:
408
+ "@id": http://xmlns.com/foaf/0.1/primaryTopic
409
+ "@type": "@id"
410
+ sameAs:
411
+ "@id": http://www.w3.org/2002/07/owl#sameAs
412
+ "@type": "@id"
413
+ "@graph":
414
+ - "@id": http://en.wikipedia.org/wiki/Linked_Data
415
+ primaryTopic:
416
+ "@id": http://dbpedia.org/resource/Linked_Data
417
+ "@type": http://dbpedia.org/class/yago/Buzzwords
418
+ sameAs: http://rdf.freebase.com/ns/m/02r2kb1
419
+ )
420
+ },
421
+ "library": {
422
+ frame: %(
423
+ "@context":
424
+ dc: http://purl.org/dc/elements/1.1/
425
+ ex: http://example.org/vocab#
426
+ xsd: http://www.w3.org/2001/XMLSchema#
427
+ ex:contains:
428
+ "@type": "@id"
429
+ "@type": ex:Library
430
+ ex:contains: {}
431
+ ),
432
+ input: %(
433
+ "@context":
434
+ dc: http://purl.org/dc/elements/1.1/
435
+ ex: http://example.org/vocab#
436
+ xsd: http://www.w3.org/2001/XMLSchema#
437
+ "@id": http://example.org/library
438
+ "@type": ex:Library
439
+ dc:name: Library
440
+ ex:contains:
441
+ "@id": http://example.org/library/the-republic
442
+ "@type": ex:Book
443
+ dc:creator: Plato
444
+ dc:title: The Republic
445
+ ex:contains:
446
+ "@id": http://example.org/library/the-republic#introduction
447
+ "@type": ex:Chapter
448
+ dc:description: An introductory chapter on The Republic.
449
+ dc:title: The Introduction
450
+ ),
451
+ output: %(
452
+ "@context":
453
+ dc: http://purl.org/dc/elements/1.1/
454
+ ex: http://example.org/vocab#
455
+ xsd: http://www.w3.org/2001/XMLSchema#
456
+ ex:contains:
457
+ "@type": "@id"
458
+ "@graph":
459
+ - "@id": http://example.org/library
460
+ "@type": ex:Library
461
+ dc:name: Library
462
+ ex:contains:
463
+ "@id": http://example.org/library/the-republic
464
+ "@type": ex:Book
465
+ dc:creator: Plato
466
+ dc:title: The Republic
467
+ ex:contains:
468
+ "@id": http://example.org/library/the-republic#introduction
469
+ "@type": ex:Chapter
470
+ dc:description: An introductory chapter on The Republic.
471
+ dc:title: The Introduction
472
+ )
473
+ }
474
+ }.each do |title, params|
475
+ it title do
476
+ do_frame(params)
477
+ end
478
+ end
479
+
480
+ describe "@reverse" do
481
+ {
482
+ "embed matched frames with @reverse": {
483
+ frame: %(
484
+ "@context":
485
+ ex: http://example.org/
486
+ "@type": ex:Type1
487
+ "@reverse":
488
+ ex:includes: {}
489
+ ),
490
+ input: %(
491
+ - "@context":
492
+ ex: http://example.org/
493
+ "@id": ex:Sub1
494
+ "@type": ex:Type1
495
+ - "@context":
496
+ ex: http://example.org/
497
+ "@id": ex:Sub2
498
+ "@type": ex:Type2
499
+ ex:includes:
500
+ "@id": ex:Sub1
501
+ ),
502
+ output: %(
503
+ "@context":
504
+ ex: http://example.org/
505
+ "@graph":
506
+ - "@id": ex:Sub1
507
+ "@type": ex:Type1
508
+ "@reverse":
509
+ ex:includes:
510
+ "@id": ex:Sub2
511
+ "@type": ex:Type2
512
+ ex:includes:
513
+ "@id": ex:Sub1
514
+ )
515
+ },
516
+ "embed matched frames with reversed property": {
517
+ frame: %(
518
+ "@context":
519
+ ex: http://example.org/
520
+ excludes:
521
+ "@reverse": ex:includes
522
+ "@type": ex:Type1
523
+ excludes: {}
524
+ ),
525
+ input: %(
526
+ - "@context":
527
+ ex: http://example.org/
528
+ "@id": ex:Sub1
529
+ "@type": ex:Type1
530
+ - "@context":
531
+ ex: http://example.org/
532
+ "@id": ex:Sub2
533
+ "@type": ex:Type2
534
+ ex:includes:
535
+ "@id": ex:Sub1
536
+ ),
537
+ output: %(
538
+ "@context":
539
+ ex: http://example.org/
540
+ excludes:
541
+ "@reverse": ex:includes
542
+ "@graph":
543
+ - "@id": ex:Sub1
544
+ "@type": ex:Type1
545
+ excludes:
546
+ "@id": ex:Sub2
547
+ "@type": ex:Type2
548
+ ex:includes:
549
+ "@id": ex:Sub1
550
+ )
551
+ },
552
+ }.each do |title, params|
553
+ it title do
554
+ do_frame(params)
555
+ end
556
+ end
557
+ end
558
+
559
+ context "omitGraph option" do
560
+ {
561
+ "Defaults to false in 1.0": {
562
+ input: %(
563
+ - http://example.org/prop:
564
+ - "@value": value
565
+ http://example.org/foo:
566
+ - "@value": bar
567
+ ),
568
+ frame: %(
569
+ "@context":
570
+ "@vocab": http://example.org/
571
+ ),
572
+ output: %(
573
+ "@context":
574
+ "@vocab": http://example.org/
575
+ "@graph":
576
+ - foo: bar
577
+ prop: value
578
+ ),
579
+ processingMode: "json-ld-1.0"
580
+ },
581
+ "Set with option in 1.0": {
582
+ input: %(
583
+ - http://example.org/prop:
584
+ - "@value": value
585
+ http://example.org/foo:
586
+ - "@value": bar
587
+ ),
588
+ frame: %(
589
+ "@context":
590
+ "@vocab": http://example.org/
591
+ ),
592
+ output: %(
593
+ "@context":
594
+ "@vocab": http://example.org/
595
+ foo: bar
596
+ prop: value
597
+ ),
598
+ processingMode: "json-ld-1.0",
599
+ omitGraph: true
600
+ },
601
+ "Defaults to true in 1.1": {
602
+ input: %(
603
+ - http://example.org/prop:
604
+ - "@value": value
605
+ http://example.org/foo:
606
+ - "@value": bar
607
+ ),
608
+ frame: %(
609
+ "@context":
610
+ "@vocab": http://example.org/
611
+ ),
612
+ output: %(
613
+ "@context":
614
+ "@vocab": http://example.org/
615
+ foo: bar
616
+ prop: value
617
+ ),
618
+ processingMode: "json-ld-1.1"
619
+ },
620
+ "Set with option in 1.1": {
621
+ input: %(
622
+ - http://example.org/prop:
623
+ - "@value": value
624
+ http://example.org/foo:
625
+ - "@value": bar
626
+ ),
627
+ frame: %(
628
+ "@context":
629
+ "@vocab": http://example.org/
630
+ ),
631
+ output: %(
632
+ "@context":
633
+ "@vocab": http://example.org/
634
+ "@graph":
635
+ - foo: bar
636
+ prop: value
637
+ ),
638
+ processingMode: "json-ld-1.1",
639
+ omitGraph: false
640
+ },
641
+ }.each do |title, params|
642
+ it(title) {do_frame(params.merge(pruneBlankNodeIdentifiers: true))}
643
+ end
644
+ end
645
+ end
646
+
647
+ def do_frame(params)
648
+ begin
649
+ input, frame, output = params[:input], params[:frame], params[:output]
650
+ params = {processingMode: 'json-ld-1.0'}.merge(params)
651
+ input = StringIO.new(input) if input.is_a?(String)
652
+ frame = StringIO.new(frame) if frame.is_a?(String)
653
+ yld = nil
654
+ if params[:write]
655
+ expect{yld = YAML_LD::API.frame(input, frame, logger: logger, **params)}.to write(params[:write]).to(:error)
656
+ else
657
+ expect{yld = YAML_LD::API.frame(input, frame, logger: logger, **params)}.not_to write.to(:error)
658
+ end
659
+ expect(yld).to produce_yamlld(output, logger)
660
+ end
661
+ end
662
+ end