Skip to content

Commit

Permalink
Wrap up fix and test updates.
Browse files Browse the repository at this point in the history
  • Loading branch information
aj-stein-nist committed Dec 28, 2022
1 parent 003e03b commit 6446c73
Show file tree
Hide file tree
Showing 11 changed files with 137 additions and 694 deletions.
220 changes: 137 additions & 83 deletions test-suite/metaschema-xspec/json-schema-gen/json-schema-gen.xspec
Original file line number Diff line number Diff line change
Expand Up @@ -6,98 +6,152 @@
stylesheet="../../../toolchains/xslt-M4/schema-gen/make-json-schema-metamap.xsl"
run-as="external" xmlns:ov="http://csrc.nist.gov/ns/oscal/test/variable">

<!--unconstrained constrained-open constrained-closed constrained-narrow constrained-sortof-->
<x:scenario label="defining a token value with no enumerations">
<x:context href="json-value-testing-mini-metaschema-COMPOSED.xml"
select="/*/m:define-field[@name='unconstrained']"/>
<x:expect label="the result should exclude enumerations" xmlns="http://www.w3.org/2005/xpath-functions">
<map key="oscal-value-testing-mini-oscal-value-testing-mini:unconstrained">
<string key="title">Unconstrained</string>
<string key="description">A field whose value is constrained only by its nominal datatype, 'token'.</string>
<string key="$id">#field_oscal-value-testing-mini_unconstrained</string>
<string key="type">object</string>
<map key="properties">
<map key="some">
<string key="title">Some Flag</string>
<string key="description">Some flag some flag some flag.</string>
<string key="$ref">#/definitions/StringDatatype</string>
<x:scenario label="When generating a JSON schema from composed Metaschema definitions">
<x:scenario label="if it has a defined field with no constraint and no allowed-values">
<x:context href="json-value-testing-mini-metaschema-COMPOSED.xml"
select="/*/m:define-field[@name='unconstrained']"/>
<x:expect label="the resulting JSON Schema should not have an enum to enforce it." xmlns="http://www.w3.org/2005/xpath-functions">
<map key="oscal-value-testing-mini-oscal-value-testing-mini:unconstrained">
<string key="title">Unconstrained</string>
<string key="description">A field whose value is constrained only by its nominal datatype, 'token'.</string>
<string key="$id">#field_oscal-value-testing-mini_unconstrained</string>
<string key="type">object</string>
<map key="properties">
<map key="some">
<string key="title">Some Flag</string>
<string key="description">Some flag some flag some flag.</string>
<string key="$ref">#/definitions/StringDatatype</string>
</map>
<map key="token-value">
<string key="$ref">#/definitions/TokenDatatype</string>
</map>
</map>
<map key="token-value">
<string key="$ref">#/definitions/TokenDatatype</string>
<array key="required">
<string>token-value</string>
</array>
<boolean key="additionalProperties">false</boolean>
</map>
</x:expect>
</x:scenario>

<x:scenario label="if it has a defined field with a constraint, allowed-values, strict enforcement of allow-other='no' and explicit target of '.'">
<x:context href="json-value-testing-mini-metaschema-COMPOSED.xml"
select="/*/m:define-field[@name='constrained-closed']"/>
<x:expect label="the resulting JSON Schema should have an enum to enforce it." xmlns="http://www.w3.org/2005/xpath-functions">
<map key="oscal-value-testing-mini-oscal-value-testing-mini:constrained-closed">
<string key="title">Constrained closed</string>
<string key="description">Because allow-other is 'no' an enumeration can be given in the JSON Schema.</string>
<string key="$id">#field_oscal-value-testing-mini_constrained-closed</string>
<string key="type">object</string>
<map key="properties">
<map key="some">
<string key="title">Some Flag</string>
<string key="description">Some flag some flag some flag.</string>
<string key="$ref">#/definitions/StringDatatype</string>
</map>
<map key="token-value">
<array key="allOf">
<map>
<string key="$ref">#/definitions/TokenDatatype</string>
</map>
<map>
<array key="enum">
<string>one</string>
<string>two</string>
<string>three</string>
<string>four</string>
</array>
</map>
</array>
</map>
</map>
<array key="required">
<string>token-value</string>
</array>
<boolean key="additionalProperties">false</boolean>
</map>
<array key="required">
<string>token-value</string>
</array>
<boolean key="additionalProperties">false</boolean>
</map>
</x:expect>
</x:scenario>
</x:expect>
</x:scenario>

<x:scenario label="defining a token value with enumerations">
<x:context href="json-value-testing-mini-metaschema-COMPOSED.xml"
select="/*/m:define-field[@name='constrained-closed']"/>
<x:expect label="the result should *include* enumerations"
xmlns="http://www.w3.org/2005/xpath-functions">
<map key="oscal-value-testing-mini-oscal-value-testing-mini:constrained-closed">
<string key="title">Constrained closed</string>
<string key="description">Because allow-other is 'no' an enumeration can be given in the JSON Schema.</string>
<string key="$id">#field_oscal-value-testing-mini_constrained-closed</string>
<string key="type">object</string>
<map key="properties">
<map key="some">
<string key="title">Some Flag</string>
<string key="description">Some flag some flag some flag.</string>
<string key="$ref">#/definitions/StringDatatype</string>
<x:scenario label="if it has a defined field with a constraint, allowed-values, no explicit target, and permissive enforcement of allow-other='yes'">
<x:context href="json-value-testing-mini-metaschema-COMPOSED.xml"
select="/*/m:define-field[@name='constrained-open']"/>
<x:expect label="the resulting JSON Schema should not have an enum to enforce it." xmlns="http://www.w3.org/2005/xpath-functions">
<map key="oscal-value-testing-mini-oscal-value-testing-mini:constrained-open">
<string key="title">Constrained open</string>
<string key="description">Because allow-other is 'yes' no enumeration can be given in the JSON Schema.</string>
<string key="$id">#field_oscal-value-testing-mini_constrained-open</string>
<string key="type">object</string>
<map key="properties">
<map key="some">
<string key="title">Some Flag</string>
<string key="description">Some flag some flag some flag.</string>
<string key="$ref">#/definitions/StringDatatype</string>
</map>
<map key="token-value">
<string key="$ref">#/definitions/TokenDatatype</string>
</map>
</map>
<map key="token-value">
<array key="allOf">
<map>
<string key="$ref">#/definitions/TokenDatatype</string>
</map>
<map>
<array key="enum">
<string>one</string>
<string>two</string>
<string>three</string>
<string>four</string>
</array>
</map>
</array>
<array key="required">
<string>token-value</string>
</array>
<boolean key="additionalProperties">false</boolean>
</map>
</x:expect>
</x:scenario>

<x:scenario label="if it has a defined field with a constraint, allowed-values, strict enforcement of allow-other='no' and explicit target other than '.'">
<x:context href="json-value-testing-mini-metaschema-COMPOSED.xml"
select="/*/m:define-field[@name='constrained-narrow']"/>
<x:expect label="the resulting JSON Schema should not have an enum to enforce it." xmlns="http://www.w3.org/2005/xpath-functions">
<map key="oscal-value-testing-mini-oscal-value-testing-mini:constrained-narrow">
<string key="title">Constrained narrow</string>
<string key="description">Although allow-other is 'no' an enumeration can't be given in the JSON Schema since it targets a qualified set (only a subset) of the elements in scope.</string>
<string key="$id">#field_oscal-value-testing-mini_constrained-narrow</string>
<string key="type">object</string>
<map key="properties">
<map key="some">
<string key="title">Some Flag</string>
<string key="description">Some flag some flag some flag.</string>
<string key="$ref">#/definitions/StringDatatype</string>
</map>
<map key="token-value">
<string key="$ref">#/definitions/TokenDatatype</string>
</map>
</map>
<array key="required">
<string>token-value</string>
</array>
<boolean key="additionalProperties">false</boolean>
</map>
<array key="required">
<string>token-value</string>
</array>
<boolean key="additionalProperties">false</boolean>
</map>
</x:expect>
</x:scenario>
</x:expect>
</x:scenario>

<x:scenario label="defining a token value permissive enums with allow-other='yes'">
<x:context href="json-value-testing-mini-metaschema-COMPOSED.xml"
select="/*/m:define-field[@name='constrained-narrow']"/>
<x:expect label="the result should exclude enumerations" xmlns="http://www.w3.org/2005/xpath-functions">
<map key="oscal-value-testing-mini-oscal-value-testing-mini:constrained-narrow">
<string key="title">Constrained narrow</string>
<string key="description">Although allow-other is 'no' an enumeration can't be given in the JSON Schema since it targets a qualified set (only a subset) of the elements in scope.</string>
<string key="$id">#field_oscal-value-testing-mini_constrained-narrow</string>
<string key="type">object</string>
<map key="properties">
<map key="some">
<string key="title">Some Flag</string>
<string key="description">Some flag some flag some flag.</string>
<string key="$ref">#/definitions/StringDatatype</string>
</map>
<map key="token-value">
<string key="$ref">#/definitions/TokenDatatype</string>
<x:scenario label="if it has a defined field with a constraint, allowed-values, permissive enforcement of allow-other='yes' and explicit target other than '.'">
<x:context href="json-value-testing-mini-metaschema-COMPOSED.xml"
select="/*/m:define-field[@name='constrained-sortof']"/>
<x:expect label="the resulting JSON Schema should not have an enum to enforce it." xmlns="http://www.w3.org/2005/xpath-functions">
<map key="oscal-value-testing-mini-oscal-value-testing-mini:constrained-sortof">
<string key="title">Constrained, sort of</string>
<string key="description">Although allow-other is 'no' an enumeration can't be given in the JSON Schema since it targets a qualified set (only a subset) of the elements in scope.</string>
<string key="$id">#field_oscal-value-testing-mini_constrained-sortof</string>
<string key="type">object</string>
<map key="properties">
<map key="some">
<string key="title">Some Flag</string>
<string key="description">Some flag some flag some flag.</string>
<string key="$ref">#/definitions/StringDatatype</string>
</map>
<map key="token-value">
<string key="$ref">#/definitions/TokenDatatype</string>
</map>
</map>
<array key="required">
<string>token-value</string>
</array>
<boolean key="additionalProperties">false</boolean>
</map>
<array key="required">
<string>token-value</string>
</array>
<boolean key="additionalProperties">false</boolean>
</map>
</x:expect>
</x:expect>
</x:scenario>
</x:scenario>
</x:description>

This file was deleted.

Loading

0 comments on commit 6446c73

Please sign in to comment.