metanorma-standoc 1.6.4 → 1.6.5
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.
- checksums.yaml +4 -4
- data/lib/asciidoctor/standoc/base.rb +8 -16
- data/lib/asciidoctor/standoc/basicdoc.rng +32 -0
- data/lib/asciidoctor/standoc/cleanup.rb +1 -1
- data/lib/asciidoctor/standoc/cleanup_ref.rb +17 -24
- data/lib/asciidoctor/standoc/cleanup_terms.rb +3 -0
- data/lib/asciidoctor/standoc/converter.rb +3 -0
- data/lib/asciidoctor/standoc/isodoc.rng +15 -0
- data/lib/asciidoctor/standoc/macros.rb +19 -63
- data/lib/asciidoctor/standoc/macros_terms.rb +82 -0
- data/lib/asciidoctor/standoc/ref.rb +12 -21
- data/lib/asciidoctor/standoc/table.rb +12 -0
- data/lib/asciidoctor/standoc/term_lookup_cleanup.rb +86 -0
- data/lib/metanorma/standoc/version.rb +1 -1
- data/spec/asciidoctor-standoc/blocks_spec.rb +8 -8
- data/spec/asciidoctor-standoc/cleanup_sections_spec.rb +6 -6
- data/spec/asciidoctor-standoc/cleanup_spec.rb +70 -9
- data/spec/asciidoctor-standoc/macros_plantuml_spec.rb +307 -0
- data/spec/asciidoctor-standoc/macros_spec.rb +228 -277
- data/spec/asciidoctor-standoc/section_spec.rb +11 -11
- data/spec/asciidoctor-standoc/table_spec.rb +86 -0
- data/spec/fixtures/diagram_definitions.lutaml +4 -4
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +49 -49
- data/spec/vcr_cassettes/isobib_get_123.yml +14 -14
- data/spec/vcr_cassettes/isobib_get_123_1.yml +28 -28
- data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +37 -37
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +14 -14
- data/spec/vcr_cassettes/isobib_get_124.yml +14 -14
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +8 -8
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +51 -61
- metadata +5 -2
@@ -0,0 +1,307 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Asciidoctor::Standoc do
|
4
|
+
it "processes the PlantUML macro" do
|
5
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)).gsub(%r{plantuml/plantuml[^./]+\.}, "plantuml/_."))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
6
|
+
#{ASCIIDOC_BLANK_HDR}
|
7
|
+
|
8
|
+
[plantuml]
|
9
|
+
....
|
10
|
+
@startuml
|
11
|
+
Alice -> Bob: Authentication Request
|
12
|
+
Bob --> Alice: Authentication Response
|
13
|
+
|
14
|
+
Alice -> Bob: Another authentication Request
|
15
|
+
Alice <-- Bob: another authentication Response
|
16
|
+
@enduml
|
17
|
+
....
|
18
|
+
|
19
|
+
[plantuml]
|
20
|
+
....
|
21
|
+
Alice -> Bob: Authentication Request
|
22
|
+
Bob --> Alice: Authentication Response
|
23
|
+
|
24
|
+
Alice -> Bob: Another authentication Request
|
25
|
+
Alice <-- Bob: another authentication Response
|
26
|
+
....
|
27
|
+
|
28
|
+
[plantuml]
|
29
|
+
....
|
30
|
+
@startuml filename
|
31
|
+
Alice -> Bob: Authentication Request
|
32
|
+
Bob --> Alice: Authentication Response
|
33
|
+
|
34
|
+
Alice -> Bob: Another authentication Request
|
35
|
+
Alice <-- Bob: another authentication Response
|
36
|
+
@enduml
|
37
|
+
....
|
38
|
+
INPUT
|
39
|
+
#{BLANK_HDR}
|
40
|
+
<sections><figure id="_">
|
41
|
+
<image src="plantuml/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
42
|
+
</figure>
|
43
|
+
<figure id="_">
|
44
|
+
<image src="plantuml/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
45
|
+
</figure>
|
46
|
+
<figure id="_">
|
47
|
+
<image src="plantuml/filename.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
48
|
+
</figure>
|
49
|
+
</sections>
|
50
|
+
|
51
|
+
</standard-document>
|
52
|
+
OUTPUT
|
53
|
+
end
|
54
|
+
|
55
|
+
it "processes the PlantUML macro with imagesdir" do
|
56
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)).gsub(%r{spec/assets/[^./]+\.}, "spec/assets/_."))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
57
|
+
= Document title
|
58
|
+
Author
|
59
|
+
:docfile: test.adoc
|
60
|
+
:nodoc:
|
61
|
+
:novalid:
|
62
|
+
:no-isobib:
|
63
|
+
:imagesdir: spec/assets
|
64
|
+
|
65
|
+
[plantuml]
|
66
|
+
....
|
67
|
+
@startuml
|
68
|
+
Alice -> Bob: Authentication Request
|
69
|
+
Bob --> Alice: Authentication Response
|
70
|
+
|
71
|
+
Alice -> Bob: Another authentication Request
|
72
|
+
Alice <-- Bob: another authentication Response
|
73
|
+
@enduml
|
74
|
+
....
|
75
|
+
INPUT
|
76
|
+
#{BLANK_HDR}
|
77
|
+
<sections>
|
78
|
+
<figure id="_">
|
79
|
+
<image src="spec/assets/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
80
|
+
</figure>
|
81
|
+
</sections>
|
82
|
+
</standard-document>
|
83
|
+
OUTPUT
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when lutaml_diagram' do
|
87
|
+
let(:input) do
|
88
|
+
<<~"OUTPUT"
|
89
|
+
= Document title
|
90
|
+
Author
|
91
|
+
:docfile: test.adoc
|
92
|
+
:nodoc:
|
93
|
+
:novalid:
|
94
|
+
:no-isobib:
|
95
|
+
:imagesdir: spec/assets
|
96
|
+
|
97
|
+
[lutaml_diagram]
|
98
|
+
....
|
99
|
+
diagram MyView {
|
100
|
+
fontname "Arial"
|
101
|
+
title "my diagram"
|
102
|
+
class Foo {}
|
103
|
+
}
|
104
|
+
....
|
105
|
+
OUTPUT
|
106
|
+
end
|
107
|
+
let(:output) do
|
108
|
+
<<~"OUTPUT"
|
109
|
+
#{BLANK_HDR}
|
110
|
+
<sections>
|
111
|
+
<figure id="_">
|
112
|
+
<image src="spec/assets/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
113
|
+
</figure>
|
114
|
+
</sections>
|
115
|
+
</standard-document>
|
116
|
+
OUTPUT
|
117
|
+
end
|
118
|
+
|
119
|
+
it "processes the lutaml_diagram" do
|
120
|
+
expect(
|
121
|
+
xmlpp(
|
122
|
+
strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))
|
123
|
+
.gsub(%r{".+spec\/assets\/lutaml\/[^.\/]+\.}, %q("spec/assets/_.))))
|
124
|
+
.to(be_equivalent_to xmlpp(output))
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context 'when lutaml_uml_attributes_table' do
|
129
|
+
let(:example_file) { fixtures_path("diagram_definitions.lutaml") }
|
130
|
+
let(:input) do
|
131
|
+
<<~"OUTPUT"
|
132
|
+
= Document title
|
133
|
+
Author
|
134
|
+
:docfile: test.adoc
|
135
|
+
:nodoc:
|
136
|
+
:novalid:
|
137
|
+
:no-isobib:
|
138
|
+
:imagesdir: spec/assets
|
139
|
+
|
140
|
+
[lutaml_uml_attributes_table,#{example_file},AttributeProfile]
|
141
|
+
OUTPUT
|
142
|
+
end
|
143
|
+
let(:output) do
|
144
|
+
<<~"OUTPUT"
|
145
|
+
#{BLANK_HDR}
|
146
|
+
<sections>
|
147
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
148
|
+
<title>AttributeProfile</title>
|
149
|
+
<table id='_'>
|
150
|
+
<name>AttributeProfile attributes</name>
|
151
|
+
<thead>
|
152
|
+
<tr>
|
153
|
+
<th valign='top' align='left'>Name</th>
|
154
|
+
<th valign='top' align='left'>Definition</th>
|
155
|
+
<th valign='top' align='left'>Mandatory/ Optional/ Conditional</th>
|
156
|
+
<th valign='top' align='left'>Max Occur</th>
|
157
|
+
<th valign='top' align='left'>Data Type</th>
|
158
|
+
</tr>
|
159
|
+
</thead>
|
160
|
+
<tbody>
|
161
|
+
<tr>
|
162
|
+
<td valign='top' align='left'>addressClassProfile</td>
|
163
|
+
<td valign='top' align='left'>TODO: enum ‘s definition</td>
|
164
|
+
<td valign='top' align='left'>O</td>
|
165
|
+
<td valign='top' align='left'>1</td>
|
166
|
+
<td valign='top' align='left'>
|
167
|
+
<tt>CharacterString</tt>
|
168
|
+
</td>
|
169
|
+
</tr>
|
170
|
+
<tr>
|
171
|
+
<td valign='top' align='left'>imlicistAttributeProfile</td>
|
172
|
+
<td valign='top' align='left'>this is attribute definition with multiply lines</td>
|
173
|
+
<td valign='top' align='left'>O</td>
|
174
|
+
<td valign='top' align='left'>1</td>
|
175
|
+
<td valign='top' align='left'>
|
176
|
+
<tt>CharacterString</tt>
|
177
|
+
</td>
|
178
|
+
</tr>
|
179
|
+
</tbody>
|
180
|
+
</table>
|
181
|
+
</clause>
|
182
|
+
</sections>
|
183
|
+
</standard-document>
|
184
|
+
OUTPUT
|
185
|
+
end
|
186
|
+
|
187
|
+
it "processes the lutaml_uml_attributes_table macro" do
|
188
|
+
expect(
|
189
|
+
xmlpp(
|
190
|
+
strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
|
191
|
+
.to(be_equivalent_to(xmlpp(output)))
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
it "processes the PlantUML macro with PlantUML disabled" do
|
196
|
+
mock_plantuml_disabled
|
197
|
+
expect { Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true) }.to output(%r{PlantUML not installed}).to_stderr
|
198
|
+
#{ASCIIDOC_BLANK_HDR}
|
199
|
+
|
200
|
+
[plantuml]
|
201
|
+
....
|
202
|
+
@startuml
|
203
|
+
Alice -> Bob: Authentication Request
|
204
|
+
Bob --> Alice: Authentication Response
|
205
|
+
|
206
|
+
Alice -> Bob: Another authentication Request
|
207
|
+
Alice <-- Bob: another authentication Response
|
208
|
+
@enduml
|
209
|
+
....
|
210
|
+
INPUT
|
211
|
+
|
212
|
+
mock_plantuml_disabled
|
213
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
214
|
+
#{ASCIIDOC_BLANK_HDR}
|
215
|
+
|
216
|
+
[plantuml]
|
217
|
+
....
|
218
|
+
@startuml
|
219
|
+
Alice -> Bob: Authentication Request
|
220
|
+
Bob --> Alice: Authentication Response
|
221
|
+
|
222
|
+
Alice -> Bob: Another authentication Request
|
223
|
+
Alice <-- Bob: another authentication Response
|
224
|
+
@enduml
|
225
|
+
....
|
226
|
+
INPUT
|
227
|
+
#{BLANK_HDR}
|
228
|
+
<sections>
|
229
|
+
<sourcecode id="_" lang="plantuml">@startuml
|
230
|
+
Alice -> Bob: Authentication Request
|
231
|
+
Bob --> Alice: Authentication Response
|
232
|
+
|
233
|
+
Alice -> Bob: Another authentication Request
|
234
|
+
Alice <-- Bob: another authentication Response
|
235
|
+
@enduml</sourcecode>
|
236
|
+
</sections>
|
237
|
+
</standard-document>
|
238
|
+
OUTPUT
|
239
|
+
end
|
240
|
+
|
241
|
+
it "processes the PlantUML macro with localdir unwritable" do
|
242
|
+
mock_localdir_unwritable
|
243
|
+
expect { Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true) }.to output(%r{not writable for PlantUML}).to_stderr
|
244
|
+
#{ASCIIDOC_BLANK_HDR}
|
245
|
+
|
246
|
+
[plantuml]
|
247
|
+
....
|
248
|
+
@startuml
|
249
|
+
Alice -> Bob: Authentication Request
|
250
|
+
Bob --> Alice: Authentication Response
|
251
|
+
|
252
|
+
Alice -> Bob: Another authentication Request
|
253
|
+
Alice <-- Bob: another authentication Response
|
254
|
+
@enduml
|
255
|
+
....
|
256
|
+
INPUT
|
257
|
+
|
258
|
+
mock_localdir_unwritable
|
259
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
260
|
+
#{ASCIIDOC_BLANK_HDR}
|
261
|
+
|
262
|
+
[plantuml]
|
263
|
+
....
|
264
|
+
@startuml
|
265
|
+
Alice -> Bob: Authentication Request
|
266
|
+
Bob --> Alice: Authentication Response
|
267
|
+
|
268
|
+
Alice -> Bob: Another authentication Request
|
269
|
+
Alice <-- Bob: another authentication Response
|
270
|
+
@enduml
|
271
|
+
....
|
272
|
+
INPUT
|
273
|
+
#{BLANK_HDR}
|
274
|
+
<sections>
|
275
|
+
<sourcecode id="_" lang="plantuml">@startuml
|
276
|
+
Alice -> Bob: Authentication Request
|
277
|
+
Bob --> Alice: Authentication Response
|
278
|
+
|
279
|
+
Alice -> Bob: Another authentication Request
|
280
|
+
Alice <-- Bob: another authentication Response
|
281
|
+
@enduml</sourcecode>
|
282
|
+
</sections>
|
283
|
+
</standard-document>
|
284
|
+
OUTPUT
|
285
|
+
end
|
286
|
+
|
287
|
+
private
|
288
|
+
|
289
|
+
def mock_plantuml_disabled
|
290
|
+
expect(Asciidoctor::Standoc::PlantUMLBlockMacroBackend).to receive(:plantuml_installed?) do
|
291
|
+
raise "PlantUML not installed"
|
292
|
+
false
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
def mock_localdir_unwritable
|
297
|
+
expect(Asciidoctor::Standoc::Utils).to receive(:localdir) do
|
298
|
+
"/"
|
299
|
+
end.exactly(2).times
|
300
|
+
end
|
301
|
+
|
302
|
+
def mock_localdir_unwritable
|
303
|
+
expect(File).to receive(:writable?) do
|
304
|
+
false
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
@@ -44,6 +44,45 @@ RSpec.describe Asciidoctor::Standoc do
|
|
44
44
|
OUTPUT
|
45
45
|
end
|
46
46
|
|
47
|
+
it "processes the Asciidoctor::Standoc index macros" do
|
48
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
49
|
+
#{ASCIIDOC_BLANK_HDR}
|
50
|
+
index:also[]
|
51
|
+
index:see[A]
|
52
|
+
index:also[B,C~x~]
|
53
|
+
index:see[D,_E_,F]
|
54
|
+
index:also[G,H,I,J]
|
55
|
+
index:see[K,L,M,N,O]
|
56
|
+
INPUT
|
57
|
+
#{BLANK_HDR}
|
58
|
+
<sections>
|
59
|
+
<p id='_'>
|
60
|
+
<index-xref also='true'>
|
61
|
+
<primary>B</primary>
|
62
|
+
<target>
|
63
|
+
C
|
64
|
+
<sub>x</sub>
|
65
|
+
</target>
|
66
|
+
</index-xref>
|
67
|
+
<index-xref also='false'>
|
68
|
+
<primary>D</primary>
|
69
|
+
<secondary>
|
70
|
+
<em>E</em>
|
71
|
+
</secondary>
|
72
|
+
<target>F</target>
|
73
|
+
</index-xref>
|
74
|
+
<index-xref also='true'>
|
75
|
+
<primary>G</primary>
|
76
|
+
<secondary>H</secondary>
|
77
|
+
<tertiary>I</tertiary>
|
78
|
+
<target>J</target>
|
79
|
+
</index-xref>
|
80
|
+
</p>
|
81
|
+
</sections>
|
82
|
+
</standard-document>
|
83
|
+
OUTPUT
|
84
|
+
end
|
85
|
+
|
47
86
|
it "processes the Asciidoctor::Standoc variant macros" do
|
48
87
|
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
49
88
|
#{ASCIIDOC_BLANK_HDR}
|
@@ -329,13 +368,11 @@ OUTPUT
|
|
329
368
|
<formula id='_'>
|
330
369
|
<stem type='MathML'>
|
331
370
|
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
332
|
-
<mover>
|
371
|
+
<mover accent="true">
|
333
372
|
<mrow>
|
334
373
|
<mi>X</mi>
|
335
374
|
</mrow>
|
336
|
-
<mrow>
|
337
375
|
<mo>¯</mo>
|
338
|
-
</mrow>
|
339
376
|
</mover>
|
340
377
|
<mo>′</mo>
|
341
378
|
<mo>=</mo>
|
@@ -508,309 +545,223 @@ OUTPUT
|
|
508
545
|
OUTPUT
|
509
546
|
end
|
510
547
|
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
@startuml
|
518
|
-
Alice -> Bob: Authentication Request
|
519
|
-
Bob --> Alice: Authentication Response
|
520
|
-
|
521
|
-
Alice -> Bob: Another authentication Request
|
522
|
-
Alice <-- Bob: another authentication Response
|
523
|
-
@enduml
|
524
|
-
....
|
525
|
-
|
526
|
-
[plantuml]
|
527
|
-
....
|
528
|
-
Alice -> Bob: Authentication Request
|
529
|
-
Bob --> Alice: Authentication Response
|
530
|
-
|
531
|
-
Alice -> Bob: Another authentication Request
|
532
|
-
Alice <-- Bob: another authentication Response
|
533
|
-
....
|
534
|
-
|
535
|
-
[plantuml]
|
536
|
-
....
|
537
|
-
@startuml filename
|
538
|
-
Alice -> Bob: Authentication Request
|
539
|
-
Bob --> Alice: Authentication Response
|
540
|
-
|
541
|
-
Alice -> Bob: Another authentication Request
|
542
|
-
Alice <-- Bob: another authentication Response
|
543
|
-
@enduml
|
544
|
-
....
|
545
|
-
INPUT
|
546
|
-
#{BLANK_HDR}
|
547
|
-
<sections><figure id="_">
|
548
|
-
<image src="plantuml/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
549
|
-
</figure>
|
550
|
-
<figure id="_">
|
551
|
-
<image src="plantuml/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
552
|
-
</figure>
|
553
|
-
<figure id="_">
|
554
|
-
<image src="plantuml/filename.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
555
|
-
</figure>
|
556
|
-
</sections>
|
557
|
-
|
558
|
-
</standard-document>
|
559
|
-
OUTPUT
|
560
|
-
end
|
561
|
-
|
562
|
-
it "processes the PlantUML macro with imagesdir" do
|
563
|
-
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)).gsub(%r{spec/assets/[^./]+\.}, "spec/assets/_."))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
564
|
-
= Document title
|
565
|
-
Author
|
566
|
-
:docfile: test.adoc
|
567
|
-
:nodoc:
|
568
|
-
:novalid:
|
569
|
-
:no-isobib:
|
570
|
-
:imagesdir: spec/assets
|
571
|
-
|
572
|
-
[plantuml]
|
573
|
-
....
|
574
|
-
@startuml
|
575
|
-
Alice -> Bob: Authentication Request
|
576
|
-
Bob --> Alice: Authentication Response
|
577
|
-
|
578
|
-
Alice -> Bob: Another authentication Request
|
579
|
-
Alice <-- Bob: another authentication Response
|
580
|
-
@enduml
|
581
|
-
....
|
582
|
-
INPUT
|
583
|
-
#{BLANK_HDR}
|
584
|
-
<sections>
|
585
|
-
<figure id="_">
|
586
|
-
<image src="spec/assets/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
587
|
-
</figure>
|
588
|
-
</sections>
|
589
|
-
</standard-document>
|
590
|
-
OUTPUT
|
548
|
+
describe 'term inline macros' do
|
549
|
+
subject(:convert) do
|
550
|
+
xmlpp(
|
551
|
+
strip_guid(
|
552
|
+
Asciidoctor.convert(
|
553
|
+
input, backend: :standoc, header_footer: true)))
|
591
554
|
end
|
592
|
-
|
593
|
-
context 'when lutaml_diagram' do
|
594
555
|
let(:input) do
|
595
|
-
<<~
|
596
|
-
|
597
|
-
|
598
|
-
:docfile: test.adoc
|
599
|
-
:nodoc:
|
600
|
-
:novalid:
|
601
|
-
:no-isobib:
|
602
|
-
:imagesdir: spec/assets
|
603
|
-
|
604
|
-
[lutaml_diagram]
|
605
|
-
....
|
606
|
-
diagram MyView {
|
607
|
-
fontname "Arial"
|
608
|
-
title "my diagram"
|
609
|
-
class Foo {}
|
610
|
-
}
|
611
|
-
....
|
612
|
-
OUTPUT
|
613
|
-
end
|
614
|
-
let(:output) do
|
615
|
-
<<~"OUTPUT"
|
616
|
-
#{BLANK_HDR}
|
617
|
-
<sections>
|
618
|
-
<figure id="_">
|
619
|
-
<image src="spec/assets/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
620
|
-
</figure>
|
621
|
-
</sections>
|
622
|
-
</standard-document>
|
623
|
-
OUTPUT
|
624
|
-
end
|
556
|
+
<<~XML
|
557
|
+
#{ASCIIDOC_BLANK_HDR}
|
558
|
+
== Terms and Definitions
|
625
559
|
|
626
|
-
|
627
|
-
expect(
|
628
|
-
xmlpp(
|
629
|
-
strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))
|
630
|
-
.gsub(%r{".+spec\/assets\/lutaml\/[^.\/]+\.}, %q("spec/assets/_.))))
|
631
|
-
.to(be_equivalent_to xmlpp(output))
|
632
|
-
end
|
633
|
-
end
|
560
|
+
=== name2
|
634
561
|
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
<<~"OUTPUT"
|
640
|
-
= Document title
|
641
|
-
Author
|
642
|
-
:docfile: test.adoc
|
643
|
-
:nodoc:
|
644
|
-
:novalid:
|
645
|
-
:no-isobib:
|
646
|
-
:imagesdir: spec/assets
|
647
|
-
|
648
|
-
[lutaml_uml_attributes_table,#{example_file},AttributeProfile]
|
649
|
-
OUTPUT
|
562
|
+
== Main
|
563
|
+
|
564
|
+
term:[name,name2] is a term
|
565
|
+
XML
|
650
566
|
end
|
651
567
|
let(:output) do
|
652
|
-
<<~
|
653
|
-
|
568
|
+
<<~XML
|
569
|
+
#{BLANK_HDR}
|
654
570
|
<sections>
|
571
|
+
<terms id='_' obligation='normative'>
|
572
|
+
<title>Terms and definitions</title>
|
573
|
+
<p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
|
574
|
+
<term id='term-name2'>
|
575
|
+
<preferred>name2</preferred>
|
576
|
+
</term>
|
577
|
+
</terms>
|
655
578
|
<clause id='_' inline-header='false' obligation='normative'>
|
656
|
-
<title>
|
657
|
-
<
|
658
|
-
<name
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
<th valign='top' align='left'>Mandatory/ Optional/ Conditional</th>
|
664
|
-
<th valign='top' align='left'>Max Occur</th>
|
665
|
-
<th valign='top' align='left'>Data Type</th>
|
666
|
-
</tr>
|
667
|
-
</thead>
|
668
|
-
<tbody>
|
669
|
-
<tr>
|
670
|
-
<td valign='top' align='left'>addressClassProfile</td>
|
671
|
-
<td valign='top' align='left'>TODO: enum ‘s definition</td>
|
672
|
-
<td valign='top' align='left'>M</td>
|
673
|
-
<td valign='top' align='left'>1</td>
|
674
|
-
<td valign='top' align='left'>
|
675
|
-
<tt>CharacterString</tt>
|
676
|
-
</td>
|
677
|
-
</tr>
|
678
|
-
<tr>
|
679
|
-
<td valign='top' align='left'>imlicistAttributeProfile</td>
|
680
|
-
<td valign='top' align='left'>this is attribute definition with multiply lines</td>
|
681
|
-
<td valign='top' align='left'>M</td>
|
682
|
-
<td valign='top' align='left'>1</td>
|
683
|
-
<td valign='top' align='left'>
|
684
|
-
<tt>CharacterString</tt>
|
685
|
-
</td>
|
686
|
-
</tr>
|
687
|
-
</tbody>
|
688
|
-
</table>
|
579
|
+
<title>Main</title>
|
580
|
+
<p id='_'>
|
581
|
+
<em>name</em>
|
582
|
+
(
|
583
|
+
<xref target='term-name2'/>
|
584
|
+
) is a term
|
585
|
+
</p>
|
689
586
|
</clause>
|
690
587
|
</sections>
|
691
588
|
</standard-document>
|
692
|
-
|
589
|
+
XML
|
693
590
|
end
|
694
591
|
|
695
|
-
it
|
696
|
-
expect(
|
697
|
-
xmlpp(
|
698
|
-
strip_guid(Asciidoctor.convert(input, backend: :standoc, header_footer: true))))
|
699
|
-
.to(be_equivalent_to(xmlpp(output)))
|
592
|
+
it 'converts macro into the correct xml' do
|
593
|
+
expect(convert).to(be_equivalent_to(xmlpp(output)))
|
700
594
|
end
|
701
|
-
end
|
702
|
-
=end
|
703
595
|
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
596
|
+
context 'default params' do
|
597
|
+
let(:input) do
|
598
|
+
<<~XML
|
599
|
+
#{ASCIIDOC_BLANK_HDR}
|
708
600
|
|
709
|
-
|
710
|
-
....
|
711
|
-
@startuml
|
712
|
-
Alice -> Bob: Authentication Request
|
713
|
-
Bob --> Alice: Authentication Response
|
601
|
+
== Terms and Definitions
|
714
602
|
|
715
|
-
|
716
|
-
Alice <-- Bob: another authentication Response
|
717
|
-
@enduml
|
718
|
-
....
|
719
|
-
INPUT
|
603
|
+
=== name
|
720
604
|
|
721
|
-
|
722
|
-
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
723
|
-
#{ASCIIDOC_BLANK_HDR}
|
605
|
+
== Main
|
724
606
|
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
607
|
+
term:[name] is a term
|
608
|
+
XML
|
609
|
+
end
|
610
|
+
let(:output) do
|
611
|
+
<<~XML
|
612
|
+
#{BLANK_HDR}
|
613
|
+
<sections>
|
614
|
+
<terms id='_' obligation='normative'>
|
615
|
+
<title>Terms and definitions</title>
|
616
|
+
<p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
|
617
|
+
<term id='term-name'>
|
618
|
+
<preferred>name</preferred>
|
619
|
+
</term>
|
620
|
+
</terms>
|
621
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
622
|
+
<title>Main</title>
|
623
|
+
<p id='_'>
|
624
|
+
<em>name</em>
|
625
|
+
(
|
626
|
+
<xref target='term-name' />
|
627
|
+
) is a term
|
628
|
+
</p>
|
629
|
+
</clause>
|
630
|
+
</sections>
|
631
|
+
</standard-document>
|
632
|
+
XML
|
633
|
+
end
|
634
|
+
|
635
|
+
it 'uses `name` as termref name' do
|
636
|
+
expect(convert).to(be_equivalent_to(xmlpp(output)))
|
637
|
+
end
|
638
|
+
end
|
730
639
|
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
INPUT
|
736
|
-
#{BLANK_HDR}
|
737
|
-
<sections>
|
738
|
-
<sourcecode id="_" lang="plantuml">@startuml
|
739
|
-
Alice -> Bob: Authentication Request
|
740
|
-
Bob --> Alice: Authentication Response
|
741
|
-
|
742
|
-
Alice -> Bob: Another authentication Request
|
743
|
-
Alice <-- Bob: another authentication Response
|
744
|
-
@enduml</sourcecode>
|
745
|
-
</sections>
|
746
|
-
</standard-document>
|
747
|
-
OUTPUT
|
748
|
-
end
|
640
|
+
context 'multiply exising ids in document' do
|
641
|
+
let(:input) do
|
642
|
+
<<~XML
|
643
|
+
#{ASCIIDOC_BLANK_HDR}
|
749
644
|
|
750
|
-
|
751
|
-
mock_localdir_unwritable
|
752
|
-
expect { Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true) }.to output(%r{not writable for PlantUML}).to_stderr
|
753
|
-
#{ASCIIDOC_BLANK_HDR}
|
645
|
+
== Terms and Definitions
|
754
646
|
|
755
|
-
|
756
|
-
|
757
|
-
@startuml
|
758
|
-
Alice -> Bob: Authentication Request
|
759
|
-
Bob --> Alice: Authentication Response
|
647
|
+
=== name
|
648
|
+
=== name2
|
760
649
|
|
761
|
-
|
762
|
-
|
763
|
-
@enduml
|
764
|
-
....
|
765
|
-
INPUT
|
650
|
+
[[term-name]]
|
651
|
+
== Main
|
766
652
|
|
767
|
-
|
768
|
-
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
769
|
-
#{ASCIIDOC_BLANK_HDR}
|
653
|
+
paragraph
|
770
654
|
|
771
|
-
|
772
|
-
|
773
|
-
@startuml
|
774
|
-
Alice -> Bob: Authentication Request
|
775
|
-
Bob --> Alice: Authentication Response
|
655
|
+
[[term-name2]]
|
656
|
+
== Second
|
776
657
|
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
658
|
+
term:[name] is a term
|
659
|
+
term:[name2] is a term
|
660
|
+
XML
|
661
|
+
end
|
662
|
+
let(:output) do
|
663
|
+
<<~XML
|
664
|
+
#{BLANK_HDR}
|
665
|
+
<sections>
|
666
|
+
<terms id='_' obligation='normative'>
|
667
|
+
<title>Terms and definitions</title>
|
668
|
+
<p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
|
669
|
+
<term id='term-name-1'>
|
670
|
+
<preferred>name</preferred>
|
671
|
+
</term>
|
672
|
+
<term id='term-name2-1'>
|
673
|
+
<preferred>name2</preferred>
|
674
|
+
</term>
|
675
|
+
</terms>
|
676
|
+
<clause id='term-name' inline-header='false' obligation='normative'>
|
677
|
+
<title>Main</title>
|
678
|
+
<p id='_'>paragraph</p>
|
679
|
+
</clause>
|
680
|
+
<clause id='term-name2' inline-header='false' obligation='normative'>
|
681
|
+
<title>Second</title>
|
682
|
+
<p id='_'>
|
683
|
+
<em>name</em>
|
684
|
+
(
|
685
|
+
<xref target='term-name-1' />
|
686
|
+
) is a term
|
687
|
+
<em>name2</em>
|
688
|
+
(
|
689
|
+
<xref target='term-name2-1' />
|
690
|
+
) is a term
|
691
|
+
</p>
|
692
|
+
</clause>
|
693
|
+
</sections>
|
694
|
+
</standard-document>
|
695
|
+
XML
|
696
|
+
end
|
697
|
+
|
698
|
+
it 'generates unique ids which do not match existing ids' do
|
699
|
+
expect(convert).to(be_equivalent_to(xmlpp(output)))
|
700
|
+
end
|
701
|
+
end
|
795
702
|
|
796
|
-
|
703
|
+
context 'when missing actual ref' do
|
704
|
+
let(:input) do
|
705
|
+
<<~XML
|
706
|
+
#{ASCIIDOC_BLANK_HDR}
|
797
707
|
|
798
|
-
|
799
|
-
expect(Asciidoctor::Standoc::PlantUMLBlockMacroBackend).to receive(:plantuml_installed?) do
|
800
|
-
raise "PlantUML not installed"
|
801
|
-
false
|
802
|
-
end
|
803
|
-
end
|
708
|
+
== Terms and Definitions
|
804
709
|
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
710
|
+
=== name identity
|
711
|
+
|
712
|
+
[[name-check]]
|
713
|
+
=== name check
|
714
|
+
|
715
|
+
paragraph
|
810
716
|
|
811
|
-
|
812
|
-
|
813
|
-
|
717
|
+
term:[name check] is a term
|
718
|
+
|
719
|
+
term:[name identity] is a term
|
720
|
+
|
721
|
+
Moreover, term:[missing] is a term
|
722
|
+
XML
|
723
|
+
end
|
724
|
+
let(:output) do
|
725
|
+
<<~XML
|
726
|
+
#{BLANK_HDR}
|
727
|
+
<sections>
|
728
|
+
<terms id='_' obligation='normative'>
|
729
|
+
<title>Terms and definitions</title>
|
730
|
+
<p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
|
731
|
+
<term id='term-name-identity'>
|
732
|
+
<preferred>name identity</preferred>
|
733
|
+
</term>
|
734
|
+
<term id='name-check'>
|
735
|
+
<preferred>name check</preferred>
|
736
|
+
<definition>
|
737
|
+
<p id='_'>paragraph</p>
|
738
|
+
<p id='_'>
|
739
|
+
<em>name check</em>
|
740
|
+
(
|
741
|
+
<xref target='name-check'/>
|
742
|
+
) is a term
|
743
|
+
</p>
|
744
|
+
<p id='_'>
|
745
|
+
<em>name identity</em>
|
746
|
+
(
|
747
|
+
<xref target='term-name-identity'/>
|
748
|
+
) is a term
|
749
|
+
</p>
|
750
|
+
<p id="_">Moreover, (<strong>term “missing” not resolved</strong>) is a term
|
751
|
+
</p>
|
752
|
+
</definition>
|
753
|
+
</term>
|
754
|
+
</terms>
|
755
|
+
</sections>
|
756
|
+
</standard-document>
|
757
|
+
XML
|
758
|
+
end
|
759
|
+
|
760
|
+
it 'generates unique ids which do not match existing ids' do
|
761
|
+
expect(convert).to(be_equivalent_to(xmlpp(output)))
|
762
|
+
end
|
814
763
|
end
|
815
|
-
|
764
|
+
|
765
|
+
end
|
766
|
+
|
816
767
|
end
|