metanorma-standoc 2.2.6 → 2.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/lib/metanorma/standoc/base.rb +3 -5
  3. data/lib/metanorma/standoc/biblio.rng +5 -0
  4. data/lib/metanorma/standoc/cleanup.rb +17 -17
  5. data/lib/metanorma/standoc/cleanup_amend.rb +2 -2
  6. data/lib/metanorma/standoc/cleanup_biblio.rb +2 -1
  7. data/lib/metanorma/standoc/cleanup_maths.rb +12 -4
  8. data/lib/metanorma/standoc/cleanup_section.rb +19 -9
  9. data/lib/metanorma/standoc/cleanup_symbols.rb +14 -7
  10. data/lib/metanorma/standoc/cleanup_text.rb +10 -4
  11. data/lib/metanorma/standoc/cleanup_toc.rb +1 -2
  12. data/lib/metanorma/standoc/cleanup_xref.rb +55 -14
  13. data/lib/metanorma/standoc/inline.rb +27 -12
  14. data/lib/metanorma/standoc/isodoc.rng +46 -12
  15. data/lib/metanorma/standoc/ref_utility.rb +1 -0
  16. data/lib/metanorma/standoc/render.rb +10 -1
  17. data/lib/metanorma/standoc/section.rb +10 -3
  18. data/lib/metanorma/standoc/utils.rb +6 -1
  19. data/lib/metanorma/standoc/validate.rb +1 -1
  20. data/lib/metanorma/standoc/version.rb +1 -1
  21. data/metanorma-standoc.gemspec +5 -2
  22. metadata +4 -128
  23. data/.github/workflows/automerge.yml +0 -31
  24. data/.github/workflows/rake.yml +0 -15
  25. data/.github/workflows/release.yml +0 -24
  26. data/Rakefile +0 -8
  27. data/bin/rspec +0 -18
  28. data/spec/assets/a1.adoc +0 -8
  29. data/spec/assets/a2.adoc +0 -10
  30. data/spec/assets/a3.adoc +0 -9
  31. data/spec/assets/a3a.adoc +0 -7
  32. data/spec/assets/a4.adoc +0 -4
  33. data/spec/assets/boilerplate.xml +0 -4
  34. data/spec/assets/codes.yml +0 -695
  35. data/spec/assets/correct.png +0 -0
  36. data/spec/assets/corrupt.png +0 -0
  37. data/spec/assets/header.html +0 -7
  38. data/spec/assets/html-override.css +0 -1
  39. data/spec/assets/html.scss +0 -13
  40. data/spec/assets/htmlcover.html +0 -4
  41. data/spec/assets/htmlintro.html +0 -5
  42. data/spec/assets/i18n.yaml +0 -17
  43. data/spec/assets/iso.adoc +0 -10
  44. data/spec/assets/iso.headless.html +0 -33
  45. data/spec/assets/iso.xml +0 -8
  46. data/spec/assets/iso123.rxl +0 -107
  47. data/spec/assets/rice_image1.png +0 -0
  48. data/spec/assets/scripts.html +0 -3
  49. data/spec/assets/std.css +0 -2
  50. data/spec/assets/word-override.css +0 -1
  51. data/spec/assets/word.scss +0 -13
  52. data/spec/assets/wordcover.html +0 -3
  53. data/spec/assets/wordintro.html +0 -4
  54. data/spec/assets/xref_error.adoc +0 -8
  55. data/spec/examples/103_01_02.html +0 -247
  56. data/spec/examples/codes_table.html +0 -3174
  57. data/spec/examples/datamodel/address_class_profile.adoc +0 -5
  58. data/spec/examples/datamodel/address_class_profile.presentation.xml +0 -14
  59. data/spec/examples/datamodel/address_component_profile.adoc +0 -5
  60. data/spec/examples/datamodel/blank_definition_profile.adoc +0 -5
  61. data/spec/examples/datamodel/common_models_diagram.adoc +0 -5
  62. data/spec/examples/datamodel/models/models/AddressClassProfile.yml +0 -90
  63. data/spec/examples/datamodel/models/models/AddressComponentProfile.yml +0 -63
  64. data/spec/examples/datamodel/models/models/AddressComponentSpecification.yml +0 -15
  65. data/spec/examples/datamodel/models/models/AddressProfile.yml +0 -36
  66. data/spec/examples/datamodel/models/models/AttributeProfile.yml +0 -32
  67. data/spec/examples/datamodel/models/models/InterchangeAddressClassProfile.yml +0 -79
  68. data/spec/examples/datamodel/models/models/Localization copy.yml +0 -23
  69. data/spec/examples/datamodel/models/models/Localization.yml +0 -23
  70. data/spec/examples/datamodel/models/models/ProfileCompliantAddress.yml +0 -36
  71. data/spec/examples/datamodel/models/models/ProfileCompliantAddressComponent.yml +0 -15
  72. data/spec/examples/datamodel/models/models/Signature.yml +0 -20
  73. data/spec/examples/datamodel/models/models/SignatureBlankDefinition.yml +0 -20
  74. data/spec/examples/datamodel/models/models/TextDirectionCode copy.yml +0 -16
  75. data/spec/examples/datamodel/models/models/TextDirectionCode.yml +0 -16
  76. data/spec/examples/datamodel/models/models/Validity.yml +0 -14
  77. data/spec/examples/datamodel/models/models/iso19160-1/Address.yml +0 -22
  78. data/spec/examples/datamodel/models/models/iso19160-1/AddressComponent.yml +0 -2
  79. data/spec/examples/datamodel/models/style.uml.inc +0 -37
  80. data/spec/examples/datamodel/models/views/CommonModels.yml +0 -9
  81. data/spec/examples/datamodel/models/views/TopDown.yml +0 -62
  82. data/spec/examples/datamodel/top_down_diagram.adoc +0 -5
  83. data/spec/examples/english.yaml +0 -69
  84. data/spec/examples/iso_123_.xml +0 -46
  85. data/spec/examples/iso_123_all_parts.xml +0 -46
  86. data/spec/examples/iso_123_no_year_note.xml +0 -47
  87. data/spec/examples/iso_124_.xml +0 -42
  88. data/spec/examples/iso_216_.xml +0 -48
  89. data/spec/examples/iso_iec_12382_.xml +0 -49
  90. data/spec/examples/rice.adoc +0 -715
  91. data/spec/examples/rice.preview.html +0 -1877
  92. data/spec/examples/rice.sh +0 -4
  93. data/spec/examples/rice_images/rice_image1.png +0 -0
  94. data/spec/examples/rice_images/rice_image2.png +0 -0
  95. data/spec/examples/rice_images/rice_image3_1.png +0 -0
  96. data/spec/examples/rice_images/rice_image3_2.png +0 -0
  97. data/spec/examples/rice_images/rice_image3_3.png +0 -0
  98. data/spec/fixtures/action_schemaexpg1.svg +0 -122
  99. data/spec/fixtures/datamodel_description_sections_tree.xml +0 -327
  100. data/spec/fixtures/diagram_definitions.lutaml +0 -22
  101. data/spec/fixtures/macros_datamodel/address_class_profile.xml +0 -149
  102. data/spec/fixtures/macros_datamodel/address_component_profile.xml +0 -71
  103. data/spec/fixtures/macros_datamodel/blank_definition_profile.xml +0 -51
  104. data/spec/fixtures/macros_datamodel/common_models_diagram.xml +0 -7
  105. data/spec/fixtures/macros_datamodel/top_down_diagram.xml +0 -7
  106. data/spec/fixtures/test.exp +0 -121
  107. data/spec/fixtures/test.xmi +0 -9250
  108. data/spec/metanorma/base_spec.rb +0 -1125
  109. data/spec/metanorma/biblio_spec.rb +0 -1012
  110. data/spec/metanorma/blank_spec.rb +0 -37
  111. data/spec/metanorma/blocks_spec.rb +0 -1784
  112. data/spec/metanorma/cleanup_blocks_spec.rb +0 -1099
  113. data/spec/metanorma/cleanup_sections_spec.rb +0 -1849
  114. data/spec/metanorma/cleanup_spec.rb +0 -1931
  115. data/spec/metanorma/cleanup_terms_spec.rb +0 -1543
  116. data/spec/metanorma/datamodel/attributes_table_preprocessor_spec.rb +0 -111
  117. data/spec/metanorma/datamodel/diagram_preprocessor_spec.rb +0 -72
  118. data/spec/metanorma/inline_spec.rb +0 -785
  119. data/spec/metanorma/isobib_cache_spec.rb +0 -742
  120. data/spec/metanorma/lists_spec.rb +0 -232
  121. data/spec/metanorma/macros_concept_spec.rb +0 -1052
  122. data/spec/metanorma/macros_json2text_spec.rb +0 -10
  123. data/spec/metanorma/macros_plantuml_spec.rb +0 -402
  124. data/spec/metanorma/macros_spec.rb +0 -1183
  125. data/spec/metanorma/macros_yaml2text_spec.rb +0 -10
  126. data/spec/metanorma/processor_spec.rb +0 -96
  127. data/spec/metanorma/refs_spec.rb +0 -2807
  128. data/spec/metanorma/reqt_spec.rb +0 -130
  129. data/spec/metanorma/section_spec.rb +0 -1325
  130. data/spec/metanorma/table_spec.rb +0 -474
  131. data/spec/metanorma/validate_spec.rb +0 -886
  132. data/spec/spec_helper.rb +0 -290
  133. data/spec/support/shared_examples/structured_data_2_text_preprocessor.rb +0 -781
  134. data/spec/vcr_cassettes/bsi16341.yml +0 -486
  135. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +0 -611
  136. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +0 -149
  137. data/spec/vcr_cassettes/hide_refs.yml +0 -587
  138. data/spec/vcr_cassettes/isobib_get_123.yml +0 -149
  139. data/spec/vcr_cassettes/isobib_get_123_1.yml +0 -295
  140. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +0 -385
  141. data/spec/vcr_cassettes/isobib_get_123_2.yml +0 -295
  142. data/spec/vcr_cassettes/isobib_get_123_2001.yml +0 -149
  143. data/spec/vcr_cassettes/isobib_get_124.yml +0 -149
  144. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +0 -367
  145. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +0 -560
  146. data/spec/vcr_cassettes/std-link.yml +0 -149
@@ -1,1183 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Metanorma::Standoc do
4
- it "processes the Metanorma::Standoc inline macros" do
5
- input = <<~INPUT
6
- #{ASCIIDOC_BLANK_HDR}
7
- preferred:[term0]
8
- alt:[term1]
9
- admitted:[term1a]
10
- deprecated:[term2]
11
- domain:[term3]
12
- inherit:[<<ref1>>]
13
- autonumber:table[3]
14
- add:[a <<clause>>] del:[B]
15
- identifier:[a http://example.com]
16
- span:category[text]
17
-
18
- [bibliography]
19
- == Bibliography
20
- * [[[ref1,XYZ 123]]] _Title_
21
- INPUT
22
- output = <<~OUTPUT
23
- #{BLANK_HDR}
24
- <preface>
25
- <foreword id='_' obligation='informative'>
26
- <title>Foreword</title>
27
- <preferred><expression><name>term0</name></expression></preferred>
28
- <admitted><expression><name>term1</name></expression></admitted>
29
- <admitted><expression><name>term1a</name></expression></admitted>
30
- <deprecates><expression><name>term2</name></expression></deprecates>
31
- <domain>term3</domain>
32
- <inherit>
33
- <eref type='inline' bibitemid='ref1' citeas='XYZ 123'/>
34
- </inherit>
35
- <autonumber type='table'>3</autonumber>
36
- <add>
37
- a
38
- <xref target='clause'/>
39
- </add>
40
- <del>B</del>
41
- <identifier>a http://example.com</identifier>
42
- <span class='category'>text</span>
43
- </foreword>
44
- </preface>
45
- <sections> </sections>
46
- <bibliography>
47
- <references id='_' obligation='informative' normative="false">
48
- <title>Bibliography</title>
49
- <bibitem id='ref1'>
50
- <formattedref format='application/x-isodoc+xml'>
51
- <em>Title</em>
52
- </formattedref>
53
- <docidentifier>XYZ 123</docidentifier>
54
- <docnumber>123</docnumber>
55
- </bibitem>
56
- </references>
57
- </bibliography>
58
- </standard-document>
59
- OUTPUT
60
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
61
- .to be_equivalent_to xmlpp(output)
62
- end
63
-
64
- it "processes the Metanorma::Standoc index macros" do
65
- input = <<~INPUT
66
- #{ASCIIDOC_BLANK_HDR}
67
- index:also[]
68
- index:see[A]
69
- index:also[B,C~x~]
70
- index:see[D,_E_,F]
71
- index:also[G,H,I,J]
72
- index:see[K,L,M,N,O]
73
- index-range:id2[P]
74
- index-range:id3[((_P_))]
75
- index-range:id3[(((Q, R, S)))]
76
-
77
- Text [[id2]]
78
-
79
- Text [[id3]]
80
- INPUT
81
- output = <<~OUTPUT
82
- #{BLANK_HDR}
83
- <sections>
84
- <p id='_'>
85
- <index-xref also='true'>
86
- <primary>B</primary>
87
- <target>
88
- C
89
- <sub>x</sub>
90
- </target>
91
- </index-xref>
92
- <index-xref also='false'>
93
- <primary>D</primary>
94
- <secondary>
95
- <em>E</em>
96
- </secondary>
97
- <target>F</target>
98
- </index-xref>
99
- <index-xref also='true'>
100
- <primary>G</primary>
101
- <secondary>H</secondary>
102
- <tertiary>I</tertiary>
103
- <target>J</target>
104
- </index-xref>
105
- P
106
- <index to="id2">
107
- <primary>P</primary>
108
- </index>
109
- <em>P</em>
110
- <index to="id3">
111
- <primary>
112
- <em>P</em>
113
- </primary>
114
- </index>
115
- <index to="id3">
116
- <primary>Q</primary>
117
- <secondary>R</secondary>
118
- <tertiary>S</tertiary>
119
- </index>
120
- </p>
121
- <p id='_'>
122
- Text
123
- <bookmark id='id2'/>
124
- </p>
125
- <p id='_'>
126
- Text
127
- <bookmark id='id3'/>
128
- </p>
129
- </sections>
130
- </standard-document>
131
- OUTPUT
132
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
133
- .to be_equivalent_to xmlpp(output)
134
- end
135
-
136
- it "processes the Metanorma::Standoc variant macros" do
137
- input = <<~INPUT
138
- #{ASCIIDOC_BLANK_HDR}
139
- == lang:en[English] lang:fr-Latn[Français]
140
-
141
- this lang:en[English] lang:fr-Latn[Français] section is lang:en[silly] lang:fr[fou]
142
-
143
- INPUT
144
- output = <<~OUTPUT
145
- #{BLANK_HDR}
146
- <sections>
147
- <clause id='_' inline-header='false' obligation='normative'>
148
- <title>
149
- <variant lang='en'>English</variant>
150
- <variant lang='fr' script='Latn'>Français</variant>
151
- </title>
152
- <p id='_'>
153
- this
154
- <variant>
155
- <variant lang='en'>English</variant>
156
- <variant lang='fr' script='Latn'>Français</variant>
157
- </variant>
158
- section is
159
- <variant>
160
- <variant lang='en'>silly</variant>
161
- <variant lang='fr'>fou</variant>
162
- </variant>
163
- </p>
164
- </clause>
165
- </sections>
166
- </standard-document>
167
- OUTPUT
168
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
169
- .to be_equivalent_to xmlpp(output)
170
- end
171
-
172
- it "processes the macro for editorial notes" do
173
- input = <<~INPUT
174
- #{ASCIIDOC_BLANK_HDR}
175
- EDITOR: Note1
176
-
177
- [EDITOR]
178
- ====
179
- Note2
180
- ====
181
-
182
- [EDITOR]
183
- Note3
184
- INPUT
185
- output = <<~OUTPUT
186
- #{BLANK_HDR}
187
- <sections>
188
- <admonition id='_' type='editorial'>
189
- <p id='_'>Note1</p>
190
- </admonition>
191
- <admonition id='_' type='editorial'>
192
- <p id='_'>Note2</p>
193
- </admonition>
194
- <admonition id='_' type='editorial'>
195
- <p id='_'>Note3</p>
196
- </admonition>
197
- </sections>
198
- </standard-document>
199
- OUTPUT
200
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
201
- .to be_equivalent_to xmlpp(output)
202
- end
203
-
204
- it "processes the TODO custom admonition" do
205
- input = <<~INPUT
206
- #{ASCIIDOC_BLANK_HDR}
207
- TODO: Note1
208
-
209
- [TODO]
210
- ====
211
- Note2
212
- ====
213
-
214
- [TODO]
215
- Note3
216
- INPUT
217
- output = <<~OUTPUT
218
- #{BLANK_HDR}
219
- <sections><review reviewer="(Unknown)" id="_" date="#{Date.today}T00:00:00Z">
220
- <p id="_">Note1</p>
221
- </review>
222
- <review reviewer="(Unknown)" id="_" date="#{Date.today}T00:00:00Z">
223
- <p id="_">Note2</p>
224
- </review>
225
- <review reviewer="(Unknown)" id="_" date="#{Date.today}T00:00:00Z">
226
- <p id="_">Note3</p>
227
- </review></sections>
228
- </standard-document>
229
- OUTPUT
230
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
231
- .to be_equivalent_to xmlpp(output)
232
- end
233
-
234
- it "generates pseudocode examples, with formatting and initial indentation" do
235
- input = <<~INPUT
236
- #{ASCIIDOC_BLANK_HDR}
237
-
238
- [pseudocode,subsequence="A",number="3",keep-with-next=true,keep-lines-together=true]
239
- [%unnumbered]
240
- ====
241
- *A* +
242
- [smallcap]#B#
243
-
244
- _C_
245
- ====
246
- INPUT
247
- output = <<~OUTPUT
248
- #{BLANK_HDR}
249
- <sections>
250
- <figure id="_" subsequence='A' class="pseudocode" unnumbered="true" number="3" keep-with-next="true" keep-lines-together="true">
251
- <p id="_">  <strong>A</strong><br/>
252
-         <smallcap>B</smallcap></p>
253
- <p id="_">  <em>C</em></p></figure>
254
- </sections>
255
- </standard-document>
256
- OUTPUT
257
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
258
- .to be_equivalent_to xmlpp(output)
259
- end
260
-
261
- it "supplies line breaks in pseudocode" do
262
- input = <<~INPUT
263
- #{ASCIIDOC_BLANK_HDR}
264
-
265
- [pseudocode]
266
- ====
267
- A
268
- B
269
-
270
- D
271
- E
272
- ====
273
- INPUT
274
- output = <<~OUTPUT
275
- #{BLANK_HDR}
276
- <sections>
277
- <figure id='_' class='pseudocode'>
278
- <p id='_'>
279
- A
280
- <br/>
281
- B
282
- </p>
283
- <p id='_'>
284
- D
285
- <br/>
286
- E
287
- </p>
288
- </figure>
289
- </sections>
290
- </standard-document>
291
- OUTPUT
292
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
293
- .to be_equivalent_to xmlpp(output)
294
- end
295
-
296
- it "skips embedded blocks when supplying line breaks in pseudocode" do
297
- input = <<~INPUT
298
- #{ASCIIDOC_BLANK_HDR}
299
-
300
- [pseudocode]
301
- ====
302
- [stem]
303
- ++++
304
- bar X' = (1)/(v) sum_(i = 1)^(v) t_(i)
305
- ++++
306
- ====
307
- INPUT
308
- output = <<~OUTPUT
309
- #{BLANK_HDR}
310
- <sections>
311
- <figure id='_' class='pseudocode'>
312
- <formula id='_'>
313
- <stem type='MathML'>
314
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
315
- <mover accent="true">
316
- <mrow>
317
- <mi>X</mi>
318
- </mrow>
319
- <mo>¯</mo>
320
- </mover>
321
- <mo>′</mo>
322
- <mo>=</mo>
323
- <mfrac>
324
- <mrow>
325
- <mn>1</mn>
326
- </mrow>
327
- <mrow>
328
- <mi>v</mi>
329
- </mrow>
330
- </mfrac>
331
- <munderover>
332
- <mrow>
333
- <mo>∑</mo>
334
- </mrow>
335
- <mrow>
336
- <mrow>
337
- <mi>i</mi>
338
- <mo>=</mo>
339
- <mn>1</mn>
340
- </mrow>
341
- </mrow>
342
- <mrow>
343
- <mi>v</mi>
344
- </mrow>
345
- </munderover>
346
- <msub>
347
- <mrow>
348
- <mi>t</mi>
349
- </mrow>
350
- <mrow>
351
- <mi>i</mi>
352
- </mrow>
353
- </msub>
354
- </math>
355
- </stem>
356
- </formula>
357
- </figure>
358
- </sections>
359
- </standard-document>
360
- OUTPUT
361
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
362
- .to be_equivalent_to xmlpp(output)
363
- end
364
-
365
- it "processes the Ruby markups" do
366
- input = <<~INPUT
367
- #{ASCIIDOC_BLANK_HDR}
368
-
369
- ruby:楽聖少女[がくせいしょうじょ]
370
- INPUT
371
- output = <<~OUTPUT
372
- #{BLANK_HDR}
373
- <sections>
374
- <p id="_">
375
- <ruby>楽聖少女<rp>(</rp><rt>がくせいしょうじょ</rt><rp>)</rp></ruby>
376
- </p>
377
- </sections>
378
- </standard-document>
379
- OUTPUT
380
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
381
- .to be_equivalent_to xmlpp(output)
382
- end
383
-
384
- it "processes the footnoteblock macro" do
385
- input = <<~INPUT
386
- #{ASCIIDOC_BLANK_HDR}
387
-
388
- footnoteblock:[id1]
389
-
390
- [[id1]]
391
- [NOTE]
392
- --
393
- |===
394
- |a |b
395
-
396
- |c |d
397
- |===
398
-
399
- * A
400
- * B
401
- * C
402
- --
403
- INPUT
404
- output = <<~OUTPUT
405
- #{BLANK_HDR}
406
- <sections>
407
- <p id="_">
408
- <fn reference='1'>
409
- <table id='_'>
410
- <thead>
411
- <tr>
412
- <th valign='top' align='left'>a</th>
413
- <th valign='top' align='left'>b</th>
414
- </tr>
415
- </thead>
416
- <tbody>
417
- <tr>
418
- <td valign='top' align='left'>c</td>
419
- <td valign='top' align='left'>d</td>
420
- </tr>
421
- </tbody>
422
- </table>
423
- <ul id='_'>
424
- <li>
425
- <p id='_'>A</p>
426
- </li>
427
- <li>
428
- <p id='_'>B</p>
429
- </li>
430
- <li>
431
- <p id='_'>C</p>
432
- </li>
433
- </ul>
434
- </fn>
435
- </p>
436
- </sections>
437
- </standard-document>
438
- OUTPUT
439
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
440
- .to be_equivalent_to xmlpp(output)
441
- end
442
-
443
- it "processes the footnoteblock macro with failed reference" do
444
- input = <<~INPUT
445
- #{ASCIIDOC_BLANK_HDR}
446
-
447
- footnoteblock:[id1]
448
-
449
- [[id2]]
450
- [NOTE]
451
- --
452
- |===
453
- |a |b
454
-
455
- |c |d
456
- |===
457
-
458
- * A
459
- * B
460
- * C
461
- --
462
- INPUT
463
- output = <<~OUTPUT
464
- #{BLANK_HDR}
465
- <sections>
466
- <p id='_'>
467
- <fn reference='1'>[ERROR]</fn>
468
- </p>
469
- <note id='id2'>
470
- <table id='_'>
471
- <thead>
472
- <tr>
473
- <th valign='top' align='left'>a</th>
474
- <th valign='top' align='left'>b</th>
475
- </tr>
476
- </thead>
477
- <tbody>
478
- <tr>
479
- <td valign='top' align='left'>c</td>
480
- <td valign='top' align='left'>d</td>
481
- </tr>
482
- </tbody>
483
- </table>
484
- <ul id='_'>
485
- <li>
486
- <p id='_'>A</p>
487
- </li>
488
- <li>
489
- <p id='_'>B</p>
490
- </li>
491
- <li>
492
- <p id='_'>C</p>
493
- </li>
494
- </ul>
495
- </note>
496
- </sections>
497
- </standard-document>
498
- OUTPUT
499
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
500
- .to be_equivalent_to xmlpp(output)
501
- end
502
-
503
- it "processes input form macros" do
504
- input = <<~INPUT
505
- #{ASCIIDOC_BLANK_HDR}
506
-
507
- [form,id=N0,name=N1,action="/action_page.php",class="checkboxes"]
508
- --
509
- label:fname[First name:] +
510
- input:text[id=fname,name=fname] +
511
- label:lname[Last name:] +
512
- input:text[id=lname,name=lname] +
513
- label:pwd[Password:] +
514
- input:password[id=pwd,name=pwd] +
515
- input:radio[id=male,name=gender,value=male]
516
- label:male[Male] +
517
- input:radio[id=female,name=gender,value=female]
518
- label:female[Female] +
519
- input:radio[id=other,name=gender,value=other]
520
- label:other[Other] +
521
- input:checkbox[id=vehicle1,name=vehicle1,value=Bike,checked=true]
522
- label:vehicle1[I have a bike] +
523
- input:checkbox[id=vehicle2,name=vehicle2,value=Car]
524
- label:vehicle2[I have a car] +
525
- input:checkbox[id=vehicle3,name=vehicle3,value=Boat]
526
- label:vehicle3[I have a boat] +
527
- input:date[id=birthday,name=birthday] +
528
- label:myfile[Select a file:]
529
- input:file[id=myfile,name=myfile] +
530
- label:cars[Select a car:] +
531
- select:[id=cars,name=cars,value=fiat,size=4,disabled=true,multiple=true]
532
- option:[Volvo,value=volvo,disabled=true]
533
- option:[Saab,value=saab]
534
- option:[Fiat,value=fiat]
535
- option:[Audi,value=audi]
536
- textarea:[id=t1,name=message,rows=10,cols=30,value="The cat was playing in the garden."]
537
- input:button[value="Click Me!"]
538
- input:button[]
539
- input:submit[value="Submit"]
540
- --
541
- INPUT
542
- output = <<~OUTPUT
543
- #{BLANK_HDR}
544
- <sections>
545
- <form id='N0' name='N1' action='/action_page.php' class="checkboxes">
546
- <p id='_'>
547
- <label for='fname'>First name:</label>
548
- <br/>
549
- <input type='text' id='fname' name='fname'/>
550
- <br/>
551
- <label for='lname'>Last name:</label>
552
- <br/>
553
- <input type='text' id='lname' name='lname'/>
554
- <br/>
555
- <label for='pwd'>Password:</label>
556
- <br/>
557
- <input type='password' id='pwd' name='pwd'/>
558
- <br/>
559
- <input type='radio' id='male' name='gender' value='male'/>
560
- <label for='male'>Male</label>
561
- <br/>
562
- <input type='radio' id='female' name='gender' value='female'/>
563
- <label for='female'>Female</label>
564
- <br/>
565
- <input type='radio' id='other' name='gender' value='other'/>
566
- <label for='other'>Other</label>
567
- <br/>
568
- <input type='checkbox' id='vehicle1' name='vehicle1' value='Bike' checked='true'/>
569
- <label for='vehicle1'>I have a bike</label>
570
- <br/>
571
- <input type='checkbox' id='vehicle2' name='vehicle2' value='Car'/>
572
- <label for='vehicle2'>I have a car</label>
573
- <br/>
574
- <input type='checkbox' id='vehicle3' name='vehicle3' value='Boat'/>
575
- <label for='vehicle3'>I have a boat</label>
576
- <br/>
577
- <input type='date' id='birthday' name='birthday'/>
578
- <br/>
579
- <label for='myfile'>Select a file:</label>
580
- <input type='file' id='myfile' name='myfile'/>
581
- <br/>
582
- <label for='cars'>Select a car:</label>
583
- <br/>
584
- <select id='cars' name='cars' size='4' disabled='true' multiple='true' value='fiat'>
585
- <option disabled='true' value='volvo'/>
586
- <option value='saab'/>
587
- <option value='fiat'/>
588
- <option value='audi'/>
589
- </select>
590
- <textarea id='t1' name='message' rows='10' cols='30' value='The cat was playing in the garden.'/>
591
- <input type='button' value='Click Me!'/>
592
- <input type='button'/>
593
- <input type='submit' value='Submit'/>
594
- </p>
595
- </form>
596
- </sections>
597
- </standard-document>
598
- OUTPUT
599
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
600
- .to be_equivalent_to xmlpp(output)
601
- end
602
-
603
- it "processes ToC form macros" do
604
- input = <<~INPUT
605
- #{ASCIIDOC_BLANK_HDR}
606
-
607
- [[clause1]]
608
- == Clause 1
609
-
610
- [[clause1A]]
611
- === Clause 1A
612
-
613
- [[clause1Aa]]
614
- ==== Clause 1Aa
615
-
616
- [[clause1Ab]]
617
- ==== Clause 1Ab
618
-
619
- [.variant-title,type=toc]
620
- 1Ab Clause
621
-
622
- [[clause1B]]
623
- === Clause 1B
624
-
625
- [[clause1Ba]]
626
- ==== Clause 1Ba
627
-
628
- [[clause2]]
629
- == Clause 2
630
-
631
- And introducing:
632
- toc:["//clause[@id = 'clause1'\\]/clause/title","//clause[@id = 'clause1'\\]/clause/clause/title:2"]
633
-
634
- toc:["//clause[@id = 'clause1'\\]/clause/title"]
635
- INPUT
636
- output = <<~OUTPUT
637
- #{BLANK_HDR}
638
- <sections>
639
- <clause id='clause1' inline-header='false' obligation='normative'>
640
- <title>Clause 1</title>
641
- <clause id='clause1A' inline-header='false' obligation='normative'>
642
- <title>Clause 1A</title>
643
- <clause id='clause1Aa' inline-header='false' obligation='normative'>
644
- <title>Clause 1Aa</title>
645
- </clause>
646
- <clause id='clause1Ab' inline-header='false' obligation='normative'>
647
- <title>Clause 1Ab</title>
648
- <variant-title type='toc'>1Ab Clause</variant-title>
649
- </clause>
650
- </clause>
651
- <clause id='clause1B' inline-header='false' obligation='normative'>
652
- <title>Clause 1B</title>
653
- <clause id='clause1Ba' inline-header='false' obligation='normative'>
654
- <title>Clause 1Ba</title>
655
- </clause>
656
- </clause>
657
- </clause>
658
- <clause id='clause2' inline-header='false' obligation='normative'>
659
- <title>Clause 2</title>
660
- <p id='_'>And introducing: </p>
661
- <toc>
662
- <ul id='_'>
663
- <li>
664
- <xref target='clause1A'>Clause 1A</xref>
665
- </li>
666
- <li>
667
- <ul id='_'>
668
- <li>
669
- <xref target='clause1Aa'>Clause 1Aa</xref>
670
- </li>
671
- <li>
672
- <xref target='clause1Ab'>1Ab Clause</xref>
673
- </li>
674
- </ul>
675
- </li>
676
- <li>
677
- <xref target='clause1B'>Clause 1B</xref>
678
- </li>
679
- <li>
680
- <ul id='_'>
681
- <li>
682
- <xref target='clause1Ba'>Clause 1Ba</xref>
683
- </li>
684
- </ul>
685
- </li>
686
- </ul>
687
- </toc>
688
- <toc>
689
- <ul id='_'>
690
- <li>
691
- <xref target='clause1A'>Clause 1A</xref>
692
- </li>
693
- <li>
694
- <xref target='clause1B'>Clause 1B</xref>
695
- </li>
696
- </ul>
697
- </toc>
698
- </clause>
699
- </sections>
700
- </standard-document>
701
- OUTPUT
702
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
703
- .to be_equivalent_to xmlpp(output)
704
- end
705
-
706
- it "processes embed macro" do
707
- input = <<~INPUT
708
- #{ASCIIDOC_BLANK_HDR}
709
-
710
- [[clause1]]
711
- == Clause 1
712
-
713
- embed::spec/assets/xref_error.adoc[]
714
- INPUT
715
- output = <<~OUTPUT
716
- <standard-document xmlns='https://www.metanorma.org/ns/standoc' type='semantic' version='#{Metanorma::Standoc::VERSION}'>
717
- <bibdata type='standard'>
718
- <title language='en' format='text/plain'>Document title</title>
719
- <language>en</language>
720
- <script>Latn</script>
721
- <status>
722
- <stage>published</stage>
723
- </status>
724
- <copyright>
725
- <from>2022</from>
726
- </copyright>
727
- <ext>
728
- <doctype>standard</doctype>
729
- </ext>
730
- <relation type='derivedFrom'>
731
- <bibitem>
732
- <title language='en' format='text/plain'>X</title>
733
- <language>en</language>
734
- <script>Latn</script>
735
- <status>
736
- <stage>published</stage>
737
- </status>
738
- <copyright>
739
- <from>2022</from>
740
- </copyright>
741
- <ext>
742
- <doctype>standard</doctype>
743
- </ext>
744
- </bibitem>
745
- </relation>
746
- </bibdata>
747
- <sections>
748
- <clause id='clause1' inline-header='false' obligation='normative'>
749
- <title>Clause 1</title>
750
- </clause>
751
- <clause id='_' inline-header='false' obligation='normative'>
752
- <title>Clause</title>
753
- <p id='_'>
754
- <xref target='a'>b</xref>
755
- </p>
756
- </clause>
757
- </sections>
758
- </standard-document>
759
- OUTPUT
760
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
761
- .to be_equivalent_to xmlpp(output)
762
- end
763
-
764
- it "processes embed macro with overwriting" do
765
- input = <<~INPUT
766
- #{ASCIIDOC_BLANK_HDR}
767
-
768
- [[clause1]]
769
- == Clause
770
-
771
- embed::spec/assets/xref_error.adoc[]
772
- INPUT
773
- output = <<~OUTPUT
774
- <standard-document xmlns='https://www.metanorma.org/ns/standoc' type='semantic' version='#{Metanorma::Standoc::VERSION}'>
775
- <bibdata type='standard'>
776
- <title language='en' format='text/plain'>Document title</title>
777
- <language>en</language>
778
- <script>Latn</script>
779
- <status>
780
- <stage>published</stage>
781
- </status>
782
- <copyright>
783
- <from>2022</from>
784
- </copyright>
785
- <ext>
786
- <doctype>standard</doctype>
787
- </ext>
788
- <relation type='derivedFrom'>
789
- <bibitem>
790
- <title language='en' format='text/plain'>X</title>
791
- <language>en</language>
792
- <script>Latn</script>
793
- <status>
794
- <stage>published</stage>
795
- </status>
796
- <copyright>
797
- <from>2022</from>
798
- </copyright>
799
- <ext>
800
- <doctype>standard</doctype>
801
- </ext>
802
- </bibitem>
803
- </relation>
804
- </bibdata>
805
- <sections>
806
- <clause id='clause1' inline-header='false' obligation='normative'>
807
- <title>Clause</title>
808
- </clause>
809
- </sections>
810
- </standard-document>
811
- OUTPUT
812
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
813
- .to be_equivalent_to xmlpp(output)
814
- end
815
-
816
- it "processes recursive embed macro with includes" do
817
- input = <<~INPUT
818
- #{ASCIIDOC_BLANK_HDR}
819
-
820
- [[clause1]]
821
- == Clause
822
-
823
- embed::spec/assets/a1.adoc[]
824
- INPUT
825
- output = <<~OUTPUT
826
- <standard-document xmlns='https://www.metanorma.org/ns/standoc' type='semantic' version='#{Metanorma::Standoc::VERSION}'>
827
- <bibdata type='standard'>
828
- <title language='en' format='text/plain'>Document title</title>
829
- <language>en</language>
830
- <script>Latn</script>
831
- <status>
832
- <stage>published</stage>
833
- </status>
834
- <copyright>
835
- <from>2022</from>
836
- </copyright>
837
- <ext>
838
- <doctype>standard</doctype>
839
- </ext>
840
- <relation type='derivedFrom'>
841
- <bibitem>
842
- <title language='en' format='text/plain'>X</title>
843
- <language>en</language>
844
- <script>Latn</script>
845
- <status>
846
- <stage>published</stage>
847
- </status>
848
- <copyright>
849
- <from>2022</from>
850
- </copyright>
851
- <ext>
852
- <doctype>standard</doctype>
853
- </ext>
854
- <relation type='derivedFrom'>
855
- <bibitem>
856
- <title language='en' format='text/plain'>A2</title>
857
- <language>en</language>
858
- <script>Latn</script>
859
- <status>
860
- <stage>published</stage>
861
- </status>
862
- <copyright>
863
- <from>2022</from>
864
- </copyright>
865
- <ext>
866
- <doctype>standard</doctype>
867
- </ext>
868
- <relation type='derivedFrom'>
869
- <bibitem>
870
- <title language='en' format='text/plain'>A3</title>
871
- <language>en</language>
872
- <script>Latn</script>
873
- <status>
874
- <stage>published</stage>
875
- </status>
876
- <copyright>
877
- <from>2022</from>
878
- </copyright>
879
- <ext>
880
- <doctype>standard</doctype>
881
- </ext>
882
- </bibitem>
883
- </relation>
884
- <relation type='derivedFrom'>
885
- <bibitem>
886
- <title language='en' format='text/plain'>A3a</title>
887
- <language>en</language>
888
- <script>Latn</script>
889
- <status>
890
- <stage>published</stage>
891
- </status>
892
- <copyright>
893
- <from>2022</from>
894
- </copyright>
895
- <ext>
896
- <doctype>standard</doctype>
897
- </ext>
898
- </bibitem>
899
- </relation>
900
- </bibitem>
901
- </relation>
902
- </bibitem>
903
- </relation>
904
- </bibdata>
905
- <sections>
906
- <clause id='clause1' inline-header='false' obligation='normative'>
907
- <title>Clause</title>
908
- </clause>
909
- <clause id='_' inline-header='false' obligation='normative'>
910
- <title>Clause 1</title>
911
- <p id='_'>X</p>
912
- </clause>
913
- <clause id='_' inline-header='false' obligation='normative'>
914
- <title>Clause 2</title>
915
- <p id='_'>X</p>
916
- </clause>
917
- <clause id='_' inline-header='false' obligation='normative'>
918
- <title>Clause 3</title>
919
- <p id='_'>X</p>
920
- </clause>
921
- <clause id='_' inline-header='false' obligation='normative'>
922
- <title>Clause 4</title>
923
- <p id='_'>X</p>
924
- </clause>
925
- <clause id='_' inline-header='false' obligation='normative'>
926
- <title>Clause 3a</title>
927
- <p id='_'>X</p>
928
- </clause>
929
- </sections>
930
- </standard-document>
931
- OUTPUT
932
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
933
- .to be_equivalent_to xmlpp(output)
934
- end
935
-
936
- it "processes std-link macro" do
937
- VCR.use_cassette("std-link", match_requests_on: %i[method uri body]) do
938
- input = <<~INPUT
939
- #{ISOBIB_BLANK_HDR}
940
-
941
- [[clause1]]
942
- == Clause
943
-
944
- std-link:[ISO 131]
945
- std-link:[iso:std:iso:13485:en,droploc%clause=4,text]
946
- INPUT
947
- output = <<~OUTPUT
948
- #{BLANK_HDR}
949
- <sections>
950
- <clause id='clause1' inline-header='false' obligation='normative'>
951
- <title>Clause</title>
952
- <p id='_'>
953
- <eref type='inline' bibitemid='_' citeas='ISO 131'/>
954
- <eref type='inline' droploc='true' bibitemid='_' citeas='iso:std:iso:13485:en'>
955
- <localityStack>
956
- <locality type='clause'>
957
- <referenceFrom>4</referenceFrom>
958
- </locality>
959
- </localityStack>
960
- text
961
- </eref>
962
- </p>
963
- </clause>
964
- </sections>
965
- <bibliography>
966
- <references hidden='true' normative='true'>
967
- <bibitem id='_' type='standard' hidden="true">
968
- <fetched/>
969
- <title type='title-intro' format='text/plain' language='en' script='Latn'>Acoustics</title>
970
- <title type='title-main' format='text/plain' language='en' script='Latn'>Expression of physical and subjective magnitudes of sound or noise in air</title>
971
- <title type='main' format='text/plain' language='en' script='Latn'>
972
- Acoustics — Expression of physical and subjective magnitudes of sound
973
- or noise in air
974
- </title>
975
- <uri type='src'>https://www.iso.org/standard/3944.html</uri>
976
- <uri type='rss'>https://www.iso.org/contents/data/standard/00/39/3944.detail.rss</uri>
977
- <docidentifier type='ISO' primary='true'>ISO 131</docidentifier>
978
- <docidentifier type='URN'>urn:iso:std:iso:131:ed-1</docidentifier>
979
- <docnumber>131</docnumber>
980
- <contributor>
981
- <role type='publisher'/>
982
- <organization>
983
- <name>International Organization for Standardization</name>
984
- <abbreviation>ISO</abbreviation>
985
- <uri>www.iso.org</uri>
986
- </organization>
987
- </contributor>
988
- <edition>1</edition>
989
- <language>en</language>
990
- <script>Latn</script>
991
- <status>
992
- <stage>95</stage>
993
- <substage>99</substage>
994
- </status>
995
- <copyright>
996
- <from>1979</from>
997
- <owner>
998
- <organization>
999
- <name>ISO</name>
1000
- </organization>
1001
- </owner>
1002
- </copyright>
1003
- <relation type='obsoletes'>
1004
- <bibitem type='standard'>
1005
- <formattedref format='text/plain'>ISO/R 357:1963</formattedref>
1006
- <docidentifier type='ISO' primary='true'>ISO/R 357:1963</docidentifier>
1007
- </bibitem>
1008
- </relation>
1009
- <relation type='instance'>
1010
- <bibitem type='standard'>
1011
- <fetched/>
1012
- <title type='title-intro' format='text/plain' language='en' script='Latn'>Acoustics</title>
1013
- <title type='title-main' format='text/plain' language='en' script='Latn'>Expression of physical and subjective magnitudes of sound or noise in air</title>
1014
- <title type='main' format='text/plain' language='en' script='Latn'>
1015
- Acoustics — Expression of physical and subjective magnitudes of
1016
- sound or noise in air
1017
- </title>
1018
- <uri type='src'>https://www.iso.org/standard/3944.html</uri>
1019
- <uri type='rss'>https://www.iso.org/contents/data/standard/00/39/3944.detail.rss</uri>
1020
- <docidentifier type='ISO' primary='true'>ISO 131:1979</docidentifier>
1021
- <docidentifier type='URN'>urn:iso:std:iso:131:ed-1</docidentifier>
1022
- <docnumber>131</docnumber>
1023
- <date type='published'>
1024
- <on>1979-11</on>
1025
- </date>
1026
- <contributor>
1027
- <role type='publisher'/>
1028
- <organization>
1029
- <name>International Organization for Standardization</name>
1030
- <abbreviation>ISO</abbreviation>
1031
- <uri>www.iso.org</uri>
1032
- </organization>
1033
- </contributor>
1034
- <edition>1</edition>
1035
- <language>en</language>
1036
- <script>Latn</script>
1037
- <status>
1038
- <stage>95</stage>
1039
- <substage>99</substage>
1040
- </status>
1041
- <copyright>
1042
- <from>1979</from>
1043
- <owner>
1044
- <organization>
1045
- <name>ISO</name>
1046
- </organization>
1047
- </owner>
1048
- </copyright>
1049
- <relation type='obsoletes'>
1050
- <bibitem type='standard'>
1051
- <formattedref format='text/plain'>ISO/R 357:1963</formattedref>
1052
- <docidentifier type='ISO' primary='true'>ISO/R 357:1963</docidentifier>
1053
- </bibitem>
1054
- </relation>
1055
- <place>Geneva</place>
1056
- </bibitem>
1057
- </relation>
1058
- <place>Geneva</place>
1059
- </bibitem>
1060
- <bibitem id='_' hidden="true">
1061
- <formattedref format='application/x-isodoc+xml'/>
1062
- <docidentifier type='ISO'>iso:std:iso:13485:en</docidentifier>
1063
- <docnumber>13485:en</docnumber>
1064
- </bibitem>
1065
- </references>
1066
- </bibliography>
1067
- </standard-document>
1068
- OUTPUT
1069
- expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))
1070
- .gsub(%r{ bibitemid="_[^"]+"}, ' bibitemid="_"')))
1071
- .to be_equivalent_to xmlpp(output)
1072
- end
1073
- end
1074
-
1075
- describe "lutaml_figure macro" do
1076
- let(:example_file) { fixtures_path("test.xmi") }
1077
- let(:input) do
1078
- <<~TEXT
1079
- = Document title
1080
- Author
1081
- :docfile: test.adoc
1082
- :nodoc:
1083
- :novalid:
1084
- :no-isobib:
1085
- :imagesdir: spec/assets
1086
-
1087
- [lutaml_uml_datamodel_description,#{example_file}]
1088
- --
1089
- --
1090
-
1091
- This is lutaml_figure::[package="Wrapper root package", name="Fig B1 Full model"] figure
1092
- TEXT
1093
- end
1094
- let(:output) do
1095
- '<xref target="figure-EAID_0E029ABF_C35A_49e3_9EEA_FFD4F32780A8">'
1096
- end
1097
-
1098
- it "correctly renders input" do
1099
- expect(strip_src(xml_string_conent(metanorma_process(input))))
1100
- .to(include(output))
1101
- end
1102
- end
1103
-
1104
- describe "lutaml_uml_datamodel_description macro" do
1105
- subject(:convert) do
1106
- xmlpp(
1107
- strip_guid(
1108
- Asciidoctor.convert(
1109
- input, *OPTIONS
1110
- ),
1111
- ),
1112
- )
1113
- end
1114
-
1115
- let(:example_file) { fixtures_path("test.xmi") }
1116
- let(:input) do
1117
- <<~TEXT
1118
- = Document title
1119
- Author
1120
- :docfile: test.adoc
1121
- :nodoc:
1122
- :novalid:
1123
- :no-isobib:
1124
- :imagesdir: spec/assets
1125
-
1126
- [lutaml_uml_datamodel_description,#{example_file}]
1127
- --
1128
- [.diagram_include_block, base_path="requirements/"]
1129
- .....
1130
- Diagram text
1131
- .....
1132
-
1133
- [.include_block, package="Another", base_path="spec/fixtures/"]
1134
- .....
1135
- my text
1136
- .....
1137
-
1138
- [.include_block, base_path="spec/fixtures/"]
1139
- .....
1140
- my text
1141
- .....
1142
-
1143
- [.before]
1144
- .....
1145
- mine text
1146
- .....
1147
-
1148
- [.before, package="Another"]
1149
- .....
1150
- text before Another package
1151
- .....
1152
-
1153
- [.after, package="Another"]
1154
- .....
1155
- text after Another package
1156
- .....
1157
-
1158
- [.after, package="CityGML"]
1159
- .....
1160
- text after CityGML package
1161
- .....
1162
-
1163
- [.after]
1164
- .....
1165
- footer text
1166
- .....
1167
- --
1168
- TEXT
1169
- end
1170
- let(:output) do
1171
- <<~TEXT
1172
- #{BLANK_HDR}
1173
- #{File.read(fixtures_path('datamodel_description_sections_tree.xml'))}
1174
- </standard-document>
1175
- TEXT
1176
- end
1177
-
1178
- it "correctly renders input" do
1179
- expect(convert)
1180
- .to(be_equivalent_to(xmlpp(output)))
1181
- end
1182
- end
1183
- end