metanorma-standoc 2.2.1.1 → 2.2.2

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.
@@ -0,0 +1,250 @@
1
+ require "spec_helper"
2
+ require "open3"
3
+
4
+ RSpec.describe Metanorma::Requirements::Default do
5
+ it "processes recommendation" do
6
+ input = <<~"INPUT"
7
+ #{ASCIIDOC_BLANK_HDR}
8
+ [.recommendation,identifier="/ogc/recommendation/wfs/2",subject="user;developer, implementer",inherit="/ss/584/2015/level/1; /ss/584/2015/level/2",options="unnumbered",type=verification,model=ogc,tag=X,multilingual-rendering=common]
9
+ ====
10
+ I recommend this
11
+ ====
12
+ INPUT
13
+ output = <<~"OUTPUT"
14
+ #{BLANK_HDR}
15
+ <sections>
16
+ <recommendation id="_" unnumbered="true" type="verification" model="ogc" tag='X' multilingual-rendering='common'>
17
+ <identifier>/ogc/recommendation/wfs/2</identifier>
18
+ <subject>user</subject>
19
+ <subject>developer, implementer</subject>
20
+ <inherit>/ss/584/2015/level/1</inherit>
21
+ <inherit>/ss/584/2015/level/2</inherit>
22
+ <description><p id="_">I recommend this</p>
23
+ </description>
24
+ </recommendation>
25
+ </sections>
26
+ </standard-document>
27
+ OUTPUT
28
+
29
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
30
+ .to be_equivalent_to xmlpp(output)
31
+ end
32
+
33
+ it "processes requirement" do
34
+ input = <<~"INPUT"
35
+ #{ASCIIDOC_BLANK_HDR}
36
+ [[ABC]]
37
+ [.requirement,subsequence="A",inherit="/ss/584/2015/level/1 &amp; /ss/584/2015/level/2",number=3,keep-with-next=true,keep-lines-together=true,tag=X,multilingual-rendering=common]
38
+ .Title
39
+ ====
40
+ I recommend this
41
+
42
+ . http://www.example.com[]
43
+ . <<ABC>>
44
+ ====
45
+ INPUT
46
+ output = <<~OUTPUT
47
+ #{BLANK_HDR}
48
+ <sections>
49
+ <requirement id="ABC" subsequence="A" number="3" keep-with-next="true" keep-lines-together="true" tag='X' multilingual-rendering='common' model="default">
50
+ <title>Title</title>
51
+ <inherit>/ss/584/2015/level/1 &amp; /ss/584/2015/level/2</inherit>
52
+ <description><p id="_">I recommend this</p>
53
+ <ol id='_' type='arabic'>
54
+ <li>
55
+ <p id='_'>
56
+ <link target='http://www.example.com'/>
57
+ </p>
58
+ </li>
59
+ <li>
60
+ <p id='_'>
61
+ <xref target='ABC'/>
62
+ </p>
63
+ </li>
64
+ </ol>
65
+ </description>
66
+ </requirement>
67
+ </sections>
68
+ </standard-document>
69
+ OUTPUT
70
+
71
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
72
+ .to be_equivalent_to xmlpp(output)
73
+ end
74
+
75
+ it "processes permission" do
76
+ input = <<~"INPUT"
77
+ #{ASCIIDOC_BLANK_HDR}
78
+
79
+ [[ABC]]
80
+ [.permission,tag=X,multilingual-rendering=common]
81
+ ====
82
+ I recommend this
83
+ ====
84
+ INPUT
85
+ output = <<~"OUTPUT"
86
+ #{BLANK_HDR}
87
+ <sections>
88
+ <permission id="ABC" tag='X' multilingual-rendering='common' model="default">
89
+ <description><p id="_">I recommend this</p></description>
90
+ </permission>
91
+ </sections>
92
+ </standard-document>
93
+ OUTPUT
94
+
95
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
96
+ .to be_equivalent_to xmlpp(output)
97
+ end
98
+
99
+ it "processes nested permissions" do
100
+ input = <<~"INPUT"
101
+ #{ASCIIDOC_BLANK_HDR}
102
+ [.permission]
103
+ ====
104
+ I permit this
105
+
106
+ =====
107
+ Example 2
108
+ =====
109
+
110
+ [.permission]
111
+ =====
112
+ I also permit this
113
+
114
+ . List
115
+ . List
116
+ =====
117
+
118
+ [requirement,type="general",identifier="/req/core/quantities-uom"]
119
+ ======
120
+ ======
121
+ ====
122
+ INPUT
123
+ output = <<~"OUTPUT"
124
+ #{BLANK_HDR}
125
+ <sections>
126
+ <permission id="_" model="default"><description><p id="_">I permit this</p>
127
+ <example id="_">
128
+ <p id="_">Example 2</p>
129
+ </example></description>
130
+ <permission id="_" model="default">
131
+ <description><p id="_">I also permit this</p>
132
+ <ol id='_' type='arabic'>
133
+ <li>
134
+ <p id='_'>List</p>
135
+ </li>
136
+ <li>
137
+ <p id='_'>List</p>
138
+ </li>
139
+ </ol>
140
+ </description>
141
+ </permission>
142
+ <requirement id='_' type='general' model="default">
143
+ <identifier>/req/core/quantities-uom</identifier>
144
+ </requirement>
145
+ </permission>
146
+ </sections>
147
+ </standard-document>
148
+ OUTPUT
149
+
150
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
151
+ .to be_equivalent_to xmlpp(output)
152
+ end
153
+
154
+ it "processes recommendation with internal markup of structure" do
155
+ input = <<~"INPUT"
156
+ #{ASCIIDOC_BLANK_HDR}
157
+
158
+ [[ABC]]
159
+ [.recommendation,identifier="/ogc/recommendation/wfs/2",subject="user",classification="control-class:Technical;priority:P0;family:System &amp; Communications Protection,System and Communications Protocols",obligation="permission,recommendation",filename="reqt1.rq"]
160
+ ====
161
+ I recommend _this_.
162
+
163
+ [.specification,type="tabular",keep-with-next=true,keep-lines-together=true]
164
+ --
165
+ This is the object of the recommendation:
166
+ |===
167
+ |Object |Value
168
+ |Mission | Accomplished
169
+ |===
170
+ --
171
+
172
+ As for the measurement targets,
173
+
174
+ [.measurement-target]
175
+ --
176
+ The measurement target shall be measured as:
177
+ [stem]
178
+ ++++
179
+ r/1 = 0
180
+ ++++
181
+ --
182
+
183
+ [.verification]
184
+ --
185
+ The following code will be run for verification:
186
+
187
+ [source,CoreRoot]
188
+ ----
189
+ CoreRoot(success): HttpResponse
190
+ if (success)
191
+ recommendation(label: success-response)
192
+ end
193
+ ----
194
+ --
195
+
196
+ [.import%exclude]
197
+ --
198
+ [source,CoreRoot]
199
+ ----
200
+ success-response()
201
+ ----
202
+ --
203
+
204
+ [.component]
205
+ --
206
+ Hello
207
+ --
208
+
209
+ [.component,class=condition]
210
+ --
211
+ If this be thus
212
+ --
213
+ ====
214
+ INPUT
215
+ output = <<~"OUTPUT"
216
+ #{BLANK_HDR}
217
+ <sections>
218
+ <recommendation id="ABC" obligation="permission,recommendation" filename="reqt1.rq" model="default"><identifier>/ogc/recommendation/wfs/2</identifier><subject>user</subject>
219
+ <classification><tag>control-class</tag><value>Technical</value></classification><classification><tag>priority</tag><value>P0</value></classification><classification><tag>family</tag><value>System &amp; Communications Protection</value></classification><classification><tag>family</tag><value>System and Communications Protocols</value></classification>
220
+ <description><p id="_">I recommend <em>this</em>.</p>
221
+ </description><specification exclude="false" type="tabular" keep-with-next="true" keep-lines-together="true"><p id="_">This is the object of the recommendation:</p><table id="_"> <tbody> <tr> <td valign="top" align="left">Object</td> <td valign="top" align="left">Value</td> </tr> <tr> <td valign="top" align="left">Mission</td> <td valign="top" align="left">Accomplished</td> </tr> </tbody></table></specification><description>
222
+ <p id="_">As for the measurement targets,</p>
223
+ </description><measurement-target exclude="false"><p id="_">The measurement target shall be measured as:</p><formula id="_"> <stem type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac>
224
+ <mrow>
225
+ <mi>r</mi>
226
+ </mrow>
227
+ <mrow>
228
+ <mn>1</mn>
229
+ </mrow>
230
+ </mfrac><mo>=</mo><mn>0</mn></math></stem></formula></measurement-target>
231
+ <verification exclude="false"><p id="_">The following code will be run for verification:</p><sourcecode lang="CoreRoot" id="_">CoreRoot(success): HttpResponse
232
+ if (success)
233
+ recommendation(label: success-response)
234
+ end</sourcecode></verification>
235
+ <import exclude="true"> <sourcecode lang="CoreRoot" id="_">success-response()</sourcecode></import>
236
+ <component exclude='false' class='component'>
237
+ <p id='_'>Hello</p>
238
+ </component>
239
+ <component exclude='false' class='condition'>
240
+ <p id='_'>If this be thus</p>
241
+ </component>
242
+ </recommendation>
243
+ </sections>
244
+ </standard-document>
245
+ OUTPUT
246
+
247
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
248
+ .to be_equivalent_to xmlpp(output)
249
+ end
250
+ end
@@ -0,0 +1,173 @@
1
+ require "spec_helper"
2
+ require "fileutils"
3
+
4
+ RSpec.describe Metanorma::Requirements::Default do
5
+ it "moves requirement metadata deflist to correct location" do
6
+ input = <<~INPUT
7
+ #{ASCIIDOC_BLANK_HDR}
8
+
9
+ == Clause
10
+
11
+ [.requirement,subsequence="A",inherit="/ss/584/2015/level/1 &amp; /ss/584/2015/level/2"]
12
+ ====
13
+ [%metadata]
14
+ model:: ogc
15
+ type:: class
16
+ identifier:: http://www.opengis.net/spec/waterml/2.0/req/xsd-xml-rules[*req/core*]
17
+ subject:: Encoding of logical models
18
+ inherit:: urn:iso:dis:iso:19156:clause:7.2.2
19
+ inherit:: urn:iso:dis:iso:19156:clause:8
20
+ inherit:: http://www.opengis.net/doc/IS/GML/3.2/clause/2.4
21
+ inherit:: O&M Abstract model, OGC 10-004r3, clause D.3.4
22
+ inherit:: http://www.opengis.net/spec/SWE/2.0/req/core/core-concepts-used
23
+ inherit:: <<ref2>>
24
+ inherit:: <<ref3>>
25
+ target:: http://www.example.com
26
+ classification:: priority:P0
27
+ classification:: domain:Hydrology,Groundwater
28
+ classification:: control-class:Technical
29
+ obligation:: recommendation,requirement
30
+
31
+ I recommend this
32
+ ====
33
+ INPUT
34
+ output = <<~OUTPUT
35
+ #{BLANK_HDR}
36
+ <sections>
37
+ <clause id='_' inline-header='false' obligation='normative'>
38
+ <title>Clause</title>
39
+ <requirement id='_' subsequence='A' obligation='recommendation,requirement' model='ogc' type='class'>
40
+ <identifier>http://www.opengis.net/spec/waterml/2.0/req/xsd-xml-rules</identifier>
41
+ <subject>Encoding of logical models</subject>
42
+ <inherit>/ss/584/2015/level/1 &amp; /ss/584/2015/level/2</inherit>
43
+ <inherit>urn:iso:dis:iso:19156:clause:7.2.2</inherit>
44
+ <inherit>urn:iso:dis:iso:19156:clause:8</inherit>
45
+ <inherit>http://www.opengis.net/doc/IS/GML/3.2/clause/2.4</inherit>
46
+ <inherit>O&amp;M Abstract model, OGC 10-004r3, clause D.3.4</inherit>
47
+ <inherit>http://www.opengis.net/spec/SWE/2.0/req/core/core-concepts-used</inherit>
48
+ <inherit>
49
+ <xref target='ref2'/>
50
+ </inherit>
51
+ <inherit>
52
+ <xref target='ref3'/>
53
+ </inherit>
54
+ <classification>
55
+ <tag>priority</tag>
56
+ <value>P0</value>
57
+ </classification>
58
+ <classification>
59
+ <tag>domain</tag>
60
+ <value>Hydrology</value>
61
+ </classification>
62
+ <classification>
63
+ <tag>domain</tag>
64
+ <value>Groundwater</value>
65
+ </classification>
66
+ <classification>
67
+ <tag>control-class</tag>
68
+ <value>Technical</value>
69
+ </classification>
70
+ <classification>
71
+ <tag>target</tag>
72
+ <value><link target='http://www.example.com'/></value>
73
+ </classification>
74
+ <description>
75
+ <p id='_'>I recommend this</p>
76
+ </description>
77
+ </requirement>
78
+ </clause>
79
+ </sections>
80
+ </standard-document>
81
+ OUTPUT
82
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
83
+ .to be_equivalent_to xmlpp(output)
84
+ end
85
+
86
+ it "moves inherit macros to correct location" do
87
+ input = <<~INPUT
88
+ #{ASCIIDOC_BLANK_HDR}
89
+
90
+ == Clause
91
+
92
+ [.requirement,subsequence="A",inherit="/ss/584/2015/level/1 &amp; /ss/584/2015/level/2"]
93
+ .Title
94
+ ====
95
+ inherit:[A]
96
+ inherit:[B]
97
+ I recommend this
98
+ ====
99
+
100
+ [.requirement,subsequence="A",classification="X:Y"]
101
+ .Title
102
+ ====
103
+ inherit:[A]
104
+ I recommend this
105
+ ====
106
+
107
+ [.requirement,subsequence="A"]
108
+ .Title
109
+ ====
110
+ inherit:[A]
111
+ I recommend this
112
+ ====
113
+
114
+ [.requirement,subsequence="A"]
115
+ .Title
116
+ ====
117
+ inherit:[A]
118
+ ====
119
+
120
+ [.requirement,subsequence="A"]
121
+ ====
122
+ inherit:[A]
123
+ ====
124
+
125
+ INPUT
126
+ output = <<~OUTPUT
127
+ #{BLANK_HDR}
128
+ <sections>
129
+ <clause id='_' inline-header='false' obligation='normative'>
130
+ <title>Clause</title>
131
+ <requirement id='_' subsequence='A' model="default">
132
+ <title>Title</title>
133
+ <inherit>A</inherit>
134
+ <inherit>B</inherit>
135
+ <inherit>/ss/584/2015/level/1 &amp; /ss/584/2015/level/2</inherit>
136
+ <description>
137
+ <p id='_'> I recommend this</p>
138
+ </description>
139
+ </requirement>
140
+ <requirement id='_' subsequence='A' model="default">
141
+ <title>Title</title>
142
+ <inherit>A</inherit>
143
+ <classification>
144
+ <tag>X</tag>
145
+ <value>Y</value>
146
+ </classification>
147
+ <description>
148
+ <p id='_'> I recommend this</p>
149
+ </description>
150
+ </requirement>
151
+ <requirement id='_' subsequence='A' model="default">
152
+ <title>Title</title>
153
+ <inherit>A</inherit>
154
+ <description>
155
+ <p id='_'> I recommend this</p>
156
+ </description>
157
+ </requirement>
158
+ <requirement id='_' subsequence='A' model="default">
159
+ <title>Title</title>
160
+ <inherit>A</inherit>
161
+ </requirement>
162
+ <requirement id='_' subsequence='A' model="default">
163
+ <inherit>A</inherit>
164
+ </requirement>
165
+ </clause>
166
+ </sections>
167
+ </standard-document>
168
+ OUTPUT
169
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
170
+ .to be_equivalent_to xmlpp(output)
171
+ end
172
+ end
173
+