diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-05-13 07:17:09 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-05-28 10:38:23 +0200 |
commit | d836ec5cd5e4606b0dac076e5492a60645bfce74 (patch) | |
tree | 294acfdba07bb450999dd9d0c86c21d9572d5e32 /rtemsqual/tests | |
parent | 68478a047cb4d3d27c95dec377518b7877321632 (diff) |
specverify: New module
Diffstat (limited to '')
70 files changed, 3519 insertions, 0 deletions
diff --git a/rtemsqual/tests/spec-verify/c1.yml b/rtemsqual/tests/spec-verify/c1.yml new file mode 100644 index 00000000..ac9caf74 --- /dev/null +++ b/rtemsqual/tests/spec-verify/c1.yml @@ -0,0 +1,12 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +dict: + a: null +enabled-by: true +links: +- role: x + uid: c2 +list: [] +type: c +uid: 1 diff --git a/rtemsqual/tests/spec-verify/c2.yml b/rtemsqual/tests/spec-verify/c2.yml new file mode 100644 index 00000000..5ea57f13 --- /dev/null +++ b/rtemsqual/tests/spec-verify/c2.yml @@ -0,0 +1,10 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +dict: + b: null +enabled-by: true +links: [] +list: [] +str-contains: uvw +type: c diff --git a/rtemsqual/tests/spec-verify/c3.yml b/rtemsqual/tests/spec-verify/c3.yml new file mode 100644 index 00000000..9a427110 --- /dev/null +++ b/rtemsqual/tests/spec-verify/c3.yml @@ -0,0 +1,13 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +dict: [] +enabled-by: true +links: [] +list: + invalid: null +must-be-true: false +str: /c4 +str-contains: abc ghi +type: c +uid: nix diff --git a/rtemsqual/tests/spec-verify/c4.yml b/rtemsqual/tests/spec-verify/c4.yml new file mode 100644 index 00000000..e0195f37 --- /dev/null +++ b/rtemsqual/tests/spec-verify/c4.yml @@ -0,0 +1,18 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +any-dict: + a: b +bool: true +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +dict: null +enabled-by: true +float: 123.567 +int: 123 +links: [] +list: [] +must-be-true: true +other-int: 0 +str: abc +str-contains: abc uvw +type: c +uid: c3 diff --git a/rtemsqual/tests/spec-verify/d.yml b/rtemsqual/tests/spec-verify/d.yml new file mode 100644 index 00000000..68f65b9c --- /dev/null +++ b/rtemsqual/tests/spec-verify/d.yml @@ -0,0 +1,7 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +d-type: blub +enabled-by: true +links: [] +type: d diff --git a/rtemsqual/tests/spec-verify/d2.yml b/rtemsqual/tests/spec-verify/d2.yml new file mode 100644 index 00000000..488487d1 --- /dev/null +++ b/rtemsqual/tests/spec-verify/d2.yml @@ -0,0 +1,7 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +d-type: bla +enabled-by: true +links: [] +type: d diff --git a/rtemsqual/tests/spec-verify/d3.yml b/rtemsqual/tests/spec-verify/d3.yml new file mode 100644 index 00000000..06b30dad --- /dev/null +++ b/rtemsqual/tests/spec-verify/d3.yml @@ -0,0 +1,6 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +type: d diff --git a/rtemsqual/tests/spec-verify/e.yml b/rtemsqual/tests/spec-verify/e.yml new file mode 100644 index 00000000..b7527dee --- /dev/null +++ b/rtemsqual/tests/spec-verify/e.yml @@ -0,0 +1,6 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +type: e diff --git a/rtemsqual/tests/spec-verify/invalid.yml b/rtemsqual/tests/spec-verify/invalid.yml new file mode 100644 index 00000000..3c193f78 --- /dev/null +++ b/rtemsqual/tests/spec-verify/invalid.yml @@ -0,0 +1,7 @@ +INVALID: [] +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +type: spec-invalid diff --git a/rtemsqual/tests/spec-verify/keys-at-least-one-0.yml b/rtemsqual/tests/spec-verify/keys-at-least-one-0.yml new file mode 100644 index 00000000..8f9e4b5d --- /dev/null +++ b/rtemsqual/tests/spec-verify/keys-at-least-one-0.yml @@ -0,0 +1,6 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +type: keys-at-least-one diff --git a/rtemsqual/tests/spec-verify/keys-at-least-one-1.yml b/rtemsqual/tests/spec-verify/keys-at-least-one-1.yml new file mode 100644 index 00000000..31d17a4e --- /dev/null +++ b/rtemsqual/tests/spec-verify/keys-at-least-one-1.yml @@ -0,0 +1,7 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +key-a: null +type: keys-at-least-one diff --git a/rtemsqual/tests/spec-verify/keys-at-least-one-2.yml b/rtemsqual/tests/spec-verify/keys-at-least-one-2.yml new file mode 100644 index 00000000..d0eb8a29 --- /dev/null +++ b/rtemsqual/tests/spec-verify/keys-at-least-one-2.yml @@ -0,0 +1,8 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +key-a: null +key-b: null +type: keys-at-least-one diff --git a/rtemsqual/tests/spec-verify/keys-at-most-one-0.yml b/rtemsqual/tests/spec-verify/keys-at-most-one-0.yml new file mode 100644 index 00000000..2e3f0202 --- /dev/null +++ b/rtemsqual/tests/spec-verify/keys-at-most-one-0.yml @@ -0,0 +1,6 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +type: keys-at-most-one diff --git a/rtemsqual/tests/spec-verify/keys-at-most-one-1.yml b/rtemsqual/tests/spec-verify/keys-at-most-one-1.yml new file mode 100644 index 00000000..e2003342 --- /dev/null +++ b/rtemsqual/tests/spec-verify/keys-at-most-one-1.yml @@ -0,0 +1,7 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +key-a: null +type: keys-at-most-one diff --git a/rtemsqual/tests/spec-verify/keys-at-most-one-2.yml b/rtemsqual/tests/spec-verify/keys-at-most-one-2.yml new file mode 100644 index 00000000..88ee2aaa --- /dev/null +++ b/rtemsqual/tests/spec-verify/keys-at-most-one-2.yml @@ -0,0 +1,8 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +key-a: null +key-b: null +type: keys-at-most-one diff --git a/rtemsqual/tests/spec-verify/keys-exactly-one-0.yml b/rtemsqual/tests/spec-verify/keys-exactly-one-0.yml new file mode 100644 index 00000000..1a052978 --- /dev/null +++ b/rtemsqual/tests/spec-verify/keys-exactly-one-0.yml @@ -0,0 +1,6 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +type: keys-exactly-one diff --git a/rtemsqual/tests/spec-verify/keys-exactly-one-1.yml b/rtemsqual/tests/spec-verify/keys-exactly-one-1.yml new file mode 100644 index 00000000..2f233dd8 --- /dev/null +++ b/rtemsqual/tests/spec-verify/keys-exactly-one-1.yml @@ -0,0 +1,7 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +key-a: null +type: keys-exactly-one diff --git a/rtemsqual/tests/spec-verify/keys-exactly-one-2.yml b/rtemsqual/tests/spec-verify/keys-exactly-one-2.yml new file mode 100644 index 00000000..6226ec51 --- /dev/null +++ b/rtemsqual/tests/spec-verify/keys-exactly-one-2.yml @@ -0,0 +1,8 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] +key-a: null +key-b: null +type: keys-exactly-one diff --git a/rtemsqual/tests/spec-verify/notype.yml b/rtemsqual/tests/spec-verify/notype.yml new file mode 100644 index 00000000..8da253c5 --- /dev/null +++ b/rtemsqual/tests/spec-verify/notype.yml @@ -0,0 +1,5 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de +enabled-by: true +links: [] diff --git a/rtemsqual/tests/spec-verify/spec/copyright.yml b/rtemsqual/tests/spec-verify/spec/copyright.yml new file mode 100644 index 00000000..a8f46080 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/copyright.yml @@ -0,0 +1,21 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + str: + assert: + - re: ^\s*Copyright\s+\(C\)\s+[0-9]+,\s*[0-9]+\s+.+\s*$ + - re: ^\s*Copyright\s+\(C\)\s+[0-9]+\s+.+\s*$ + - re: ^\s*Copyright\s+\(C\)\s+.+\s*$ + description: | + A value of this type shall be a copyright statement of a copyright holder + of the specification item. +spec-name: Copyright +spec-type: copyright +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/copyrights.yml b/rtemsqual/tests/spec-verify/spec/copyrights.yml new file mode 100644 index 00000000..522e4f43 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/copyrights.yml @@ -0,0 +1,16 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + list: + description: null + spec-type: copyright +spec-name: Copyrights Type +spec-type: copyrights +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/enabled-by-list.yml b/rtemsqual/tests/spec-verify/spec/enabled-by-list.yml new file mode 100644 index 00000000..f84fff28 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/enabled-by-list.yml @@ -0,0 +1,16 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + list: + description: null + spec-type: enabled-by +spec-name: Enabled-By Expression List +spec-type: enabled-by-list +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/enabled-by.yml b/rtemsqual/tests/spec-verify/spec/enabled-by.yml new file mode 100644 index 00000000..fa7de056 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/enabled-by.yml @@ -0,0 +1,49 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: | + A value of this type shall be an expression which defines under which + conditions the specification item or parts of it are enabled. The expression + is evaluated with the use of an *enabled set*. This is a set of strings + which indicate enabled features. +spec-example: null +spec-info: + bool: + description: | + This expression evaluates directly to the boolean value. + dict: + attributes: + and: + description: | + The *and* operator evaluates to the *logical and* of the evaluation + results of the expressions in the list. + spec-type: enabled-by-list + not: + description: | + The *not* operator evaluates to the *logical not* of the evaluation + results of the expression. + spec-type: enabled-by + or: + description: | + The *or* operator evaluates to the *logical or* of the evaluation + results of the expressions in the list. + spec-type: enabled-by-list + description: | + Each attribute defines an operator. + required-attributes: exactly-one + list: + description: | + This list of expressions evaluates to the *logical or* of the evaluation + results of the expressions in the list. + spec-type: enabled-by + str: + description: | + If the value is in the *enabled set*, this expression evaluates to true, + otherwise to false. +spec-name: Enabled-By Expression +spec-type: enabled-by +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/link.yml b/rtemsqual/tests/spec-verify/spec/link.yml new file mode 100644 index 00000000..748ce840 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/link.yml @@ -0,0 +1,26 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + role: + description: | + This mandatory attribute defines the role of the link. + spec-type: name + uid: + description: | + This mandatory attribute defines the link target item UID. + spec-type: uid + description: | + This attribute value shall a link to a specification item. + required-attributes: all +spec-name: Link +spec-type: link +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/links.yml b/rtemsqual/tests/spec-verify/spec/links.yml new file mode 100644 index 00000000..77092dfa --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/links.yml @@ -0,0 +1,17 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: | + This attribute value shall be a list of links to specification items. +spec-example: null +spec-info: + list: + description: null + spec-type: link +spec-name: Item Links Type +spec-type: links +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/list-str.yml b/rtemsqual/tests/spec-verify/spec/list-str.yml new file mode 100644 index 00000000..4d1246fb --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/list-str.yml @@ -0,0 +1,17 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: | + This attribute value shall a list of strings. +spec-example: null +spec-info: + list: + description: null + spec-type: str +spec-name: String List Type +spec-type: list-str +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/optional-str.yml b/rtemsqual/tests/spec-verify/spec/optional-str.yml new file mode 100644 index 00000000..3f409247 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/optional-str.yml @@ -0,0 +1,16 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + none: null + str: + description: null +spec-name: Optional String +spec-type: optional-str +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/root.yml b/rtemsqual/tests/spec-verify/spec/root.yml new file mode 100644 index 00000000..93fd3a9b --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/root.yml @@ -0,0 +1,39 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: [] +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + SPDX-License-Identifier: + description: | + This mandatory attribute defines the license of this item. + spec-type: spdx-license-identifier + copyrights: + description: | + This mandatory attribute defines the copyright holders and copyright + information of this item. + spec-type: copyrights + enabled-by: + description: | + This mandatory attribute defines the conditions under which this item + is enabled. + spec-type: enabled-by + links: + description: | + This mandatory attribute defines the links of this items to other + items. + spec-type: links + type: + description: | + This mandatory attribute defines the type of this item. + spec-type: name + description: | + This is the root specification item type. + required-attributes: all +spec-name: Root Item Type +spec-type: root +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spdx-license-identifier.yml b/rtemsqual/tests/spec-verify/spec/spdx-license-identifier.yml new file mode 100644 index 00000000..375f3b21 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spdx-license-identifier.yml @@ -0,0 +1,21 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: | + This attribute value defines the license of this item expressed though an + SPDX License Identifier. +spec-example: null +spec-info: + str: + assert: + - eq: CC-BY-SA-4.0 OR BSD-2-Clause + - eq: BSD-2-Clause + - eq: CC-BY-SA-4.0 + description: null +spec-name: SPDX License Identifier +spec-type: spdx-license-identifier +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-assert-float-list.yml b/rtemsqual/tests/spec-verify/spec/spec-assert-float-list.yml new file mode 100644 index 00000000..2ff8a414 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-assert-float-list.yml @@ -0,0 +1,16 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + list: + description: null + spec-type: spec-assert-float +spec-name: Floating-Point Assert Specification List +spec-type: spec-assert-float-list +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-assert-float.yml b/rtemsqual/tests/spec-verify/spec/spec-assert-float.yml new file mode 100644 index 00000000..9ed1a3fd --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-assert-float.yml @@ -0,0 +1,71 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: | + A value of this type shall be an expression which asserts that the + floating-point value of the specified attribute satisfies the required + constraints. +spec-example: null +spec-info: + dict: + attributes: + and: + description: | + The *and* operator evaluates to the *logical and* of the evaluation + results of the expressions in the list. + spec-type: spec-assert-float-list + eq: + description: | + The *eq* operator evaluates to true, if the value to check is equal + to the value of this attribute, otherwise to false. + spec-type: float + ge: + description: | + The *ge* operator evaluates to true, if the value to check is greater + than or equal to the value of this attribute, otherwise to false. + spec-type: float + gt: + description: | + The *gt* operator evaluates to true, if the value to check is greater + than the value of this attribute, otherwise to false. + spec-type: float + le: + description: | + The *le* operator evaluates to true, if the value to check is less + than or equal to the value of this attribute, otherwise to false. + spec-type: float + lt: + description: | + The *lt* operator evaluates to true, if the value to check is less + than the value of this attribute, otherwise to false. + spec-type: float + ne: + description: | + The *ne* operator evaluates to true, if the value to check is not + equal to the value of this attribute, otherwise to false. + spec-type: float + not: + description: | + The *not* operator evaluates to the *logical not* of the evaluation + results of the expression. + spec-type: spec-assert-float + or: + description: | + The *or* operator evaluates to the *logical or* of the evaluation + results of the expressions in the list. + spec-type: spec-assert-float-list + description: | + Each attribute defines an operator. + required-attributes: exactly-one + list: + description: | + This list of expressions evaluates to the *logical or* of the evaluation + results of the expressions in the list. + spec-type: spec-assert-float +spec-name: Floating-Point Assert Specification +spec-type: spec-assert-float +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-assert-int-list.yml b/rtemsqual/tests/spec-verify/spec/spec-assert-int-list.yml new file mode 100644 index 00000000..27e689b3 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-assert-int-list.yml @@ -0,0 +1,16 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + list: + description: null + spec-type: spec-assert-int +spec-name: Integer Assert Specification List +spec-type: spec-assert-int-list +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-assert-int.yml b/rtemsqual/tests/spec-verify/spec/spec-assert-int.yml new file mode 100644 index 00000000..983e1930 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-assert-int.yml @@ -0,0 +1,70 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: | + A value of this type shall be an expression which asserts that the integer + value of the specified attribute satisfies the required constraints. +spec-example: null +spec-info: + dict: + attributes: + and: + description: | + The *and* operator evaluates to the *logical and* of the evaluation + results of the expressions in the list. + spec-type: spec-assert-int-list + eq: + description: | + The *eq* operator evaluates to true, if the value to check is equal + to the value of this attribute, otherwise to false. + spec-type: int + ge: + description: | + The *ge* operator evaluates to true, if the value to check is greater + than or equal to the value of this attribute, otherwise to false. + spec-type: int + gt: + description: | + The *gt* operator evaluates to true, if the value to check is greater + than the value of this attribute, otherwise to false. + spec-type: int + le: + description: | + The *le* operator evaluates to true, if the value to check is less + than or equal to the value of this attribute, otherwise to false. + spec-type: int + lt: + description: | + The *lt* operator evaluates to true, if the value to check is less + than the value of this attribute, otherwise to false. + spec-type: int + ne: + description: | + The *ne* operator evaluates to true, if the value to check is not + equal to the value of this attribute, otherwise to false. + spec-type: int + not: + description: | + The *not* operator evaluates to the *logical not* of the evaluation + results of the expression. + spec-type: spec-assert-int + or: + description: | + The *or* operator evaluates to the *logical or* of the evaluation + results of the expressions in the list. + spec-type: spec-assert-int-list + description: | + Each attribute defines an operator. + required-attributes: exactly-one + list: + description: | + This list of expressions evaluates to the *logical or* of the evaluation + results of the expressions in the list. + spec-type: spec-assert-int +spec-name: Integer Assert Specification +spec-type: spec-assert-int +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-assert-str-list.yml b/rtemsqual/tests/spec-verify/spec/spec-assert-str-list.yml new file mode 100644 index 00000000..39a54916 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-assert-str-list.yml @@ -0,0 +1,16 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + list: + description: null + spec-type: spec-assert-str +spec-name: String Assert Specification List +spec-type: spec-assert-str-list +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-assert-str.yml b/rtemsqual/tests/spec-verify/spec/spec-assert-str.yml new file mode 100644 index 00000000..eccbf710 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-assert-str.yml @@ -0,0 +1,94 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: | + A value of this type shall be an expression which asserts that the string of + the specified attribute satisfies the required constraints. +spec-example: null +spec-info: + dict: + attributes: + and: + description: | + The *and* operator evaluates to the *logical and* of the evaluation + results of the expressions in the list. + spec-type: spec-assert-str-list + contains: + description: | + The *contains* operator evaluates to true, if the string to check + converted to lower case with all white space characters converted to + a single space character contains a string of the list of strings of + this attribute, otherwise to false. + spec-type: list-str + eq: + description: | + The *eq* operator evaluates to true, if the string to check is equal + to the value of this attribute, otherwise to false. + spec-type: str + ge: + description: | + The *ge* operator evaluates to true, if the string to check is + greater than or equal to the value of this attribute, otherwise to + false. + spec-type: str + gt: + description: | + The *gt* operator evaluates to true, if the string to check is + greater than the value of this attribute, otherwise to false. + spec-type: str + in: + description: | + The *in* operator evaluates to true, if the string to check is + contained in the list of strings of this attribute, otherwise to + false. + spec-type: list-str + le: + description: | + The *le* operator evaluates to true, if the string to check is less + than or equal to the value of this attribute, otherwise to false. + spec-type: str + lt: + description: | + The *lt* operator evaluates to true, if the string to check is less + than the value of this attribute, otherwise to false. + spec-type: str + ne: + description: | + The *ne* operator evaluates to true, if the string to check is not + equal to the value of this attribute, otherwise to false. + spec-type: str + not: + description: | + The *not* operator evaluates to the *logical not* of the evaluation + results of the expression. + spec-type: spec-assert-str + or: + description: | + The *or* operator evaluates to the *logical or* of the evaluation + results of the expressions in the list. + spec-type: spec-assert-str-list + re: + description: | + The *re* operator evaluates to true, if the string to check matches + with the regular expression of this attribute, otherwise to false. + spec-type: str + uid: + description: | + The *uid* operator evaluates to true, if the string is a valid UID, + otherwise to false. + spec-type: none + description: | + Each attribute defines an operator. + required-attributes: exactly-one + list: + description: | + This list of expressions evaluates to the *logical or* of the evaluation + results of the expressions in the list. + spec-type: spec-assert-str +spec-name: String Assert Specification +spec-type: spec-assert-str +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-attribute-value.yml b/rtemsqual/tests/spec-verify/spec/spec-attribute-value.yml new file mode 100644 index 00000000..f824de54 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-attribute-value.yml @@ -0,0 +1,28 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + description: + description: | + This mandatory attribute shall be the description of the specified + attribute. + spec-type: optional-str + spec-type: + description: | + This mandatory attribute defines the specification type of the + specified attribute. + spec-type: name + description: | + This attribute set specifies an attribute value. + required-attributes: all +spec-name: Attribute Value Specification +spec-type: spec-attribute-value +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-attributes.yml b/rtemsqual/tests/spec-verify/spec/spec-attributes.yml new file mode 100644 index 00000000..c5299138 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-attributes.yml @@ -0,0 +1,21 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: {} + description: null + generic-attributes: + description: | + The generic attributes specify an attribute set. + spec-type: spec-attribute-value + required-attributes: none +spec-name: Attribute Specification +spec-type: spec-attributes +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-bool.yml b/rtemsqual/tests/spec-verify/spec/spec-bool.yml new file mode 100644 index 00000000..12f932b6 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-bool.yml @@ -0,0 +1,34 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + assert: + description: | + This optional attribute defines the value constraint of the specified + boolean value. If the value of the assert attribute is true, then + the value of the specified boolean value shall be true. If the value + of the assert attribute is false, then the value of the specified + boolean value shall be false. In case the assert attribute is not + present, then the value of the specified boolean value may be true or + false. + spec-type: bool + description: + description: | + This mandatory attribute shall be the description of the specified + boolean value. + spec-type: optional-str + description: | + This attribute set specifies a boolean value. + required-attributes: + - description +spec-name: Boolean Value Specification +spec-type: spec-bool +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-dict.yml b/rtemsqual/tests/spec-verify/spec/spec-dict.yml new file mode 100644 index 00000000..411d0370 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-dict.yml @@ -0,0 +1,41 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + attributes: + description: | + This mandatory attribute defines the explicitly defined attributes of + the specified attribute set. + spec-type: spec-attributes + description: + description: | + This mandatory attribute shall be the description of the specified + attribute set. + spec-type: optional-str + generic-attributes: + description: | + This optional attribute defines the generic attributes of the + specified attribute set. + spec-type: spec-generic-attributes + required-attributes: + description: | + This mandatory attribute defines the required attributes of the + specified attribute set. + spec-type: spec-required-attributes + description: | + This set of attributes specifies a set of attributes. + required-attributes: + - attributes + - description + - required-attributes +spec-name: Attribute Set Specification +spec-type: spec-dict +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-float.yml b/rtemsqual/tests/spec-verify/spec/spec-float.yml new file mode 100644 index 00000000..1b0e4925 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-float.yml @@ -0,0 +1,31 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + assert: + description: | + This optional attribute defines the value constraints of the + specified floating-point value. In case the assert attribute is not + present, then the value of the specified floating-point value may be + every valid floating-point number. + spec-type: spec-assert-float + description: + description: | + This mandatory attribute shall be the description of the specified + floating-point value. + spec-type: optional-str + description: | + This attribute set specifies a floating-point value. + required-attributes: + - description +spec-name: Floating-Point Value Specification +spec-type: spec-float +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-generic-attributes.yml b/rtemsqual/tests/spec-verify/spec/spec-generic-attributes.yml new file mode 100644 index 00000000..71fb976d --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-generic-attributes.yml @@ -0,0 +1,30 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + description: + description: | + This mandatory attribute shall be the description of the generic + attributes. + spec-type: optional-str + spec-type: + description: | + This mandatory attribute defines the specification type of the + generic attribute values. + spec-type: name + description: | + This set of attributes specifies generic attributes. Generic attributes + are attributes which are not explicitly defined. They are restricted to + a uniform attribute value type. + required-attributes: all +spec-name: Generic Attributes Specification +spec-type: spec-generic-attributes +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-info.yml b/rtemsqual/tests/spec-verify/spec/spec-info.yml new file mode 100644 index 00000000..18ecf5c5 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-info.yml @@ -0,0 +1,46 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + bool: + description: | + This attribute specifies a boolean value. + spec-type: spec-bool + dict: + description: | + This attribute specifies a set of attributes. + spec-type: spec-dict + float: + description: | + This attribute specifies a floating-point value. + spec-type: spec-float + int: + description: | + This attribute specifies an integer value. + spec-type: spec-int + list: + description: | + This attribute specifies a list of attributes or values. + spec-type: spec-list + none: + description: | + This attribute indicates that no value is required. + spec-type: none + str: + description: | + This attribute specifies a string. + spec-type: spec-str + description: | + This attribute set specifies attribute values. + required-attributes: at-least-one +spec-name: Specification Information +spec-type: spec-info +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-int.yml b/rtemsqual/tests/spec-verify/spec/spec-int.yml new file mode 100644 index 00000000..2f7394b0 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-int.yml @@ -0,0 +1,31 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + assert: + description: | + This optional attribute defines the value constraints of the + specified integer value. In case the assert attribute is not + present, then the value of the specified integer value may be every + valid integer number. + spec-type: spec-assert-int + description: + description: | + This mandatory attribute shall be the description of the specified + integer value. + spec-type: optional-str + description: | + This attribute set specifies an integer value. + required-attributes: + - description +spec-name: Integer Value Specification +spec-type: spec-int +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-list.yml b/rtemsqual/tests/spec-verify/spec/spec-list.yml new file mode 100644 index 00000000..2c60db37 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-list.yml @@ -0,0 +1,28 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + description: + description: | + This mandatory attribute shall be the description of the specified + list. + spec-type: optional-str + spec-type: + description: | + This mandatory attribute defines the specification type of elements + of the specified list. + spec-type: name + description: | + This attribute set specifies a list of attributes or values. + required-attributes: all +spec-name: List Specification +spec-type: spec-list +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-member.yml b/rtemsqual/tests/spec-verify/spec/spec-member.yml new file mode 100644 index 00000000..60707f97 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-member.yml @@ -0,0 +1,22 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +- role: spec-refinement + spec-key: role + spec-value: spec-member + uid: link +spec-description: null +spec-example: null +spec-info: + dict: + attributes: {} + description: | + This specification type defines the specification membership role of links. + required-attributes: none +spec-name: Specification Member Link Role +spec-type: spec-member +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-refinement.yml b/rtemsqual/tests/spec-verify/spec/spec-refinement.yml new file mode 100644 index 00000000..e95467ae --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-refinement.yml @@ -0,0 +1,33 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +- role: spec-refinement + spec-key: role + spec-value: spec-refinement + uid: link +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + spec-key: + description: | + This mandatory attribute defines the specification type refinement + attribute key of the specification refinement. + spec-type: name + spec-value: + description: | + This mandatory attribute defines the specification type refinement + attribute value of the specification refinement. + spec-type: name + description: | + This specification type defines the specification refinement role of + links. + required-attributes: all +spec-name: Specification Refinement Link Role +spec-type: spec-refinement +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-required-attributes.yml b/rtemsqual/tests/spec-verify/spec/spec-required-attributes.yml new file mode 100644 index 00000000..adf6f47b --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-required-attributes.yml @@ -0,0 +1,30 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: | + This attribute value defines which of the explicitly defined attributes are + required. +spec-example: null +spec-info: + list: + description: | + This list defines the required attributes through their keys. + spec-type: name + str: + assert: + in: + - all + - at-least-one + - at-most-one + - exactly-one + - none + description: | + This string defines the how many explicitly defined attributes are + required. +spec-name: Required Attributes Specification +spec-type: spec-required-attributes +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec-str.yml b/rtemsqual/tests/spec-verify/spec/spec-str.yml new file mode 100644 index 00000000..1ccba6f4 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec-str.yml @@ -0,0 +1,30 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + dict: + attributes: + assert: + description: | + This optional attribute defines the constraints of the specified + string. In case the assert attribute is not present, then the + specified string may be every valid string. + spec-type: spec-assert-str + description: + description: | + This mandatory attribute shall be the description of the specified + string attribute. + spec-type: optional-str + description: | + This attribute set specifies a string. + required-attributes: + - description +spec-name: String Specification +spec-type: spec-str +type: spec diff --git a/rtemsqual/tests/spec-verify/spec/spec.yml b/rtemsqual/tests/spec-verify/spec/spec.yml new file mode 100644 index 00000000..7f33c78a --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec/spec.yml @@ -0,0 +1,74 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +- role: spec-refinement + spec-key: type + spec-value: spec + uid: root +spec-description: null +spec-example: | + SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause + copyrights: + - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + enabled-by: true + links: + - role: spec-member + uid: root + - role: spec-refinement + spec-key: type + spec-value: example + uid: root + spec-description: null + spec-example: null + spec-info: + dict: + attributes: + an-example-attribute: + description: | + This mandatory attribute shall be an example. + spec-type: optional-str + example-number: + description: | + This mandatory attribute shall be the example number. + spec-type: int + description: | + This set of attributes gives an example. + required-attributes: all + spec-name: Example Item Type + spec-type: spec + type: spec +spec-info: + dict: + attributes: + spec-description: + description: | + This mandatory attribute shall be the description of the + specification type. + spec-type: optional-str + spec-example: + description: | + This mandatory attribute shall an example of the specification type. + spec-type: optional-str + spec-info: + description: | + This mandatory attribute defines the specification type information. + spec-type: spec-info + spec-name: + description: | + This mandatory attribute shall be the human readable name of the + specification type. + spec-type: optional-str + spec-type: + description: | + This mandatory attribute defines the specification type name. + spec-type: name + description: | + This set of attributes specifies specification types. + required-attributes: all +spec-name: Specification Item Type +spec-type: spec +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/any-dict.yml b/rtemsqual/tests/spec-verify/spec2/any-dict.yml new file mode 100644 index 00000000..5adf31c4 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/any-dict.yml @@ -0,0 +1,16 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + dict: + attributes: {} + generic-attributes: + spec-type: str + required-attributes: none +spec-type: any-dict +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/c.yml b/rtemsqual/tests/spec-verify/spec2/c.yml new file mode 100644 index 00000000..8c3fcb53 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/c.yml @@ -0,0 +1,40 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +- role: spec-refinement + spec-key: type + spec-value: c + uid: /spec/root +spec-example: null +spec-info: + dict: + attributes: + any-dict: + spec-type: any-dict + bool: + spec-type: some-bool + dict: + spec-type: some-dict + float: + spec-type: some-float + int: + spec-type: some-int + list: + spec-type: some-list + must-be-true: + spec-type: must-be-true + other-int: + spec-type: other-int + str: + spec-type: some-str + str-contains: + spec-type: str-contains + uid: + spec-type: uid + required-attributes: all +spec-type: c +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/d-a.yml b/rtemsqual/tests/spec-verify/spec2/d-a.yml new file mode 100644 index 00000000..861ead49 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/d-a.yml @@ -0,0 +1,22 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +- role: spec-refinement + spec-key: d-type + spec-value: blub + uid: d +- role: other + uid: d +spec-example: null +spec-info: + dict: + attributes: + d-type: + spec-type: x + required-attributes: none +spec-type: d-a +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/d.yml b/rtemsqual/tests/spec-verify/spec2/d.yml new file mode 100644 index 00000000..5557dabe --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/d.yml @@ -0,0 +1,21 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +- role: spec-refinement + spec-key: type + spec-value: d + uid: /spec/root +spec-example: null +spec-info: + dict: + attributes: + d-type: + spec-type: name + required-attributes: + - d-type +spec-type: d +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/invalid.yml b/rtemsqual/tests/spec-verify/spec2/invalid.yml new file mode 100644 index 00000000..20194144 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/invalid.yml @@ -0,0 +1,24 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +- role: spec-refinement + spec-key: type + spec-value: spec-invalid + uid: /spec/root +spec-example: null +spec-info: + dict: + attributes: + INVALID: + spec-type: invalid + required-attributes: none + none: true + str: + foo: bar + unexpected: null +spec-type: spec-invalid +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/keys-at-least-one.yml b/rtemsqual/tests/spec-verify/spec2/keys-at-least-one.yml new file mode 100644 index 00000000..d1944f17 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/keys-at-least-one.yml @@ -0,0 +1,22 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +- role: spec-refinement + spec-key: type + spec-value: keys-at-least-one + uid: /spec/root +spec-example: null +spec-info: + dict: + attributes: + key-a: + spec-type: none + key-b: + spec-type: none + required-attributes: at-least-one +spec-type: keys-at-least-one +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/keys-at-most-one.yml b/rtemsqual/tests/spec-verify/spec2/keys-at-most-one.yml new file mode 100644 index 00000000..16581b1d --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/keys-at-most-one.yml @@ -0,0 +1,22 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +- role: spec-refinement + spec-key: type + spec-value: keys-at-most-one + uid: /spec/root +spec-example: null +spec-info: + dict: + attributes: + key-a: + spec-type: none + key-b: + spec-type: none + required-attributes: at-most-one +spec-type: keys-at-most-one +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/keys-exactly-one.yml b/rtemsqual/tests/spec-verify/spec2/keys-exactly-one.yml new file mode 100644 index 00000000..84c17457 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/keys-exactly-one.yml @@ -0,0 +1,22 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +- role: spec-refinement + spec-key: type + spec-value: keys-exactly-one + uid: /spec/root +spec-example: null +spec-info: + dict: + attributes: + key-a: + spec-type: none + key-b: + spec-type: none + required-attributes: exactly-one +spec-type: keys-exactly-one +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/must-be-true.yml b/rtemsqual/tests/spec-verify/spec2/must-be-true.yml new file mode 100644 index 00000000..eaf0ea14 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/must-be-true.yml @@ -0,0 +1,13 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + bool: + assert: true +spec-type: must-be-true +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/other-int.yml b/rtemsqual/tests/spec-verify/spec2/other-int.yml new file mode 100644 index 00000000..f0209c08 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/other-int.yml @@ -0,0 +1,12 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + int: {} +spec-type: other-int +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/some-bool.yml b/rtemsqual/tests/spec-verify/spec2/some-bool.yml new file mode 100644 index 00000000..3204d479 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/some-bool.yml @@ -0,0 +1,12 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + bool: {} +spec-type: some-bool +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/some-dict.yml b/rtemsqual/tests/spec-verify/spec2/some-dict.yml new file mode 100644 index 00000000..534b6538 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/some-dict.yml @@ -0,0 +1,17 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + dict: + attributes: + a: + spec-type: none + required-attributes: none + none: null +spec-type: some-dict +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/some-float.yml b/rtemsqual/tests/spec-verify/spec2/some-float.yml new file mode 100644 index 00000000..114f6feb --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/some-float.yml @@ -0,0 +1,14 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + float: + assert: + - le: 0.0 +spec-type: some-float +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/some-int.yml b/rtemsqual/tests/spec-verify/spec2/some-int.yml new file mode 100644 index 00000000..8f59d8a1 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/some-int.yml @@ -0,0 +1,42 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + int: + assert: + - and: + - not: + eq: 8 + - eq: 8 + - and: + - eq: 8 + - ne: 8 + - and: + - ge: 8 + - le: 8 + - and: + - gt: 8 + - lt: 8 + - and: + - le: 8 + - ge: 8 + - and: + - lt: 8 + - gt: 8 + - and: + - or: + - eq: 8 + - ne: 8 + - eq: 1 + - ne: 2 + - le: 3 + - lt: 4 + - ge: 5 + - gt: 6 +spec-type: some-int +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/some-list.yml b/rtemsqual/tests/spec-verify/spec2/some-list.yml new file mode 100644 index 00000000..b3b45086 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/some-list.yml @@ -0,0 +1,13 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + list: + spec-type: none +spec-type: some-list +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/some-str.yml b/rtemsqual/tests/spec-verify/spec2/some-str.yml new file mode 100644 index 00000000..c75aaf10 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/some-str.yml @@ -0,0 +1,17 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + str: + assert: + - uid: null + - eq: abc + - ne: abc + - re: abc +spec-type: some-str +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/sta.yml b/rtemsqual/tests/spec-verify/spec2/sta.yml new file mode 100644 index 00000000..1c70a1ce --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/sta.yml @@ -0,0 +1,9 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: [] +spec-example: null +spec-info: {} +spec-type: a +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/str-contains.yml b/rtemsqual/tests/spec-verify/spec2/str-contains.yml new file mode 100644 index 00000000..fbd7b856 --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/str-contains.yml @@ -0,0 +1,20 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + str: + assert: + and: + - contains: + - abc + - def + - not: + contains: + - ghi +spec-type: str-contains +type: spec diff --git a/rtemsqual/tests/spec-verify/spec2/x.yml b/rtemsqual/tests/spec-verify/spec2/x.yml new file mode 100644 index 00000000..e96d281a --- /dev/null +++ b/rtemsqual/tests/spec-verify/spec2/x.yml @@ -0,0 +1,14 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: /spec/root +spec-example: null +spec-info: + str: + assert: + eq: x +spec-type: x +type: spec diff --git a/rtemsqual/tests/test_specdoc.py b/rtemsqual/tests/test_specdoc.py new file mode 100644 index 00000000..8422d998 --- /dev/null +++ b/rtemsqual/tests/test_specdoc.py @@ -0,0 +1,185 @@ +# SPDX-License-Identifier: BSD-2-Clause +""" Unit tests for the rtemsqual.specdoc module. """ + +# Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import os + +from rtemsqual.items import ItemCache +from rtemsqual.specdoc import document +from rtemsqual.tests.util import create_item_cache_config_and_copy_spec + + +def test_document(tmpdir): + item_cache_config = create_item_cache_config_and_copy_spec( + tmpdir, "spec-doc") + item_cache = ItemCache(item_cache_config) + doc_target = os.path.join(tmpdir, "items.rst") + config = { + "root-type": "/root", + "doc-target": doc_target, + } + document(config, item_cache) + with open(doc_target, "r") as src: + content = """.. SPDX-License-Identifier: CC-BY-SA-4.0 + +.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + +.. _SectionSpecificationItems: + +Specification Items +=================== + +.. _SectionSpecificationItemTypes: + +Specification Item Types +------------------------ + +The specification item types have the following hierarchy: + +* :ref:`SpecTypeRoot` + + * :ref:`SpecTypeA` + + * :ref:`SpecTypeB` + +.. _SpecTypeRoot: + +Root +^^^^ + +A value of this type shall be of one of the following variants: + +* The value may be a boolean. + +* The value may be a set of attributes. All explicitly defined attributes shall + be specified. The following attributes are explicitly defined for this type: + + type + The attribute value shall be a :ref:`SpecTypeName`. + + In addition to the explicitly defined attributes above, generic attributes + may be defined. Each attribute key shall be a :ref:`SpecTypeName`. The + generic attribute value shall be a :ref:`SpecTypeRoot`. + +* The value may be a floating-point number. + +* The value may be an integer number. + +* The value may be a list. Each list element shall be a :ref:`SpecTypeRoot`. + +* There may by be no value (null). + +* The value may be a string. + +This type is refined by the following types: + +* :ref:`SpecTypeA` + +* :ref:`SpecTypeB` + +.. _SpecTypeA: + +A +^ + +This type refines the :ref:`SpecTypeRoot` though the ``type`` attribute if the +value is ``a``. + +The following attributes are explicitly defined for this type: + +a + The attribute value shall be an :ref:`SpecTypeA`. + +.. _SpecTypeB: + +B +^ + +This type refines the following types: + +* :ref:`SpecTypeD` though the ``d1`` attribute if the value is ``b`` + +* :ref:`SpecTypeRoot` though the ``type`` attribute if the value is ``b`` +Generic attributes may be defined. Each attribute key shall be a +:ref:`SpecTypeName`. The value shall be a list. Each list element shall be a +string. + +.. _SectionSpecificationAttributeSetsAndValueTypes: + +Specification Attribute Sets and Value Types +-------------------------------------------- + +.. _SpecTypeC: + +C +^ + +Only the ``c`` attribute is required. The following attributes are explicitly +defined for this type: + +c + The attribute value shall be a floating-point number. + +.. _SpecTypeD: + +D +^ + +The following explicitly defined attributes are required: + +* ``d1`` + +* ``d2`` + +The following attributes are explicitly defined for this type: + +d1 + The attribute value shall be a :ref:`SpecTypeName`. + +d2 + The attribute shall have no value. + +This type is refined by the following types: + +* :ref:`SpecTypeB` + +.. _SpecTypeName: + +Name +^^^^ + +The value shall be a string. A string is a valid name if it matches with the +``[a-z][a-z0-9-]*`` regular expression or is equal to +``SPDX-License-Identifier``. + +.. _SpecTypeUID: + +UID +^^^ + +The value shall be a string. The string shall be a valid absolute or relative +item UID. +""" + assert content == src.read() diff --git a/rtemsqual/tests/test_specverify.py b/rtemsqual/tests/test_specverify.py new file mode 100644 index 00000000..c0cdb186 --- /dev/null +++ b/rtemsqual/tests/test_specverify.py @@ -0,0 +1,1808 @@ +# SPDX-License-Identifier: BSD-2-Clause +""" Unit tests for the rtemsqual.specverify module. """ + +# Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import logging + +from rtemsqual.items import ItemCache +from rtemsqual.specverify import verify +from rtemsqual.tests.util import create_item_cache_config_and_copy_spec + + +def test_no_root_type(caplog, tmpdir): + item_cache_config = create_item_cache_config_and_copy_spec( + tmpdir, "spec-verify") + item_cache = ItemCache(item_cache_config) + config = {} + caplog.set_level(logging.INFO) + verify(config, item_cache) + log = "\n".join( + [f"{rec.levelname} {rec.message}" for rec in caplog.records]) + assert log == """ERROR configuration has no root type""" + + +def test_no_root_item(caplog, tmpdir): + item_cache_config = create_item_cache_config_and_copy_spec( + tmpdir, "spec-verify") + item_cache = ItemCache(item_cache_config) + config = {"root-type": "/nix"} + caplog.set_level(logging.INFO) + verify(config, item_cache) + log = "\n".join( + [f"{rec.levelname} {rec.message}" for rec in caplog.records]) + assert log == """ERROR root type item does not exist in item cache""" + + +def test_verify(caplog, tmpdir): + item_cache_config = create_item_cache_config_and_copy_spec( + tmpdir, "spec-verify") + item_cache = ItemCache(item_cache_config) + config = {"root-type": "/spec/root"} + caplog.set_level(logging.INFO) + verify(config, item_cache) + log = "\n".join( + [f"{rec.levelname} {rec.message}" for rec in caplog.records]) + assert log == """INFO type: any-dict +INFO type: bool +INFO type: c +INFO type: copyright +INFO type: copyrights +INFO type: d +INFO type: d-a +INFO type: enabled-by +INFO type: enabled-by-list +INFO type: float +INFO type: int +INFO type: keys-at-least-one +INFO type: keys-at-most-one +INFO type: keys-exactly-one +INFO type: link +INFO type: links +INFO type: list-str +INFO type: must-be-true +INFO type: name +INFO type: none +INFO type: optional-str +INFO type: other-int +INFO type: root +INFO type: some-bool +INFO type: some-dict +INFO type: some-float +INFO type: some-int +INFO type: some-list +INFO type: some-str +INFO type: spdx-license-identifier +INFO type: spec +INFO type: spec-assert-float +INFO type: spec-assert-float-list +INFO type: spec-assert-int +INFO type: spec-assert-int-list +INFO type: spec-assert-str +INFO type: spec-assert-str-list +INFO type: spec-attribute-value +INFO type: spec-attributes +INFO type: spec-bool +INFO type: spec-dict +INFO type: spec-float +INFO type: spec-generic-attributes +INFO type: spec-info +INFO type: spec-int +INFO type: spec-invalid +INFO type: spec-list +INFO type: spec-member +INFO type: spec-refinement +INFO type: spec-required-attributes +INFO type: spec-str +INFO type: str +INFO type: str-contains +INFO type: uid +INFO type: x +INFO add subtype 'd' to 'root' +INFO add subtype 'keys-at-most-one' to 'root' +INFO add subtype 'c' to 'root' +INFO add subtype 'keys-at-least-one' to 'root' +INFO add subtype 'spec-invalid' to 'root' +INFO add subtype 'keys-exactly-one' to 'root' +INFO add subtype 'spec' to 'root' +INFO add subtype 'd-a' to 'd' +INFO add subtype 'spec-member' to 'link' +INFO add subtype 'spec-refinement' to 'link' +INFO start specification item verification +INFO /c1: verify using type 'root' +INFO /c1:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /c1:/copyrights: verify using type 'copyrights' +INFO /c1:/copyrights[0]: verify using type 'copyright' +INFO /c1:/enabled-by: verify using type 'enabled-by' +INFO /c1:/links: verify using type 'links' +INFO /c1:/links[0]: verify using type 'link' +INFO /c1:/links[0]/role: verify using type 'name' +INFO /c1:/links[0]/uid: verify using type 'uid' +ERROR /c1:/links[0]: unknown subtype for key 'role' for type 'link': x +INFO /c1:/type: verify using type 'name' +INFO /c1: verify using type 'c' +ERROR /c1: missing required keys for type 'c': ['any-dict', 'bool', 'float', 'int', 'must-be-true', 'other-int', 'str', 'str-contains'] +INFO /c1:/dict: verify using type 'some-dict' +INFO /c1:/dict/a: verify using type 'none' +INFO /c1:/list: verify using type 'some-list' +INFO /c1:/uid: verify using type 'uid' +ERROR /c1:/uid: expected type 'str', actual type 'int' +INFO /c2: verify using type 'root' +INFO /c2:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /c2:/copyrights: verify using type 'copyrights' +INFO /c2:/copyrights[0]: verify using type 'copyright' +INFO /c2:/enabled-by: verify using type 'enabled-by' +INFO /c2:/links: verify using type 'links' +INFO /c2:/type: verify using type 'name' +INFO /c2: verify using type 'c' +ERROR /c2: missing required keys for type 'c': ['any-dict', 'bool', 'float', 'int', 'must-be-true', 'other-int', 'str', 'uid'] +INFO /c2:/dict: verify using type 'some-dict' +ERROR /c2:/dict: has unverfied keys for type 'some-dict' and its subtypes: ['b'] +INFO /c2:/list: verify using type 'some-list' +INFO /c2:/str-contains: verify using type 'str-contains' +ERROR /c2:/str-contains: invalid value: uvw +INFO /c3: verify using type 'root' +INFO /c3:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /c3:/copyrights: verify using type 'copyrights' +INFO /c3:/copyrights[0]: verify using type 'copyright' +INFO /c3:/enabled-by: verify using type 'enabled-by' +INFO /c3:/links: verify using type 'links' +INFO /c3:/type: verify using type 'name' +INFO /c3: verify using type 'c' +ERROR /c3: missing required keys for type 'c': ['any-dict', 'bool', 'float', 'int', 'other-int'] +INFO /c3:/dict: verify using type 'some-dict' +ERROR /c3:/dict: expected value of types ['dict', 'none'] for type 'some-dict', actual type 'list' +INFO /c3:/list: verify using type 'some-list' +ERROR /c3:/list: expected value of types ['list'] for type 'some-list', actual type 'dict' +INFO /c3:/must-be-true: verify using type 'must-be-true' +ERROR /c3:/must-be-true: expected True, actual False +INFO /c3:/str: verify using type 'some-str' +INFO /c3:/str-contains: verify using type 'str-contains' +ERROR /c3:/str-contains: invalid value: abc ghi +INFO /c3:/uid: verify using type 'uid' +ERROR /c3:/uid: cannot resolve UID: nix +INFO /c4: verify using type 'root' +INFO /c4:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /c4:/copyrights: verify using type 'copyrights' +INFO /c4:/copyrights[0]: verify using type 'copyright' +INFO /c4:/enabled-by: verify using type 'enabled-by' +INFO /c4:/links: verify using type 'links' +INFO /c4:/type: verify using type 'name' +INFO /c4: verify using type 'c' +INFO /c4:/any-dict: verify using type 'any-dict' +INFO /c4:/any-dict/a: verify using type 'str' +INFO /c4:/bool: verify using type 'some-bool' +INFO /c4:/dict: verify using type 'some-dict' +INFO /c4:/float: verify using type 'some-float' +ERROR /c4:/float: invalid value: 123.567 +INFO /c4:/int: verify using type 'some-int' +INFO /c4:/list: verify using type 'some-list' +INFO /c4:/must-be-true: verify using type 'must-be-true' +INFO /c4:/other-int: verify using type 'other-int' +INFO /c4:/str: verify using type 'some-str' +WARNING /c4:/str: cannot resolve UID: abc +INFO /c4:/str-contains: verify using type 'str-contains' +INFO /c4:/uid: verify using type 'uid' +INFO /d: verify using type 'root' +INFO /d:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /d:/copyrights: verify using type 'copyrights' +INFO /d:/copyrights[0]: verify using type 'copyright' +INFO /d:/enabled-by: verify using type 'enabled-by' +INFO /d:/links: verify using type 'links' +INFO /d:/type: verify using type 'name' +INFO /d: verify using type 'd' +INFO /d:/d-type: verify using type 'name' +INFO /d: verify using type 'd-a' +INFO /d:/d-type: verify using type 'x' +ERROR /d:/d-type: invalid value: blub +INFO /d2: verify using type 'root' +INFO /d2:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /d2:/copyrights: verify using type 'copyrights' +INFO /d2:/copyrights[0]: verify using type 'copyright' +INFO /d2:/enabled-by: verify using type 'enabled-by' +INFO /d2:/links: verify using type 'links' +INFO /d2:/type: verify using type 'name' +INFO /d2: verify using type 'd' +INFO /d2:/d-type: verify using type 'name' +ERROR /d2: unknown subtype for key 'd-type' for type 'd': bla +INFO /d3: verify using type 'root' +INFO /d3:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /d3:/copyrights: verify using type 'copyrights' +INFO /d3:/copyrights[0]: verify using type 'copyright' +INFO /d3:/enabled-by: verify using type 'enabled-by' +INFO /d3:/links: verify using type 'links' +INFO /d3:/type: verify using type 'name' +INFO /d3: verify using type 'd' +ERROR /d3: missing required keys for type 'd': ['d-type'] +ERROR /d3: subtype key 'd-type' not present for type 'd' +INFO /e: verify using type 'root' +INFO /e:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /e:/copyrights: verify using type 'copyrights' +INFO /e:/copyrights[0]: verify using type 'copyright' +INFO /e:/enabled-by: verify using type 'enabled-by' +INFO /e:/links: verify using type 'links' +INFO /e:/type: verify using type 'name' +ERROR /e: unknown subtype for key 'type' for type 'root': e +INFO /invalid: verify using type 'root' +INFO /invalid:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /invalid:/copyrights: verify using type 'copyrights' +INFO /invalid:/copyrights[0]: verify using type 'copyright' +INFO /invalid:/enabled-by: verify using type 'enabled-by' +INFO /invalid:/links: verify using type 'links' +INFO /invalid:/type: verify using type 'name' +INFO /invalid: verify using type 'spec-invalid' +ERROR /invalid: unknown specification type: invalid +INFO /keys-at-least-one-0: verify using type 'root' +INFO /keys-at-least-one-0:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /keys-at-least-one-0:/copyrights: verify using type 'copyrights' +INFO /keys-at-least-one-0:/copyrights[0]: verify using type 'copyright' +INFO /keys-at-least-one-0:/enabled-by: verify using type 'enabled-by' +INFO /keys-at-least-one-0:/links: verify using type 'links' +INFO /keys-at-least-one-0:/type: verify using type 'name' +INFO /keys-at-least-one-0: verify using type 'keys-at-least-one' +ERROR /keys-at-least-one-0: not at least one key out of ['key-a', 'key-b'] is present for type 'keys-at-least-one' +INFO /keys-at-least-one-1: verify using type 'root' +INFO /keys-at-least-one-1:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /keys-at-least-one-1:/copyrights: verify using type 'copyrights' +INFO /keys-at-least-one-1:/copyrights[0]: verify using type 'copyright' +INFO /keys-at-least-one-1:/enabled-by: verify using type 'enabled-by' +INFO /keys-at-least-one-1:/links: verify using type 'links' +INFO /keys-at-least-one-1:/type: verify using type 'name' +INFO /keys-at-least-one-1: verify using type 'keys-at-least-one' +INFO /keys-at-least-one-1:/key-a: verify using type 'none' +INFO /keys-at-least-one-2: verify using type 'root' +INFO /keys-at-least-one-2:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /keys-at-least-one-2:/copyrights: verify using type 'copyrights' +INFO /keys-at-least-one-2:/copyrights[0]: verify using type 'copyright' +INFO /keys-at-least-one-2:/enabled-by: verify using type 'enabled-by' +INFO /keys-at-least-one-2:/links: verify using type 'links' +INFO /keys-at-least-one-2:/type: verify using type 'name' +INFO /keys-at-least-one-2: verify using type 'keys-at-least-one' +INFO /keys-at-least-one-2:/key-a: verify using type 'none' +INFO /keys-at-least-one-2:/key-b: verify using type 'none' +INFO /keys-at-most-one-0: verify using type 'root' +INFO /keys-at-most-one-0:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /keys-at-most-one-0:/copyrights: verify using type 'copyrights' +INFO /keys-at-most-one-0:/copyrights[0]: verify using type 'copyright' +INFO /keys-at-most-one-0:/enabled-by: verify using type 'enabled-by' +INFO /keys-at-most-one-0:/links: verify using type 'links' +INFO /keys-at-most-one-0:/type: verify using type 'name' +INFO /keys-at-most-one-0: verify using type 'keys-at-most-one' +INFO /keys-at-most-one-1: verify using type 'root' +INFO /keys-at-most-one-1:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /keys-at-most-one-1:/copyrights: verify using type 'copyrights' +INFO /keys-at-most-one-1:/copyrights[0]: verify using type 'copyright' +INFO /keys-at-most-one-1:/enabled-by: verify using type 'enabled-by' +INFO /keys-at-most-one-1:/links: verify using type 'links' +INFO /keys-at-most-one-1:/type: verify using type 'name' +INFO /keys-at-most-one-1: verify using type 'keys-at-most-one' +INFO /keys-at-most-one-1:/key-a: verify using type 'none' +INFO /keys-at-most-one-2: verify using type 'root' +INFO /keys-at-most-one-2:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /keys-at-most-one-2:/copyrights: verify using type 'copyrights' +INFO /keys-at-most-one-2:/copyrights[0]: verify using type 'copyright' +INFO /keys-at-most-one-2:/enabled-by: verify using type 'enabled-by' +INFO /keys-at-most-one-2:/links: verify using type 'links' +INFO /keys-at-most-one-2:/type: verify using type 'name' +INFO /keys-at-most-one-2: verify using type 'keys-at-most-one' +ERROR /keys-at-most-one-2: not at most one key out of ['key-a', 'key-b'] is present for type 'keys-at-most-one': ['key-a', 'key-b'] +INFO /keys-at-most-one-2:/key-a: verify using type 'none' +INFO /keys-at-most-one-2:/key-b: verify using type 'none' +INFO /keys-exactly-one-0: verify using type 'root' +INFO /keys-exactly-one-0:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /keys-exactly-one-0:/copyrights: verify using type 'copyrights' +INFO /keys-exactly-one-0:/copyrights[0]: verify using type 'copyright' +INFO /keys-exactly-one-0:/enabled-by: verify using type 'enabled-by' +INFO /keys-exactly-one-0:/links: verify using type 'links' +INFO /keys-exactly-one-0:/type: verify using type 'name' +INFO /keys-exactly-one-0: verify using type 'keys-exactly-one' +ERROR /keys-exactly-one-0: not exactly one key out of ['key-a', 'key-b'] is present for type 'keys-exactly-one': [] +INFO /keys-exactly-one-1: verify using type 'root' +INFO /keys-exactly-one-1:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /keys-exactly-one-1:/copyrights: verify using type 'copyrights' +INFO /keys-exactly-one-1:/copyrights[0]: verify using type 'copyright' +INFO /keys-exactly-one-1:/enabled-by: verify using type 'enabled-by' +INFO /keys-exactly-one-1:/links: verify using type 'links' +INFO /keys-exactly-one-1:/type: verify using type 'name' +INFO /keys-exactly-one-1: verify using type 'keys-exactly-one' +INFO /keys-exactly-one-1:/key-a: verify using type 'none' +INFO /keys-exactly-one-2: verify using type 'root' +INFO /keys-exactly-one-2:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /keys-exactly-one-2:/copyrights: verify using type 'copyrights' +INFO /keys-exactly-one-2:/copyrights[0]: verify using type 'copyright' +INFO /keys-exactly-one-2:/enabled-by: verify using type 'enabled-by' +INFO /keys-exactly-one-2:/links: verify using type 'links' +INFO /keys-exactly-one-2:/type: verify using type 'name' +INFO /keys-exactly-one-2: verify using type 'keys-exactly-one' +ERROR /keys-exactly-one-2: not exactly one key out of ['key-a', 'key-b'] is present for type 'keys-exactly-one': ['key-a', 'key-b'] +INFO /keys-exactly-one-2:/key-a: verify using type 'none' +INFO /keys-exactly-one-2:/key-b: verify using type 'none' +INFO /notype: verify using type 'root' +ERROR /notype: missing required keys for type 'root': ['type'] +INFO /notype:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /notype:/copyrights: verify using type 'copyrights' +INFO /notype:/copyrights[0]: verify using type 'copyright' +INFO /notype:/enabled-by: verify using type 'enabled-by' +INFO /notype:/links: verify using type 'links' +ERROR /notype: subtype key 'type' not present for type 'root' +INFO /spec/copyright: verify using type 'root' +INFO /spec/copyright:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/copyright:/copyrights: verify using type 'copyrights' +INFO /spec/copyright:/copyrights[0]: verify using type 'copyright' +INFO /spec/copyright:/enabled-by: verify using type 'enabled-by' +INFO /spec/copyright:/links: verify using type 'links' +INFO /spec/copyright:/links[0]: verify using type 'link' +INFO /spec/copyright:/links[0]/role: verify using type 'name' +INFO /spec/copyright:/links[0]/uid: verify using type 'uid' +INFO /spec/copyright:/links[0]: verify using type 'spec-member' +INFO /spec/copyright:/type: verify using type 'name' +INFO /spec/copyright: verify using type 'spec' +INFO /spec/copyright:/spec-description: verify using type 'optional-str' +INFO /spec/copyright:/spec-example: verify using type 'optional-str' +INFO /spec/copyright:/spec-info: verify using type 'spec-info' +INFO /spec/copyright:/spec-info/str: verify using type 'spec-str' +INFO /spec/copyright:/spec-info/str/assert: verify using type 'spec-assert-str' +INFO /spec/copyright:/spec-info/str/assert[0]: verify using type 'spec-assert-str' +INFO /spec/copyright:/spec-info/str/assert[0]/re: verify using type 'str' +INFO /spec/copyright:/spec-info/str/assert[1]: verify using type 'spec-assert-str' +INFO /spec/copyright:/spec-info/str/assert[1]/re: verify using type 'str' +INFO /spec/copyright:/spec-info/str/assert[2]: verify using type 'spec-assert-str' +INFO /spec/copyright:/spec-info/str/assert[2]/re: verify using type 'str' +INFO /spec/copyright:/spec-info/str/description: verify using type 'optional-str' +INFO /spec/copyright:/spec-name: verify using type 'optional-str' +INFO /spec/copyright:/spec-type: verify using type 'name' +INFO /spec/copyrights: verify using type 'root' +INFO /spec/copyrights:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/copyrights:/copyrights: verify using type 'copyrights' +INFO /spec/copyrights:/copyrights[0]: verify using type 'copyright' +INFO /spec/copyrights:/enabled-by: verify using type 'enabled-by' +INFO /spec/copyrights:/links: verify using type 'links' +INFO /spec/copyrights:/links[0]: verify using type 'link' +INFO /spec/copyrights:/links[0]/role: verify using type 'name' +INFO /spec/copyrights:/links[0]/uid: verify using type 'uid' +INFO /spec/copyrights:/links[0]: verify using type 'spec-member' +INFO /spec/copyrights:/type: verify using type 'name' +INFO /spec/copyrights: verify using type 'spec' +INFO /spec/copyrights:/spec-description: verify using type 'optional-str' +INFO /spec/copyrights:/spec-example: verify using type 'optional-str' +INFO /spec/copyrights:/spec-info: verify using type 'spec-info' +INFO /spec/copyrights:/spec-info/list: verify using type 'spec-list' +INFO /spec/copyrights:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/copyrights:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/copyrights:/spec-name: verify using type 'optional-str' +INFO /spec/copyrights:/spec-type: verify using type 'name' +INFO /spec/enabled-by: verify using type 'root' +INFO /spec/enabled-by:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/enabled-by:/copyrights: verify using type 'copyrights' +INFO /spec/enabled-by:/copyrights[0]: verify using type 'copyright' +INFO /spec/enabled-by:/enabled-by: verify using type 'enabled-by' +INFO /spec/enabled-by:/links: verify using type 'links' +INFO /spec/enabled-by:/links[0]: verify using type 'link' +INFO /spec/enabled-by:/links[0]/role: verify using type 'name' +INFO /spec/enabled-by:/links[0]/uid: verify using type 'uid' +INFO /spec/enabled-by:/links[0]: verify using type 'spec-member' +INFO /spec/enabled-by:/type: verify using type 'name' +INFO /spec/enabled-by: verify using type 'spec' +INFO /spec/enabled-by:/spec-description: verify using type 'optional-str' +INFO /spec/enabled-by:/spec-example: verify using type 'optional-str' +INFO /spec/enabled-by:/spec-info: verify using type 'spec-info' +INFO /spec/enabled-by:/spec-info/bool: verify using type 'spec-bool' +INFO /spec/enabled-by:/spec-info/bool/description: verify using type 'optional-str' +INFO /spec/enabled-by:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/enabled-by:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/enabled-by:/spec-info/dict/attributes/and: verify using type 'spec-attribute-value' +INFO /spec/enabled-by:/spec-info/dict/attributes/and/description: verify using type 'optional-str' +INFO /spec/enabled-by:/spec-info/dict/attributes/and/spec-type: verify using type 'name' +INFO /spec/enabled-by:/spec-info/dict/attributes/not: verify using type 'spec-attribute-value' +INFO /spec/enabled-by:/spec-info/dict/attributes/not/description: verify using type 'optional-str' +INFO /spec/enabled-by:/spec-info/dict/attributes/not/spec-type: verify using type 'name' +INFO /spec/enabled-by:/spec-info/dict/attributes/or: verify using type 'spec-attribute-value' +INFO /spec/enabled-by:/spec-info/dict/attributes/or/description: verify using type 'optional-str' +INFO /spec/enabled-by:/spec-info/dict/attributes/or/spec-type: verify using type 'name' +INFO /spec/enabled-by:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/enabled-by:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/enabled-by:/spec-info/list: verify using type 'spec-list' +INFO /spec/enabled-by:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/enabled-by:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/enabled-by:/spec-info/str: verify using type 'spec-str' +INFO /spec/enabled-by:/spec-info/str/description: verify using type 'optional-str' +INFO /spec/enabled-by:/spec-name: verify using type 'optional-str' +INFO /spec/enabled-by:/spec-type: verify using type 'name' +INFO /spec/enabled-by-list: verify using type 'root' +INFO /spec/enabled-by-list:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/enabled-by-list:/copyrights: verify using type 'copyrights' +INFO /spec/enabled-by-list:/copyrights[0]: verify using type 'copyright' +INFO /spec/enabled-by-list:/enabled-by: verify using type 'enabled-by' +INFO /spec/enabled-by-list:/links: verify using type 'links' +INFO /spec/enabled-by-list:/links[0]: verify using type 'link' +INFO /spec/enabled-by-list:/links[0]/role: verify using type 'name' +INFO /spec/enabled-by-list:/links[0]/uid: verify using type 'uid' +INFO /spec/enabled-by-list:/links[0]: verify using type 'spec-member' +INFO /spec/enabled-by-list:/type: verify using type 'name' +INFO /spec/enabled-by-list: verify using type 'spec' +INFO /spec/enabled-by-list:/spec-description: verify using type 'optional-str' +INFO /spec/enabled-by-list:/spec-example: verify using type 'optional-str' +INFO /spec/enabled-by-list:/spec-info: verify using type 'spec-info' +INFO /spec/enabled-by-list:/spec-info/list: verify using type 'spec-list' +INFO /spec/enabled-by-list:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/enabled-by-list:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/enabled-by-list:/spec-name: verify using type 'optional-str' +INFO /spec/enabled-by-list:/spec-type: verify using type 'name' +INFO /spec/link: verify using type 'root' +INFO /spec/link:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/link:/copyrights: verify using type 'copyrights' +INFO /spec/link:/copyrights[0]: verify using type 'copyright' +INFO /spec/link:/enabled-by: verify using type 'enabled-by' +INFO /spec/link:/links: verify using type 'links' +INFO /spec/link:/links[0]: verify using type 'link' +INFO /spec/link:/links[0]/role: verify using type 'name' +INFO /spec/link:/links[0]/uid: verify using type 'uid' +INFO /spec/link:/links[0]: verify using type 'spec-member' +INFO /spec/link:/type: verify using type 'name' +INFO /spec/link: verify using type 'spec' +INFO /spec/link:/spec-description: verify using type 'optional-str' +INFO /spec/link:/spec-example: verify using type 'optional-str' +INFO /spec/link:/spec-info: verify using type 'spec-info' +INFO /spec/link:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/link:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/link:/spec-info/dict/attributes/role: verify using type 'spec-attribute-value' +INFO /spec/link:/spec-info/dict/attributes/role/description: verify using type 'optional-str' +INFO /spec/link:/spec-info/dict/attributes/role/spec-type: verify using type 'name' +INFO /spec/link:/spec-info/dict/attributes/uid: verify using type 'spec-attribute-value' +INFO /spec/link:/spec-info/dict/attributes/uid/description: verify using type 'optional-str' +INFO /spec/link:/spec-info/dict/attributes/uid/spec-type: verify using type 'name' +INFO /spec/link:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/link:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/link:/spec-name: verify using type 'optional-str' +INFO /spec/link:/spec-type: verify using type 'name' +INFO /spec/links: verify using type 'root' +INFO /spec/links:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/links:/copyrights: verify using type 'copyrights' +INFO /spec/links:/copyrights[0]: verify using type 'copyright' +INFO /spec/links:/enabled-by: verify using type 'enabled-by' +INFO /spec/links:/links: verify using type 'links' +INFO /spec/links:/links[0]: verify using type 'link' +INFO /spec/links:/links[0]/role: verify using type 'name' +INFO /spec/links:/links[0]/uid: verify using type 'uid' +INFO /spec/links:/links[0]: verify using type 'spec-member' +INFO /spec/links:/type: verify using type 'name' +INFO /spec/links: verify using type 'spec' +INFO /spec/links:/spec-description: verify using type 'optional-str' +INFO /spec/links:/spec-example: verify using type 'optional-str' +INFO /spec/links:/spec-info: verify using type 'spec-info' +INFO /spec/links:/spec-info/list: verify using type 'spec-list' +INFO /spec/links:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/links:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/links:/spec-name: verify using type 'optional-str' +INFO /spec/links:/spec-type: verify using type 'name' +INFO /spec/list-str: verify using type 'root' +INFO /spec/list-str:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/list-str:/copyrights: verify using type 'copyrights' +INFO /spec/list-str:/copyrights[0]: verify using type 'copyright' +INFO /spec/list-str:/enabled-by: verify using type 'enabled-by' +INFO /spec/list-str:/links: verify using type 'links' +INFO /spec/list-str:/links[0]: verify using type 'link' +INFO /spec/list-str:/links[0]/role: verify using type 'name' +INFO /spec/list-str:/links[0]/uid: verify using type 'uid' +INFO /spec/list-str:/links[0]: verify using type 'spec-member' +INFO /spec/list-str:/type: verify using type 'name' +INFO /spec/list-str: verify using type 'spec' +INFO /spec/list-str:/spec-description: verify using type 'optional-str' +INFO /spec/list-str:/spec-example: verify using type 'optional-str' +INFO /spec/list-str:/spec-info: verify using type 'spec-info' +INFO /spec/list-str:/spec-info/list: verify using type 'spec-list' +INFO /spec/list-str:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/list-str:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/list-str:/spec-name: verify using type 'optional-str' +INFO /spec/list-str:/spec-type: verify using type 'name' +INFO /spec/optional-str: verify using type 'root' +INFO /spec/optional-str:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/optional-str:/copyrights: verify using type 'copyrights' +INFO /spec/optional-str:/copyrights[0]: verify using type 'copyright' +INFO /spec/optional-str:/enabled-by: verify using type 'enabled-by' +INFO /spec/optional-str:/links: verify using type 'links' +INFO /spec/optional-str:/links[0]: verify using type 'link' +INFO /spec/optional-str:/links[0]/role: verify using type 'name' +INFO /spec/optional-str:/links[0]/uid: verify using type 'uid' +INFO /spec/optional-str:/links[0]: verify using type 'spec-member' +INFO /spec/optional-str:/type: verify using type 'name' +INFO /spec/optional-str: verify using type 'spec' +INFO /spec/optional-str:/spec-description: verify using type 'optional-str' +INFO /spec/optional-str:/spec-example: verify using type 'optional-str' +INFO /spec/optional-str:/spec-info: verify using type 'spec-info' +INFO /spec/optional-str:/spec-info/none: verify using type 'none' +INFO /spec/optional-str:/spec-info/str: verify using type 'spec-str' +INFO /spec/optional-str:/spec-info/str/description: verify using type 'optional-str' +INFO /spec/optional-str:/spec-name: verify using type 'optional-str' +INFO /spec/optional-str:/spec-type: verify using type 'name' +INFO /spec/root: verify using type 'root' +INFO /spec/root:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/root:/copyrights: verify using type 'copyrights' +INFO /spec/root:/copyrights[0]: verify using type 'copyright' +INFO /spec/root:/enabled-by: verify using type 'enabled-by' +INFO /spec/root:/links: verify using type 'links' +INFO /spec/root:/type: verify using type 'name' +INFO /spec/root: verify using type 'spec' +INFO /spec/root:/spec-description: verify using type 'optional-str' +INFO /spec/root:/spec-example: verify using type 'optional-str' +INFO /spec/root:/spec-info: verify using type 'spec-info' +INFO /spec/root:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/root:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/root:/spec-info/dict/attributes/SPDX-License-Identifier: verify using type 'spec-attribute-value' +INFO /spec/root:/spec-info/dict/attributes/SPDX-License-Identifier/description: verify using type 'optional-str' +INFO /spec/root:/spec-info/dict/attributes/SPDX-License-Identifier/spec-type: verify using type 'name' +INFO /spec/root:/spec-info/dict/attributes/copyrights: verify using type 'spec-attribute-value' +INFO /spec/root:/spec-info/dict/attributes/copyrights/description: verify using type 'optional-str' +INFO /spec/root:/spec-info/dict/attributes/copyrights/spec-type: verify using type 'name' +INFO /spec/root:/spec-info/dict/attributes/enabled-by: verify using type 'spec-attribute-value' +INFO /spec/root:/spec-info/dict/attributes/enabled-by/description: verify using type 'optional-str' +INFO /spec/root:/spec-info/dict/attributes/enabled-by/spec-type: verify using type 'name' +INFO /spec/root:/spec-info/dict/attributes/links: verify using type 'spec-attribute-value' +INFO /spec/root:/spec-info/dict/attributes/links/description: verify using type 'optional-str' +INFO /spec/root:/spec-info/dict/attributes/links/spec-type: verify using type 'name' +INFO /spec/root:/spec-info/dict/attributes/type: verify using type 'spec-attribute-value' +INFO /spec/root:/spec-info/dict/attributes/type/description: verify using type 'optional-str' +INFO /spec/root:/spec-info/dict/attributes/type/spec-type: verify using type 'name' +INFO /spec/root:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/root:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/root:/spec-name: verify using type 'optional-str' +INFO /spec/root:/spec-type: verify using type 'name' +INFO /spec/spdx-license-identifier: verify using type 'root' +INFO /spec/spdx-license-identifier:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spdx-license-identifier:/copyrights: verify using type 'copyrights' +INFO /spec/spdx-license-identifier:/copyrights[0]: verify using type 'copyright' +INFO /spec/spdx-license-identifier:/enabled-by: verify using type 'enabled-by' +INFO /spec/spdx-license-identifier:/links: verify using type 'links' +INFO /spec/spdx-license-identifier:/links[0]: verify using type 'link' +INFO /spec/spdx-license-identifier:/links[0]/role: verify using type 'name' +INFO /spec/spdx-license-identifier:/links[0]/uid: verify using type 'uid' +INFO /spec/spdx-license-identifier:/links[0]: verify using type 'spec-member' +INFO /spec/spdx-license-identifier:/type: verify using type 'name' +INFO /spec/spdx-license-identifier: verify using type 'spec' +INFO /spec/spdx-license-identifier:/spec-description: verify using type 'optional-str' +INFO /spec/spdx-license-identifier:/spec-example: verify using type 'optional-str' +INFO /spec/spdx-license-identifier:/spec-info: verify using type 'spec-info' +INFO /spec/spdx-license-identifier:/spec-info/str: verify using type 'spec-str' +INFO /spec/spdx-license-identifier:/spec-info/str/assert: verify using type 'spec-assert-str' +INFO /spec/spdx-license-identifier:/spec-info/str/assert[0]: verify using type 'spec-assert-str' +INFO /spec/spdx-license-identifier:/spec-info/str/assert[0]/eq: verify using type 'str' +INFO /spec/spdx-license-identifier:/spec-info/str/assert[1]: verify using type 'spec-assert-str' +INFO /spec/spdx-license-identifier:/spec-info/str/assert[1]/eq: verify using type 'str' +INFO /spec/spdx-license-identifier:/spec-info/str/assert[2]: verify using type 'spec-assert-str' +INFO /spec/spdx-license-identifier:/spec-info/str/assert[2]/eq: verify using type 'str' +INFO /spec/spdx-license-identifier:/spec-info/str/description: verify using type 'optional-str' +INFO /spec/spdx-license-identifier:/spec-name: verify using type 'optional-str' +INFO /spec/spdx-license-identifier:/spec-type: verify using type 'name' +INFO /spec/spec: verify using type 'root' +INFO /spec/spec:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec:/copyrights: verify using type 'copyrights' +INFO /spec/spec:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec:/links: verify using type 'links' +INFO /spec/spec:/links[0]: verify using type 'link' +INFO /spec/spec:/links[0]/role: verify using type 'name' +INFO /spec/spec:/links[0]/uid: verify using type 'uid' +INFO /spec/spec:/links[0]: verify using type 'spec-member' +INFO /spec/spec:/links[1]: verify using type 'link' +INFO /spec/spec:/links[1]/role: verify using type 'name' +INFO /spec/spec:/links[1]/uid: verify using type 'uid' +INFO /spec/spec:/links[1]: verify using type 'spec-refinement' +INFO /spec/spec:/links[1]/spec-key: verify using type 'name' +INFO /spec/spec:/links[1]/spec-value: verify using type 'name' +INFO /spec/spec:/type: verify using type 'name' +INFO /spec/spec: verify using type 'spec' +INFO /spec/spec:/spec-description: verify using type 'optional-str' +INFO /spec/spec:/spec-example: verify using type 'optional-str' +INFO /spec/spec:/spec-info: verify using type 'spec-info' +INFO /spec/spec:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec:/spec-info/dict/attributes/spec-description: verify using type 'spec-attribute-value' +INFO /spec/spec:/spec-info/dict/attributes/spec-description/description: verify using type 'optional-str' +INFO /spec/spec:/spec-info/dict/attributes/spec-description/spec-type: verify using type 'name' +INFO /spec/spec:/spec-info/dict/attributes/spec-example: verify using type 'spec-attribute-value' +INFO /spec/spec:/spec-info/dict/attributes/spec-example/description: verify using type 'optional-str' +INFO /spec/spec:/spec-info/dict/attributes/spec-example/spec-type: verify using type 'name' +INFO /spec/spec:/spec-info/dict/attributes/spec-info: verify using type 'spec-attribute-value' +INFO /spec/spec:/spec-info/dict/attributes/spec-info/description: verify using type 'optional-str' +INFO /spec/spec:/spec-info/dict/attributes/spec-info/spec-type: verify using type 'name' +INFO /spec/spec:/spec-info/dict/attributes/spec-name: verify using type 'spec-attribute-value' +INFO /spec/spec:/spec-info/dict/attributes/spec-name/description: verify using type 'optional-str' +INFO /spec/spec:/spec-info/dict/attributes/spec-name/spec-type: verify using type 'name' +INFO /spec/spec:/spec-info/dict/attributes/spec-type: verify using type 'spec-attribute-value' +INFO /spec/spec:/spec-info/dict/attributes/spec-type/description: verify using type 'optional-str' +INFO /spec/spec:/spec-info/dict/attributes/spec-type/spec-type: verify using type 'name' +INFO /spec/spec:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec:/spec-name: verify using type 'optional-str' +INFO /spec/spec:/spec-type: verify using type 'name' +INFO /spec/spec-assert-float: verify using type 'root' +INFO /spec/spec-assert-float:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-assert-float:/copyrights: verify using type 'copyrights' +INFO /spec/spec-assert-float:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-assert-float:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-assert-float:/links: verify using type 'links' +INFO /spec/spec-assert-float:/links[0]: verify using type 'link' +INFO /spec/spec-assert-float:/links[0]/role: verify using type 'name' +INFO /spec/spec-assert-float:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-assert-float:/links[0]: verify using type 'spec-member' +INFO /spec/spec-assert-float:/type: verify using type 'name' +INFO /spec/spec-assert-float: verify using type 'spec' +INFO /spec/spec-assert-float:/spec-description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-example: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info: verify using type 'spec-info' +INFO /spec/spec-assert-float:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-assert-float:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/and: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/and/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/and/spec-type: verify using type 'name' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/eq: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/eq/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/eq/spec-type: verify using type 'name' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/ge: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/ge/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/ge/spec-type: verify using type 'name' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/gt: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/gt/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/gt/spec-type: verify using type 'name' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/le: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/le/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/le/spec-type: verify using type 'name' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/lt: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/lt/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/lt/spec-type: verify using type 'name' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/ne: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/ne/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/ne/spec-type: verify using type 'name' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/not: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/not/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/not/spec-type: verify using type 'name' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/or: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/or/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/dict/attributes/or/spec-type: verify using type 'name' +INFO /spec/spec-assert-float:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-assert-float:/spec-info/list: verify using type 'spec-list' +INFO /spec/spec-assert-float:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/spec-assert-float:/spec-name: verify using type 'optional-str' +INFO /spec/spec-assert-float:/spec-type: verify using type 'name' +INFO /spec/spec-assert-float-list: verify using type 'root' +INFO /spec/spec-assert-float-list:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-assert-float-list:/copyrights: verify using type 'copyrights' +INFO /spec/spec-assert-float-list:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-assert-float-list:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-assert-float-list:/links: verify using type 'links' +INFO /spec/spec-assert-float-list:/links[0]: verify using type 'link' +INFO /spec/spec-assert-float-list:/links[0]/role: verify using type 'name' +INFO /spec/spec-assert-float-list:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-assert-float-list:/links[0]: verify using type 'spec-member' +INFO /spec/spec-assert-float-list:/type: verify using type 'name' +INFO /spec/spec-assert-float-list: verify using type 'spec' +INFO /spec/spec-assert-float-list:/spec-description: verify using type 'optional-str' +INFO /spec/spec-assert-float-list:/spec-example: verify using type 'optional-str' +INFO /spec/spec-assert-float-list:/spec-info: verify using type 'spec-info' +INFO /spec/spec-assert-float-list:/spec-info/list: verify using type 'spec-list' +INFO /spec/spec-assert-float-list:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/spec-assert-float-list:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/spec-assert-float-list:/spec-name: verify using type 'optional-str' +INFO /spec/spec-assert-float-list:/spec-type: verify using type 'name' +INFO /spec/spec-assert-int: verify using type 'root' +INFO /spec/spec-assert-int:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-assert-int:/copyrights: verify using type 'copyrights' +INFO /spec/spec-assert-int:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-assert-int:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-assert-int:/links: verify using type 'links' +INFO /spec/spec-assert-int:/links[0]: verify using type 'link' +INFO /spec/spec-assert-int:/links[0]/role: verify using type 'name' +INFO /spec/spec-assert-int:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-assert-int:/links[0]: verify using type 'spec-member' +INFO /spec/spec-assert-int:/type: verify using type 'name' +INFO /spec/spec-assert-int: verify using type 'spec' +INFO /spec/spec-assert-int:/spec-description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-example: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info: verify using type 'spec-info' +INFO /spec/spec-assert-int:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-assert-int:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/and: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/and/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/and/spec-type: verify using type 'name' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/eq: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/eq/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/eq/spec-type: verify using type 'name' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/ge: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/ge/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/ge/spec-type: verify using type 'name' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/gt: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/gt/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/gt/spec-type: verify using type 'name' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/le: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/le/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/le/spec-type: verify using type 'name' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/lt: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/lt/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/lt/spec-type: verify using type 'name' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/ne: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/ne/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/ne/spec-type: verify using type 'name' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/not: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/not/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/not/spec-type: verify using type 'name' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/or: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/or/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/dict/attributes/or/spec-type: verify using type 'name' +INFO /spec/spec-assert-int:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-assert-int:/spec-info/list: verify using type 'spec-list' +INFO /spec/spec-assert-int:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/spec-assert-int:/spec-name: verify using type 'optional-str' +INFO /spec/spec-assert-int:/spec-type: verify using type 'name' +INFO /spec/spec-assert-int-list: verify using type 'root' +INFO /spec/spec-assert-int-list:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-assert-int-list:/copyrights: verify using type 'copyrights' +INFO /spec/spec-assert-int-list:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-assert-int-list:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-assert-int-list:/links: verify using type 'links' +INFO /spec/spec-assert-int-list:/links[0]: verify using type 'link' +INFO /spec/spec-assert-int-list:/links[0]/role: verify using type 'name' +INFO /spec/spec-assert-int-list:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-assert-int-list:/links[0]: verify using type 'spec-member' +INFO /spec/spec-assert-int-list:/type: verify using type 'name' +INFO /spec/spec-assert-int-list: verify using type 'spec' +INFO /spec/spec-assert-int-list:/spec-description: verify using type 'optional-str' +INFO /spec/spec-assert-int-list:/spec-example: verify using type 'optional-str' +INFO /spec/spec-assert-int-list:/spec-info: verify using type 'spec-info' +INFO /spec/spec-assert-int-list:/spec-info/list: verify using type 'spec-list' +INFO /spec/spec-assert-int-list:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/spec-assert-int-list:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/spec-assert-int-list:/spec-name: verify using type 'optional-str' +INFO /spec/spec-assert-int-list:/spec-type: verify using type 'name' +INFO /spec/spec-assert-str: verify using type 'root' +INFO /spec/spec-assert-str:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-assert-str:/copyrights: verify using type 'copyrights' +INFO /spec/spec-assert-str:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-assert-str:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-assert-str:/links: verify using type 'links' +INFO /spec/spec-assert-str:/links[0]: verify using type 'link' +INFO /spec/spec-assert-str:/links[0]/role: verify using type 'name' +INFO /spec/spec-assert-str:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-assert-str:/links[0]: verify using type 'spec-member' +INFO /spec/spec-assert-str:/type: verify using type 'name' +INFO /spec/spec-assert-str: verify using type 'spec' +INFO /spec/spec-assert-str:/spec-description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-example: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info: verify using type 'spec-info' +INFO /spec/spec-assert-str:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-assert-str:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/and: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/and/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/and/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/contains: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/contains/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/contains/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/eq: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/eq/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/eq/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/ge: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/ge/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/ge/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/gt: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/gt/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/gt/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/in: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/in/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/in/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/le: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/le/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/le/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/lt: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/lt/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/lt/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/ne: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/ne/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/ne/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/not: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/not/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/not/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/or: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/or/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/or/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/re: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/re/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/re/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/uid: verify using type 'spec-attribute-value' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/uid/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/attributes/uid/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-assert-str:/spec-info/list: verify using type 'spec-list' +INFO /spec/spec-assert-str:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/spec-assert-str:/spec-name: verify using type 'optional-str' +INFO /spec/spec-assert-str:/spec-type: verify using type 'name' +INFO /spec/spec-assert-str-list: verify using type 'root' +INFO /spec/spec-assert-str-list:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-assert-str-list:/copyrights: verify using type 'copyrights' +INFO /spec/spec-assert-str-list:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-assert-str-list:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-assert-str-list:/links: verify using type 'links' +INFO /spec/spec-assert-str-list:/links[0]: verify using type 'link' +INFO /spec/spec-assert-str-list:/links[0]/role: verify using type 'name' +INFO /spec/spec-assert-str-list:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-assert-str-list:/links[0]: verify using type 'spec-member' +INFO /spec/spec-assert-str-list:/type: verify using type 'name' +INFO /spec/spec-assert-str-list: verify using type 'spec' +INFO /spec/spec-assert-str-list:/spec-description: verify using type 'optional-str' +INFO /spec/spec-assert-str-list:/spec-example: verify using type 'optional-str' +INFO /spec/spec-assert-str-list:/spec-info: verify using type 'spec-info' +INFO /spec/spec-assert-str-list:/spec-info/list: verify using type 'spec-list' +INFO /spec/spec-assert-str-list:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/spec-assert-str-list:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/spec-assert-str-list:/spec-name: verify using type 'optional-str' +INFO /spec/spec-assert-str-list:/spec-type: verify using type 'name' +INFO /spec/spec-attribute-value: verify using type 'root' +INFO /spec/spec-attribute-value:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-attribute-value:/copyrights: verify using type 'copyrights' +INFO /spec/spec-attribute-value:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-attribute-value:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-attribute-value:/links: verify using type 'links' +INFO /spec/spec-attribute-value:/links[0]: verify using type 'link' +INFO /spec/spec-attribute-value:/links[0]/role: verify using type 'name' +INFO /spec/spec-attribute-value:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-attribute-value:/links[0]: verify using type 'spec-member' +INFO /spec/spec-attribute-value:/type: verify using type 'name' +INFO /spec/spec-attribute-value: verify using type 'spec' +INFO /spec/spec-attribute-value:/spec-description: verify using type 'optional-str' +INFO /spec/spec-attribute-value:/spec-example: verify using type 'optional-str' +INFO /spec/spec-attribute-value:/spec-info: verify using type 'spec-info' +INFO /spec/spec-attribute-value:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-attribute-value:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-attribute-value:/spec-info/dict/attributes/description: verify using type 'spec-attribute-value' +INFO /spec/spec-attribute-value:/spec-info/dict/attributes/description/description: verify using type 'optional-str' +INFO /spec/spec-attribute-value:/spec-info/dict/attributes/description/spec-type: verify using type 'name' +INFO /spec/spec-attribute-value:/spec-info/dict/attributes/spec-type: verify using type 'spec-attribute-value' +INFO /spec/spec-attribute-value:/spec-info/dict/attributes/spec-type/description: verify using type 'optional-str' +INFO /spec/spec-attribute-value:/spec-info/dict/attributes/spec-type/spec-type: verify using type 'name' +INFO /spec/spec-attribute-value:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-attribute-value:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-attribute-value:/spec-name: verify using type 'optional-str' +INFO /spec/spec-attribute-value:/spec-type: verify using type 'name' +INFO /spec/spec-attributes: verify using type 'root' +INFO /spec/spec-attributes:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-attributes:/copyrights: verify using type 'copyrights' +INFO /spec/spec-attributes:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-attributes:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-attributes:/links: verify using type 'links' +INFO /spec/spec-attributes:/links[0]: verify using type 'link' +INFO /spec/spec-attributes:/links[0]/role: verify using type 'name' +INFO /spec/spec-attributes:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-attributes:/links[0]: verify using type 'spec-member' +INFO /spec/spec-attributes:/type: verify using type 'name' +INFO /spec/spec-attributes: verify using type 'spec' +INFO /spec/spec-attributes:/spec-description: verify using type 'optional-str' +INFO /spec/spec-attributes:/spec-example: verify using type 'optional-str' +INFO /spec/spec-attributes:/spec-info: verify using type 'spec-info' +INFO /spec/spec-attributes:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-attributes:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-attributes:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-attributes:/spec-info/dict/generic-attributes: verify using type 'spec-generic-attributes' +INFO /spec/spec-attributes:/spec-info/dict/generic-attributes/description: verify using type 'optional-str' +INFO /spec/spec-attributes:/spec-info/dict/generic-attributes/spec-type: verify using type 'name' +INFO /spec/spec-attributes:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-attributes:/spec-name: verify using type 'optional-str' +INFO /spec/spec-attributes:/spec-type: verify using type 'name' +INFO /spec/spec-bool: verify using type 'root' +INFO /spec/spec-bool:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-bool:/copyrights: verify using type 'copyrights' +INFO /spec/spec-bool:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-bool:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-bool:/links: verify using type 'links' +INFO /spec/spec-bool:/links[0]: verify using type 'link' +INFO /spec/spec-bool:/links[0]/role: verify using type 'name' +INFO /spec/spec-bool:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-bool:/links[0]: verify using type 'spec-member' +INFO /spec/spec-bool:/type: verify using type 'name' +INFO /spec/spec-bool: verify using type 'spec' +INFO /spec/spec-bool:/spec-description: verify using type 'optional-str' +INFO /spec/spec-bool:/spec-example: verify using type 'optional-str' +INFO /spec/spec-bool:/spec-info: verify using type 'spec-info' +INFO /spec/spec-bool:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-bool:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-bool:/spec-info/dict/attributes/assert: verify using type 'spec-attribute-value' +INFO /spec/spec-bool:/spec-info/dict/attributes/assert/description: verify using type 'optional-str' +INFO /spec/spec-bool:/spec-info/dict/attributes/assert/spec-type: verify using type 'name' +INFO /spec/spec-bool:/spec-info/dict/attributes/description: verify using type 'spec-attribute-value' +INFO /spec/spec-bool:/spec-info/dict/attributes/description/description: verify using type 'optional-str' +INFO /spec/spec-bool:/spec-info/dict/attributes/description/spec-type: verify using type 'name' +INFO /spec/spec-bool:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-bool:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-bool:/spec-info/dict/required-attributes[0]: verify using type 'name' +INFO /spec/spec-bool:/spec-name: verify using type 'optional-str' +INFO /spec/spec-bool:/spec-type: verify using type 'name' +INFO /spec/spec-dict: verify using type 'root' +INFO /spec/spec-dict:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-dict:/copyrights: verify using type 'copyrights' +INFO /spec/spec-dict:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-dict:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-dict:/links: verify using type 'links' +INFO /spec/spec-dict:/links[0]: verify using type 'link' +INFO /spec/spec-dict:/links[0]/role: verify using type 'name' +INFO /spec/spec-dict:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-dict:/links[0]: verify using type 'spec-member' +INFO /spec/spec-dict:/type: verify using type 'name' +INFO /spec/spec-dict: verify using type 'spec' +INFO /spec/spec-dict:/spec-description: verify using type 'optional-str' +INFO /spec/spec-dict:/spec-example: verify using type 'optional-str' +INFO /spec/spec-dict:/spec-info: verify using type 'spec-info' +INFO /spec/spec-dict:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-dict:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-dict:/spec-info/dict/attributes/attributes: verify using type 'spec-attribute-value' +INFO /spec/spec-dict:/spec-info/dict/attributes/attributes/description: verify using type 'optional-str' +INFO /spec/spec-dict:/spec-info/dict/attributes/attributes/spec-type: verify using type 'name' +INFO /spec/spec-dict:/spec-info/dict/attributes/description: verify using type 'spec-attribute-value' +INFO /spec/spec-dict:/spec-info/dict/attributes/description/description: verify using type 'optional-str' +INFO /spec/spec-dict:/spec-info/dict/attributes/description/spec-type: verify using type 'name' +INFO /spec/spec-dict:/spec-info/dict/attributes/generic-attributes: verify using type 'spec-attribute-value' +INFO /spec/spec-dict:/spec-info/dict/attributes/generic-attributes/description: verify using type 'optional-str' +INFO /spec/spec-dict:/spec-info/dict/attributes/generic-attributes/spec-type: verify using type 'name' +INFO /spec/spec-dict:/spec-info/dict/attributes/required-attributes: verify using type 'spec-attribute-value' +INFO /spec/spec-dict:/spec-info/dict/attributes/required-attributes/description: verify using type 'optional-str' +INFO /spec/spec-dict:/spec-info/dict/attributes/required-attributes/spec-type: verify using type 'name' +INFO /spec/spec-dict:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-dict:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-dict:/spec-info/dict/required-attributes[0]: verify using type 'name' +INFO /spec/spec-dict:/spec-info/dict/required-attributes[1]: verify using type 'name' +INFO /spec/spec-dict:/spec-info/dict/required-attributes[2]: verify using type 'name' +INFO /spec/spec-dict:/spec-name: verify using type 'optional-str' +INFO /spec/spec-dict:/spec-type: verify using type 'name' +INFO /spec/spec-float: verify using type 'root' +INFO /spec/spec-float:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-float:/copyrights: verify using type 'copyrights' +INFO /spec/spec-float:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-float:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-float:/links: verify using type 'links' +INFO /spec/spec-float:/links[0]: verify using type 'link' +INFO /spec/spec-float:/links[0]/role: verify using type 'name' +INFO /spec/spec-float:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-float:/links[0]: verify using type 'spec-member' +INFO /spec/spec-float:/type: verify using type 'name' +INFO /spec/spec-float: verify using type 'spec' +INFO /spec/spec-float:/spec-description: verify using type 'optional-str' +INFO /spec/spec-float:/spec-example: verify using type 'optional-str' +INFO /spec/spec-float:/spec-info: verify using type 'spec-info' +INFO /spec/spec-float:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-float:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-float:/spec-info/dict/attributes/assert: verify using type 'spec-attribute-value' +INFO /spec/spec-float:/spec-info/dict/attributes/assert/description: verify using type 'optional-str' +INFO /spec/spec-float:/spec-info/dict/attributes/assert/spec-type: verify using type 'name' +INFO /spec/spec-float:/spec-info/dict/attributes/description: verify using type 'spec-attribute-value' +INFO /spec/spec-float:/spec-info/dict/attributes/description/description: verify using type 'optional-str' +INFO /spec/spec-float:/spec-info/dict/attributes/description/spec-type: verify using type 'name' +INFO /spec/spec-float:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-float:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-float:/spec-info/dict/required-attributes[0]: verify using type 'name' +INFO /spec/spec-float:/spec-name: verify using type 'optional-str' +INFO /spec/spec-float:/spec-type: verify using type 'name' +INFO /spec/spec-generic-attributes: verify using type 'root' +INFO /spec/spec-generic-attributes:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-generic-attributes:/copyrights: verify using type 'copyrights' +INFO /spec/spec-generic-attributes:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-generic-attributes:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-generic-attributes:/links: verify using type 'links' +INFO /spec/spec-generic-attributes:/links[0]: verify using type 'link' +INFO /spec/spec-generic-attributes:/links[0]/role: verify using type 'name' +INFO /spec/spec-generic-attributes:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-generic-attributes:/links[0]: verify using type 'spec-member' +INFO /spec/spec-generic-attributes:/type: verify using type 'name' +INFO /spec/spec-generic-attributes: verify using type 'spec' +INFO /spec/spec-generic-attributes:/spec-description: verify using type 'optional-str' +INFO /spec/spec-generic-attributes:/spec-example: verify using type 'optional-str' +INFO /spec/spec-generic-attributes:/spec-info: verify using type 'spec-info' +INFO /spec/spec-generic-attributes:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-generic-attributes:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-generic-attributes:/spec-info/dict/attributes/description: verify using type 'spec-attribute-value' +INFO /spec/spec-generic-attributes:/spec-info/dict/attributes/description/description: verify using type 'optional-str' +INFO /spec/spec-generic-attributes:/spec-info/dict/attributes/description/spec-type: verify using type 'name' +INFO /spec/spec-generic-attributes:/spec-info/dict/attributes/spec-type: verify using type 'spec-attribute-value' +INFO /spec/spec-generic-attributes:/spec-info/dict/attributes/spec-type/description: verify using type 'optional-str' +INFO /spec/spec-generic-attributes:/spec-info/dict/attributes/spec-type/spec-type: verify using type 'name' +INFO /spec/spec-generic-attributes:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-generic-attributes:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-generic-attributes:/spec-name: verify using type 'optional-str' +INFO /spec/spec-generic-attributes:/spec-type: verify using type 'name' +INFO /spec/spec-info: verify using type 'root' +INFO /spec/spec-info:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-info:/copyrights: verify using type 'copyrights' +INFO /spec/spec-info:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-info:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-info:/links: verify using type 'links' +INFO /spec/spec-info:/links[0]: verify using type 'link' +INFO /spec/spec-info:/links[0]/role: verify using type 'name' +INFO /spec/spec-info:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-info:/links[0]: verify using type 'spec-member' +INFO /spec/spec-info:/type: verify using type 'name' +INFO /spec/spec-info: verify using type 'spec' +INFO /spec/spec-info:/spec-description: verify using type 'optional-str' +INFO /spec/spec-info:/spec-example: verify using type 'optional-str' +INFO /spec/spec-info:/spec-info: verify using type 'spec-info' +INFO /spec/spec-info:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-info:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-info:/spec-info/dict/attributes/bool: verify using type 'spec-attribute-value' +INFO /spec/spec-info:/spec-info/dict/attributes/bool/description: verify using type 'optional-str' +INFO /spec/spec-info:/spec-info/dict/attributes/bool/spec-type: verify using type 'name' +INFO /spec/spec-info:/spec-info/dict/attributes/dict: verify using type 'spec-attribute-value' +INFO /spec/spec-info:/spec-info/dict/attributes/dict/description: verify using type 'optional-str' +INFO /spec/spec-info:/spec-info/dict/attributes/dict/spec-type: verify using type 'name' +INFO /spec/spec-info:/spec-info/dict/attributes/float: verify using type 'spec-attribute-value' +INFO /spec/spec-info:/spec-info/dict/attributes/float/description: verify using type 'optional-str' +INFO /spec/spec-info:/spec-info/dict/attributes/float/spec-type: verify using type 'name' +INFO /spec/spec-info:/spec-info/dict/attributes/int: verify using type 'spec-attribute-value' +INFO /spec/spec-info:/spec-info/dict/attributes/int/description: verify using type 'optional-str' +INFO /spec/spec-info:/spec-info/dict/attributes/int/spec-type: verify using type 'name' +INFO /spec/spec-info:/spec-info/dict/attributes/list: verify using type 'spec-attribute-value' +INFO /spec/spec-info:/spec-info/dict/attributes/list/description: verify using type 'optional-str' +INFO /spec/spec-info:/spec-info/dict/attributes/list/spec-type: verify using type 'name' +INFO /spec/spec-info:/spec-info/dict/attributes/none: verify using type 'spec-attribute-value' +INFO /spec/spec-info:/spec-info/dict/attributes/none/description: verify using type 'optional-str' +INFO /spec/spec-info:/spec-info/dict/attributes/none/spec-type: verify using type 'name' +INFO /spec/spec-info:/spec-info/dict/attributes/str: verify using type 'spec-attribute-value' +INFO /spec/spec-info:/spec-info/dict/attributes/str/description: verify using type 'optional-str' +INFO /spec/spec-info:/spec-info/dict/attributes/str/spec-type: verify using type 'name' +INFO /spec/spec-info:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-info:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-info:/spec-name: verify using type 'optional-str' +INFO /spec/spec-info:/spec-type: verify using type 'name' +INFO /spec/spec-int: verify using type 'root' +INFO /spec/spec-int:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-int:/copyrights: verify using type 'copyrights' +INFO /spec/spec-int:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-int:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-int:/links: verify using type 'links' +INFO /spec/spec-int:/links[0]: verify using type 'link' +INFO /spec/spec-int:/links[0]/role: verify using type 'name' +INFO /spec/spec-int:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-int:/links[0]: verify using type 'spec-member' +INFO /spec/spec-int:/type: verify using type 'name' +INFO /spec/spec-int: verify using type 'spec' +INFO /spec/spec-int:/spec-description: verify using type 'optional-str' +INFO /spec/spec-int:/spec-example: verify using type 'optional-str' +INFO /spec/spec-int:/spec-info: verify using type 'spec-info' +INFO /spec/spec-int:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-int:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-int:/spec-info/dict/attributes/assert: verify using type 'spec-attribute-value' +INFO /spec/spec-int:/spec-info/dict/attributes/assert/description: verify using type 'optional-str' +INFO /spec/spec-int:/spec-info/dict/attributes/assert/spec-type: verify using type 'name' +INFO /spec/spec-int:/spec-info/dict/attributes/description: verify using type 'spec-attribute-value' +INFO /spec/spec-int:/spec-info/dict/attributes/description/description: verify using type 'optional-str' +INFO /spec/spec-int:/spec-info/dict/attributes/description/spec-type: verify using type 'name' +INFO /spec/spec-int:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-int:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-int:/spec-info/dict/required-attributes[0]: verify using type 'name' +INFO /spec/spec-int:/spec-name: verify using type 'optional-str' +INFO /spec/spec-int:/spec-type: verify using type 'name' +INFO /spec/spec-list: verify using type 'root' +INFO /spec/spec-list:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-list:/copyrights: verify using type 'copyrights' +INFO /spec/spec-list:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-list:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-list:/links: verify using type 'links' +INFO /spec/spec-list:/links[0]: verify using type 'link' +INFO /spec/spec-list:/links[0]/role: verify using type 'name' +INFO /spec/spec-list:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-list:/links[0]: verify using type 'spec-member' +INFO /spec/spec-list:/type: verify using type 'name' +INFO /spec/spec-list: verify using type 'spec' +INFO /spec/spec-list:/spec-description: verify using type 'optional-str' +INFO /spec/spec-list:/spec-example: verify using type 'optional-str' +INFO /spec/spec-list:/spec-info: verify using type 'spec-info' +INFO /spec/spec-list:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-list:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-list:/spec-info/dict/attributes/description: verify using type 'spec-attribute-value' +INFO /spec/spec-list:/spec-info/dict/attributes/description/description: verify using type 'optional-str' +INFO /spec/spec-list:/spec-info/dict/attributes/description/spec-type: verify using type 'name' +INFO /spec/spec-list:/spec-info/dict/attributes/spec-type: verify using type 'spec-attribute-value' +INFO /spec/spec-list:/spec-info/dict/attributes/spec-type/description: verify using type 'optional-str' +INFO /spec/spec-list:/spec-info/dict/attributes/spec-type/spec-type: verify using type 'name' +INFO /spec/spec-list:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-list:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-list:/spec-name: verify using type 'optional-str' +INFO /spec/spec-list:/spec-type: verify using type 'name' +INFO /spec/spec-member: verify using type 'root' +INFO /spec/spec-member:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-member:/copyrights: verify using type 'copyrights' +INFO /spec/spec-member:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-member:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-member:/links: verify using type 'links' +INFO /spec/spec-member:/links[0]: verify using type 'link' +INFO /spec/spec-member:/links[0]/role: verify using type 'name' +INFO /spec/spec-member:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-member:/links[0]: verify using type 'spec-member' +INFO /spec/spec-member:/links[1]: verify using type 'link' +INFO /spec/spec-member:/links[1]/role: verify using type 'name' +INFO /spec/spec-member:/links[1]/uid: verify using type 'uid' +INFO /spec/spec-member:/links[1]: verify using type 'spec-refinement' +INFO /spec/spec-member:/links[1]/spec-key: verify using type 'name' +INFO /spec/spec-member:/links[1]/spec-value: verify using type 'name' +INFO /spec/spec-member:/type: verify using type 'name' +INFO /spec/spec-member: verify using type 'spec' +INFO /spec/spec-member:/spec-description: verify using type 'optional-str' +INFO /spec/spec-member:/spec-example: verify using type 'optional-str' +INFO /spec/spec-member:/spec-info: verify using type 'spec-info' +INFO /spec/spec-member:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-member:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-member:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-member:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-member:/spec-name: verify using type 'optional-str' +INFO /spec/spec-member:/spec-type: verify using type 'name' +INFO /spec/spec-refinement: verify using type 'root' +INFO /spec/spec-refinement:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-refinement:/copyrights: verify using type 'copyrights' +INFO /spec/spec-refinement:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-refinement:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-refinement:/links: verify using type 'links' +INFO /spec/spec-refinement:/links[0]: verify using type 'link' +INFO /spec/spec-refinement:/links[0]/role: verify using type 'name' +INFO /spec/spec-refinement:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-refinement:/links[0]: verify using type 'spec-member' +INFO /spec/spec-refinement:/links[1]: verify using type 'link' +INFO /spec/spec-refinement:/links[1]/role: verify using type 'name' +INFO /spec/spec-refinement:/links[1]/uid: verify using type 'uid' +INFO /spec/spec-refinement:/links[1]: verify using type 'spec-refinement' +INFO /spec/spec-refinement:/links[1]/spec-key: verify using type 'name' +INFO /spec/spec-refinement:/links[1]/spec-value: verify using type 'name' +INFO /spec/spec-refinement:/type: verify using type 'name' +INFO /spec/spec-refinement: verify using type 'spec' +INFO /spec/spec-refinement:/spec-description: verify using type 'optional-str' +INFO /spec/spec-refinement:/spec-example: verify using type 'optional-str' +INFO /spec/spec-refinement:/spec-info: verify using type 'spec-info' +INFO /spec/spec-refinement:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-refinement:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-refinement:/spec-info/dict/attributes/spec-key: verify using type 'spec-attribute-value' +INFO /spec/spec-refinement:/spec-info/dict/attributes/spec-key/description: verify using type 'optional-str' +INFO /spec/spec-refinement:/spec-info/dict/attributes/spec-key/spec-type: verify using type 'name' +INFO /spec/spec-refinement:/spec-info/dict/attributes/spec-value: verify using type 'spec-attribute-value' +INFO /spec/spec-refinement:/spec-info/dict/attributes/spec-value/description: verify using type 'optional-str' +INFO /spec/spec-refinement:/spec-info/dict/attributes/spec-value/spec-type: verify using type 'name' +INFO /spec/spec-refinement:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-refinement:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-refinement:/spec-name: verify using type 'optional-str' +INFO /spec/spec-refinement:/spec-type: verify using type 'name' +INFO /spec/spec-required-attributes: verify using type 'root' +INFO /spec/spec-required-attributes:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-required-attributes:/copyrights: verify using type 'copyrights' +INFO /spec/spec-required-attributes:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-required-attributes:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-required-attributes:/links: verify using type 'links' +INFO /spec/spec-required-attributes:/links[0]: verify using type 'link' +INFO /spec/spec-required-attributes:/links[0]/role: verify using type 'name' +INFO /spec/spec-required-attributes:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-required-attributes:/links[0]: verify using type 'spec-member' +INFO /spec/spec-required-attributes:/type: verify using type 'name' +INFO /spec/spec-required-attributes: verify using type 'spec' +INFO /spec/spec-required-attributes:/spec-description: verify using type 'optional-str' +INFO /spec/spec-required-attributes:/spec-example: verify using type 'optional-str' +INFO /spec/spec-required-attributes:/spec-info: verify using type 'spec-info' +INFO /spec/spec-required-attributes:/spec-info/list: verify using type 'spec-list' +INFO /spec/spec-required-attributes:/spec-info/list/description: verify using type 'optional-str' +INFO /spec/spec-required-attributes:/spec-info/list/spec-type: verify using type 'name' +INFO /spec/spec-required-attributes:/spec-info/str: verify using type 'spec-str' +INFO /spec/spec-required-attributes:/spec-info/str/assert: verify using type 'spec-assert-str' +INFO /spec/spec-required-attributes:/spec-info/str/assert/in: verify using type 'list-str' +INFO /spec/spec-required-attributes:/spec-info/str/assert/in[0]: verify using type 'str' +INFO /spec/spec-required-attributes:/spec-info/str/assert/in[1]: verify using type 'str' +INFO /spec/spec-required-attributes:/spec-info/str/assert/in[2]: verify using type 'str' +INFO /spec/spec-required-attributes:/spec-info/str/assert/in[3]: verify using type 'str' +INFO /spec/spec-required-attributes:/spec-info/str/assert/in[4]: verify using type 'str' +INFO /spec/spec-required-attributes:/spec-info/str/description: verify using type 'optional-str' +INFO /spec/spec-required-attributes:/spec-name: verify using type 'optional-str' +INFO /spec/spec-required-attributes:/spec-type: verify using type 'name' +INFO /spec/spec-str: verify using type 'root' +INFO /spec/spec-str:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec/spec-str:/copyrights: verify using type 'copyrights' +INFO /spec/spec-str:/copyrights[0]: verify using type 'copyright' +INFO /spec/spec-str:/enabled-by: verify using type 'enabled-by' +INFO /spec/spec-str:/links: verify using type 'links' +INFO /spec/spec-str:/links[0]: verify using type 'link' +INFO /spec/spec-str:/links[0]/role: verify using type 'name' +INFO /spec/spec-str:/links[0]/uid: verify using type 'uid' +INFO /spec/spec-str:/links[0]: verify using type 'spec-member' +INFO /spec/spec-str:/type: verify using type 'name' +INFO /spec/spec-str: verify using type 'spec' +INFO /spec/spec-str:/spec-description: verify using type 'optional-str' +INFO /spec/spec-str:/spec-example: verify using type 'optional-str' +INFO /spec/spec-str:/spec-info: verify using type 'spec-info' +INFO /spec/spec-str:/spec-info/dict: verify using type 'spec-dict' +INFO /spec/spec-str:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec/spec-str:/spec-info/dict/attributes/assert: verify using type 'spec-attribute-value' +INFO /spec/spec-str:/spec-info/dict/attributes/assert/description: verify using type 'optional-str' +INFO /spec/spec-str:/spec-info/dict/attributes/assert/spec-type: verify using type 'name' +INFO /spec/spec-str:/spec-info/dict/attributes/description: verify using type 'spec-attribute-value' +INFO /spec/spec-str:/spec-info/dict/attributes/description/description: verify using type 'optional-str' +INFO /spec/spec-str:/spec-info/dict/attributes/description/spec-type: verify using type 'name' +INFO /spec/spec-str:/spec-info/dict/description: verify using type 'optional-str' +INFO /spec/spec-str:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec/spec-str:/spec-info/dict/required-attributes[0]: verify using type 'name' +INFO /spec/spec-str:/spec-name: verify using type 'optional-str' +INFO /spec/spec-str:/spec-type: verify using type 'name' +INFO /spec2/any-dict: verify using type 'root' +INFO /spec2/any-dict:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/any-dict:/copyrights: verify using type 'copyrights' +INFO /spec2/any-dict:/copyrights[0]: verify using type 'copyright' +INFO /spec2/any-dict:/enabled-by: verify using type 'enabled-by' +INFO /spec2/any-dict:/links: verify using type 'links' +INFO /spec2/any-dict:/links[0]: verify using type 'link' +INFO /spec2/any-dict:/links[0]/role: verify using type 'name' +INFO /spec2/any-dict:/links[0]/uid: verify using type 'uid' +INFO /spec2/any-dict:/links[0]: verify using type 'spec-member' +INFO /spec2/any-dict:/type: verify using type 'name' +INFO /spec2/any-dict: verify using type 'spec' +ERROR /spec2/any-dict: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/any-dict:/spec-example: verify using type 'optional-str' +INFO /spec2/any-dict:/spec-info: verify using type 'spec-info' +INFO /spec2/any-dict:/spec-info/dict: verify using type 'spec-dict' +ERROR /spec2/any-dict:/spec-info/dict: missing required keys for type 'spec-dict': ['description'] +INFO /spec2/any-dict:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec2/any-dict:/spec-info/dict/generic-attributes: verify using type 'spec-generic-attributes' +ERROR /spec2/any-dict:/spec-info/dict/generic-attributes: missing required keys for type 'spec-generic-attributes': ['description'] +INFO /spec2/any-dict:/spec-info/dict/generic-attributes/spec-type: verify using type 'name' +INFO /spec2/any-dict:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec2/any-dict:/spec-type: verify using type 'name' +INFO /spec2/c: verify using type 'root' +INFO /spec2/c:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/c:/copyrights: verify using type 'copyrights' +INFO /spec2/c:/copyrights[0]: verify using type 'copyright' +INFO /spec2/c:/enabled-by: verify using type 'enabled-by' +INFO /spec2/c:/links: verify using type 'links' +INFO /spec2/c:/links[0]: verify using type 'link' +INFO /spec2/c:/links[0]/role: verify using type 'name' +INFO /spec2/c:/links[0]/uid: verify using type 'uid' +INFO /spec2/c:/links[0]: verify using type 'spec-member' +INFO /spec2/c:/links[1]: verify using type 'link' +INFO /spec2/c:/links[1]/role: verify using type 'name' +INFO /spec2/c:/links[1]/uid: verify using type 'uid' +INFO /spec2/c:/links[1]: verify using type 'spec-refinement' +INFO /spec2/c:/links[1]/spec-key: verify using type 'name' +INFO /spec2/c:/links[1]/spec-value: verify using type 'name' +INFO /spec2/c:/type: verify using type 'name' +INFO /spec2/c: verify using type 'spec' +ERROR /spec2/c: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/c:/spec-example: verify using type 'optional-str' +INFO /spec2/c:/spec-info: verify using type 'spec-info' +INFO /spec2/c:/spec-info/dict: verify using type 'spec-dict' +ERROR /spec2/c:/spec-info/dict: missing required keys for type 'spec-dict': ['description'] +INFO /spec2/c:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec2/c:/spec-info/dict/attributes/any-dict: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/any-dict: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/any-dict/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/attributes/bool: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/bool: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/bool/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/attributes/dict: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/dict: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/dict/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/attributes/float: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/float: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/float/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/attributes/int: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/int: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/int/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/attributes/list: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/list: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/list/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/attributes/must-be-true: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/must-be-true: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/must-be-true/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/attributes/other-int: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/other-int: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/other-int/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/attributes/str: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/str: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/str/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/attributes/str-contains: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/str-contains: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/str-contains/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/attributes/uid: verify using type 'spec-attribute-value' +ERROR /spec2/c:/spec-info/dict/attributes/uid: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/c:/spec-info/dict/attributes/uid/spec-type: verify using type 'name' +INFO /spec2/c:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec2/c:/spec-type: verify using type 'name' +INFO /spec2/d: verify using type 'root' +INFO /spec2/d:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/d:/copyrights: verify using type 'copyrights' +INFO /spec2/d:/copyrights[0]: verify using type 'copyright' +INFO /spec2/d:/enabled-by: verify using type 'enabled-by' +INFO /spec2/d:/links: verify using type 'links' +INFO /spec2/d:/links[0]: verify using type 'link' +INFO /spec2/d:/links[0]/role: verify using type 'name' +INFO /spec2/d:/links[0]/uid: verify using type 'uid' +INFO /spec2/d:/links[0]: verify using type 'spec-member' +INFO /spec2/d:/links[1]: verify using type 'link' +INFO /spec2/d:/links[1]/role: verify using type 'name' +INFO /spec2/d:/links[1]/uid: verify using type 'uid' +INFO /spec2/d:/links[1]: verify using type 'spec-refinement' +INFO /spec2/d:/links[1]/spec-key: verify using type 'name' +INFO /spec2/d:/links[1]/spec-value: verify using type 'name' +INFO /spec2/d:/type: verify using type 'name' +INFO /spec2/d: verify using type 'spec' +ERROR /spec2/d: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/d:/spec-example: verify using type 'optional-str' +INFO /spec2/d:/spec-info: verify using type 'spec-info' +INFO /spec2/d:/spec-info/dict: verify using type 'spec-dict' +ERROR /spec2/d:/spec-info/dict: missing required keys for type 'spec-dict': ['description'] +INFO /spec2/d:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec2/d:/spec-info/dict/attributes/d-type: verify using type 'spec-attribute-value' +ERROR /spec2/d:/spec-info/dict/attributes/d-type: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/d:/spec-info/dict/attributes/d-type/spec-type: verify using type 'name' +INFO /spec2/d:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec2/d:/spec-info/dict/required-attributes[0]: verify using type 'name' +INFO /spec2/d:/spec-type: verify using type 'name' +INFO /spec2/d-a: verify using type 'root' +INFO /spec2/d-a:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/d-a:/copyrights: verify using type 'copyrights' +INFO /spec2/d-a:/copyrights[0]: verify using type 'copyright' +INFO /spec2/d-a:/enabled-by: verify using type 'enabled-by' +INFO /spec2/d-a:/links: verify using type 'links' +INFO /spec2/d-a:/links[0]: verify using type 'link' +INFO /spec2/d-a:/links[0]/role: verify using type 'name' +INFO /spec2/d-a:/links[0]/uid: verify using type 'uid' +INFO /spec2/d-a:/links[0]: verify using type 'spec-member' +INFO /spec2/d-a:/links[1]: verify using type 'link' +INFO /spec2/d-a:/links[1]/role: verify using type 'name' +INFO /spec2/d-a:/links[1]/uid: verify using type 'uid' +INFO /spec2/d-a:/links[1]: verify using type 'spec-refinement' +INFO /spec2/d-a:/links[1]/spec-key: verify using type 'name' +INFO /spec2/d-a:/links[1]/spec-value: verify using type 'name' +INFO /spec2/d-a:/links[2]: verify using type 'link' +INFO /spec2/d-a:/links[2]/role: verify using type 'name' +INFO /spec2/d-a:/links[2]/uid: verify using type 'uid' +ERROR /spec2/d-a:/links[2]: unknown subtype for key 'role' for type 'link': other +INFO /spec2/d-a:/type: verify using type 'name' +INFO /spec2/d-a: verify using type 'spec' +ERROR /spec2/d-a: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/d-a:/spec-example: verify using type 'optional-str' +INFO /spec2/d-a:/spec-info: verify using type 'spec-info' +INFO /spec2/d-a:/spec-info/dict: verify using type 'spec-dict' +ERROR /spec2/d-a:/spec-info/dict: missing required keys for type 'spec-dict': ['description'] +INFO /spec2/d-a:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec2/d-a:/spec-info/dict/attributes/d-type: verify using type 'spec-attribute-value' +ERROR /spec2/d-a:/spec-info/dict/attributes/d-type: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/d-a:/spec-info/dict/attributes/d-type/spec-type: verify using type 'name' +INFO /spec2/d-a:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec2/d-a:/spec-type: verify using type 'name' +INFO /spec2/invalid: verify using type 'root' +INFO /spec2/invalid:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/invalid:/copyrights: verify using type 'copyrights' +INFO /spec2/invalid:/copyrights[0]: verify using type 'copyright' +INFO /spec2/invalid:/enabled-by: verify using type 'enabled-by' +INFO /spec2/invalid:/links: verify using type 'links' +INFO /spec2/invalid:/links[0]: verify using type 'link' +INFO /spec2/invalid:/links[0]/role: verify using type 'name' +INFO /spec2/invalid:/links[0]/uid: verify using type 'uid' +INFO /spec2/invalid:/links[0]: verify using type 'spec-member' +INFO /spec2/invalid:/links[1]: verify using type 'link' +INFO /spec2/invalid:/links[1]/role: verify using type 'name' +INFO /spec2/invalid:/links[1]/uid: verify using type 'uid' +INFO /spec2/invalid:/links[1]: verify using type 'spec-refinement' +INFO /spec2/invalid:/links[1]/spec-key: verify using type 'name' +INFO /spec2/invalid:/links[1]/spec-value: verify using type 'name' +INFO /spec2/invalid:/type: verify using type 'name' +INFO /spec2/invalid: verify using type 'spec' +ERROR /spec2/invalid: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/invalid:/spec-example: verify using type 'optional-str' +INFO /spec2/invalid:/spec-info: verify using type 'spec-info' +INFO /spec2/invalid:/spec-info/dict: verify using type 'spec-dict' +ERROR /spec2/invalid:/spec-info/dict: missing required keys for type 'spec-dict': ['description'] +INFO /spec2/invalid:/spec-info/dict/attributes: verify using type 'spec-attributes' +ERROR /spec2/invalid:/spec-info/dict/attributes: invalid name: INVALID +INFO /spec2/invalid:/spec-info/dict/attributes/INVALID: verify using type 'spec-attribute-value' +ERROR /spec2/invalid:/spec-info/dict/attributes/INVALID: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/invalid:/spec-info/dict/attributes/INVALID/spec-type: verify using type 'name' +INFO /spec2/invalid:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec2/invalid:/spec-info/none: verify using type 'none' +ERROR /spec2/invalid:/spec-info/none: expected type 'none', actual type 'bool' +INFO /spec2/invalid:/spec-info/str: verify using type 'spec-str' +ERROR /spec2/invalid:/spec-info/str: missing required keys for type 'spec-str': ['description'] +ERROR /spec2/invalid:/spec-info/str: has unverfied keys for type 'spec-str' and its subtypes: ['foo'] +ERROR /spec2/invalid:/spec-info: has unverfied keys for type 'spec-info' and its subtypes: ['unexpected'] +INFO /spec2/invalid:/spec-type: verify using type 'name' +INFO /spec2/keys-at-least-one: verify using type 'root' +INFO /spec2/keys-at-least-one:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/keys-at-least-one:/copyrights: verify using type 'copyrights' +INFO /spec2/keys-at-least-one:/copyrights[0]: verify using type 'copyright' +INFO /spec2/keys-at-least-one:/enabled-by: verify using type 'enabled-by' +INFO /spec2/keys-at-least-one:/links: verify using type 'links' +INFO /spec2/keys-at-least-one:/links[0]: verify using type 'link' +INFO /spec2/keys-at-least-one:/links[0]/role: verify using type 'name' +INFO /spec2/keys-at-least-one:/links[0]/uid: verify using type 'uid' +INFO /spec2/keys-at-least-one:/links[0]: verify using type 'spec-member' +INFO /spec2/keys-at-least-one:/links[1]: verify using type 'link' +INFO /spec2/keys-at-least-one:/links[1]/role: verify using type 'name' +INFO /spec2/keys-at-least-one:/links[1]/uid: verify using type 'uid' +INFO /spec2/keys-at-least-one:/links[1]: verify using type 'spec-refinement' +INFO /spec2/keys-at-least-one:/links[1]/spec-key: verify using type 'name' +INFO /spec2/keys-at-least-one:/links[1]/spec-value: verify using type 'name' +INFO /spec2/keys-at-least-one:/type: verify using type 'name' +INFO /spec2/keys-at-least-one: verify using type 'spec' +ERROR /spec2/keys-at-least-one: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/keys-at-least-one:/spec-example: verify using type 'optional-str' +INFO /spec2/keys-at-least-one:/spec-info: verify using type 'spec-info' +INFO /spec2/keys-at-least-one:/spec-info/dict: verify using type 'spec-dict' +ERROR /spec2/keys-at-least-one:/spec-info/dict: missing required keys for type 'spec-dict': ['description'] +INFO /spec2/keys-at-least-one:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec2/keys-at-least-one:/spec-info/dict/attributes/key-a: verify using type 'spec-attribute-value' +ERROR /spec2/keys-at-least-one:/spec-info/dict/attributes/key-a: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/keys-at-least-one:/spec-info/dict/attributes/key-a/spec-type: verify using type 'name' +INFO /spec2/keys-at-least-one:/spec-info/dict/attributes/key-b: verify using type 'spec-attribute-value' +ERROR /spec2/keys-at-least-one:/spec-info/dict/attributes/key-b: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/keys-at-least-one:/spec-info/dict/attributes/key-b/spec-type: verify using type 'name' +INFO /spec2/keys-at-least-one:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec2/keys-at-least-one:/spec-type: verify using type 'name' +INFO /spec2/keys-at-most-one: verify using type 'root' +INFO /spec2/keys-at-most-one:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/keys-at-most-one:/copyrights: verify using type 'copyrights' +INFO /spec2/keys-at-most-one:/copyrights[0]: verify using type 'copyright' +INFO /spec2/keys-at-most-one:/enabled-by: verify using type 'enabled-by' +INFO /spec2/keys-at-most-one:/links: verify using type 'links' +INFO /spec2/keys-at-most-one:/links[0]: verify using type 'link' +INFO /spec2/keys-at-most-one:/links[0]/role: verify using type 'name' +INFO /spec2/keys-at-most-one:/links[0]/uid: verify using type 'uid' +INFO /spec2/keys-at-most-one:/links[0]: verify using type 'spec-member' +INFO /spec2/keys-at-most-one:/links[1]: verify using type 'link' +INFO /spec2/keys-at-most-one:/links[1]/role: verify using type 'name' +INFO /spec2/keys-at-most-one:/links[1]/uid: verify using type 'uid' +INFO /spec2/keys-at-most-one:/links[1]: verify using type 'spec-refinement' +INFO /spec2/keys-at-most-one:/links[1]/spec-key: verify using type 'name' +INFO /spec2/keys-at-most-one:/links[1]/spec-value: verify using type 'name' +INFO /spec2/keys-at-most-one:/type: verify using type 'name' +INFO /spec2/keys-at-most-one: verify using type 'spec' +ERROR /spec2/keys-at-most-one: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/keys-at-most-one:/spec-example: verify using type 'optional-str' +INFO /spec2/keys-at-most-one:/spec-info: verify using type 'spec-info' +INFO /spec2/keys-at-most-one:/spec-info/dict: verify using type 'spec-dict' +ERROR /spec2/keys-at-most-one:/spec-info/dict: missing required keys for type 'spec-dict': ['description'] +INFO /spec2/keys-at-most-one:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec2/keys-at-most-one:/spec-info/dict/attributes/key-a: verify using type 'spec-attribute-value' +ERROR /spec2/keys-at-most-one:/spec-info/dict/attributes/key-a: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/keys-at-most-one:/spec-info/dict/attributes/key-a/spec-type: verify using type 'name' +INFO /spec2/keys-at-most-one:/spec-info/dict/attributes/key-b: verify using type 'spec-attribute-value' +ERROR /spec2/keys-at-most-one:/spec-info/dict/attributes/key-b: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/keys-at-most-one:/spec-info/dict/attributes/key-b/spec-type: verify using type 'name' +INFO /spec2/keys-at-most-one:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec2/keys-at-most-one:/spec-type: verify using type 'name' +INFO /spec2/keys-exactly-one: verify using type 'root' +INFO /spec2/keys-exactly-one:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/keys-exactly-one:/copyrights: verify using type 'copyrights' +INFO /spec2/keys-exactly-one:/copyrights[0]: verify using type 'copyright' +INFO /spec2/keys-exactly-one:/enabled-by: verify using type 'enabled-by' +INFO /spec2/keys-exactly-one:/links: verify using type 'links' +INFO /spec2/keys-exactly-one:/links[0]: verify using type 'link' +INFO /spec2/keys-exactly-one:/links[0]/role: verify using type 'name' +INFO /spec2/keys-exactly-one:/links[0]/uid: verify using type 'uid' +INFO /spec2/keys-exactly-one:/links[0]: verify using type 'spec-member' +INFO /spec2/keys-exactly-one:/links[1]: verify using type 'link' +INFO /spec2/keys-exactly-one:/links[1]/role: verify using type 'name' +INFO /spec2/keys-exactly-one:/links[1]/uid: verify using type 'uid' +INFO /spec2/keys-exactly-one:/links[1]: verify using type 'spec-refinement' +INFO /spec2/keys-exactly-one:/links[1]/spec-key: verify using type 'name' +INFO /spec2/keys-exactly-one:/links[1]/spec-value: verify using type 'name' +INFO /spec2/keys-exactly-one:/type: verify using type 'name' +INFO /spec2/keys-exactly-one: verify using type 'spec' +ERROR /spec2/keys-exactly-one: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/keys-exactly-one:/spec-example: verify using type 'optional-str' +INFO /spec2/keys-exactly-one:/spec-info: verify using type 'spec-info' +INFO /spec2/keys-exactly-one:/spec-info/dict: verify using type 'spec-dict' +ERROR /spec2/keys-exactly-one:/spec-info/dict: missing required keys for type 'spec-dict': ['description'] +INFO /spec2/keys-exactly-one:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec2/keys-exactly-one:/spec-info/dict/attributes/key-a: verify using type 'spec-attribute-value' +ERROR /spec2/keys-exactly-one:/spec-info/dict/attributes/key-a: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/keys-exactly-one:/spec-info/dict/attributes/key-a/spec-type: verify using type 'name' +INFO /spec2/keys-exactly-one:/spec-info/dict/attributes/key-b: verify using type 'spec-attribute-value' +ERROR /spec2/keys-exactly-one:/spec-info/dict/attributes/key-b: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/keys-exactly-one:/spec-info/dict/attributes/key-b/spec-type: verify using type 'name' +INFO /spec2/keys-exactly-one:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec2/keys-exactly-one:/spec-type: verify using type 'name' +INFO /spec2/must-be-true: verify using type 'root' +INFO /spec2/must-be-true:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/must-be-true:/copyrights: verify using type 'copyrights' +INFO /spec2/must-be-true:/copyrights[0]: verify using type 'copyright' +INFO /spec2/must-be-true:/enabled-by: verify using type 'enabled-by' +INFO /spec2/must-be-true:/links: verify using type 'links' +INFO /spec2/must-be-true:/links[0]: verify using type 'link' +INFO /spec2/must-be-true:/links[0]/role: verify using type 'name' +INFO /spec2/must-be-true:/links[0]/uid: verify using type 'uid' +INFO /spec2/must-be-true:/links[0]: verify using type 'spec-member' +INFO /spec2/must-be-true:/type: verify using type 'name' +INFO /spec2/must-be-true: verify using type 'spec' +ERROR /spec2/must-be-true: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/must-be-true:/spec-example: verify using type 'optional-str' +INFO /spec2/must-be-true:/spec-info: verify using type 'spec-info' +INFO /spec2/must-be-true:/spec-info/bool: verify using type 'spec-bool' +ERROR /spec2/must-be-true:/spec-info/bool: missing required keys for type 'spec-bool': ['description'] +INFO /spec2/must-be-true:/spec-info/bool/assert: verify using type 'bool' +INFO /spec2/must-be-true:/spec-type: verify using type 'name' +INFO /spec2/other-int: verify using type 'root' +INFO /spec2/other-int:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/other-int:/copyrights: verify using type 'copyrights' +INFO /spec2/other-int:/copyrights[0]: verify using type 'copyright' +INFO /spec2/other-int:/enabled-by: verify using type 'enabled-by' +INFO /spec2/other-int:/links: verify using type 'links' +INFO /spec2/other-int:/links[0]: verify using type 'link' +INFO /spec2/other-int:/links[0]/role: verify using type 'name' +INFO /spec2/other-int:/links[0]/uid: verify using type 'uid' +INFO /spec2/other-int:/links[0]: verify using type 'spec-member' +INFO /spec2/other-int:/type: verify using type 'name' +INFO /spec2/other-int: verify using type 'spec' +ERROR /spec2/other-int: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/other-int:/spec-example: verify using type 'optional-str' +INFO /spec2/other-int:/spec-info: verify using type 'spec-info' +INFO /spec2/other-int:/spec-info/int: verify using type 'spec-int' +ERROR /spec2/other-int:/spec-info/int: missing required keys for type 'spec-int': ['description'] +INFO /spec2/other-int:/spec-type: verify using type 'name' +INFO /spec2/some-bool: verify using type 'root' +INFO /spec2/some-bool:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/some-bool:/copyrights: verify using type 'copyrights' +INFO /spec2/some-bool:/copyrights[0]: verify using type 'copyright' +INFO /spec2/some-bool:/enabled-by: verify using type 'enabled-by' +INFO /spec2/some-bool:/links: verify using type 'links' +INFO /spec2/some-bool:/links[0]: verify using type 'link' +INFO /spec2/some-bool:/links[0]/role: verify using type 'name' +INFO /spec2/some-bool:/links[0]/uid: verify using type 'uid' +INFO /spec2/some-bool:/links[0]: verify using type 'spec-member' +INFO /spec2/some-bool:/type: verify using type 'name' +INFO /spec2/some-bool: verify using type 'spec' +ERROR /spec2/some-bool: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/some-bool:/spec-example: verify using type 'optional-str' +INFO /spec2/some-bool:/spec-info: verify using type 'spec-info' +INFO /spec2/some-bool:/spec-info/bool: verify using type 'spec-bool' +ERROR /spec2/some-bool:/spec-info/bool: missing required keys for type 'spec-bool': ['description'] +INFO /spec2/some-bool:/spec-type: verify using type 'name' +INFO /spec2/some-dict: verify using type 'root' +INFO /spec2/some-dict:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/some-dict:/copyrights: verify using type 'copyrights' +INFO /spec2/some-dict:/copyrights[0]: verify using type 'copyright' +INFO /spec2/some-dict:/enabled-by: verify using type 'enabled-by' +INFO /spec2/some-dict:/links: verify using type 'links' +INFO /spec2/some-dict:/links[0]: verify using type 'link' +INFO /spec2/some-dict:/links[0]/role: verify using type 'name' +INFO /spec2/some-dict:/links[0]/uid: verify using type 'uid' +INFO /spec2/some-dict:/links[0]: verify using type 'spec-member' +INFO /spec2/some-dict:/type: verify using type 'name' +INFO /spec2/some-dict: verify using type 'spec' +ERROR /spec2/some-dict: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/some-dict:/spec-example: verify using type 'optional-str' +INFO /spec2/some-dict:/spec-info: verify using type 'spec-info' +INFO /spec2/some-dict:/spec-info/dict: verify using type 'spec-dict' +ERROR /spec2/some-dict:/spec-info/dict: missing required keys for type 'spec-dict': ['description'] +INFO /spec2/some-dict:/spec-info/dict/attributes: verify using type 'spec-attributes' +INFO /spec2/some-dict:/spec-info/dict/attributes/a: verify using type 'spec-attribute-value' +ERROR /spec2/some-dict:/spec-info/dict/attributes/a: missing required keys for type 'spec-attribute-value': ['description'] +INFO /spec2/some-dict:/spec-info/dict/attributes/a/spec-type: verify using type 'name' +INFO /spec2/some-dict:/spec-info/dict/required-attributes: verify using type 'spec-required-attributes' +INFO /spec2/some-dict:/spec-info/none: verify using type 'none' +INFO /spec2/some-dict:/spec-type: verify using type 'name' +INFO /spec2/some-float: verify using type 'root' +INFO /spec2/some-float:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/some-float:/copyrights: verify using type 'copyrights' +INFO /spec2/some-float:/copyrights[0]: verify using type 'copyright' +INFO /spec2/some-float:/enabled-by: verify using type 'enabled-by' +INFO /spec2/some-float:/links: verify using type 'links' +INFO /spec2/some-float:/links[0]: verify using type 'link' +INFO /spec2/some-float:/links[0]/role: verify using type 'name' +INFO /spec2/some-float:/links[0]/uid: verify using type 'uid' +INFO /spec2/some-float:/links[0]: verify using type 'spec-member' +INFO /spec2/some-float:/type: verify using type 'name' +INFO /spec2/some-float: verify using type 'spec' +ERROR /spec2/some-float: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/some-float:/spec-example: verify using type 'optional-str' +INFO /spec2/some-float:/spec-info: verify using type 'spec-info' +INFO /spec2/some-float:/spec-info/float: verify using type 'spec-float' +ERROR /spec2/some-float:/spec-info/float: missing required keys for type 'spec-float': ['description'] +INFO /spec2/some-float:/spec-info/float/assert: verify using type 'spec-assert-float' +INFO /spec2/some-float:/spec-info/float/assert[0]: verify using type 'spec-assert-float' +INFO /spec2/some-float:/spec-info/float/assert[0]/le: verify using type 'float' +INFO /spec2/some-float:/spec-type: verify using type 'name' +INFO /spec2/some-int: verify using type 'root' +INFO /spec2/some-int:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/some-int:/copyrights: verify using type 'copyrights' +INFO /spec2/some-int:/copyrights[0]: verify using type 'copyright' +INFO /spec2/some-int:/enabled-by: verify using type 'enabled-by' +INFO /spec2/some-int:/links: verify using type 'links' +INFO /spec2/some-int:/links[0]: verify using type 'link' +INFO /spec2/some-int:/links[0]/role: verify using type 'name' +INFO /spec2/some-int:/links[0]/uid: verify using type 'uid' +INFO /spec2/some-int:/links[0]: verify using type 'spec-member' +INFO /spec2/some-int:/type: verify using type 'name' +INFO /spec2/some-int: verify using type 'spec' +ERROR /spec2/some-int: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/some-int:/spec-example: verify using type 'optional-str' +INFO /spec2/some-int:/spec-info: verify using type 'spec-info' +INFO /spec2/some-int:/spec-info/int: verify using type 'spec-int' +ERROR /spec2/some-int:/spec-info/int: missing required keys for type 'spec-int': ['description'] +INFO /spec2/some-int:/spec-info/int/assert: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[0]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[0]/and: verify using type 'spec-assert-int-list' +INFO /spec2/some-int:/spec-info/int/assert[0]/and[0]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[0]/and[0]/not: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[0]/and[0]/not/eq: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[0]/and[1]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[0]/and[1]/eq: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[1]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[1]/and: verify using type 'spec-assert-int-list' +INFO /spec2/some-int:/spec-info/int/assert[1]/and[0]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[1]/and[0]/eq: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[1]/and[1]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[1]/and[1]/ne: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[2]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[2]/and: verify using type 'spec-assert-int-list' +INFO /spec2/some-int:/spec-info/int/assert[2]/and[0]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[2]/and[0]/ge: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[2]/and[1]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[2]/and[1]/le: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[3]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[3]/and: verify using type 'spec-assert-int-list' +INFO /spec2/some-int:/spec-info/int/assert[3]/and[0]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[3]/and[0]/gt: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[3]/and[1]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[3]/and[1]/lt: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[4]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[4]/and: verify using type 'spec-assert-int-list' +INFO /spec2/some-int:/spec-info/int/assert[4]/and[0]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[4]/and[0]/le: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[4]/and[1]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[4]/and[1]/ge: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[5]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[5]/and: verify using type 'spec-assert-int-list' +INFO /spec2/some-int:/spec-info/int/assert[5]/and[0]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[5]/and[0]/lt: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[5]/and[1]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[5]/and[1]/gt: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[6]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[6]/and: verify using type 'spec-assert-int-list' +INFO /spec2/some-int:/spec-info/int/assert[6]/and[0]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[6]/and[0]/or: verify using type 'spec-assert-int-list' +INFO /spec2/some-int:/spec-info/int/assert[6]/and[0]/or[0]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[6]/and[0]/or[0]/eq: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[6]/and[0]/or[1]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[6]/and[0]/or[1]/ne: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[7]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[7]/eq: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[8]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[8]/ne: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[9]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[9]/le: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[10]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[10]/lt: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[11]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[11]/ge: verify using type 'int' +INFO /spec2/some-int:/spec-info/int/assert[12]: verify using type 'spec-assert-int' +INFO /spec2/some-int:/spec-info/int/assert[12]/gt: verify using type 'int' +INFO /spec2/some-int:/spec-type: verify using type 'name' +INFO /spec2/some-list: verify using type 'root' +INFO /spec2/some-list:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/some-list:/copyrights: verify using type 'copyrights' +INFO /spec2/some-list:/copyrights[0]: verify using type 'copyright' +INFO /spec2/some-list:/enabled-by: verify using type 'enabled-by' +INFO /spec2/some-list:/links: verify using type 'links' +INFO /spec2/some-list:/links[0]: verify using type 'link' +INFO /spec2/some-list:/links[0]/role: verify using type 'name' +INFO /spec2/some-list:/links[0]/uid: verify using type 'uid' +INFO /spec2/some-list:/links[0]: verify using type 'spec-member' +INFO /spec2/some-list:/type: verify using type 'name' +INFO /spec2/some-list: verify using type 'spec' +ERROR /spec2/some-list: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/some-list:/spec-example: verify using type 'optional-str' +INFO /spec2/some-list:/spec-info: verify using type 'spec-info' +INFO /spec2/some-list:/spec-info/list: verify using type 'spec-list' +ERROR /spec2/some-list:/spec-info/list: missing required keys for type 'spec-list': ['description'] +INFO /spec2/some-list:/spec-info/list/spec-type: verify using type 'name' +INFO /spec2/some-list:/spec-type: verify using type 'name' +INFO /spec2/some-str: verify using type 'root' +INFO /spec2/some-str:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/some-str:/copyrights: verify using type 'copyrights' +INFO /spec2/some-str:/copyrights[0]: verify using type 'copyright' +INFO /spec2/some-str:/enabled-by: verify using type 'enabled-by' +INFO /spec2/some-str:/links: verify using type 'links' +INFO /spec2/some-str:/links[0]: verify using type 'link' +INFO /spec2/some-str:/links[0]/role: verify using type 'name' +INFO /spec2/some-str:/links[0]/uid: verify using type 'uid' +INFO /spec2/some-str:/links[0]: verify using type 'spec-member' +INFO /spec2/some-str:/type: verify using type 'name' +INFO /spec2/some-str: verify using type 'spec' +ERROR /spec2/some-str: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/some-str:/spec-example: verify using type 'optional-str' +INFO /spec2/some-str:/spec-info: verify using type 'spec-info' +INFO /spec2/some-str:/spec-info/str: verify using type 'spec-str' +ERROR /spec2/some-str:/spec-info/str: missing required keys for type 'spec-str': ['description'] +INFO /spec2/some-str:/spec-info/str/assert: verify using type 'spec-assert-str' +INFO /spec2/some-str:/spec-info/str/assert[0]: verify using type 'spec-assert-str' +INFO /spec2/some-str:/spec-info/str/assert[0]/uid: verify using type 'none' +INFO /spec2/some-str:/spec-info/str/assert[1]: verify using type 'spec-assert-str' +INFO /spec2/some-str:/spec-info/str/assert[1]/eq: verify using type 'str' +INFO /spec2/some-str:/spec-info/str/assert[2]: verify using type 'spec-assert-str' +INFO /spec2/some-str:/spec-info/str/assert[2]/ne: verify using type 'str' +INFO /spec2/some-str:/spec-info/str/assert[3]: verify using type 'spec-assert-str' +INFO /spec2/some-str:/spec-info/str/assert[3]/re: verify using type 'str' +INFO /spec2/some-str:/spec-type: verify using type 'name' +INFO /spec2/sta: verify using type 'root' +INFO /spec2/sta:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/sta:/copyrights: verify using type 'copyrights' +INFO /spec2/sta:/copyrights[0]: verify using type 'copyright' +INFO /spec2/sta:/enabled-by: verify using type 'enabled-by' +INFO /spec2/sta:/links: verify using type 'links' +INFO /spec2/sta:/type: verify using type 'name' +INFO /spec2/sta: verify using type 'spec' +ERROR /spec2/sta: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/sta:/spec-example: verify using type 'optional-str' +INFO /spec2/sta:/spec-info: verify using type 'spec-info' +ERROR /spec2/sta:/spec-info: not at least one key out of ['bool', 'dict', 'float', 'int', 'list', 'none', 'str'] is present for type 'spec-info' +INFO /spec2/sta:/spec-type: verify using type 'name' +INFO /spec2/str-contains: verify using type 'root' +INFO /spec2/str-contains:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/str-contains:/copyrights: verify using type 'copyrights' +INFO /spec2/str-contains:/copyrights[0]: verify using type 'copyright' +INFO /spec2/str-contains:/enabled-by: verify using type 'enabled-by' +INFO /spec2/str-contains:/links: verify using type 'links' +INFO /spec2/str-contains:/links[0]: verify using type 'link' +INFO /spec2/str-contains:/links[0]/role: verify using type 'name' +INFO /spec2/str-contains:/links[0]/uid: verify using type 'uid' +INFO /spec2/str-contains:/links[0]: verify using type 'spec-member' +INFO /spec2/str-contains:/type: verify using type 'name' +INFO /spec2/str-contains: verify using type 'spec' +ERROR /spec2/str-contains: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/str-contains:/spec-example: verify using type 'optional-str' +INFO /spec2/str-contains:/spec-info: verify using type 'spec-info' +INFO /spec2/str-contains:/spec-info/str: verify using type 'spec-str' +ERROR /spec2/str-contains:/spec-info/str: missing required keys for type 'spec-str': ['description'] +INFO /spec2/str-contains:/spec-info/str/assert: verify using type 'spec-assert-str' +INFO /spec2/str-contains:/spec-info/str/assert/and: verify using type 'spec-assert-str-list' +INFO /spec2/str-contains:/spec-info/str/assert/and[0]: verify using type 'spec-assert-str' +INFO /spec2/str-contains:/spec-info/str/assert/and[0]/contains: verify using type 'list-str' +INFO /spec2/str-contains:/spec-info/str/assert/and[0]/contains[0]: verify using type 'str' +INFO /spec2/str-contains:/spec-info/str/assert/and[0]/contains[1]: verify using type 'str' +INFO /spec2/str-contains:/spec-info/str/assert/and[1]: verify using type 'spec-assert-str' +INFO /spec2/str-contains:/spec-info/str/assert/and[1]/not: verify using type 'spec-assert-str' +INFO /spec2/str-contains:/spec-info/str/assert/and[1]/not/contains: verify using type 'list-str' +INFO /spec2/str-contains:/spec-info/str/assert/and[1]/not/contains[0]: verify using type 'str' +INFO /spec2/str-contains:/spec-type: verify using type 'name' +INFO /spec2/x: verify using type 'root' +INFO /spec2/x:/SPDX-License-Identifier: verify using type 'spdx-license-identifier' +INFO /spec2/x:/copyrights: verify using type 'copyrights' +INFO /spec2/x:/copyrights[0]: verify using type 'copyright' +INFO /spec2/x:/enabled-by: verify using type 'enabled-by' +INFO /spec2/x:/links: verify using type 'links' +INFO /spec2/x:/links[0]: verify using type 'link' +INFO /spec2/x:/links[0]/role: verify using type 'name' +INFO /spec2/x:/links[0]/uid: verify using type 'uid' +INFO /spec2/x:/links[0]: verify using type 'spec-member' +INFO /spec2/x:/type: verify using type 'name' +INFO /spec2/x: verify using type 'spec' +ERROR /spec2/x: missing required keys for type 'spec': ['spec-description', 'spec-name'] +INFO /spec2/x:/spec-example: verify using type 'optional-str' +INFO /spec2/x:/spec-info: verify using type 'spec-info' +INFO /spec2/x:/spec-info/str: verify using type 'spec-str' +ERROR /spec2/x:/spec-info/str: missing required keys for type 'spec-str': ['description'] +INFO /spec2/x:/spec-info/str/assert: verify using type 'spec-assert-str' +INFO /spec2/x:/spec-info/str/assert/eq: verify using type 'str' +INFO /spec2/x:/spec-type: verify using type 'name' +INFO finished specification item verification""" |