From 5e527213a2430bb3018e5eebd909aef294edf9b5 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 18 Dec 2020 18:48:46 +0300 Subject: Switch to build2 --- xsd-tests/.gitignore | 32 + xsd-tests/FLOSSE | 1 + xsd-tests/GPLv2 | 1 + xsd-tests/LICENSE | 1 + xsd-tests/README | 8 + xsd-tests/build/.gitignore | 3 + xsd-tests/build/bootstrap.build | 9 + xsd-tests/build/root.build | 40 + xsd-tests/buildfile | 4 + xsd-tests/clash/.gitignore | 2 + xsd-tests/clash/buildfile | 27 + xsd-tests/clash/clash.xsd | 25 + xsd-tests/clash/driver.cxx | 10 + xsd-tests/clash/foo.xsd | 11 + xsd-tests/code/name-conflict/buildfile | 22 + xsd-tests/code/name-conflict/driver.cxx | 9 + xsd-tests/code/name-conflict/test.xsd | 40 + xsd-tests/code/name-escaping/buildfile | 22 + xsd-tests/code/name-escaping/driver.cxx | 9 + xsd-tests/code/name-escaping/test.xsd | 60 + xsd-tests/cxx/parser/.gitignore | 1 + xsd-tests/cxx/parser/built-in/buildfile | 23 + xsd-tests/cxx/parser/built-in/driver.cxx | 529 +++++++ xsd-tests/cxx/parser/built-in/output | 164 +++ xsd-tests/cxx/parser/built-in/test.xml | 199 +++ xsd-tests/cxx/parser/built-in/test.xsd | 63 + xsd-tests/cxx/parser/enumeration/buildfile | 24 + xsd-tests/cxx/parser/enumeration/driver.cxx | 81 ++ xsd-tests/cxx/parser/enumeration/gender.hxx | 13 + xsd-tests/cxx/parser/enumeration/output | 3 + xsd-tests/cxx/parser/enumeration/test.map | 7 + xsd-tests/cxx/parser/enumeration/test.xml | 10 + xsd-tests/cxx/parser/enumeration/test.xsd | 35 + xsd-tests/cxx/parser/generated-impl/.gitignore | 2 + xsd-tests/cxx/parser/generated-impl/buildfile | 31 + xsd-tests/cxx/parser/generated-impl/output | 122 ++ xsd-tests/cxx/parser/generated-impl/test.xml | 168 +++ xsd-tests/cxx/parser/generated-impl/test.xsd | 142 ++ xsd-tests/cxx/parser/list/buildfile | 23 + xsd-tests/cxx/parser/list/driver.cxx | 105 ++ xsd-tests/cxx/parser/list/output | 26 + xsd-tests/cxx/parser/list/test.xml | 25 + xsd-tests/cxx/parser/list/test.xsd | 25 + .../cxx/parser/name-clash/inheritance/buildfile | 24 + .../cxx/parser/name-clash/inheritance/driver.cxx | 62 + xsd-tests/cxx/parser/name-clash/inheritance/output | 2 + .../cxx/parser/name-clash/inheritance/test.xml | 8 + .../cxx/parser/name-clash/inheritance/test.xsd | 22 + .../cxx/parser/polymorphism/recursive/buildfile | 24 + .../cxx/parser/polymorphism/recursive/driver.cxx | 68 + xsd-tests/cxx/parser/polymorphism/recursive/output | 22 + .../parser/polymorphism/recursive/test-pimpl.cxx | 147 ++ .../parser/polymorphism/recursive/test-pimpl.hxx | 94 ++ .../cxx/parser/polymorphism/recursive/test.xml | 15 + .../cxx/parser/polymorphism/recursive/test.xsd | 53 + .../cxx/parser/polymorphism/same-type/buildfile | 24 + .../cxx/parser/polymorphism/same-type/driver.cxx | 62 + xsd-tests/cxx/parser/polymorphism/same-type/output | 4 + .../cxx/parser/polymorphism/same-type/test.xml | 10 + .../cxx/parser/polymorphism/same-type/test.xsd | 21 + xsd-tests/cxx/parser/recursive/buildfile | 24 + xsd-tests/cxx/parser/recursive/driver.cxx | 139 ++ xsd-tests/cxx/parser/recursive/output | 22 + xsd-tests/cxx/parser/recursive/test.xml | 11 + xsd-tests/cxx/parser/recursive/test.xsd | 27 + xsd-tests/cxx/parser/test-template/buildfile | 23 + xsd-tests/cxx/parser/test-template/driver.cxx | 66 + xsd-tests/cxx/parser/test-template/output | 1 + xsd-tests/cxx/parser/test-template/test.xml | 7 + xsd-tests/cxx/parser/test-template/test.xsd | 12 + xsd-tests/cxx/parser/union/buildfile | 23 + xsd-tests/cxx/parser/union/driver.cxx | 60 + xsd-tests/cxx/parser/union/output | 2 + xsd-tests/cxx/parser/union/test.xml | 10 + xsd-tests/cxx/parser/union/test.xsd | 16 + xsd-tests/cxx/parser/validation/all/buildfile | 22 + xsd-tests/cxx/parser/validation/all/driver.cxx | 98 ++ xsd-tests/cxx/parser/validation/all/test.xsd | 20 + xsd-tests/cxx/parser/validation/all/testscript | 190 +++ xsd-tests/cxx/parser/validation/any/buildfile | 24 + xsd-tests/cxx/parser/validation/any/driver.cxx | 121 ++ xsd-tests/cxx/parser/validation/any/output | 29 + xsd-tests/cxx/parser/validation/any/test.xml | 21 + xsd-tests/cxx/parser/validation/any/test.xsd | 20 + .../cxx/parser/validation/attribute/buildfile | 24 + .../cxx/parser/validation/attribute/driver.cxx | 197 +++ xsd-tests/cxx/parser/validation/attribute/output | 24 + xsd-tests/cxx/parser/validation/attribute/test.xml | 10 + xsd-tests/cxx/parser/validation/attribute/test.xsd | 71 + .../parser/validation/built-in/any-type/buildfile | 24 + .../parser/validation/built-in/any-type/driver.cxx | 154 ++ .../cxx/parser/validation/built-in/any-type/output | 99 ++ .../parser/validation/built-in/any-type/test.xml | 41 + .../parser/validation/built-in/any-type/test.xsd | 31 + .../parser/validation/built-in/binary/buildfile | 10 + .../parser/validation/built-in/binary/driver.cxx | 153 ++ .../parser/validation/built-in/boolean/buildfile | 10 + .../parser/validation/built-in/boolean/driver.cxx | 145 ++ .../cxx/parser/validation/built-in/byte/buildfile | 10 + .../cxx/parser/validation/built-in/byte/driver.cxx | 256 ++++ .../parser/validation/built-in/date-time/buildfile | 10 + .../validation/built-in/date-time/driver.cxx | 1533 ++++++++++++++++++++ .../cxx/parser/validation/built-in/float/buildfile | 10 + .../parser/validation/built-in/float/driver.cxx | 285 ++++ .../cxx/parser/validation/built-in/int/buildfile | 10 + .../cxx/parser/validation/built-in/int/driver.cxx | 116 ++ .../parser/validation/built-in/integer/buildfile | 10 + .../parser/validation/built-in/integer/driver.cxx | 303 ++++ .../cxx/parser/validation/built-in/long/buildfile | 10 + .../cxx/parser/validation/built-in/long/driver.cxx | 116 ++ .../cxx/parser/validation/built-in/qname/buildfile | 10 + .../parser/validation/built-in/qname/driver.cxx | 105 ++ .../cxx/parser/validation/built-in/short/buildfile | 10 + .../parser/validation/built-in/short/driver.cxx | 116 ++ .../parser/validation/built-in/string/buildfile | 10 + .../parser/validation/built-in/string/driver.cxx | 512 +++++++ .../cxx/parser/validation/built-in/uri/buildfile | 10 + .../cxx/parser/validation/built-in/uri/driver.cxx | 53 + xsd-tests/cxx/parser/validation/choice/buildfile | 22 + xsd-tests/cxx/parser/validation/choice/driver.cxx | 126 ++ xsd-tests/cxx/parser/validation/choice/test.xsd | 24 + xsd-tests/cxx/parser/validation/choice/testscript | 179 +++ .../cxx/parser/validation/restriction/buildfile | 22 + .../cxx/parser/validation/restriction/driver.cxx | 107 ++ .../cxx/parser/validation/restriction/test.xsd | 82 ++ .../cxx/parser/validation/restriction/testscript | 159 ++ xsd-tests/cxx/parser/validation/sequence/buildfile | 22 + .../cxx/parser/validation/sequence/driver.cxx | 139 ++ xsd-tests/cxx/parser/validation/sequence/test.xsd | 28 + .../cxx/parser/validation/sequence/testscript | 328 +++++ xsd-tests/cxx/tree/any-type/buildfile | 26 + xsd-tests/cxx/tree/any-type/driver.cxx | 144 ++ xsd-tests/cxx/tree/any-type/output | 73 + xsd-tests/cxx/tree/any-type/test.xml | 26 + xsd-tests/cxx/tree/any-type/test.xsd | 19 + xsd-tests/cxx/tree/binary/cdr/buildfile | 25 + xsd-tests/cxx/tree/binary/cdr/driver.cxx | 143 ++ xsd-tests/cxx/tree/binary/cdr/test.xml | 93 ++ xsd-tests/cxx/tree/binary/cdr/test.xsd | 123 ++ xsd-tests/cxx/tree/binary/polymorphic/buildfile | 27 + xsd-tests/cxx/tree/binary/polymorphic/driver.cxx | 164 +++ xsd-tests/cxx/tree/binary/polymorphic/test.xml | 92 ++ xsd-tests/cxx/tree/binary/polymorphic/test.xsd | 125 ++ xsd-tests/cxx/tree/binary/xdr-ordered/buildfile | 28 + xsd-tests/cxx/tree/binary/xdr-ordered/driver.cxx | 206 +++ xsd-tests/cxx/tree/binary/xdr-ordered/test.xml | 93 ++ xsd-tests/cxx/tree/binary/xdr-ordered/test.xsd | 123 ++ xsd-tests/cxx/tree/binary/xdr/buildfile | 27 + xsd-tests/cxx/tree/binary/xdr/driver.cxx | 204 +++ xsd-tests/cxx/tree/binary/xdr/test.xml | 93 ++ xsd-tests/cxx/tree/binary/xdr/test.xsd | 123 ++ xsd-tests/cxx/tree/buildfile | 6 + xsd-tests/cxx/tree/built-in/.gitignore | 1 + xsd-tests/cxx/tree/built-in/buildfile | 25 + xsd-tests/cxx/tree/built-in/driver.cxx | 93 ++ xsd-tests/cxx/tree/built-in/testscript | 394 +++++ xsd-tests/cxx/tree/built-in/types.xsd | 460 ++++++ xsd-tests/cxx/tree/chameleon/.gitignore | 1 + xsd-tests/cxx/tree/chameleon/buildfile | 24 + xsd-tests/cxx/tree/chameleon/driver.cxx | 35 + xsd-tests/cxx/tree/chameleon/includee.xsd | 13 + xsd-tests/cxx/tree/chameleon/includer.xsd | 12 + xsd-tests/cxx/tree/chameleon/output | 3 + xsd-tests/cxx/tree/chameleon/test.xml | 8 + xsd-tests/cxx/tree/comparison/buildfile | 22 + xsd-tests/cxx/tree/comparison/driver.cxx | 38 + xsd-tests/cxx/tree/comparison/test.xml | 19 + xsd-tests/cxx/tree/comparison/test.xsd | 30 + xsd-tests/cxx/tree/compilation/buildfile | 20 + xsd-tests/cxx/tree/compilation/driver.cxx | 116 ++ xsd-tests/cxx/tree/compilation/test.xsd | 12 + xsd-tests/cxx/tree/complex/ctor/buildfile | 25 + xsd-tests/cxx/tree/complex/ctor/driver.cxx | 122 ++ xsd-tests/cxx/tree/complex/ctor/test.xsd | 182 +++ xsd-tests/cxx/tree/containment/buildfile | 20 + xsd-tests/cxx/tree/containment/driver.cxx | 118 ++ xsd-tests/cxx/tree/containment/test.xsd | 59 + xsd-tests/cxx/tree/default/general/buildfile | 26 + xsd-tests/cxx/tree/default/general/driver.cxx | 37 + xsd-tests/cxx/tree/default/general/output | 15 + xsd-tests/cxx/tree/default/general/test.xml | 16 + xsd-tests/cxx/tree/default/general/test.xsd | 241 +++ xsd-tests/cxx/tree/default/omit/buildfile | 27 + xsd-tests/cxx/tree/default/omit/driver.cxx | 46 + xsd-tests/cxx/tree/default/omit/output | 19 + xsd-tests/cxx/tree/default/omit/test.xml | 9 + xsd-tests/cxx/tree/default/omit/test.xsd | 30 + xsd-tests/cxx/tree/detach/buildfile | 21 + xsd-tests/cxx/tree/detach/driver.cxx | 108 ++ xsd-tests/cxx/tree/detach/test.xsd | 32 + xsd-tests/cxx/tree/dom-association/buildfile | 27 + xsd-tests/cxx/tree/dom-association/dom-parse.cxx | 95 ++ xsd-tests/cxx/tree/dom-association/dom-parse.hxx | 23 + xsd-tests/cxx/tree/dom-association/driver.cxx | 71 + xsd-tests/cxx/tree/dom-association/output | 0 xsd-tests/cxx/tree/dom-association/test.xml | 7 + xsd-tests/cxx/tree/dom-association/test.xsd | 12 + .../cxx/tree/encoding/char/iso-8859-1/buildfile | 25 + .../cxx/tree/encoding/char/iso-8859-1/driver.cxx | 74 + xsd-tests/cxx/tree/encoding/char/iso-8859-1/output | 10 + .../cxx/tree/encoding/char/iso-8859-1/test.xml | 14 + .../cxx/tree/encoding/char/iso-8859-1/test.xsd | 31 + xsd-tests/cxx/tree/encoding/char/lcp/buildfile | 24 + xsd-tests/cxx/tree/encoding/char/lcp/driver.cxx | 40 + xsd-tests/cxx/tree/encoding/char/lcp/output | 4 + xsd-tests/cxx/tree/encoding/char/lcp/test.xml | 7 + xsd-tests/cxx/tree/encoding/char/lcp/test.xsd | 12 + xsd-tests/cxx/tree/encoding/char/utf-8/buildfile | 24 + xsd-tests/cxx/tree/encoding/char/utf-8/driver.cxx | 63 + xsd-tests/cxx/tree/encoding/char/utf-8/output | 9 + xsd-tests/cxx/tree/encoding/char/utf-8/test.xml | 13 + xsd-tests/cxx/tree/encoding/char/utf-8/test.xsd | 31 + xsd-tests/cxx/tree/encoding/wchar/buildfile | 25 + xsd-tests/cxx/tree/encoding/wchar/driver.cxx | 55 + xsd-tests/cxx/tree/encoding/wchar/output | 10 + xsd-tests/cxx/tree/encoding/wchar/test.xml | 14 + xsd-tests/cxx/tree/encoding/wchar/test.xsd | 33 + xsd-tests/cxx/tree/enumeration/ctor/buildfile | 22 + xsd-tests/cxx/tree/enumeration/ctor/driver.cxx | 30 + xsd-tests/cxx/tree/enumeration/ctor/test.xsd | 41 + .../cxx/tree/enumeration/inheritance/buildfile | 23 + .../cxx/tree/enumeration/inheritance/driver.cxx | 53 + xsd-tests/cxx/tree/enumeration/inheritance/output | 1 + .../cxx/tree/enumeration/inheritance/test.xml | 3 + .../cxx/tree/enumeration/inheritance/test.xsd | 22 + xsd-tests/cxx/tree/float/buildfile | 24 + xsd-tests/cxx/tree/float/driver.cxx | 53 + xsd-tests/cxx/tree/float/output | 35 + xsd-tests/cxx/tree/float/test.xml | 35 + xsd-tests/cxx/tree/float/test.xsd | 74 + xsd-tests/cxx/tree/list/ctor/buildfile | 22 + xsd-tests/cxx/tree/list/ctor/driver.cxx | 50 + xsd-tests/cxx/tree/list/ctor/test.xsd | 18 + .../cxx/tree/name-clash/inheritance/buildfile | 23 + .../cxx/tree/name-clash/inheritance/driver.cxx | 35 + xsd-tests/cxx/tree/name-clash/inheritance/output | 3 + xsd-tests/cxx/tree/name-clash/inheritance/test.xml | 8 + xsd-tests/cxx/tree/name-clash/inheritance/test.xsd | 53 + xsd-tests/cxx/tree/naming/camel/buildfile | 25 + xsd-tests/cxx/tree/naming/camel/driver.cxx | 154 ++ xsd-tests/cxx/tree/naming/camel/test.xsd | 31 + xsd-tests/cxx/tree/naming/java/buildfile | 25 + xsd-tests/cxx/tree/naming/java/driver.cxx | 153 ++ xsd-tests/cxx/tree/naming/java/test.xsd | 31 + xsd-tests/cxx/tree/naming/knr/buildfile | 25 + xsd-tests/cxx/tree/naming/knr/driver.cxx | 154 ++ xsd-tests/cxx/tree/naming/knr/test.xsd | 31 + xsd-tests/cxx/tree/order/buildfile | 37 + xsd-tests/cxx/tree/order/driver.cxx | 64 + xsd-tests/cxx/tree/order/output | 92 ++ xsd-tests/cxx/tree/order/test.xml | 71 + xsd-tests/cxx/tree/order/test.xsd | 130 ++ .../cxx/tree/polymorphism/comparison/buildfile | 25 + .../cxx/tree/polymorphism/comparison/driver.cxx | 85 ++ .../cxx/tree/polymorphism/comparison/test.xml | 7 + .../cxx/tree/polymorphism/comparison/test.xsd | 39 + xsd-tests/cxx/tree/polymorphism/ostream/buildfile | 26 + xsd-tests/cxx/tree/polymorphism/ostream/driver.cxx | 34 + xsd-tests/cxx/tree/polymorphism/ostream/output | 18 + xsd-tests/cxx/tree/polymorphism/ostream/test.xml | 10 + xsd-tests/cxx/tree/polymorphism/ostream/test.xsd | 62 + .../cxx/tree/polymorphism/same-type/buildfile | 25 + .../cxx/tree/polymorphism/same-type/driver.cxx | 35 + xsd-tests/cxx/tree/polymorphism/same-type/output | 9 + xsd-tests/cxx/tree/polymorphism/same-type/test.xml | 10 + xsd-tests/cxx/tree/polymorphism/same-type/test.xsd | 21 + xsd-tests/cxx/tree/prefix/.gitignore | 2 + xsd-tests/cxx/tree/prefix/bar.xsd | 34 + xsd-tests/cxx/tree/prefix/buildfile | 31 + xsd-tests/cxx/tree/prefix/driver.cxx | 34 + xsd-tests/cxx/tree/prefix/foo.xsd | 16 + xsd-tests/cxx/tree/prefix/output | 18 + xsd-tests/cxx/tree/prefix/test.xml | 19 + xsd-tests/cxx/tree/prefix/test.xsd | 40 + xsd-tests/cxx/tree/test-template/buildfile | 23 + xsd-tests/cxx/tree/test-template/driver.cxx | 35 + xsd-tests/cxx/tree/test-template/output | 2 + xsd-tests/cxx/tree/test-template/test.xml | 7 + xsd-tests/cxx/tree/test-template/test.xsd | 12 + xsd-tests/cxx/tree/types-only/buildfile | 20 + xsd-tests/cxx/tree/types-only/driver.cxx | 30 + xsd-tests/cxx/tree/types-only/test.xsd | 52 + xsd-tests/cxx/tree/union/ctor/buildfile | 22 + xsd-tests/cxx/tree/union/ctor/driver.cxx | 30 + xsd-tests/cxx/tree/union/ctor/test.xsd | 14 + xsd-tests/cxx/tree/wildcard/buildfile | 27 + xsd-tests/cxx/tree/wildcard/driver.cxx | 203 +++ xsd-tests/cxx/tree/wildcard/output | 24 + xsd-tests/cxx/tree/wildcard/test.xml | 19 + xsd-tests/cxx/tree/wildcard/test.xsd | 18 + xsd-tests/failed/.gitignore | 1 + xsd-tests/failed/buildfile | 27 + xsd-tests/failed/driver.cxx | 9 + xsd-tests/failed/test-00.xsd | 12 + xsd-tests/manifest | 15 + .../morphing/anonymous/attribute-group/buildfile | 22 + .../morphing/anonymous/attribute-group/driver.cxx | 9 + .../morphing/anonymous/attribute-group/test.xsd | 31 + xsd-tests/morphing/anonymous/basic/buildfile | 22 + xsd-tests/morphing/anonymous/basic/driver.cxx | 9 + xsd-tests/morphing/anonymous/basic/test.xsd | 20 + .../morphing/anonymous/cyclic-inclusion/.gitignore | 2 + .../morphing/anonymous/cyclic-inclusion/buildfile | 27 + .../morphing/anonymous/cyclic-inclusion/driver.cxx | 10 + .../anonymous/cyclic-inclusion/includee.xsd | 18 + .../anonymous/cyclic-inclusion/includer.xsd | 18 + xsd-tests/morphing/anonymous/group/buildfile | 22 + xsd-tests/morphing/anonymous/group/driver.cxx | 9 + xsd-tests/morphing/anonymous/group/test.xsd | 29 + xsd-tests/morphing/anonymous/unstable/.gitignore | 1 + xsd-tests/morphing/anonymous/unstable/buildfile | 31 + .../morphing/anonymous/unstable/includee-1.xsd | 12 + .../morphing/anonymous/unstable/includee-2.xsd | 14 + xsd-tests/morphing/anonymous/unstable/includer.xsd | 18 + xsd-tests/morphing/anonymous/unstable/testscript | 11 + xsd-tests/processing/inheritance/.gitignore | 3 + xsd-tests/processing/inheritance/buildfile | 36 + xsd-tests/processing/inheritance/driver.cxx.in | 9 + xsd-tests/processing/inheritance/test-000.xsd | 22 + xsd-tests/processing/inheritance/test-001.xsd | 26 + xsd-tests/schema/anonymous/buildfile | 22 + xsd-tests/schema/anonymous/driver.cxx | 9 + xsd-tests/schema/anonymous/test.xsd | 143 ++ xsd-tests/schema/any-attribute/buildfile | 12 + xsd-tests/schema/any-attribute/test.xsd | 22 + xsd-tests/schema/any-attribute/testscript | 8 + xsd-tests/schema/any-type/buildfile | 24 + xsd-tests/schema/any-type/driver.cxx | 9 + xsd-tests/schema/any-type/test.xsd | 22 + xsd-tests/schema/any/.gitignore | 5 + xsd-tests/schema/any/buildfile | 47 + xsd-tests/schema/any/driver.cxx.in | 9 + xsd-tests/schema/any/fail.xsd | 19 + xsd-tests/schema/any/test.xsd | 19 + xsd-tests/schema/attribute-group/.gitignore | 1 + xsd-tests/schema/attribute-group/buildfile | 22 + xsd-tests/schema/attribute-group/driver.cxx | 9 + xsd-tests/schema/attribute-group/global.xsd | 50 + xsd-tests/schema/attribute/.gitignore | 3 + xsd-tests/schema/attribute/buildfile | 27 + xsd-tests/schema/attribute/driver.cxx | 11 + xsd-tests/schema/attribute/global.xsd | 21 + xsd-tests/schema/attribute/local.xsd | 37 + xsd-tests/schema/attribute/ref.xsd | 42 + xsd-tests/schema/cardinality/buildfile | 22 + xsd-tests/schema/cardinality/driver.cxx | 9 + xsd-tests/schema/cardinality/test.xsd | 46 + xsd-tests/schema/chameleon/.gitignore | 1 + xsd-tests/schema/chameleon/buildfile | 27 + xsd-tests/schema/chameleon/driver.cxx | 10 + xsd-tests/schema/chameleon/includer.xsd | 17 + xsd-tests/schema/chameleon/schemas/.gitignore | 1 + xsd-tests/schema/chameleon/schemas/includee.xsd | 12 + xsd-tests/schema/enumeration/buildfile | 22 + xsd-tests/schema/enumeration/driver.cxx | 9 + xsd-tests/schema/enumeration/test.xsd | 89 ++ xsd-tests/schema/forward/buildfile | 22 + xsd-tests/schema/forward/driver.cxx | 9 + xsd-tests/schema/forward/test.xsd | 32 + xsd-tests/schema/group/.gitignore | 1 + xsd-tests/schema/group/buildfile | 27 + xsd-tests/schema/group/driver.cxx | 10 + xsd-tests/schema/group/global.xsd | 39 + xsd-tests/schema/group/test.xsd | 148 ++ xsd-tests/schema/import/.gitignore | 1 + xsd-tests/schema/import/buildfile | 27 + xsd-tests/schema/import/driver.cxx | 9 + xsd-tests/schema/import/importer.xsd | 20 + xsd-tests/schema/import/schemas/.gitignore | 1 + xsd-tests/schema/import/schemas/importee.xsd | 15 + xsd-tests/schema/include/.gitignore | 1 + xsd-tests/schema/include/buildfile | 27 + xsd-tests/schema/include/driver.cxx | 9 + xsd-tests/schema/include/includer.xsd | 17 + xsd-tests/schema/include/schemas/.gitignore | 1 + xsd-tests/schema/include/schemas/includee.xsd | 14 + xsd-tests/schema/inheritance/.gitignore | 1 + xsd-tests/schema/inheritance/buildfile | 30 + xsd-tests/schema/inheritance/cycle.xsd | 34 + .../schema/inheritance/sourced-forward/.gitignore | 1 + .../inheritance/sourced-forward/includee.xsd | 10 + .../inheritance/sourced-forward/includer.xsd | 14 + xsd-tests/schema/inheritance/testscript | 8 + xsd-tests/schema/list/anonymous/test.xsd | 16 + xsd-tests/schema/list/any-simple-type/test.xsd | 12 + xsd-tests/schema/list/buildfile | 31 + xsd-tests/schema/list/test.xsd | 72 + xsd-tests/schema/list/testscript | 8 + xsd-tests/schema/no-namespace/buildfile | 22 + xsd-tests/schema/no-namespace/driver.cxx | 9 + xsd-tests/schema/no-namespace/test.xsd | 15 + xsd-tests/schema/recursive/buildfile | 22 + xsd-tests/schema/recursive/driver.cxx | 9 + xsd-tests/schema/recursive/test.xsd | 43 + xsd-tests/schema/ref-type/invalid/buildfile | 12 + xsd-tests/schema/ref-type/invalid/invalid-0.xsd | 17 + xsd-tests/schema/ref-type/invalid/invalid-1.xsd | 11 + xsd-tests/schema/ref-type/invalid/testscript | 16 + xsd-tests/schema/ref-type/valid/.gitignore | 6 + xsd-tests/schema/ref-type/valid/buildfile | 35 + xsd-tests/schema/ref-type/valid/driver.cxx.in | 9 + xsd-tests/schema/ref-type/valid/idref.xsd | 42 + xsd-tests/schema/ref-type/valid/idrefs.xsd | 43 + xsd-tests/schema/restriction/buildfile | 22 + xsd-tests/schema/restriction/driver.cxx | 9 + xsd-tests/schema/restriction/test.xsd | 67 + xsd-tests/schema/union/buildfile | 22 + xsd-tests/schema/union/driver.cxx | 9 + xsd-tests/schema/union/test.xsd | 65 + 409 files changed, 20062 insertions(+) create mode 100644 xsd-tests/.gitignore create mode 120000 xsd-tests/FLOSSE create mode 120000 xsd-tests/GPLv2 create mode 120000 xsd-tests/LICENSE create mode 100644 xsd-tests/README create mode 100644 xsd-tests/build/.gitignore create mode 100644 xsd-tests/build/bootstrap.build create mode 100644 xsd-tests/build/root.build create mode 100644 xsd-tests/buildfile create mode 100644 xsd-tests/clash/.gitignore create mode 100644 xsd-tests/clash/buildfile create mode 100644 xsd-tests/clash/clash.xsd create mode 100644 xsd-tests/clash/driver.cxx create mode 100644 xsd-tests/clash/foo.xsd create mode 100644 xsd-tests/code/name-conflict/buildfile create mode 100644 xsd-tests/code/name-conflict/driver.cxx create mode 100644 xsd-tests/code/name-conflict/test.xsd create mode 100644 xsd-tests/code/name-escaping/buildfile create mode 100644 xsd-tests/code/name-escaping/driver.cxx create mode 100644 xsd-tests/code/name-escaping/test.xsd create mode 100644 xsd-tests/cxx/parser/.gitignore create mode 100644 xsd-tests/cxx/parser/built-in/buildfile create mode 100644 xsd-tests/cxx/parser/built-in/driver.cxx create mode 100644 xsd-tests/cxx/parser/built-in/output create mode 100644 xsd-tests/cxx/parser/built-in/test.xml create mode 100644 xsd-tests/cxx/parser/built-in/test.xsd create mode 100644 xsd-tests/cxx/parser/enumeration/buildfile create mode 100644 xsd-tests/cxx/parser/enumeration/driver.cxx create mode 100644 xsd-tests/cxx/parser/enumeration/gender.hxx create mode 100644 xsd-tests/cxx/parser/enumeration/output create mode 100644 xsd-tests/cxx/parser/enumeration/test.map create mode 100644 xsd-tests/cxx/parser/enumeration/test.xml create mode 100644 xsd-tests/cxx/parser/enumeration/test.xsd create mode 100644 xsd-tests/cxx/parser/generated-impl/.gitignore create mode 100644 xsd-tests/cxx/parser/generated-impl/buildfile create mode 100644 xsd-tests/cxx/parser/generated-impl/output create mode 100644 xsd-tests/cxx/parser/generated-impl/test.xml create mode 100644 xsd-tests/cxx/parser/generated-impl/test.xsd create mode 100644 xsd-tests/cxx/parser/list/buildfile create mode 100644 xsd-tests/cxx/parser/list/driver.cxx create mode 100644 xsd-tests/cxx/parser/list/output create mode 100644 xsd-tests/cxx/parser/list/test.xml create mode 100644 xsd-tests/cxx/parser/list/test.xsd create mode 100644 xsd-tests/cxx/parser/name-clash/inheritance/buildfile create mode 100644 xsd-tests/cxx/parser/name-clash/inheritance/driver.cxx create mode 100644 xsd-tests/cxx/parser/name-clash/inheritance/output create mode 100644 xsd-tests/cxx/parser/name-clash/inheritance/test.xml create mode 100644 xsd-tests/cxx/parser/name-clash/inheritance/test.xsd create mode 100644 xsd-tests/cxx/parser/polymorphism/recursive/buildfile create mode 100644 xsd-tests/cxx/parser/polymorphism/recursive/driver.cxx create mode 100644 xsd-tests/cxx/parser/polymorphism/recursive/output create mode 100644 xsd-tests/cxx/parser/polymorphism/recursive/test-pimpl.cxx create mode 100644 xsd-tests/cxx/parser/polymorphism/recursive/test-pimpl.hxx create mode 100644 xsd-tests/cxx/parser/polymorphism/recursive/test.xml create mode 100644 xsd-tests/cxx/parser/polymorphism/recursive/test.xsd create mode 100644 xsd-tests/cxx/parser/polymorphism/same-type/buildfile create mode 100644 xsd-tests/cxx/parser/polymorphism/same-type/driver.cxx create mode 100644 xsd-tests/cxx/parser/polymorphism/same-type/output create mode 100644 xsd-tests/cxx/parser/polymorphism/same-type/test.xml create mode 100644 xsd-tests/cxx/parser/polymorphism/same-type/test.xsd create mode 100644 xsd-tests/cxx/parser/recursive/buildfile create mode 100644 xsd-tests/cxx/parser/recursive/driver.cxx create mode 100644 xsd-tests/cxx/parser/recursive/output create mode 100644 xsd-tests/cxx/parser/recursive/test.xml create mode 100644 xsd-tests/cxx/parser/recursive/test.xsd create mode 100644 xsd-tests/cxx/parser/test-template/buildfile create mode 100644 xsd-tests/cxx/parser/test-template/driver.cxx create mode 100644 xsd-tests/cxx/parser/test-template/output create mode 100644 xsd-tests/cxx/parser/test-template/test.xml create mode 100644 xsd-tests/cxx/parser/test-template/test.xsd create mode 100644 xsd-tests/cxx/parser/union/buildfile create mode 100644 xsd-tests/cxx/parser/union/driver.cxx create mode 100644 xsd-tests/cxx/parser/union/output create mode 100644 xsd-tests/cxx/parser/union/test.xml create mode 100644 xsd-tests/cxx/parser/union/test.xsd create mode 100644 xsd-tests/cxx/parser/validation/all/buildfile create mode 100644 xsd-tests/cxx/parser/validation/all/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/all/test.xsd create mode 100644 xsd-tests/cxx/parser/validation/all/testscript create mode 100644 xsd-tests/cxx/parser/validation/any/buildfile create mode 100644 xsd-tests/cxx/parser/validation/any/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/any/output create mode 100644 xsd-tests/cxx/parser/validation/any/test.xml create mode 100644 xsd-tests/cxx/parser/validation/any/test.xsd create mode 100644 xsd-tests/cxx/parser/validation/attribute/buildfile create mode 100644 xsd-tests/cxx/parser/validation/attribute/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/attribute/output create mode 100644 xsd-tests/cxx/parser/validation/attribute/test.xml create mode 100644 xsd-tests/cxx/parser/validation/attribute/test.xsd create mode 100644 xsd-tests/cxx/parser/validation/built-in/any-type/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/any-type/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/any-type/output create mode 100644 xsd-tests/cxx/parser/validation/built-in/any-type/test.xml create mode 100644 xsd-tests/cxx/parser/validation/built-in/any-type/test.xsd create mode 100644 xsd-tests/cxx/parser/validation/built-in/binary/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/binary/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/boolean/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/boolean/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/byte/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/byte/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/date-time/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/date-time/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/float/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/float/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/int/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/int/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/integer/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/integer/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/long/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/long/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/qname/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/qname/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/short/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/short/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/string/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/string/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/built-in/uri/buildfile create mode 100644 xsd-tests/cxx/parser/validation/built-in/uri/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/choice/buildfile create mode 100644 xsd-tests/cxx/parser/validation/choice/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/choice/test.xsd create mode 100644 xsd-tests/cxx/parser/validation/choice/testscript create mode 100644 xsd-tests/cxx/parser/validation/restriction/buildfile create mode 100644 xsd-tests/cxx/parser/validation/restriction/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/restriction/test.xsd create mode 100644 xsd-tests/cxx/parser/validation/restriction/testscript create mode 100644 xsd-tests/cxx/parser/validation/sequence/buildfile create mode 100644 xsd-tests/cxx/parser/validation/sequence/driver.cxx create mode 100644 xsd-tests/cxx/parser/validation/sequence/test.xsd create mode 100644 xsd-tests/cxx/parser/validation/sequence/testscript create mode 100644 xsd-tests/cxx/tree/any-type/buildfile create mode 100644 xsd-tests/cxx/tree/any-type/driver.cxx create mode 100644 xsd-tests/cxx/tree/any-type/output create mode 100644 xsd-tests/cxx/tree/any-type/test.xml create mode 100644 xsd-tests/cxx/tree/any-type/test.xsd create mode 100644 xsd-tests/cxx/tree/binary/cdr/buildfile create mode 100644 xsd-tests/cxx/tree/binary/cdr/driver.cxx create mode 100644 xsd-tests/cxx/tree/binary/cdr/test.xml create mode 100644 xsd-tests/cxx/tree/binary/cdr/test.xsd create mode 100644 xsd-tests/cxx/tree/binary/polymorphic/buildfile create mode 100644 xsd-tests/cxx/tree/binary/polymorphic/driver.cxx create mode 100644 xsd-tests/cxx/tree/binary/polymorphic/test.xml create mode 100644 xsd-tests/cxx/tree/binary/polymorphic/test.xsd create mode 100644 xsd-tests/cxx/tree/binary/xdr-ordered/buildfile create mode 100644 xsd-tests/cxx/tree/binary/xdr-ordered/driver.cxx create mode 100644 xsd-tests/cxx/tree/binary/xdr-ordered/test.xml create mode 100644 xsd-tests/cxx/tree/binary/xdr-ordered/test.xsd create mode 100644 xsd-tests/cxx/tree/binary/xdr/buildfile create mode 100644 xsd-tests/cxx/tree/binary/xdr/driver.cxx create mode 100644 xsd-tests/cxx/tree/binary/xdr/test.xml create mode 100644 xsd-tests/cxx/tree/binary/xdr/test.xsd create mode 100644 xsd-tests/cxx/tree/buildfile create mode 100644 xsd-tests/cxx/tree/built-in/.gitignore create mode 100644 xsd-tests/cxx/tree/built-in/buildfile create mode 100644 xsd-tests/cxx/tree/built-in/driver.cxx create mode 100644 xsd-tests/cxx/tree/built-in/testscript create mode 100644 xsd-tests/cxx/tree/built-in/types.xsd create mode 100644 xsd-tests/cxx/tree/chameleon/.gitignore create mode 100644 xsd-tests/cxx/tree/chameleon/buildfile create mode 100644 xsd-tests/cxx/tree/chameleon/driver.cxx create mode 100644 xsd-tests/cxx/tree/chameleon/includee.xsd create mode 100644 xsd-tests/cxx/tree/chameleon/includer.xsd create mode 100644 xsd-tests/cxx/tree/chameleon/output create mode 100644 xsd-tests/cxx/tree/chameleon/test.xml create mode 100644 xsd-tests/cxx/tree/comparison/buildfile create mode 100644 xsd-tests/cxx/tree/comparison/driver.cxx create mode 100644 xsd-tests/cxx/tree/comparison/test.xml create mode 100644 xsd-tests/cxx/tree/comparison/test.xsd create mode 100644 xsd-tests/cxx/tree/compilation/buildfile create mode 100644 xsd-tests/cxx/tree/compilation/driver.cxx create mode 100644 xsd-tests/cxx/tree/compilation/test.xsd create mode 100644 xsd-tests/cxx/tree/complex/ctor/buildfile create mode 100644 xsd-tests/cxx/tree/complex/ctor/driver.cxx create mode 100644 xsd-tests/cxx/tree/complex/ctor/test.xsd create mode 100644 xsd-tests/cxx/tree/containment/buildfile create mode 100644 xsd-tests/cxx/tree/containment/driver.cxx create mode 100644 xsd-tests/cxx/tree/containment/test.xsd create mode 100644 xsd-tests/cxx/tree/default/general/buildfile create mode 100644 xsd-tests/cxx/tree/default/general/driver.cxx create mode 100644 xsd-tests/cxx/tree/default/general/output create mode 100644 xsd-tests/cxx/tree/default/general/test.xml create mode 100644 xsd-tests/cxx/tree/default/general/test.xsd create mode 100644 xsd-tests/cxx/tree/default/omit/buildfile create mode 100644 xsd-tests/cxx/tree/default/omit/driver.cxx create mode 100644 xsd-tests/cxx/tree/default/omit/output create mode 100644 xsd-tests/cxx/tree/default/omit/test.xml create mode 100644 xsd-tests/cxx/tree/default/omit/test.xsd create mode 100644 xsd-tests/cxx/tree/detach/buildfile create mode 100644 xsd-tests/cxx/tree/detach/driver.cxx create mode 100644 xsd-tests/cxx/tree/detach/test.xsd create mode 100644 xsd-tests/cxx/tree/dom-association/buildfile create mode 100644 xsd-tests/cxx/tree/dom-association/dom-parse.cxx create mode 100644 xsd-tests/cxx/tree/dom-association/dom-parse.hxx create mode 100644 xsd-tests/cxx/tree/dom-association/driver.cxx create mode 100644 xsd-tests/cxx/tree/dom-association/output create mode 100644 xsd-tests/cxx/tree/dom-association/test.xml create mode 100644 xsd-tests/cxx/tree/dom-association/test.xsd create mode 100644 xsd-tests/cxx/tree/encoding/char/iso-8859-1/buildfile create mode 100644 xsd-tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx create mode 100644 xsd-tests/cxx/tree/encoding/char/iso-8859-1/output create mode 100644 xsd-tests/cxx/tree/encoding/char/iso-8859-1/test.xml create mode 100644 xsd-tests/cxx/tree/encoding/char/iso-8859-1/test.xsd create mode 100644 xsd-tests/cxx/tree/encoding/char/lcp/buildfile create mode 100644 xsd-tests/cxx/tree/encoding/char/lcp/driver.cxx create mode 100644 xsd-tests/cxx/tree/encoding/char/lcp/output create mode 100644 xsd-tests/cxx/tree/encoding/char/lcp/test.xml create mode 100644 xsd-tests/cxx/tree/encoding/char/lcp/test.xsd create mode 100644 xsd-tests/cxx/tree/encoding/char/utf-8/buildfile create mode 100644 xsd-tests/cxx/tree/encoding/char/utf-8/driver.cxx create mode 100644 xsd-tests/cxx/tree/encoding/char/utf-8/output create mode 100644 xsd-tests/cxx/tree/encoding/char/utf-8/test.xml create mode 100644 xsd-tests/cxx/tree/encoding/char/utf-8/test.xsd create mode 100644 xsd-tests/cxx/tree/encoding/wchar/buildfile create mode 100644 xsd-tests/cxx/tree/encoding/wchar/driver.cxx create mode 100644 xsd-tests/cxx/tree/encoding/wchar/output create mode 100644 xsd-tests/cxx/tree/encoding/wchar/test.xml create mode 100644 xsd-tests/cxx/tree/encoding/wchar/test.xsd create mode 100644 xsd-tests/cxx/tree/enumeration/ctor/buildfile create mode 100644 xsd-tests/cxx/tree/enumeration/ctor/driver.cxx create mode 100644 xsd-tests/cxx/tree/enumeration/ctor/test.xsd create mode 100644 xsd-tests/cxx/tree/enumeration/inheritance/buildfile create mode 100644 xsd-tests/cxx/tree/enumeration/inheritance/driver.cxx create mode 100644 xsd-tests/cxx/tree/enumeration/inheritance/output create mode 100644 xsd-tests/cxx/tree/enumeration/inheritance/test.xml create mode 100644 xsd-tests/cxx/tree/enumeration/inheritance/test.xsd create mode 100644 xsd-tests/cxx/tree/float/buildfile create mode 100644 xsd-tests/cxx/tree/float/driver.cxx create mode 100644 xsd-tests/cxx/tree/float/output create mode 100644 xsd-tests/cxx/tree/float/test.xml create mode 100644 xsd-tests/cxx/tree/float/test.xsd create mode 100644 xsd-tests/cxx/tree/list/ctor/buildfile create mode 100644 xsd-tests/cxx/tree/list/ctor/driver.cxx create mode 100644 xsd-tests/cxx/tree/list/ctor/test.xsd create mode 100644 xsd-tests/cxx/tree/name-clash/inheritance/buildfile create mode 100644 xsd-tests/cxx/tree/name-clash/inheritance/driver.cxx create mode 100644 xsd-tests/cxx/tree/name-clash/inheritance/output create mode 100644 xsd-tests/cxx/tree/name-clash/inheritance/test.xml create mode 100644 xsd-tests/cxx/tree/name-clash/inheritance/test.xsd create mode 100644 xsd-tests/cxx/tree/naming/camel/buildfile create mode 100644 xsd-tests/cxx/tree/naming/camel/driver.cxx create mode 100644 xsd-tests/cxx/tree/naming/camel/test.xsd create mode 100644 xsd-tests/cxx/tree/naming/java/buildfile create mode 100644 xsd-tests/cxx/tree/naming/java/driver.cxx create mode 100644 xsd-tests/cxx/tree/naming/java/test.xsd create mode 100644 xsd-tests/cxx/tree/naming/knr/buildfile create mode 100644 xsd-tests/cxx/tree/naming/knr/driver.cxx create mode 100644 xsd-tests/cxx/tree/naming/knr/test.xsd create mode 100644 xsd-tests/cxx/tree/order/buildfile create mode 100644 xsd-tests/cxx/tree/order/driver.cxx create mode 100644 xsd-tests/cxx/tree/order/output create mode 100644 xsd-tests/cxx/tree/order/test.xml create mode 100644 xsd-tests/cxx/tree/order/test.xsd create mode 100644 xsd-tests/cxx/tree/polymorphism/comparison/buildfile create mode 100644 xsd-tests/cxx/tree/polymorphism/comparison/driver.cxx create mode 100644 xsd-tests/cxx/tree/polymorphism/comparison/test.xml create mode 100644 xsd-tests/cxx/tree/polymorphism/comparison/test.xsd create mode 100644 xsd-tests/cxx/tree/polymorphism/ostream/buildfile create mode 100644 xsd-tests/cxx/tree/polymorphism/ostream/driver.cxx create mode 100644 xsd-tests/cxx/tree/polymorphism/ostream/output create mode 100644 xsd-tests/cxx/tree/polymorphism/ostream/test.xml create mode 100644 xsd-tests/cxx/tree/polymorphism/ostream/test.xsd create mode 100644 xsd-tests/cxx/tree/polymorphism/same-type/buildfile create mode 100644 xsd-tests/cxx/tree/polymorphism/same-type/driver.cxx create mode 100644 xsd-tests/cxx/tree/polymorphism/same-type/output create mode 100644 xsd-tests/cxx/tree/polymorphism/same-type/test.xml create mode 100644 xsd-tests/cxx/tree/polymorphism/same-type/test.xsd create mode 100644 xsd-tests/cxx/tree/prefix/.gitignore create mode 100644 xsd-tests/cxx/tree/prefix/bar.xsd create mode 100644 xsd-tests/cxx/tree/prefix/buildfile create mode 100644 xsd-tests/cxx/tree/prefix/driver.cxx create mode 100644 xsd-tests/cxx/tree/prefix/foo.xsd create mode 100644 xsd-tests/cxx/tree/prefix/output create mode 100644 xsd-tests/cxx/tree/prefix/test.xml create mode 100644 xsd-tests/cxx/tree/prefix/test.xsd create mode 100644 xsd-tests/cxx/tree/test-template/buildfile create mode 100644 xsd-tests/cxx/tree/test-template/driver.cxx create mode 100644 xsd-tests/cxx/tree/test-template/output create mode 100644 xsd-tests/cxx/tree/test-template/test.xml create mode 100644 xsd-tests/cxx/tree/test-template/test.xsd create mode 100644 xsd-tests/cxx/tree/types-only/buildfile create mode 100644 xsd-tests/cxx/tree/types-only/driver.cxx create mode 100644 xsd-tests/cxx/tree/types-only/test.xsd create mode 100644 xsd-tests/cxx/tree/union/ctor/buildfile create mode 100644 xsd-tests/cxx/tree/union/ctor/driver.cxx create mode 100644 xsd-tests/cxx/tree/union/ctor/test.xsd create mode 100644 xsd-tests/cxx/tree/wildcard/buildfile create mode 100644 xsd-tests/cxx/tree/wildcard/driver.cxx create mode 100644 xsd-tests/cxx/tree/wildcard/output create mode 100644 xsd-tests/cxx/tree/wildcard/test.xml create mode 100644 xsd-tests/cxx/tree/wildcard/test.xsd create mode 100644 xsd-tests/failed/.gitignore create mode 100644 xsd-tests/failed/buildfile create mode 100644 xsd-tests/failed/driver.cxx create mode 100644 xsd-tests/failed/test-00.xsd create mode 100644 xsd-tests/manifest create mode 100644 xsd-tests/morphing/anonymous/attribute-group/buildfile create mode 100644 xsd-tests/morphing/anonymous/attribute-group/driver.cxx create mode 100644 xsd-tests/morphing/anonymous/attribute-group/test.xsd create mode 100644 xsd-tests/morphing/anonymous/basic/buildfile create mode 100644 xsd-tests/morphing/anonymous/basic/driver.cxx create mode 100644 xsd-tests/morphing/anonymous/basic/test.xsd create mode 100644 xsd-tests/morphing/anonymous/cyclic-inclusion/.gitignore create mode 100644 xsd-tests/morphing/anonymous/cyclic-inclusion/buildfile create mode 100644 xsd-tests/morphing/anonymous/cyclic-inclusion/driver.cxx create mode 100644 xsd-tests/morphing/anonymous/cyclic-inclusion/includee.xsd create mode 100644 xsd-tests/morphing/anonymous/cyclic-inclusion/includer.xsd create mode 100644 xsd-tests/morphing/anonymous/group/buildfile create mode 100644 xsd-tests/morphing/anonymous/group/driver.cxx create mode 100644 xsd-tests/morphing/anonymous/group/test.xsd create mode 100644 xsd-tests/morphing/anonymous/unstable/.gitignore create mode 100644 xsd-tests/morphing/anonymous/unstable/buildfile create mode 100644 xsd-tests/morphing/anonymous/unstable/includee-1.xsd create mode 100644 xsd-tests/morphing/anonymous/unstable/includee-2.xsd create mode 100644 xsd-tests/morphing/anonymous/unstable/includer.xsd create mode 100644 xsd-tests/morphing/anonymous/unstable/testscript create mode 100644 xsd-tests/processing/inheritance/.gitignore create mode 100644 xsd-tests/processing/inheritance/buildfile create mode 100644 xsd-tests/processing/inheritance/driver.cxx.in create mode 100644 xsd-tests/processing/inheritance/test-000.xsd create mode 100644 xsd-tests/processing/inheritance/test-001.xsd create mode 100644 xsd-tests/schema/anonymous/buildfile create mode 100644 xsd-tests/schema/anonymous/driver.cxx create mode 100644 xsd-tests/schema/anonymous/test.xsd create mode 100644 xsd-tests/schema/any-attribute/buildfile create mode 100644 xsd-tests/schema/any-attribute/test.xsd create mode 100644 xsd-tests/schema/any-attribute/testscript create mode 100644 xsd-tests/schema/any-type/buildfile create mode 100644 xsd-tests/schema/any-type/driver.cxx create mode 100644 xsd-tests/schema/any-type/test.xsd create mode 100644 xsd-tests/schema/any/.gitignore create mode 100644 xsd-tests/schema/any/buildfile create mode 100644 xsd-tests/schema/any/driver.cxx.in create mode 100644 xsd-tests/schema/any/fail.xsd create mode 100644 xsd-tests/schema/any/test.xsd create mode 100644 xsd-tests/schema/attribute-group/.gitignore create mode 100644 xsd-tests/schema/attribute-group/buildfile create mode 100644 xsd-tests/schema/attribute-group/driver.cxx create mode 100644 xsd-tests/schema/attribute-group/global.xsd create mode 100644 xsd-tests/schema/attribute/.gitignore create mode 100644 xsd-tests/schema/attribute/buildfile create mode 100644 xsd-tests/schema/attribute/driver.cxx create mode 100644 xsd-tests/schema/attribute/global.xsd create mode 100644 xsd-tests/schema/attribute/local.xsd create mode 100644 xsd-tests/schema/attribute/ref.xsd create mode 100644 xsd-tests/schema/cardinality/buildfile create mode 100644 xsd-tests/schema/cardinality/driver.cxx create mode 100644 xsd-tests/schema/cardinality/test.xsd create mode 100644 xsd-tests/schema/chameleon/.gitignore create mode 100644 xsd-tests/schema/chameleon/buildfile create mode 100644 xsd-tests/schema/chameleon/driver.cxx create mode 100644 xsd-tests/schema/chameleon/includer.xsd create mode 100644 xsd-tests/schema/chameleon/schemas/.gitignore create mode 100644 xsd-tests/schema/chameleon/schemas/includee.xsd create mode 100644 xsd-tests/schema/enumeration/buildfile create mode 100644 xsd-tests/schema/enumeration/driver.cxx create mode 100644 xsd-tests/schema/enumeration/test.xsd create mode 100644 xsd-tests/schema/forward/buildfile create mode 100644 xsd-tests/schema/forward/driver.cxx create mode 100644 xsd-tests/schema/forward/test.xsd create mode 100644 xsd-tests/schema/group/.gitignore create mode 100644 xsd-tests/schema/group/buildfile create mode 100644 xsd-tests/schema/group/driver.cxx create mode 100644 xsd-tests/schema/group/global.xsd create mode 100644 xsd-tests/schema/group/test.xsd create mode 100644 xsd-tests/schema/import/.gitignore create mode 100644 xsd-tests/schema/import/buildfile create mode 100644 xsd-tests/schema/import/driver.cxx create mode 100644 xsd-tests/schema/import/importer.xsd create mode 100644 xsd-tests/schema/import/schemas/.gitignore create mode 100644 xsd-tests/schema/import/schemas/importee.xsd create mode 100644 xsd-tests/schema/include/.gitignore create mode 100644 xsd-tests/schema/include/buildfile create mode 100644 xsd-tests/schema/include/driver.cxx create mode 100644 xsd-tests/schema/include/includer.xsd create mode 100644 xsd-tests/schema/include/schemas/.gitignore create mode 100644 xsd-tests/schema/include/schemas/includee.xsd create mode 100644 xsd-tests/schema/inheritance/.gitignore create mode 100644 xsd-tests/schema/inheritance/buildfile create mode 100644 xsd-tests/schema/inheritance/cycle.xsd create mode 100644 xsd-tests/schema/inheritance/sourced-forward/.gitignore create mode 100644 xsd-tests/schema/inheritance/sourced-forward/includee.xsd create mode 100644 xsd-tests/schema/inheritance/sourced-forward/includer.xsd create mode 100644 xsd-tests/schema/inheritance/testscript create mode 100644 xsd-tests/schema/list/anonymous/test.xsd create mode 100644 xsd-tests/schema/list/any-simple-type/test.xsd create mode 100644 xsd-tests/schema/list/buildfile create mode 100644 xsd-tests/schema/list/test.xsd create mode 100644 xsd-tests/schema/list/testscript create mode 100644 xsd-tests/schema/no-namespace/buildfile create mode 100644 xsd-tests/schema/no-namespace/driver.cxx create mode 100644 xsd-tests/schema/no-namespace/test.xsd create mode 100644 xsd-tests/schema/recursive/buildfile create mode 100644 xsd-tests/schema/recursive/driver.cxx create mode 100644 xsd-tests/schema/recursive/test.xsd create mode 100644 xsd-tests/schema/ref-type/invalid/buildfile create mode 100644 xsd-tests/schema/ref-type/invalid/invalid-0.xsd create mode 100644 xsd-tests/schema/ref-type/invalid/invalid-1.xsd create mode 100644 xsd-tests/schema/ref-type/invalid/testscript create mode 100644 xsd-tests/schema/ref-type/valid/.gitignore create mode 100644 xsd-tests/schema/ref-type/valid/buildfile create mode 100644 xsd-tests/schema/ref-type/valid/driver.cxx.in create mode 100644 xsd-tests/schema/ref-type/valid/idref.xsd create mode 100644 xsd-tests/schema/ref-type/valid/idrefs.xsd create mode 100644 xsd-tests/schema/restriction/buildfile create mode 100644 xsd-tests/schema/restriction/driver.cxx create mode 100644 xsd-tests/schema/restriction/test.xsd create mode 100644 xsd-tests/schema/union/buildfile create mode 100644 xsd-tests/schema/union/driver.cxx create mode 100644 xsd-tests/schema/union/test.xsd (limited to 'xsd-tests') diff --git a/xsd-tests/.gitignore b/xsd-tests/.gitignore new file mode 100644 index 0000000..d87c74c --- /dev/null +++ b/xsd-tests/.gitignore @@ -0,0 +1,32 @@ +# Compiler/linker output. +# +*.d +*.t +*.i +*.ii +*.o +*.obj +*.so +*.dll +*.a +*.lib +*.exp +*.pdb +*.ilk +*.exe +*.exe.dlls/ +*.exe.manifest +*.pc + +# Test executables. +# +driver + +# XSD-generated files. +# +test.?xx + +# Testscript output directories (can be symlinks). +# +test +test-driver diff --git a/xsd-tests/FLOSSE b/xsd-tests/FLOSSE new file mode 120000 index 0000000..be6df3d --- /dev/null +++ b/xsd-tests/FLOSSE @@ -0,0 +1 @@ +../FLOSSE \ No newline at end of file diff --git a/xsd-tests/GPLv2 b/xsd-tests/GPLv2 new file mode 120000 index 0000000..08e5586 --- /dev/null +++ b/xsd-tests/GPLv2 @@ -0,0 +1 @@ +../GPLv2 \ No newline at end of file diff --git a/xsd-tests/LICENSE b/xsd-tests/LICENSE new file mode 120000 index 0000000..ea5b606 --- /dev/null +++ b/xsd-tests/LICENSE @@ -0,0 +1 @@ +../LICENSE \ No newline at end of file diff --git a/xsd-tests/README b/xsd-tests/README new file mode 100644 index 0000000..1b529ab --- /dev/null +++ b/xsd-tests/README @@ -0,0 +1,8 @@ +This package contains tests for the XSD to C++ data binding compiler. + +See the LICENSE file for distribution conditions. + +The project page is at https://www.codesynthesis.com/projects/xsd/. + +Send bug reports or any other feedback to the xsd-users@codesynthesis.com +mailing list. diff --git a/xsd-tests/build/.gitignore b/xsd-tests/build/.gitignore new file mode 100644 index 0000000..4a730a3 --- /dev/null +++ b/xsd-tests/build/.gitignore @@ -0,0 +1,3 @@ +config.build +root/ +bootstrap/ diff --git a/xsd-tests/build/bootstrap.build b/xsd-tests/build/bootstrap.build new file mode 100644 index 0000000..49ad78f --- /dev/null +++ b/xsd-tests/build/bootstrap.build @@ -0,0 +1,9 @@ +# file : build/bootstrap.build +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +project = xsd-tests + +using version +using config +using dist +using test diff --git a/xsd-tests/build/root.build b/xsd-tests/build/root.build new file mode 100644 index 0000000..63c3bb4 --- /dev/null +++ b/xsd-tests/build/root.build @@ -0,0 +1,40 @@ +# file : build/root.build +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +define xsd: file +xsd{*}: extension = xsd + +define xml: file +xml{*}: extension = xml + +define map: file +map{*}: extension = map + +using in + +cxx.std = latest + +using cxx + +hxx{*}: extension = hxx +ixx{*}: extension = ixx +txx{*}: extension = txx +cxx{*}: extension = cxx + +if ($cxx.target.system == 'win32-msvc') + cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS + +if ($cxx.class == 'msvc') + cxx.coptions += /wd4251 /wd4275 /wd4800 + +# Setup the xsd that we are testing. +# +import xsd = xsd%exe{xsd} + +# Every exe{} in this project is by default a test. +# +exe{*}: test = true + +# Specify the test target for cross-testing. +# +test.target = $cxx.target diff --git a/xsd-tests/buildfile b/xsd-tests/buildfile new file mode 100644 index 0000000..e783791 --- /dev/null +++ b/xsd-tests/buildfile @@ -0,0 +1,4 @@ +# file : buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +./: {*/ -build/} doc{README} legal{GPLv2 LICENSE FLOSSE} manifest diff --git a/xsd-tests/clash/.gitignore b/xsd-tests/clash/.gitignore new file mode 100644 index 0000000..7349df1 --- /dev/null +++ b/xsd-tests/clash/.gitignore @@ -0,0 +1,2 @@ +clash.?xx +foo.?xx diff --git a/xsd-tests/clash/buildfile b/xsd-tests/clash/buildfile new file mode 100644 index 0000000..e99dccf --- /dev/null +++ b/xsd-tests/clash/buildfile @@ -0,0 +1,27 @@ +# file : clash/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +fs = foo clash + +exe{driver}: {hxx cxx}{* -{$fs}} {hxx cxx}{$fs} $libs + +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/clash/clash.xsd b/xsd-tests/clash/clash.xsd new file mode 100644 index 0000000..8458908 --- /dev/null +++ b/xsd-tests/clash/clash.xsd @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/clash/driver.cxx b/xsd-tests/clash/driver.cxx new file mode 100644 index 0000000..478e71a --- /dev/null +++ b/xsd-tests/clash/driver.cxx @@ -0,0 +1,10 @@ +// file : clash/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "foo.hxx" +#include "clash.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/clash/foo.xsd b/xsd-tests/clash/foo.xsd new file mode 100644 index 0000000..8a06ba8 --- /dev/null +++ b/xsd-tests/clash/foo.xsd @@ -0,0 +1,11 @@ + + + + + + + diff --git a/xsd-tests/code/name-conflict/buildfile b/xsd-tests/code/name-conflict/buildfile new file mode 100644 index 0000000..3a724f9 --- /dev/null +++ b/xsd-tests/code/name-conflict/buildfile @@ -0,0 +1,22 @@ +# file : code/name-conflict/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/code/name-conflict/driver.cxx b/xsd-tests/code/name-conflict/driver.cxx new file mode 100644 index 0000000..a6eb4fe --- /dev/null +++ b/xsd-tests/code/name-conflict/driver.cxx @@ -0,0 +1,9 @@ +// file : code/name-conflict/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/code/name-conflict/test.xsd b/xsd-tests/code/name-conflict/test.xsd new file mode 100644 index 0000000..a017cc8 --- /dev/null +++ b/xsd-tests/code/name-conflict/test.xsd @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/code/name-escaping/buildfile b/xsd-tests/code/name-escaping/buildfile new file mode 100644 index 0000000..c252afd --- /dev/null +++ b/xsd-tests/code/name-escaping/buildfile @@ -0,0 +1,22 @@ +# file : code/name-escaping/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/code/name-escaping/driver.cxx b/xsd-tests/code/name-escaping/driver.cxx new file mode 100644 index 0000000..8d74030 --- /dev/null +++ b/xsd-tests/code/name-escaping/driver.cxx @@ -0,0 +1,9 @@ +// file : code/name-escaping/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/code/name-escaping/test.xsd b/xsd-tests/code/name-escaping/test.xsd new file mode 100644 index 0000000..08c7530 --- /dev/null +++ b/xsd-tests/code/name-escaping/test.xsd @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/.gitignore b/xsd-tests/cxx/parser/.gitignore new file mode 100644 index 0000000..5a7b950 --- /dev/null +++ b/xsd-tests/cxx/parser/.gitignore @@ -0,0 +1 @@ +*-pskel.?xx diff --git a/xsd-tests/cxx/parser/built-in/buildfile b/xsd-tests/cxx/parser/built-in/buildfile new file mode 100644 index 0000000..0522c9a --- /dev/null +++ b/xsd-tests/cxx/parser/built-in/buildfile @@ -0,0 +1,23 @@ +# file : cxx/parser/built-in/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/built-in/driver.cxx b/xsd-tests/cxx/parser/built-in/driver.cxx new file mode 100644 index 0000000..008bc2d --- /dev/null +++ b/xsd-tests/cxx/parser/built-in/driver.cxx @@ -0,0 +1,529 @@ +// file : cxx/parser/built-in/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test built-in type parsing. +// + +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct any_type_pimpl: xml_schema::any_type_pimpl +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + _start_any_element (ro_string const&, + ro_string const& n, + ro_string const*) + { + cout << " start any element '" << n << "'" << endl; + } + + virtual void + _end_any_element (ro_string const&, ro_string const& n) + { + cout << " end any element '" << n << "'" << endl; + } + + virtual void + _any_attribute (ro_string const&, + ro_string const& n, + ro_string const& v) + { + cout << " any attribute " << n << " = '" << v << "'" << endl; + } + + virtual void + _any_characters (ro_string const& s) + { + cout << " any text: '" << s << "'" << endl; + } + + virtual void + post_any_type () + { + cout << "}" << endl + << endl; + } +}; + +struct any_simple_type_pimpl: xml_schema::any_simple_type_pimpl +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + _any_characters (ro_string const& s) + { + cout << " any text: '" << s << "'" << endl; + } + + virtual void + post_any_simple_type () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ + virtual void + boolean (bool v) + { + cout << v << endl; + } + + virtual void + byte (signed char v) + { + cout << short (v) << endl; + } + + virtual void + unsigned_byte (unsigned char v) + { + cout << (unsigned short) (v) << endl; + } + + virtual void + short_ (short v) + { + cout << v << endl; + } + + virtual void + unsigned_short (unsigned short v) + { + cout << v << endl; + } + + virtual void + int_ (int v) + { + cout << v << endl; + } + + virtual void + unsigned_int (unsigned int v) + { + cout << v << endl; + } + + virtual void + long_ (long long v) + { + cout << v << endl; + } + + virtual void + unsigned_long (unsigned long long v) + { + cout << v << endl; + } + + virtual void + integer (long long v) + { + cout << v << endl; + } + + virtual void + negative_integer (long long v) + { + cout << v << endl; + } + + + virtual void + non_positive_integer (long long v) + { + cout << v << endl; + } + + + virtual void + positive_integer (unsigned long long v) + { + cout << v << endl; + } + + virtual void + non_negative_integer (unsigned long long v) + { + cout << v << endl; + } + + virtual void + float_ (float v) + { + cout << v << endl; + } + + virtual void + double_ (double v) + { + cout << v << endl; + } + + virtual void + decimal (double v) + { + cout << v << endl; + } + + virtual void + string (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + normalized_string (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + token (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + name (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + nmtoken (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + nmtokens (xml_schema::string_sequence const& s) + { + cout << "'"; + + for (xml_schema::string_sequence::const_iterator i (s.begin ()); + i != s.end (); ++i) + cout << *i << " "; + + cout << "'" << endl; + } + + virtual void + ncname (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + id (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + idref (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + idrefs (xml_schema::string_sequence const& s) + { + cout << "'"; + + for (xml_schema::string_sequence::const_iterator i (s.begin ()); + i != s.end (); ++i) + cout << *i << " "; + + cout << "'" << endl; + } + + virtual void + language (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + uri (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + qname (xml_schema::qname const& v) + { + cout << "'" << v.prefix () << ":" << v.name () << "'" << endl; + } + + virtual void + base64_binary (XSD_AUTO_PTR v) + { + std::string tmp (v->data (), v->size ()); + cout << "'" << tmp << "'" << endl; + } + + virtual void + hex_binary (XSD_AUTO_PTR v) + { + std::string tmp (v->data (), v->size ()); + cout << "'" << tmp << "'" << endl; + } + + virtual void + gday (xml_schema::gday const& v) + { + cout << v.day (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + gmonth (xml_schema::gmonth const& v) + { + cout << v.month (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + gyear (xml_schema::gyear const& v) + { + cout << v.year (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + gmonth_day (xml_schema::gmonth_day const& v) + { + cout << v.month () << '-' << v.day (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + gyear_month (xml_schema::gyear_month const& v) + { + cout << v.year () << '-' << v.month (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + date (xml_schema::date const& v) + { + cout << v.year () << '-' << v.month () << '-' << v.day (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + time (xml_schema::time const& v) + { + cout << v.hours () << ':' << v.minutes () << ':' << v.seconds (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + date_time (xml_schema::date_time const& v) + { + cout << v.year () << '-' << v.month () << '-' << v.day () << 'T' + << v.hours () << ':' << v.minutes () << ':' << v.seconds (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + duration (xml_schema::duration const& v) + { + cout << (v.negative () ? "-" : "") << 'P' + << v.years () << 'Y' + << v.months () << 'M' + << v.days () << 'D' + << 'T' + << v.hours () << 'H' + << v.minutes () << 'M' + << v.seconds () << 'S' + << endl; + } +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + any_type_pimpl any_type_p; + any_simple_type_pimpl any_simple_type_p; + + xml_schema::boolean_pimpl boolean_p; + + xml_schema::byte_pimpl byte_p; + xml_schema::unsigned_byte_pimpl unsigned_byte_p; + xml_schema::short_pimpl short_p; + xml_schema::unsigned_short_pimpl unsigned_short_p; + xml_schema::int_pimpl int_p; + xml_schema::unsigned_int_pimpl unsigned_int_p; + xml_schema::long_pimpl long_p; + xml_schema::unsigned_long_pimpl unsigned_long_p; + + xml_schema::integer_pimpl integer_p; + xml_schema::negative_integer_pimpl negative_integer_p; + xml_schema::non_positive_integer_pimpl non_positive_integer_p; + xml_schema::positive_integer_pimpl positive_integer_p; + xml_schema::non_negative_integer_pimpl non_negative_integer_p; + + xml_schema::float_pimpl float_p; + xml_schema::double_pimpl double_p; + xml_schema::decimal_pimpl decimal_p; + + xml_schema::string_pimpl string_p; + xml_schema::normalized_string_pimpl normalized_string_p; + xml_schema::token_pimpl token_p; + xml_schema::name_pimpl name_p; + xml_schema::nmtoken_pimpl nmtoken_p; + xml_schema::nmtokens_pimpl nmtokens_p; + xml_schema::ncname_pimpl ncname_p; + xml_schema::id_pimpl id_p; + xml_schema::idref_pimpl idref_p; + xml_schema::idrefs_pimpl idrefs_p; + + xml_schema::language_pimpl language_p; + xml_schema::uri_pimpl uri_p; + xml_schema::qname_pimpl qname_p; + + xml_schema::base64_binary_pimpl base64_binary_p; + xml_schema::hex_binary_pimpl hex_binary_p; + + xml_schema::gday_pimpl gday_p; + xml_schema::gmonth_pimpl gmonth_p; + xml_schema::gyear_pimpl gyear_p; + xml_schema::gmonth_day_pimpl gmonth_day_p; + xml_schema::gyear_month_pimpl gyear_month_p; + xml_schema::date_pimpl date_p; + xml_schema::time_pimpl time_p; + xml_schema::date_time_pimpl date_time_p; + xml_schema::duration_pimpl duration_p; + + type_pimpl type_p; + + type_p.parsers (any_type_p, + any_simple_type_p, + boolean_p, + byte_p, + unsigned_byte_p, + short_p, + unsigned_short_p, + int_p, + unsigned_int_p, + long_p, + unsigned_long_p, + integer_p, + negative_integer_p, + non_positive_integer_p, + positive_integer_p, + non_negative_integer_p, + float_p, + double_p, + decimal_p, + string_p, + normalized_string_p, + token_p, + name_p, + nmtoken_p, + nmtokens_p, + ncname_p, + id_p, + idref_p, + idrefs_p, + language_p, + uri_p, + qname_p, + base64_binary_p, + hex_binary_p, + gday_p, + gmonth_p, + gyear_p, + gmonth_day_p, + gyear_month_p, + date_p, + time_p, + date_time_p, + duration_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/built-in/output b/xsd-tests/cxx/parser/built-in/output new file mode 100644 index 0000000..756abcd --- /dev/null +++ b/xsd-tests/cxx/parser/built-in/output @@ -0,0 +1,164 @@ +{ + any attribute x = 'x' + any text: ' + ' + start any element 'a' + any text: 'a' + end any element 'a' + any text: ' + ' + start any element 'any-type' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any-type' + any text: ' + ' +} + +{ + any text: '123abc' +} + +1 +0 +1 +0 +0 +127 +-128 +123 +0 +255 +123 +0 +32767 +-32768 +-12345 +0 +65535 +12345 +0 +2147483647 +-2147483648 +-1234567890 +0 +4294967295 +1234567890 +0 +9223372036854775807 +-9223372036854775808 +-1234567890123456789 +0 +18446744073709551615 +12345678901234567890 +0 +2147483647 +-2147483648 +-1234567890 +-2147483648 +-1234567890 +0 +-2147483648 +-1234567890 +4294967295 +1234567890 +0 +4294967295 +1234567890 +0 +0 +-0 +inf +-inf +nan +123.567 +123.567 +-1.23567e+07 +-4.5e-06 +0 +0 +-0 +inf +-inf +nan +123.567 +123.567 +-1.23567e+07 +-4.5e-06 +0 +0 +-0 +123.567 +123.567 +-123.567 +'string space +newline + ' +' string space newline ' +'string space newline' +'as123:345-.abs' +'1as123:345-.abs' +'abc 123 ' +'as123_345-.abs' +'as123_345-.abs' +'abc' +'a123' +'as123_345-.abs' +'abc a123 ' +'x' +'en' +'en-us' +'one-two-three-four44-seven77-eight888' +'' +'relative' +'#id' +'http://www.example.com/foo#bar' +':schemaLocation' +'xsi:schemaLocation' +'12345abcjk' +'a' +'ab' +'abc' +'' +'12345abcjk' +12+12:0 +1 +31 +15+0:0 +15-14:0 +10+12:0 +1 +12+0:0 +2007+12:0 +1 +-20000+0:0 +10-28+12:0 +12-31 +1-1+0:0 +2007-12+12:0 +-2007-10 +20007-10+0:0 +-20007-1 +2007-12-26+12:0 +-2007-10-15 +20007-12-31+0:0 +-20007-1-1 +12:46:23.456+12:0 +12:13:14 +12:13:14+0:0 +2007-12-26T12:13:14.123+12:0 +-2007-10-15T12:13:14 +20007-12-31T12:13:14+0:0 +-20007-1-1T12:13:14 +-P2007Y13M32DT25H61M61.123S +P1Y0M0DT0H0M0S +P0Y1M0DT0H0M0S +P0Y0M1DT0H0M0S +P0Y0M0DT1H0M0S +P0Y0M0DT0H1M0S +P0Y0M0DT0H0M1.1S +P1Y0M0DT0H0M1S diff --git a/xsd-tests/cxx/parser/built-in/test.xml b/xsd-tests/cxx/parser/built-in/test.xml new file mode 100644 index 0000000..8d9332a --- /dev/null +++ b/xsd-tests/cxx/parser/built-in/test.xml @@ -0,0 +1,199 @@ + + + + a + aaabbbccc + + + 123abc + + 1 + 0 + true + false + + 0 + +127 + -128 + 123 + + 0 + 255 + 123 + + 0 + +32767 + -32768 + -12345 + + 0 + 65535 + 12345 + + 0 + +2147483647 + -2147483648 + -1234567890 + + 0 + 4294967295 + 1234567890 + + 0 + +9223372036854775807 + -9223372036854775808 + -1234567890123456789 + + 0 + 18446744073709551615 + 12345678901234567890 + + 0 + +2147483647 + -02147483648 + -1234567890 + + -02147483648 + -1234567890 + + 0 + -02147483648 + -1234567890 + + 4294967295 + +01234567890 + + 0 + 4294967295 + +01234567890 + + 0 + +0 + -0 + INF + -INF + NaN + 123.567 + +123.567 + -123.567e5 + -.45E-5 + + 0 + +0 + -0 + INF + -INF + NaN + 123.567 + +123.567 + -123.567e5 + -.45E-5 + + 0 + +0 + -0 + 123.567 + +123.567 + -123.567 + + string space +newline + + + string space +newline + + + + string space +newline + + + + as123:345-.abs + + 1as123:345-.abs + + abc 123 + + as123_345-.abs + + as123_345-.abs + abc + a123 + + as123_345-.abs + + abc a123 + + x + en + en-us + one-two-three-four44-seven77-eight888 + + + relative + #id + http://www.example.com/foo#bar + + schemaLocation + xsi:schemaLocation + + MTIzND + VhYmNqaw = = + YQ== + YWI= + YWJj + + + 31323334356162636a6b + + ---12+12:00 + ---01 + ---31 + ---15Z + ---15-14:00 + + --10+12:00 + --01 + --12Z + + 2007+12:00 + 0001 + -20000Z + + --10-28+12:00 + --12-31 + --01-01Z + + 2007-12+12:00 + -2007-10 + 20007-10Z + -20007-01 + + 2007-12-26+12:00 + -2007-10-15 + 20007-12-31Z + -20007-01-01 + + + + + + 2007-12-26T12:13:14.123+12:00 + -2007-10-15T12:13:14 + 20007-12-31T12:13:14Z + -20007-01-01T12:13:14 + + -P2007Y13M32DT25H61M61.123S + P1Y + P1M + P1D + PT1H + PT1M + PT1.1S + P1YT1S + + diff --git a/xsd-tests/cxx/parser/built-in/test.xsd b/xsd-tests/cxx/parser/built-in/test.xsd new file mode 100644 index 0000000..9c00eb4 --- /dev/null +++ b/xsd-tests/cxx/parser/built-in/test.xsd @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/enumeration/buildfile b/xsd-tests/cxx/parser/enumeration/buildfile new file mode 100644 index 0000000..05163df --- /dev/null +++ b/xsd-tests/cxx/parser/enumeration/buildfile @@ -0,0 +1,24 @@ +# file : cxx/parser/enumeration/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} map{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --type-map $path($<[1]) \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" "-I$src_base" diff --git a/xsd-tests/cxx/parser/enumeration/driver.cxx b/xsd-tests/cxx/parser/enumeration/driver.cxx new file mode 100644 index 0000000..4776ee2 --- /dev/null +++ b/xsd-tests/cxx/parser/enumeration/driver.cxx @@ -0,0 +1,81 @@ +// file : cxx/parser/enumeration/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test xsd:enumeration parsing. +// + +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace xml_schema; + +struct digit_pimpl: test::digit_pskel, int_pimpl +{ +}; + +struct gender_pimpl: test::gender_pskel, string_pimpl +{ + virtual ::gender + post_gender () + { + std::string str (post_string ()); + + if (str == "male") + return male; + else + return female; + } +}; + +struct type_pimpl: test::type_pskel +{ + virtual void + digit (int i) + { + cout << i << endl; + } + + virtual void + gender (::gender g) + { + cout << g << endl; + } +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + digit_pimpl digit_p; + gender_pimpl gender_p; + type_pimpl type_p; + + type_p.parsers (digit_p, gender_p); + + document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/enumeration/gender.hxx b/xsd-tests/cxx/parser/enumeration/gender.hxx new file mode 100644 index 0000000..a2e5cd8 --- /dev/null +++ b/xsd-tests/cxx/parser/enumeration/gender.hxx @@ -0,0 +1,13 @@ +// file : tests/cxx/parser/enumeration/gender.hxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef GENDER_HXX +#define GENDER_HXX + +enum gender +{ + male, + female +}; + +#endif // GENDER_HXX diff --git a/xsd-tests/cxx/parser/enumeration/output b/xsd-tests/cxx/parser/enumeration/output new file mode 100644 index 0000000..16db301 --- /dev/null +++ b/xsd-tests/cxx/parser/enumeration/output @@ -0,0 +1,3 @@ +1 +0 +1 diff --git a/xsd-tests/cxx/parser/enumeration/test.map b/xsd-tests/cxx/parser/enumeration/test.map new file mode 100644 index 0000000..f8868d6 --- /dev/null +++ b/xsd-tests/cxx/parser/enumeration/test.map @@ -0,0 +1,7 @@ +namespace test +{ + include "gender.hxx"; + + digit int int; + gender ::gender ::gender; +} diff --git a/xsd-tests/cxx/parser/enumeration/test.xml b/xsd-tests/cxx/parser/enumeration/test.xml new file mode 100644 index 0000000..a6fa893 --- /dev/null +++ b/xsd-tests/cxx/parser/enumeration/test.xml @@ -0,0 +1,10 @@ + + + 1 + + male + female + + diff --git a/xsd-tests/cxx/parser/enumeration/test.xsd b/xsd-tests/cxx/parser/enumeration/test.xsd new file mode 100644 index 0000000..ded3a18 --- /dev/null +++ b/xsd-tests/cxx/parser/enumeration/test.xsd @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/generated-impl/.gitignore b/xsd-tests/cxx/parser/generated-impl/.gitignore new file mode 100644 index 0000000..21b434c --- /dev/null +++ b/xsd-tests/cxx/parser/generated-impl/.gitignore @@ -0,0 +1,2 @@ +test-pimpl.?xx +test-driver.?xx diff --git a/xsd-tests/cxx/parser/generated-impl/buildfile b/xsd-tests/cxx/parser/generated-impl/buildfile new file mode 100644 index 0000000..8710a77 --- /dev/null +++ b/xsd-tests/cxx/parser/generated-impl/buildfile @@ -0,0 +1,31 @@ +# file : cxx/parser/generated-impl/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx ixx cxx}{test-pskel} \ + {hxx cxx}{test-pimpl} \ + { cxx}{test-driver} \ + $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel} \ + {hxx cxx}{test-pimpl} \ + { cxx}{test-driver}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --generate-print-impl \ + --generate-test-driver \ + --force-overwrite \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/generated-impl/output b/xsd-tests/cxx/parser/generated-impl/output new file mode 100644 index 0000000..7c58647 --- /dev/null +++ b/xsd-tests/cxx/parser/generated-impl/output @@ -0,0 +1,122 @@ +gender: male +foo: foo +gender: male +int: 0 +int: 1 +int: 2 +int: 3 +foo: foo +int: 3 +int: 2 +int: 1 +int: 0 +union: 9 +foo: foo +union: string +x: x +a: aaa +x: x +y: y +a: aaa +b: bbb +boolean: 1 +boolean: 0 +boolean: 1 +boolean: 0 +byte: 0 +byte: 123 +byte: -123 +unsigned-byte: 0 +unsigned-byte: 123 +short: 0 +short: -1234 +short: 1234 +unsigned-short: 0 +unsigned-short: 1234 +int: 0 +int: -12345 +int: 12345 +unsigned-int: 0 +unsigned-int: 12345 +long: 0 +long: -123456 +long: 123456 +unsigned-long: 0 +unsigned-long: 123456 +integer: 0 +integer: -123456 +integer: 123456 +negative-integer: -123456 +non-positive-integer: 0 +non-positive-integer: -123456 +positive-integer: 123456 +non-negative-integer: 0 +non-negative-integer: 123456 +float: 0 +float: 1.123 +float: -1.123 +double: 0 +double: 1.1234 +double: -1.1234 +decimal: 0 +decimal: 1.1234 +decimal: -1.1234 +string: string space newline +normalized-string: string space newline +token: string space newline +name: as123:345-.abs +nmtoken: 1as123:345-.abs +nmtokens: abc 123 +ncname: as123_345-.abs +id: abc +id: a123 +idref: abc +idrefs: abc a123 +language: en +language: en-us +uri: http://www.example.com/foo#bar +qname: schemaLocation +qname: xsi:schemaLocation +base64_binary: 10 bytes +base64_binary: 1 bytes +base64_binary: 2 bytes +base64_binary: 3 bytes +hex_binary: 0 bytes +hex_binary: 10 bytes +gday: ---12+12:0 +gday: ---1 +gday: ---31 +gday: ---15+0:0 +gday: ---15-14:0 +gmonth: --10+12:0 +gmonth: --1 +gmonth: --12+0:0 +gyear: 2007+12:0 +gyear: 1 +gyear: -20000+0:0 +gmonth_day: --10-28+12:0 +gmonth_day: --12-31 +gmonth_day: --1-1+0:0 +gyear_month: 2007-12+12:0 +gyear_month: -2007-10 +gyear_month: 20007-10+0:0 +gyear_month: -20007-1 +date: 2007-12-26+12:0 +date: -2007-10-15 +date: 20007-12-31+0:0 +date: -20007-1-1 +time: 12:46:23.456+12:0 +time: 12:13:14 +time: 12:13:14+0:0 +date_time: 2007-12-26T12:13:14.123+12:0 +date_time: -2007-10-15T12:13:14 +date_time: 20007-12-31T12:13:14+0:0 +date_time: -20007-1-1T12:13:14 +duration: -P2007Y13M32DT25H61M61.123S +duration: P1Y0M0DT0H0M0S +duration: P0Y1M0DT0H0M0S +duration: P0Y0M1DT0H0M0S +duration: P0Y0M0DT1H0M0S +duration: P0Y0M0DT0H1M0S +duration: P0Y0M0DT0H0M1.1S +duration: P1Y0M0DT0H0M1S diff --git a/xsd-tests/cxx/parser/generated-impl/test.xml b/xsd-tests/cxx/parser/generated-impl/test.xml new file mode 100644 index 0000000..2f29a39 --- /dev/null +++ b/xsd-tests/cxx/parser/generated-impl/test.xml @@ -0,0 +1,168 @@ + + + male + male + + 0 1 2 3 + 3 2 1 0 + + 9 + string + + + aaa + + + + aaa + bbb + + + aaabbbccc + abc123 + + 1 + 0 + true + false + + 0 + 123 + -123 + + 0 + 123 + + 0 + -1234 + 1234 + + 0 + 1234 + + 0 + -12345 + 12345 + + 0 + 12345 + + 0 + -123456 + 123456 + + 0 + 123456 + + 0 + -123456 + 123456 + + -123456 + + 0 + -123456 + + 123456 + + 0 + 123456 + + 0 + 1.123 + -1.123 + + 0 + 1.1234 + -1.1234 + + 0 + 1.1234 + -1.1234 + + string space newline + + string space newline + + string space newline + + as123:345-.abs + + 1as123:345-.abs + + abc 123 + + as123_345-.abs + + abc + a123 + + abc + + abc a123 + + en + en-us + + http://www.example.com/foo#bar + + schemaLocation + xsi:schemaLocation + + MTIzNDVhYmNqaw== + YQ== + YWI= + YWJj + + + 31323334356162636a6b + + ---12+12:00 + ---01 + ---31 + ---15Z + ---15-14:00 + + --10+12:00 + --01 + --12Z + + 2007+12:00 + 0001 + -20000Z + + --10-28+12:00 + --12-31 + --01-01Z + + 2007-12+12:00 + -2007-10 + 20007-10Z + -20007-01 + + 2007-12-26+12:00 + -2007-10-15 + 20007-12-31Z + -20007-01-01 + + + + + + 2007-12-26T12:13:14.123+12:00 + -2007-10-15T12:13:14 + 20007-12-31T12:13:14Z + -20007-01-01T12:13:14 + + -P2007Y13M32DT25H61M61.123S + P1Y + P1M + P1D + PT1H + PT1M + PT1.1S + P1YT1S + + diff --git a/xsd-tests/cxx/parser/generated-impl/test.xsd b/xsd-tests/cxx/parser/generated-impl/test.xsd new file mode 100644 index 0000000..7bc8f23 --- /dev/null +++ b/xsd-tests/cxx/parser/generated-impl/test.xsd @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/list/buildfile b/xsd-tests/cxx/parser/list/buildfile new file mode 100644 index 0000000..426101e --- /dev/null +++ b/xsd-tests/cxx/parser/list/buildfile @@ -0,0 +1,23 @@ +# file : cxx/parser/list/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/list/driver.cxx b/xsd-tests/cxx/parser/list/driver.cxx new file mode 100644 index 0000000..382da5b --- /dev/null +++ b/xsd-tests/cxx/parser/list/driver.cxx @@ -0,0 +1,105 @@ +// file : cxx/parser/list/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test xsd:list parsing. +// + +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct string_list_pimpl: string_list_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + item (string const& v) + { + cout << " '" << v << "'" << endl; + } + + virtual void + post_string_list () + { + cout << "}" << endl + << endl; + } +}; + +struct string_list_lang_pimpl: string_list_lang_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + item (string const& v) + { + cout << " '" << v << "'" << endl; + } + + virtual void + lang (string const& v) + { + cout << " lang: '" << v << "'" << endl; + } + + virtual void + post_string_list_lang () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + string_list_pimpl string_list_p; + string_list_lang_pimpl string_list_lang_p; + type_pimpl type_p; + + string_list_p.parsers (string_p); + string_list_lang_p.parsers (string_p, string_p); + type_p.parsers (string_list_p, string_list_lang_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/list/output b/xsd-tests/cxx/parser/list/output new file mode 100644 index 0000000..3642c4d --- /dev/null +++ b/xsd-tests/cxx/parser/list/output @@ -0,0 +1,26 @@ +{ +} + +{ +} + +{ +} + +{ + 'one' +} + +{ + 'one' + 'two' + 'three' +} + +{ + lang: 'en' + 'one' + 'two' + 'three' +} + diff --git a/xsd-tests/cxx/parser/list/test.xml b/xsd-tests/cxx/parser/list/test.xml new file mode 100644 index 0000000..52229db --- /dev/null +++ b/xsd-tests/cxx/parser/list/test.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + one + + + one two + three + + + + one two + three + + + diff --git a/xsd-tests/cxx/parser/list/test.xsd b/xsd-tests/cxx/parser/list/test.xsd new file mode 100644 index 0000000..79bd084 --- /dev/null +++ b/xsd-tests/cxx/parser/list/test.xsd @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/name-clash/inheritance/buildfile b/xsd-tests/cxx/parser/name-clash/inheritance/buildfile new file mode 100644 index 0000000..4bd7b48 --- /dev/null +++ b/xsd-tests/cxx/parser/name-clash/inheritance/buildfile @@ -0,0 +1,24 @@ +# file : cxx/parser/name-clash/inheritance/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-validation \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/name-clash/inheritance/driver.cxx b/xsd-tests/cxx/parser/name-clash/inheritance/driver.cxx new file mode 100644 index 0000000..9e9b905 --- /dev/null +++ b/xsd-tests/cxx/parser/name-clash/inheritance/driver.cxx @@ -0,0 +1,62 @@ +// file : cxx/parser/name-clash/inheritance/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test for name clashes across inheritance hierarchy. +// + +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct derived_pimpl: derived_pskel +{ + virtual void + e (string const& v) + { + cout << "e: " << v << endl; + } + + virtual void + e1 (string const& v) + { + cout << "e1: " << v << endl; + } +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + derived_pimpl derived_p; + + derived_p.parsers (string_p, string_p); + + xml_schema::document doc_p (derived_p, "test", "root"); + + derived_p.pre (); + doc_p.parse (argv[1]); + derived_p.post_derived (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/name-clash/inheritance/output b/xsd-tests/cxx/parser/name-clash/inheritance/output new file mode 100644 index 0000000..4efd51b --- /dev/null +++ b/xsd-tests/cxx/parser/name-clash/inheritance/output @@ -0,0 +1,2 @@ +e: e +e1: e1 diff --git a/xsd-tests/cxx/parser/name-clash/inheritance/test.xml b/xsd-tests/cxx/parser/name-clash/inheritance/test.xml new file mode 100644 index 0000000..8c17101 --- /dev/null +++ b/xsd-tests/cxx/parser/name-clash/inheritance/test.xml @@ -0,0 +1,8 @@ + + + e + e1 + + diff --git a/xsd-tests/cxx/parser/name-clash/inheritance/test.xsd b/xsd-tests/cxx/parser/name-clash/inheritance/test.xsd new file mode 100644 index 0000000..62a782e --- /dev/null +++ b/xsd-tests/cxx/parser/name-clash/inheritance/test.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/polymorphism/recursive/buildfile b/xsd-tests/cxx/parser/polymorphism/recursive/buildfile new file mode 100644 index 0000000..629645b --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/recursive/buildfile @@ -0,0 +1,24 @@ +# file : cxx/parser/polymorphism/recursive/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-polymorphic \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/polymorphism/recursive/driver.cxx b/xsd-tests/cxx/parser/polymorphism/recursive/driver.cxx new file mode 100644 index 0000000..26793a0 --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/recursive/driver.cxx @@ -0,0 +1,68 @@ +// file : cxx/parser/polymorphism/recursive/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test polymorphic recursive parsing. +// + +#include +#include + +#include "test-pskel.hxx" +#include "test-pimpl.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::int_pimpl int_p; + + root_pimpl root_p; + expression_pimpl expression_p; + recursive_pimpl recursive_p; + value_a_pimpl value_a_p; + value_b_pimpl value_b_p; + + xml_schema::parser_map_impl expression_map; + + // Connect the parsers together. + // + root_p.parsers (expression_p); + expression_map.insert(value_a_p); + expression_map.insert(value_b_p); + expression_map.insert(recursive_p); + + root_p.expression_parser(expression_map); + + recursive_p.parsers(expression_p); + recursive_p.expression_parser(expression_map); + + value_a_p.parsers(int_p); + value_b_p.parsers(int_p); + + xml_schema::document doc_p (root_p, "test", "root", true); + + root_p.pre (); + doc_p.parse (argv[1]); + root_p.post_root (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/polymorphism/recursive/output b/xsd-tests/cxx/parser/polymorphism/recursive/output new file mode 100644 index 0000000..28a835f --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/recursive/output @@ -0,0 +1,22 @@ +root start +recursive start +value_a begin +value->constant +value: post_expression override +value_a: post_value override +value_a end +recursive->expression event +recursive start +value_b begin +value->constant +value: post_expression override +value_b: post_value override +value_b end +recursive->expression event +recursive: post_expression override +recursive end +recursive->expression event +recursive: post_expression override +recursive end +root->expression +root end diff --git a/xsd-tests/cxx/parser/polymorphism/recursive/test-pimpl.cxx b/xsd-tests/cxx/parser/polymorphism/recursive/test-pimpl.cxx new file mode 100644 index 0000000..7c7f410 --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/recursive/test-pimpl.cxx @@ -0,0 +1,147 @@ +// file : cxx/parser/polymorphism/recursive/pimpl.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +#include "test-pimpl.hxx" + +using namespace std; + +namespace test +{ + // root_pimpl + // + + void root_pimpl:: + pre () + { + cout << "root start" << endl; + } + + void root_pimpl:: + expression () + { + cout << "root->expression" << endl; + } + + void root_pimpl:: + post_root () + { + cout << "root end" << endl; + } + + // expression_pimpl + // + + void expression_pimpl:: + pre () + { + cout << "expression begin" << endl; + } + + void expression_pimpl:: + post_expression () + { + cout << "expression end" << endl; + } + + // recursive_pimpl + // + + void recursive_pimpl:: + pre () + { + cout << "recursive start" << endl; + } + + void recursive_pimpl:: + expression () + { + cout << "recursive->expression event" << endl; + } + + void recursive_pimpl:: + post_expression () + { + cout << "recursive: post_expression override" << endl; + post_recursive (); + } + + void recursive_pimpl:: + post_recursive () + { + cout << "recursive end" << endl; + } + + // value_pimpl + // + + void value_pimpl:: + pre () + { + cout << "value begin" << endl; + } + + void value_pimpl:: + constant (int) + { + cout << "value->constant" << endl; + } + + void value_pimpl:: + post_expression () + { + cout << "value: post_expression override" << endl; + post_value (); + } + + void value_pimpl:: + post_value () + { + cout << "value end" << endl; + } + + // value_a_pimpl + // + + void value_a_pimpl:: + pre () + { + cout << "value_a begin" << endl; + } + + void value_a_pimpl:: + post_value () + { + cout << "value_a: post_value override" << endl; + post_value_a (); + } + + void value_a_pimpl:: + post_value_a () + { + cout << "value_a end" << endl; + } + + // value_b_pimpl + // + + void value_b_pimpl:: + pre () + { + cout << "value_b begin" << endl; + } + + void value_b_pimpl:: + post_value () + { + cout << "value_b: post_value override" << endl; + post_value_b (); + } + + void value_b_pimpl:: + post_value_b () + { + cout << "value_b end" << endl; + } +} diff --git a/xsd-tests/cxx/parser/polymorphism/recursive/test-pimpl.hxx b/xsd-tests/cxx/parser/polymorphism/recursive/test-pimpl.hxx new file mode 100644 index 0000000..928b880 --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/recursive/test-pimpl.hxx @@ -0,0 +1,94 @@ +// file : cxx/parser/polymorphism/recursive/pimpl.hxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef TEST_PIMPL_HXX +#define TEST_PIMPL_HXX + +#include "test-pskel.hxx" + +namespace test +{ + class root_pimpl: public virtual root_pskel + { + public: + virtual void + pre (); + + virtual void + expression (); + + virtual void + post_root (); + }; + + class expression_pimpl: public virtual expression_pskel + { + public: + virtual void + pre (); + + virtual void + post_expression (); + }; + + class recursive_pimpl: public virtual recursive_pskel, + public expression_pimpl + { + public: + virtual void + pre (); + + virtual void + expression (); + + virtual void + post_expression (); + + virtual void + post_recursive (); + }; + + class value_pimpl: public virtual value_pskel, public expression_pimpl + { + public: + virtual void + pre (); + + virtual void + constant (int); + + virtual void + post_expression (); + + virtual void + post_value (); + }; + + class value_a_pimpl: public virtual value_a_pskel, public value_pimpl + { + public: + virtual void + pre (); + + virtual void + post_value (); + + virtual void + post_value_a (); + }; + + class value_b_pimpl: public virtual value_b_pskel, public value_pimpl + { + public: + virtual void + pre (); + + virtual void + post_value (); + + virtual void + post_value_b (); + }; +} + +#endif // TEST_PIMPL_HXX diff --git a/xsd-tests/cxx/parser/polymorphism/recursive/test.xml b/xsd-tests/cxx/parser/polymorphism/recursive/test.xml new file mode 100644 index 0000000..42035ba --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/recursive/test.xml @@ -0,0 +1,15 @@ + + + + + 1 + + + + 2 + + + + diff --git a/xsd-tests/cxx/parser/polymorphism/recursive/test.xsd b/xsd-tests/cxx/parser/polymorphism/recursive/test.xsd new file mode 100644 index 0000000..affcc8a --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/recursive/test.xsd @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/polymorphism/same-type/buildfile b/xsd-tests/cxx/parser/polymorphism/same-type/buildfile new file mode 100644 index 0000000..d98e917 --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/same-type/buildfile @@ -0,0 +1,24 @@ +# file : cxx/parser/polymorphism/same-type/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-polymorphic \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/polymorphism/same-type/driver.cxx b/xsd-tests/cxx/parser/polymorphism/same-type/driver.cxx new file mode 100644 index 0000000..6da4a0a --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/same-type/driver.cxx @@ -0,0 +1,62 @@ +// file : cxx/parser/polymorphism/same-type/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test substitution group and xsi:type that don't change the type. +// + +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct base_pimpl: base_pskel +{ + virtual void + a (string const& v) + { + cout << v << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + base_pimpl base_p; + type_pimpl type_p; + + base_p.parsers (string_p); + type_p.parsers (base_p); + + xml_schema::document doc_p (type_p, "test", "root", true); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/polymorphism/same-type/output b/xsd-tests/cxx/parser/polymorphism/same-type/output new file mode 100644 index 0000000..d418277 --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/same-type/output @@ -0,0 +1,4 @@ +a1 +a2 +a3 +a4 diff --git a/xsd-tests/cxx/parser/polymorphism/same-type/test.xml b/xsd-tests/cxx/parser/polymorphism/same-type/test.xml new file mode 100644 index 0000000..f8b6d1e --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/same-type/test.xml @@ -0,0 +1,10 @@ + + + a1 + a2 + a3 + a4 + + diff --git a/xsd-tests/cxx/parser/polymorphism/same-type/test.xsd b/xsd-tests/cxx/parser/polymorphism/same-type/test.xsd new file mode 100644 index 0000000..a4157d3 --- /dev/null +++ b/xsd-tests/cxx/parser/polymorphism/same-type/test.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/recursive/buildfile b/xsd-tests/cxx/parser/recursive/buildfile new file mode 100644 index 0000000..237855c --- /dev/null +++ b/xsd-tests/cxx/parser/recursive/buildfile @@ -0,0 +1,24 @@ +# file : cxx/parser/recursive/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-validation \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/recursive/driver.cxx b/xsd-tests/cxx/parser/recursive/driver.cxx new file mode 100644 index 0000000..c93fd35 --- /dev/null +++ b/xsd-tests/cxx/parser/recursive/driver.cxx @@ -0,0 +1,139 @@ +// file : cxx/parser/recursive/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test recursive parser invocation. +// + +#include +#include + +#include "test-pskel.hxx" + +using namespace std; + +struct sub_pimpl: sub_type_pskel +{ + virtual void + pre () + { + cout << "sub::pre" << endl; + } + + virtual void + sub () + { + cout << "sub::sub" << endl; + } + + virtual void + sub2 () + { + cout << "sub::sub2" << endl; + } + + virtual void + name (string const& n) + { + cout << "sub::name: " << n << endl; + } + + virtual void + post_sub_type () + { + cout << "sub::post" << endl; + } +}; + +struct indir_pimpl: indir_type_pskel +{ + virtual void + pre () + { + cout << "indir::pre" << endl; + } + + virtual void + sub () + { + cout << "indir::sub" << endl; + } + + virtual void + name (string const& n) + { + cout << "indir::name: " << n << endl; + } + + virtual void + post_indir_type () + { + cout << "indir::post" << endl; + } +}; + +struct test_pimpl: test_type_pskel +{ + virtual void + pre () + { + cout << "test::pre" << endl; + } + + virtual void + sub () + { + cout << "test::sub" << endl; + } + + virtual void + name (string const& n) + { + cout << "test::name: " << n << endl; + } + + virtual void + post_test_type () + { + cout << "test::post" << endl; + } +}; + + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + + sub_pimpl sub_p; + indir_pimpl indir_p; + test_pimpl test_p; + + sub_p.parsers (sub_p, indir_p, sub_p, string_p); + indir_p.parsers (sub_p, string_p); + test_p.parsers (sub_p, string_p); + + xml_schema::document doc_p (test_p, "test"); + + test_p.pre (); + doc_p.parse (argv[1]); + test_p.post_test_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/recursive/output b/xsd-tests/cxx/parser/recursive/output new file mode 100644 index 0000000..f26fb72 --- /dev/null +++ b/xsd-tests/cxx/parser/recursive/output @@ -0,0 +1,22 @@ +test::pre +test::name: testName +sub::pre +sub::name: subName +sub::pre +sub::name: sub-subName +sub::post +sub::sub +indir::pre +indir::name: sub-indirName +sub::pre +sub::name: sub-indir-subName +sub::post +indir::sub +indir::post +sub::pre +sub::name: sub-sub2Name +sub::post +sub::sub2 +sub::post +test::sub +test::post diff --git a/xsd-tests/cxx/parser/recursive/test.xml b/xsd-tests/cxx/parser/recursive/test.xml new file mode 100644 index 0000000..f6c219d --- /dev/null +++ b/xsd-tests/cxx/parser/recursive/test.xml @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/xsd-tests/cxx/parser/recursive/test.xsd b/xsd-tests/cxx/parser/recursive/test.xsd new file mode 100644 index 0000000..33e1d2d --- /dev/null +++ b/xsd-tests/cxx/parser/recursive/test.xsd @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/test-template/buildfile b/xsd-tests/cxx/parser/test-template/buildfile new file mode 100644 index 0000000..9f7f5d3 --- /dev/null +++ b/xsd-tests/cxx/parser/test-template/buildfile @@ -0,0 +1,23 @@ +# file : cxx/parser/test-template/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/test-template/driver.cxx b/xsd-tests/cxx/parser/test-template/driver.cxx new file mode 100644 index 0000000..333c6fd --- /dev/null +++ b/xsd-tests/cxx/parser/test-template/driver.cxx @@ -0,0 +1,66 @@ +// file : cxx/parser/test-template/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Insert test description here. +// + +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct type_pimpl: type_pskel +{ + virtual void + pre () + { + } + + virtual void + a (string const& v) + { + cout << v << endl; + } + + virtual void + post_type () + { + } +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + type_pimpl type_p; + + type_p.parsers (string_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/test-template/output b/xsd-tests/cxx/parser/test-template/output new file mode 100644 index 0000000..7898192 --- /dev/null +++ b/xsd-tests/cxx/parser/test-template/output @@ -0,0 +1 @@ +a diff --git a/xsd-tests/cxx/parser/test-template/test.xml b/xsd-tests/cxx/parser/test-template/test.xml new file mode 100644 index 0000000..624a80c --- /dev/null +++ b/xsd-tests/cxx/parser/test-template/test.xml @@ -0,0 +1,7 @@ + + + a + + diff --git a/xsd-tests/cxx/parser/test-template/test.xsd b/xsd-tests/cxx/parser/test-template/test.xsd new file mode 100644 index 0000000..07bebc7 --- /dev/null +++ b/xsd-tests/cxx/parser/test-template/test.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/union/buildfile b/xsd-tests/cxx/parser/union/buildfile new file mode 100644 index 0000000..1a8615c --- /dev/null +++ b/xsd-tests/cxx/parser/union/buildfile @@ -0,0 +1,23 @@ +# file : cxx/parser/union/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/union/driver.cxx b/xsd-tests/cxx/parser/union/driver.cxx new file mode 100644 index 0000000..c5b5c71 --- /dev/null +++ b/xsd-tests/cxx/parser/union/driver.cxx @@ -0,0 +1,60 @@ +// file : cxx/parser/union/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test xsd:union parsing. +// + +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct int_string_union_pimpl: int_string_union_pskel +{ + virtual void + _characters (const xml_schema::ro_string& s) + { + cout << "'" << s << "'" << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + int_string_union_pimpl int_string_union_p; + type_pimpl type_p; + + type_p.parsers (int_string_union_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/union/output b/xsd-tests/cxx/parser/union/output new file mode 100644 index 0000000..a92ffc3 --- /dev/null +++ b/xsd-tests/cxx/parser/union/output @@ -0,0 +1,2 @@ +'one' +'1' diff --git a/xsd-tests/cxx/parser/union/test.xml b/xsd-tests/cxx/parser/union/test.xml new file mode 100644 index 0000000..5b3e799 --- /dev/null +++ b/xsd-tests/cxx/parser/union/test.xml @@ -0,0 +1,10 @@ + + + + + one + 1 + + diff --git a/xsd-tests/cxx/parser/union/test.xsd b/xsd-tests/cxx/parser/union/test.xsd new file mode 100644 index 0000000..5bf3d47 --- /dev/null +++ b/xsd-tests/cxx/parser/union/test.xsd @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/validation/all/buildfile b/xsd-tests/cxx/parser/validation/all/buildfile new file mode 100644 index 0000000..555843e --- /dev/null +++ b/xsd-tests/cxx/parser/validation/all/buildfile @@ -0,0 +1,22 @@ +# file : cxx/parser/validation/all/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs \ + testscript + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-validation \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/validation/all/driver.cxx b/xsd-tests/cxx/parser/validation/all/driver.cxx new file mode 100644 index 0000000..a8cbcca --- /dev/null +++ b/xsd-tests/cxx/parser/validation/all/driver.cxx @@ -0,0 +1,98 @@ +// file : cxx/parser/validation/all/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the all compositor validation. +// + +#include +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct all_pimpl: all_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + c (string const& v) + { + cout << " c = " << v << endl; + } + + virtual void + post_all () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + all_pimpl all_p; + type_pimpl type_p; + + all_p.parsers (string_p, string_p, string_p); + type_p.parsers (all_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + try + { + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cout << " " << e << endl + << "}" << endl + << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/validation/all/test.xsd b/xsd-tests/cxx/parser/validation/all/test.xsd new file mode 100644 index 0000000..1f670e3 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/all/test.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/validation/all/testscript b/xsd-tests/cxx/parser/validation/all/testscript new file mode 100644 index 0000000..e93e59c --- /dev/null +++ b/xsd-tests/cxx/parser/validation/all/testscript @@ -0,0 +1,190 @@ +# file : cxx/parser/validation/all/testscript +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +test.arguments += test.xml + +: all-combinations +: +{ + cat <=test.xml; + + + + + a + b + c + + + + a + c + b + + + + b + a + c + + + + b + c + a + + + + c + a + b + + + + c + b + a + + + + + a + b + + + + a + b + + + EOI + + $* >>EOO + { + a = a + b = b + c = c + } + + { + a = a + c = c + b = b + } + + { + b = b + a = a + c = c + } + + { + b = b + c = c + a = a + } + + { + c = c + a = a + b = b + } + + { + c = c + b = b + a = a + } + + { + a = a + b = b + } + + { + a = a + b = b + } + + EOO +} + +: required-not-present +: +{ + cat <=test.xml; + + + + + a + c + + + + EOI + + $* >>EOO + { + a = a + c = c + :9:9 error: expected element 'b' + } + + EOO +} + +: absent +: +{ + cat <=test.xml; + + + + + + + + EOI + + $* >>EOO + { + :7:9 error: expected element 'a' + } + + EOO +} + +: unexpected +: +{ + cat <=test.xml; + + + + + a + b + a + + + + EOI + + $* >>EOO + { + a = a + b = b + :9:7 error: unexpected element 'a' + } + + EOO +} diff --git a/xsd-tests/cxx/parser/validation/any/buildfile b/xsd-tests/cxx/parser/validation/any/buildfile new file mode 100644 index 0000000..57135f4 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/any/buildfile @@ -0,0 +1,24 @@ +# file : cxx/parser/validation/any/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-validation \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/validation/any/driver.cxx b/xsd-tests/cxx/parser/validation/any/driver.cxx new file mode 100644 index 0000000..1eceda6 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/any/driver.cxx @@ -0,0 +1,121 @@ +// file : cxx/parser/validation/any/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the any particle validation. +// + +#include +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct any_a_pimpl: any_a_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + x (string const& v) + { + cout << " x = " << v << endl; + } + + virtual void + _start_any_element (ro_string const&, + ro_string const& n, + ro_string const*) + { + cout << " start any element '" << n << "'" << endl; + } + + virtual void + _end_any_element (ro_string const&, ro_string const& n) + { + cout << " end any element '" << n << "'" << endl; + } + + virtual void + _any_attribute (ro_string const&, + ro_string const& n, + ro_string const& v) + { + cout << " any attribute " << n << " = '" << v << "'" << endl; + } + + virtual void + _any_characters (ro_string const& s) + { + cout << " any text: '" << s << "'" << endl; + } + + virtual void + post_any_a () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + any_a_pimpl any_a_p; + type_pimpl type_p; + + any_a_p.parsers (string_p, string_p); + type_p.parsers (any_a_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + try + { + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cout << " " << e << endl + << "}" << endl + << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/validation/any/output b/xsd-tests/cxx/parser/validation/any/output new file mode 100644 index 0000000..a1cc6e3 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/any/output @@ -0,0 +1,29 @@ +{ + start any element 'any' + end any element 'any' +} + +{ + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' +} + +{ + x = x + a = a + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' +} + diff --git a/xsd-tests/cxx/parser/validation/any/test.xml b/xsd-tests/cxx/parser/validation/any/test.xml new file mode 100644 index 0000000..f1a0c83 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/any/test.xml @@ -0,0 +1,21 @@ + + + + + + + + + + aaabbbccc + + + + a + aaabbbccc + + + diff --git a/xsd-tests/cxx/parser/validation/any/test.xsd b/xsd-tests/cxx/parser/validation/any/test.xsd new file mode 100644 index 0000000..c05aeb5 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/any/test.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/validation/attribute/buildfile b/xsd-tests/cxx/parser/validation/attribute/buildfile new file mode 100644 index 0000000..d486193 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/attribute/buildfile @@ -0,0 +1,24 @@ +# file : cxx/parser/validation/attribute/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-validation \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/validation/attribute/driver.cxx b/xsd-tests/cxx/parser/validation/attribute/driver.cxx new file mode 100644 index 0000000..4710564 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/attribute/driver.cxx @@ -0,0 +1,197 @@ +// file : cxx/parser/validation/attribute/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test attribute and attribute wildcard (anyAttribute) validation. +// + +#include +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct pass_a_pimpl: pass_a_pskel +{ + virtual void + pre () + { + cout << "pass-a" << endl + << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + _any_attribute (ro_string const& ns, + ro_string const& name, + ro_string const& value) + { + cout << " any: " << ns << "#" << name << " = " << value << endl; + } + + virtual void + post_pass_a () + { + cout << "}" << endl + << endl; + } +}; + +struct pass_b_pimpl: pass_b_pskel +{ + virtual void + pre () + { + cout << "pass-b" << endl + << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + _any_attribute (ro_string const& ns, + ro_string const& name, + ro_string const& value) + { + cout << " any: " << ns << "#" << name << " = " << value << endl; + } + + virtual void + post_pass_b () + { + cout << "}" << endl + << endl; + } +}; + +struct pass_c_pimpl: pass_c_pskel +{ + virtual void + pre () + { + cout << "pass-c" << endl + << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + post_pass_c () + { + cout << "}" << endl + << endl; + } +}; + +struct fail_pimpl: fail_pskel +{ + virtual void + pre () + { + cout << "fail" << endl + << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + post_fail () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + pass_a_pimpl pass_a_p; + pass_b_pimpl pass_b_p; + pass_c_pimpl pass_c_p; + fail_pimpl fail_p; + type_pimpl type_p; + + pass_a_p.parsers (string_p, string_p); + pass_b_p.parsers (string_p, string_p); + pass_c_p.parsers (string_p, string_p); + fail_p.parsers (string_p); + type_p.parsers (pass_a_p, pass_b_p, pass_c_p, fail_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + try + { + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cout << " " << e << endl + << "}" << endl + << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/validation/attribute/output b/xsd-tests/cxx/parser/validation/attribute/output new file mode 100644 index 0000000..847b054 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/attribute/output @@ -0,0 +1,24 @@ +pass-a +{ + b = b + any: test#foo = foo + any: test#bar = bar +} + +pass-b +{ + a = a + b = b +} + +pass-c +{ + a = a + b = b +} + +fail +{ + :8:10 error: expected attribute 'a' +} + diff --git a/xsd-tests/cxx/parser/validation/attribute/test.xml b/xsd-tests/cxx/parser/validation/attribute/test.xml new file mode 100644 index 0000000..b994d1a --- /dev/null +++ b/xsd-tests/cxx/parser/validation/attribute/test.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/xsd-tests/cxx/parser/validation/attribute/test.xsd b/xsd-tests/cxx/parser/validation/attribute/test.xsd new file mode 100644 index 0000000..833eb8e --- /dev/null +++ b/xsd-tests/cxx/parser/validation/attribute/test.xsd @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/validation/built-in/any-type/buildfile b/xsd-tests/cxx/parser/validation/built-in/any-type/buildfile new file mode 100644 index 0000000..a6f366b --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/any-type/buildfile @@ -0,0 +1,24 @@ +# file : cxx/parser/validation/built-in/any-type/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-validation \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/validation/built-in/any-type/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/any-type/driver.cxx new file mode 100644 index 0000000..cbeb864 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/any-type/driver.cxx @@ -0,0 +1,154 @@ +// file : cxx/parser/validation/built-in/any-type/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the anyType and anySimpleType validation. +// + +#include +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct any_type_pimpl: xml_schema::any_type_pimpl +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + _start_any_element (ro_string const&, + ro_string const& n, + ro_string const*) + { + cout << " start any element '" << n << "'" << endl; + } + + virtual void + _end_any_element (ro_string const&, ro_string const& n) + { + cout << " end any element '" << n << "'" << endl; + } + + virtual void + _any_attribute (ro_string const&, + ro_string const& n, + ro_string const& v) + { + cout << " any attribute " << n << " = '" << v << "'" << endl; + } + + virtual void + _any_characters (ro_string const& s) + { + cout << " any text: '" << s << "'" << endl; + } + + virtual void + post_any_type () + { + cout << "}" << endl + << endl; + } +}; + +struct any_simple_type_pimpl: xml_schema::any_simple_type_pimpl +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + _any_characters (ro_string const& s) + { + cout << " any text: '" << s << "'" << endl; + } + + virtual void + post_any_simple_type () + { + cout << "}" << endl + << endl; + } +}; + +struct any_extension_pimpl: virtual any_extension_pskel, + any_type_pimpl + +{ + virtual void + x (const string& v) + { + cout << " x = " << v << endl; + } +}; + +struct any_simple_extension_pimpl: virtual any_simple_extension_pskel, + any_simple_type_pimpl +{ + virtual void + x (const string& v) + { + cout << " x = " << v << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + + any_type_pimpl any_type_p; + any_simple_type_pimpl any_simple_type_p; + + any_extension_pimpl any_extension_p; + any_simple_extension_pimpl any_simple_extension_p; + + type_pimpl type_p; + + any_extension_p.parsers (string_p); + any_simple_extension_p.parsers (string_p); + + type_p.parsers (any_type_p, + any_extension_p, + any_simple_extension_p, + any_simple_type_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/any-type/output b/xsd-tests/cxx/parser/validation/built-in/any-type/output new file mode 100644 index 0000000..84d7b3a --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/any-type/output @@ -0,0 +1,99 @@ +{ + any text: '123abc' +} + +{ + any text: ' + ' + start any element 'any' + end any element 'any' + any text: ' + ' +} + +{ + any text: ' + ' + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' + any text: ' + ' +} + +{ + any attribute x = 'x' + any text: ' + ' + start any element 'a' + any text: 'a' + end any element 'a' + any text: ' + ' + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' + any text: ' + ' +} + +{ + any text: ' + ' + start any element 'any' + end any element 'any' + any text: ' + ' +} + +{ + any text: ' + ' + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' + any text: ' + ' +} + +{ + x = x + any text: ' + ' + start any element 'a' + any text: 'a' + end any element 'a' + any text: ' + ' + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' + any text: ' + ' +} + +{ + x = x + any text: 'abc123' +} + diff --git a/xsd-tests/cxx/parser/validation/built-in/any-type/test.xml b/xsd-tests/cxx/parser/validation/built-in/any-type/test.xml new file mode 100644 index 0000000..7875b7e --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/any-type/test.xml @@ -0,0 +1,41 @@ + + + + + + + + + + aaabbbccc + + + + a + aaabbbccc + + + + + + + + + + aaabbbccc + + + + a + aaabbbccc + + + + + abc123 + + diff --git a/xsd-tests/cxx/parser/validation/built-in/any-type/test.xsd b/xsd-tests/cxx/parser/validation/built-in/any-type/test.xsd new file mode 100644 index 0000000..86a4e13 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/any-type/test.xsd @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/validation/built-in/binary/buildfile b/xsd-tests/cxx/parser/validation/built-in/binary/buildfile new file mode 100644 index 0000000..fd1594f --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/binary/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/binary/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/binary/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/binary/driver.cxx new file mode 100644 index 0000000..3fe20ec --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/binary/driver.cxx @@ -0,0 +1,153 @@ +// file : cxx/parser/validation/built-in/binary/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in base64Binary and hexBinary types validation. +// +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +template +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + typedef xsd::cxx::parser::buffer buffer; + + // Good. + // + + // hexBinary + // + { + hex_binary_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters (" "); + p._post (); + assert (*p.post_hex_binary () == buffer ()); + } + + { + hex_binary_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n313"); + p._characters ("23334356162636a6b "); + p._post (); + assert (*p.post_hex_binary () == buffer ("12345abcjk", 10)); + } + + // base64Binary + // + { + base64_binary_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("MTIzND "); + p._characters ("VhYmNqaw = = "); + p._post (); + assert (*p.post_base64_binary () == buffer ("12345abcjk", 10)); + } + + { + base64_binary_pimpl p; + p.pre (); + p._pre (); + p._characters ("YQ=="); + p._post (); + assert (*p.post_base64_binary () == buffer ("a", 1)); + } + + { + base64_binary_pimpl p; + p.pre (); + p._pre (); + p._characters ("YWI="); + p._post (); + assert (*p.post_base64_binary () == buffer ("ab", 2)); + } + + { + base64_binary_pimpl p; + p.pre (); + p._pre (); + p._characters ("YWJj"); + p._post (); + assert (*p.post_base64_binary () == buffer ("abc", 3)); + } + + // Bad + // + + // hexBinary + // + { + hex_binary_pimpl p; + p.pre (); + p._pre (); + p._characters ("313"); + assert (test_post_fail (p)); + } + + { + hex_binary_pimpl p; + p.pre (); + p._pre (); + p._characters ("313233343X6162636a6b"); + assert (test_post_fail (p)); + } + + // base64Binary + // + { + base64_binary_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + base64_binary_pimpl p; + p.pre (); + p._pre (); + p._characters ("YQ"); + assert (test_post_fail (p)); + } + + { + base64_binary_pimpl p; + p.pre (); + p._pre (); + p._characters ("=="); + assert (test_post_fail (p)); + } + + { + base64_binary_pimpl p; + p.pre (); + p._pre (); + p._characters ("MTIzNDVhYmNqaw=A"); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/boolean/buildfile b/xsd-tests/cxx/parser/validation/built-in/boolean/buildfile new file mode 100644 index 0000000..259614e --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/boolean/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/boolean/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/boolean/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/boolean/driver.cxx new file mode 100644 index 0000000..f1499cd --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/boolean/driver.cxx @@ -0,0 +1,145 @@ +// file : cxx/parser/validation/built-in/boolean/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in boolean type validation. +// +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +bool +test_post_fail (boolean_pimpl& p) +{ + try + { + p._post (); + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters ("true"); + p._post (); + assert (p.post_boolean ()); + } + + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters ("1"); + p._post (); + assert (p.post_boolean ()); + } + + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters ("false"); + p._post (); + assert (!p.post_boolean ()); + } + + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (!p.post_boolean ()); + } + + + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters (" true "); + p._post (); + assert (p.post_boolean ()); + } + + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters (" "); + p._characters (" \n "); + p._characters (" fa"); + p._characters ("l"); + p._characters ("se "); + p._characters (" \n "); + p._characters (" "); + p._post (); + assert (!p.post_boolean ()); + } + + // Bad + // + { + boolean_pimpl p; + p.pre (); + p._pre (); + //p._characters (""); + assert (test_post_fail (p)); + } + + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters (""); + assert (test_post_fail (p)); + } + + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters (" "); + assert (test_post_fail (p)); + } + + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters (" "); + assert (test_post_fail (p)); + } + + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters ("fal"); + p._characters ("s "); + p._characters ("e"); + assert (test_post_fail (p)); + } + + { + boolean_pimpl p; + p.pre (); + p._pre (); + p._characters ("01"); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/byte/buildfile b/xsd-tests/cxx/parser/validation/built-in/byte/buildfile new file mode 100644 index 0000000..87de911 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/byte/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/byte/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/byte/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/byte/driver.cxx new file mode 100644 index 0000000..b533cfd --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/byte/driver.cxx @@ -0,0 +1,256 @@ +// file : cxx/parser/validation/built-in/byte/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in byte and unsigned byte types validation. +// +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +template +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("123"); + p._post (); + assert (p.post_byte () == 123); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("\t +123 \n "); + p._post (); + assert (p.post_byte () == 123); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("-123"); + p._post (); + assert (p.post_byte () == -123); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("+123"); + p._post (); + assert (p.post_byte () == 123); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("0000000000000000123"); + p._post (); + assert (p.post_byte () == 123); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("+0000000000000000123"); + p._post (); + assert (p.post_byte () == 123); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("-0000000000000000123"); + p._post (); + assert (p.post_byte () == -123); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("\t \n"); + p._characters (" -"); + p._characters ("00000"); + p._characters ("001"); + p._characters ("23 \n\t"); + p._post (); + assert (p.post_byte () == -123); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("-128"); + p._post (); + assert (p.post_byte () == -128); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("127"); + p._post (); + assert (p.post_byte () == 127); + } + + { + unsigned_byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("+123"); + p._post (); + assert (p.post_unsigned_byte () == 123); + } + + { + unsigned_byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_unsigned_byte () == 0); + } + + { + unsigned_byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("255"); + p._post (); + assert (p.post_unsigned_byte () == 255); + } + + // Bad + // + { + byte_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters (""); + assert (test_post_fail (p)); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n \t "); + assert (test_post_fail (p)); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("+"); + assert (test_post_fail (p)); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("-"); + assert (test_post_fail (p)); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("++01"); + assert (test_post_fail (p)); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("--01"); + assert (test_post_fail (p)); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("-01"); + p._characters (" "); + p._characters ("23 "); + assert (test_post_fail (p)); + } + + { + unsigned_byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("-123"); + assert (test_post_fail (p)); + } + + // Ranges + // + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("-129"); + assert (test_post_fail (p)); + } + + { + byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("128"); + assert (test_post_fail (p)); + } + + { + unsigned_byte_pimpl p; + p.pre (); + p._pre (); + p._characters ("256"); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/date-time/buildfile b/xsd-tests/cxx/parser/validation/built-in/date-time/buildfile new file mode 100644 index 0000000..47791e5 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/date-time/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/date-time/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/date-time/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/date-time/driver.cxx new file mode 100644 index 0000000..da02a50 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/date-time/driver.cxx @@ -0,0 +1,1533 @@ +// file : cxx/parser/validation/built-in/date-time/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in date and time types validation. +// +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +template +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + typedef xsd::cxx::parser::gday gday; + typedef xsd::cxx::parser::gmonth gmonth; + typedef xsd::cxx::parser::gyear gyear; + typedef xsd::cxx::parser::gmonth_day gmonth_day; + typedef xsd::cxx::parser::gyear_month gyear_month; + typedef xsd::cxx::parser::date date; + typedef xsd::cxx::parser::time time; + typedef xsd::cxx::parser::date_time date_time; + typedef xsd::cxx::parser::duration duration; + + // Good. + // + + // gday & time zone parsing + // + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("---1"); + p._characters ("2+12:00"); + p._post (); + assert (p.post_gday () == gday (12, 12, 00)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---01"); + p._post (); + assert (p.post_gday () == gday (1)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---31"); + p._post (); + assert (p.post_gday () == gday (31)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---15Z"); + p._post (); + assert (p.post_gday () == gday (15, 0, 0)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---15-14:00"); + p._post (); + assert (p.post_gday () == gday (15, -14, 0)); + } + + // gmonth + // + { + gmonth_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("--1"); + p._characters ("0+12:00"); + p._post (); + assert (p.post_gmonth () == gmonth (10, 12, 0)); + } + + { + gmonth_pimpl p; + p.pre (); + p._pre (); + p._characters ("--01"); + p._post (); + assert (p.post_gmonth () == gmonth (1)); + } + + { + gmonth_pimpl p; + p.pre (); + p._pre (); + p._characters ("--12Z"); + p._post (); + assert (p.post_gmonth () == gmonth (12, 0, 0)); + } + + // gyear + // + { + gyear_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("20"); + p._characters ("07+12:00"); + p._post (); + assert (p.post_gyear () == gyear (2007, 12, 00)); + } + + { + gyear_pimpl p; + p.pre (); + p._pre (); + p._characters ("0001"); + p._post (); + assert (p.post_gyear () == gyear (1)); + } + + { + gyear_pimpl p; + p.pre (); + p._pre (); + p._characters ("-20000Z"); + p._post (); + assert (p.post_gyear () == gyear (-20000, 0, 0)); + } + + // gmonth_day + // + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("--1"); + p._characters ("0-28+12:00 "); + p._post (); + assert (p.post_gmonth_day () == gmonth_day (10, 28, 12, 00)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--12-31"); + p._post (); + assert (p.post_gmonth_day () == gmonth_day (12, 31)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--01-01Z"); + p._post (); + assert (p.post_gmonth_day () == gmonth_day (1, 1, 0, 0)); + } + + // gyear_month + // + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("200"); + p._characters ("7-12+12:00 "); + p._post (); + assert (p.post_gyear_month () == gyear_month (2007, 12, 12, 00)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("-2007-10"); + p._post (); + assert (p.post_gyear_month () == gyear_month (-2007, 10)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("20007-10Z"); + p._post (); + assert (p.post_gyear_month () == gyear_month (20007, 10, 0, 0)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("-20007-01"); + p._post (); + assert (p.post_gyear_month () == gyear_month (-20007, 1)); + } + + // date + // + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("200"); + p._characters ("7-12-26+12:00 "); + p._post (); + assert (p.post_date () == date (2007, 12, 26, 12, 0)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("-2007-10-15"); + p._post (); + assert (p.post_date () == date (-2007, 10, 15)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("20007-12-31Z"); + p._post (); + assert (p.post_date () == date (20007, 12, 31, 0, 0)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("-20007-01-01"); + p._post (); + assert (p.post_date () == date (-20007, 1, 1)); + } + + // time + // + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("12:"); + p._characters ("46:23.456+12:00 "); + p._post (); + assert (p.post_time () == time (12, 46, 23.456, 12, 0)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("12:13:14"); + p._post (); + assert (p.post_time () == time (12, 13, 14.0)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("12:13:14Z"); + p._post (); + assert (p.post_time () == time (12, 13, 14.0, 0, 0)); + } + + // date_time + // + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("200"); + p._characters ("7-12-26T12:13:14.123+12:00 "); + p._post (); + assert (p.post_date_time () == + date_time (2007, 12, 26, 12, 13, 14.123, 12, 0)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("-2007-10-15T12:13:14"); + p._post (); + assert (p.post_date_time () == date_time (-2007, 10, 15, 12, 13, 14.0)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("20007-12-31T12:13:14Z"); + p._post (); + assert (p.post_date_time () == + date_time (20007, 12, 31, 12, 13, 14.0, 0, 0)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("-20007-01-01T12:13:14"); + p._post (); + assert (p.post_date_time () == date_time (-20007, 1, 1, 12, 13, 14.0)); + } + + // duration + // + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("-P200"); + p._characters ("7Y13M32DT25H61M61.123S "); + p._post (); + assert (p.post_duration () == + duration (true, 2007, 13, 32, 25, 61, 61.123)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P1Y"); + p._post (); + assert (p.post_duration () == duration (false, 1, 0, 0, 0, 0, 0.0)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P1M"); + p._post (); + assert (p.post_duration () == duration (false, 0, 1, 0, 0, 0, 0.0)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P1D"); + p._post (); + assert (p.post_duration () == duration (false, 0, 0, 1, 0, 0, 0.0)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("PT1H"); + p._post (); + assert (p.post_duration () == duration (false, 0, 0, 0, 1, 0, 0.0)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("PT1M"); + p._post (); + assert (p.post_duration () == duration (false, 0, 0, 0, 0, 1, 0.0)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("PT1.1S"); + p._post (); + assert (p.post_duration () == duration (false, 0, 0, 0, 0, 0, 1.1)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P1YT1S"); + p._post (); + assert (p.post_duration () == duration (false, 1, 0, 0, 0, 0, 1.0)); + } + + // Bad + // + + // gday & time zone parsing + // + { + gday_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("--12"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---1"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---00"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---32"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---2X"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---12asd"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---12X"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---1212:00"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---12+2:00"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---12+1200"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---12+15:00"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---12+12:60"); + assert (test_post_fail (p)); + } + + { + gday_pimpl p; + p.pre (); + p._pre (); + p._characters ("---12+14:01"); + assert (test_post_fail (p)); + } + + // gmonth + // + { + gmonth_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + gmonth_pimpl p; + p.pre (); + p._pre (); + p._characters ("-12"); + assert (test_post_fail (p)); + } + + { + gmonth_pimpl p; + p.pre (); + p._pre (); + p._characters ("--00"); + assert (test_post_fail (p)); + } + + { + gmonth_pimpl p; + p.pre (); + p._pre (); + p._characters ("--13"); + assert (test_post_fail (p)); + } + + { + gmonth_pimpl p; + p.pre (); + p._pre (); + p._characters ("--1X"); + assert (test_post_fail (p)); + } + + { + gmonth_pimpl p; + p.pre (); + p._pre (); + p._characters ("--11+12:3o"); + assert (test_post_fail (p)); + } + + // gyear + // + { + gyear_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + gyear_pimpl p; + p.pre (); + p._pre (); + p._characters ("207"); + assert (test_post_fail (p)); + } + + { + gyear_pimpl p; + p.pre (); + p._pre (); + p._characters ("-207"); + assert (test_post_fail (p)); + } + + { + gyear_pimpl p; + p.pre (); + p._pre (); + p._characters ("-0000"); + assert (test_post_fail (p)); + } + + { + gyear_pimpl p; + p.pre (); + p._pre (); + p._characters ("20X7"); + assert (test_post_fail (p)); + } + + { + gyear_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007+12:3o"); + assert (test_post_fail (p)); + } + + // gmonth_day + // + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("-12-12"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--1212"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--12?12"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--00-12"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--12-00"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--13-23"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--12-32"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--1X-12"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--12-2X"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl p; + p.pre (); + p._pre (); + p._characters ("--11-11+12:3o"); + assert (test_post_fail (p)); + } + + // gyear_month + // + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("207-01"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("-207-01"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("0000-01"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("20X7-01"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007?12"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-0"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-00"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-13"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-1X"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01+12:3o"); + assert (test_post_fail (p)); + } + + // date + // + { + date_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("207-01-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("-207-01-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("0000-01-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("20X7-01-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007?01-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-0-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-00-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-13-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-1X-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10?12"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10-"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10-0"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10-00"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10-32"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10-2X"); + assert (test_post_fail (p)); + } + + { + date_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01+12:3o"); + assert (test_post_fail (p)); + } + + // time + // + { + time_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("1:01:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2X:01:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23?01:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:0:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:60:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:4X:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:10"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:10?12"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:10:"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:10:0"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:10:01."); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:10:60"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:10:2X"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("24:01:00"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("24:00:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:01:01+12:3o"); + assert (test_post_fail (p)); + } + + // date_time + // + { + date_time_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("207-01-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("-207-01-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("0000-01-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("20X7-01-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007?01-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-0-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-00-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-13-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-1X-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10?12T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10-T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10-0T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10-00T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10-32T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-10-2XT12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T1:01:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T2X:01:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23?01:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:0:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:60:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:4X:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10?12"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10:"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10:0"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10:01."); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10:60"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10:2X"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T24:01:00"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T24:00:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("23:01:01+12:3o"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T12:13:14+12:3o"); + assert (test_post_fail (p)); + } + + // duration + // + { + duration_pimpl p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("2007Y"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("-2007Y"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P-2007Y"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P-1M"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P-1D"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("PT-1H"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("PT-1M"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("PT-1.1S"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P1H1M1S"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P1M1Y"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("PT1S1H"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("PT1H1Y"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P1Ygarbage"); + assert (test_post_fail (p)); + } + + { + duration_pimpl p; + p.pre (); + p._pre (); + p._characters ("P1YT"); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/float/buildfile b/xsd-tests/cxx/parser/validation/built-in/float/buildfile new file mode 100644 index 0000000..ca0eac1 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/float/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/float/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/float/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/float/driver.cxx new file mode 100644 index 0000000..bb67eb7 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/float/driver.cxx @@ -0,0 +1,285 @@ +// file : cxx/parser/validation/built-in/float/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in float, double, and decimal types validation. +// +#include +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +template +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + + // float + // + { + float_pimpl p; + p.pre (); + p._pre (); + p._characters (" 0000123.456 "); + p._post (); + assert (p.post_float () == 123.456F); + } + + { + float_pimpl p; + p.pre (); + p._pre (); + p._characters ("-12.345E2"); + p._post (); + assert (p.post_float () == -12.345E2F); + } + + { + float_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_float () == 0.0F); + } + + { + float_pimpl p; + p.pre (); + p._pre (); + p._characters ("-0"); + p._post (); + assert (p.post_float () == -0.0F); + } + + { + float_pimpl p; + p.pre (); + p._pre (); + p._characters ("INF"); + p._post (); + assert (isinf (p.post_float ())); + } + + { + float_pimpl p; + p.pre (); + p._pre (); + p._characters ("-INF"); + p._post (); + assert (isinf (p.post_float ())); + } + + { + float_pimpl p; + p.pre (); + p._pre (); + p._characters ("NaN"); + p._post (); + assert (isnan (p.post_float ())); + } + + // double + // + { + double_pimpl p; + p.pre (); + p._pre (); + p._characters (" 0000123.456789 "); + p._post (); + assert (p.post_double () == 123.456789); + } + + { + double_pimpl p; + p.pre (); + p._pre (); + p._characters ("-12.3456789E2"); + p._post (); + assert (p.post_double () == -12.3456789E2); + } + + { + double_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_double () == 0.0); + } + + { + double_pimpl p; + p.pre (); + p._pre (); + p._characters ("-0"); + p._post (); + assert (p.post_double () == -0.0); + } + + { + double_pimpl p; + p.pre (); + p._pre (); + p._characters ("INF"); + p._post (); + assert (isinf (p.post_double ())); + } + + { + double_pimpl p; + p.pre (); + p._pre (); + p._characters ("-INF"); + p._post (); + assert (isinf (p.post_double ())); + } + + { + double_pimpl p; + p.pre (); + p._pre (); + p._characters ("NaN"); + p._post (); + assert (isnan (p.post_double ())); + } + + // decimal + // + { + decimal_pimpl p; + p.pre (); + p._pre (); + p._characters (" 0000123.456789 "); + p._post (); + assert (p.post_decimal () == 123.456789); + } + + { + decimal_pimpl p; + p.pre (); + p._pre (); + p._characters ("-123.45678912345"); + p._post (); + assert (p.post_decimal () == -123.45678912345); + } + + { + decimal_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_decimal () == 0.0); + } + + { + decimal_pimpl p; + p.pre (); + p._pre (); + p._characters ("-0"); + p._post (); + assert (p.post_decimal () == -0.0); + } + + + // Bad + // + + // float + // + { + float_pimpl p; + p.pre (); + p._pre (); + p._characters ("+INF"); + assert (test_post_fail (p)); + } + + { + float_pimpl p; + p.pre (); + p._pre (); + p._characters ("1.45 E2"); + assert (test_post_fail (p)); + } + + // double + // + { + double_pimpl p; + p.pre (); + p._pre (); + p._characters ("+INF"); + assert (test_post_fail (p)); + } + + { + double_pimpl p; + p.pre (); + p._pre (); + p._characters ("1.45 E2"); + assert (test_post_fail (p)); + } + + // decimal + // + { + decimal_pimpl p; + p.pre (); + p._pre (); + p._characters ("INF"); + assert (test_post_fail (p)); + } + + { + decimal_pimpl p; + p.pre (); + p._pre (); + p._characters ("+INF"); + assert (test_post_fail (p)); + } + + { + decimal_pimpl p; + p.pre (); + p._pre (); + p._characters ("-INF"); + assert (test_post_fail (p)); + } + + { + decimal_pimpl p; + p.pre (); + p._pre (); + p._characters ("NaN"); + assert (test_post_fail (p)); + } + + { + decimal_pimpl p; + p.pre (); + p._pre (); + p._characters ("1.45 2"); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/int/buildfile b/xsd-tests/cxx/parser/validation/built-in/int/buildfile new file mode 100644 index 0000000..51bdf12 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/int/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/int/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/int/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/int/driver.cxx new file mode 100644 index 0000000..d31d206 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/int/driver.cxx @@ -0,0 +1,116 @@ +// file : cxx/parser/validation/built-in/int/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in int and unsigned int types validation. +// +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +template +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + { + int_pimpl p; + p.pre (); + p._pre (); + p._characters ("-2147483648"); + p._post (); + assert (p.post_int () == -2147483648); + } + + { + int_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_int () == 0); + } + + { + int_pimpl p; + p.pre (); + p._pre (); + p._characters ("2147483647"); + p._post (); + assert (p.post_int () == 2147483647); + } + + { + unsigned_int_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_unsigned_int () == 0); + } + + { + unsigned_int_pimpl p; + p.pre (); + p._pre (); + p._characters ("4294967295"); + p._post (); + assert (p.post_unsigned_int () == 4294967295); + } + + // Bad + // + + { + unsigned_int_pimpl p; + p.pre (); + p._pre (); + p._characters ("-123"); + assert (test_post_fail (p)); + } + + + // Ranges + // + { + int_pimpl p; + p.pre (); + p._pre (); + p._characters ("-2147483649"); + assert (test_post_fail (p)); + } + + { + int_pimpl p; + p.pre (); + p._pre (); + p._characters ("2147483648"); + assert (test_post_fail (p)); + } + + { + unsigned_int_pimpl p; + p.pre (); + p._pre (); + p._characters ("4294967296"); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/integer/buildfile b/xsd-tests/cxx/parser/validation/built-in/integer/buildfile new file mode 100644 index 0000000..4d63a19 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/integer/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/integer/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/integer/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/integer/driver.cxx new file mode 100644 index 0000000..3a5fdd5 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/integer/driver.cxx @@ -0,0 +1,303 @@ +// file : cxx/parser/validation/built-in/integer/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in integer & friends types validation. +// +#include + +#include +#include +#include + +#include +#include + +using namespace std; +using namespace xsd::cxx::parser::validating; + +template +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + + std::string min; + std::string max; + std::string umax; + + { + ostringstream ostr; + ostr << LLONG_MIN; + min = ostr.str (); + } + + { + ostringstream ostr; + ostr << LLONG_MAX; + max = ostr.str (); + } + + { + ostringstream ostr; + ostr << ULLONG_MAX; + umax = ostr.str (); + } + + // integer + // + { + integer_pimpl p; + p.pre (); + p._pre (); + p._characters (min.c_str ()); + p._post (); + assert (p.post_integer () == LLONG_MIN); + } + + { + integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_integer () == 0); + } + + { + integer_pimpl p; + p.pre (); + p._pre (); + p._characters (max.c_str ()); + p._post (); + assert (p.post_integer () == LLONG_MAX); + } + + // negative_integer + // + { + negative_integer_pimpl p; + p.pre (); + p._pre (); + p._characters (min.c_str ()); + p._post (); + assert (p.post_negative_integer () == LLONG_MIN); + } + + { + negative_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("-1"); + p._post (); + assert (p.post_negative_integer () == -1); + } + + // non_positive_integer + // + { + non_positive_integer_pimpl p; + p.pre (); + p._pre (); + p._characters (min.c_str ()); + p._post (); + assert (p.post_non_positive_integer () == LLONG_MIN); + } + + { + non_positive_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("+0"); + p._post (); + assert (p.post_non_positive_integer () == 0); + } + + // positive_integer + // + { + positive_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("1"); + p._post (); + assert (p.post_positive_integer () == 1); + } + + { + positive_integer_pimpl p; + p.pre (); + p._pre (); + p._characters (umax.c_str ()); + p._post (); + assert (p.post_positive_integer () == ULLONG_MAX); + } + + // non_negative_integer + // + /* + { + non_negative_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("-0"); + p._post (); + assert (p.post_non_negative_integer () == 0); + } + */ + + { + non_negative_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_non_negative_integer () == 0); + } + + { + non_negative_integer_pimpl p; + p.pre (); + p._pre (); + p._characters (umax.c_str ()); + p._post (); + assert (p.post_non_negative_integer () == ULLONG_MAX); + } + + + // Bad + // + + std::string past_min (min); + std::string past_max (max); + std::string past_umax (umax); + + assert (*past_min.rbegin () != '9'); + assert (*past_max.rbegin () != '9'); + assert (*past_umax.rbegin () != '9'); + + (*past_min.rbegin ())++; + (*past_max.rbegin ())++; + (*past_umax.rbegin ())++; + + // integer + // + { + integer_pimpl p; + p.pre (); + p._pre (); + p._characters (past_min.c_str ()); + assert (test_post_fail (p)); + } + + { + integer_pimpl p; + p.pre (); + p._pre (); + p._characters (past_max.c_str ()); + assert (test_post_fail (p)); + } + + // negative_integer + // + { + negative_integer_pimpl p; + p.pre (); + p._pre (); + p._characters (past_min.c_str ()); + assert (test_post_fail (p)); + } + + { + negative_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("-0"); + assert (test_post_fail (p)); + } + + { + negative_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("1"); + assert (test_post_fail (p)); + } + + // non_positive_integer + // + { + non_positive_integer_pimpl p; + p.pre (); + p._pre (); + p._characters (past_min.c_str ()); + assert (test_post_fail (p)); + } + + { + non_positive_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("1"); + assert (test_post_fail (p)); + } + + // positive_integer + // + { + positive_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("-1"); + assert (test_post_fail (p)); + } + + { + positive_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("+0"); + assert (test_post_fail (p)); + } + + { + positive_integer_pimpl p; + p.pre (); + p._pre (); + p._characters (past_umax.c_str ()); + assert (test_post_fail (p)); + } + + // non_negative_integer + // + { + non_negative_integer_pimpl p; + p.pre (); + p._pre (); + p._characters ("-1"); + assert (test_post_fail (p)); + } + + { + non_negative_integer_pimpl p; + p.pre (); + p._pre (); + p._characters (past_umax.c_str ()); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/long/buildfile b/xsd-tests/cxx/parser/validation/built-in/long/buildfile new file mode 100644 index 0000000..285ad70 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/long/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/long/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/long/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/long/driver.cxx new file mode 100644 index 0000000..a4ab565 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/long/driver.cxx @@ -0,0 +1,116 @@ +// file : cxx/parser/validation/built-in/long/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in long and unsigned long types validation. +// +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +template +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + { + long_pimpl p; + p.pre (); + p._pre (); + p._characters ("-9223372036854775808"); + p._post (); + assert (p.post_long () == (-9223372036854775807LL - 1)); + } + + { + long_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_long () == 0); + } + + { + long_pimpl p; + p.pre (); + p._pre (); + p._characters ("9223372036854775807"); + p._post (); + assert (p.post_long () == 9223372036854775807LL); + } + + { + unsigned_long_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_unsigned_long () == 0); + } + + { + unsigned_long_pimpl p; + p.pre (); + p._pre (); + p._characters ("18446744073709551615"); + p._post (); + assert (p.post_unsigned_long () == 18446744073709551615ULL); + } + + // Bad + // + + { + unsigned_long_pimpl p; + p.pre (); + p._pre (); + p._characters ("-123"); + assert (test_post_fail (p)); + } + + + // Ranges + // + { + long_pimpl p; + p.pre (); + p._pre (); + p._characters ("-9223372036854775809"); + assert (test_post_fail (p)); + } + + { + long_pimpl p; + p.pre (); + p._pre (); + p._characters ("9223372036854775808"); + assert (test_post_fail (p)); + } + + { + unsigned_long_pimpl p; + p.pre (); + p._pre (); + p._characters ("18446744073709551616"); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/qname/buildfile b/xsd-tests/cxx/parser/validation/built-in/qname/buildfile new file mode 100644 index 0000000..47d644c --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/qname/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/qname/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/qname/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/qname/driver.cxx new file mode 100644 index 0000000..85acd1c --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/qname/driver.cxx @@ -0,0 +1,105 @@ +// file : cxx/parser/validation/built-in/qname/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in QName type validation. +// +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +bool +test_post_fail (qname_pimpl& p) +{ + try + { + p._post (); + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + typedef xsd::cxx::parser::qname qname; + + // Good. + // + { + qname_pimpl p; + p.pre (); + p._pre (); + p._characters (" xsi"); + p._characters (":"); + p._characters ("schemaLocation"); + p._post (); + assert (p.post_qname () == qname ("xsi", "schemaLocation")); + } + + { + qname_pimpl p; + p.pre (); + p._pre (); + p._characters ("schemaLocation"); + p._post (); + assert (p.post_qname () == qname ("schemaLocation")); + } + + + // Bad + // + { + qname_pimpl p; + p.pre (); + p._pre (); + //p._characters (""); + assert (test_post_fail (p)); + } + + { + qname_pimpl p; + p.pre (); + p._pre (); + p._characters (":"); + assert (test_post_fail (p)); + } + + { + qname_pimpl p; + p.pre (); + p._pre (); + p._characters ("xsi:"); + assert (test_post_fail (p)); + } + + { + qname_pimpl p; + p.pre (); + p._pre (); + p._characters (":schemaLocation"); + assert (test_post_fail (p)); + } + + { + qname_pimpl p; + p.pre (); + p._pre (); + p._characters ("x?i:schemaLocation"); + assert (test_post_fail (p)); + } + + { + qname_pimpl p; + p.pre (); + p._pre (); + p._characters ("xsi:schema Location"); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/short/buildfile b/xsd-tests/cxx/parser/validation/built-in/short/buildfile new file mode 100644 index 0000000..782b404 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/short/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/short/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/short/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/short/driver.cxx new file mode 100644 index 0000000..7c79b22 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/short/driver.cxx @@ -0,0 +1,116 @@ +// file : cxx/parser/validation/built-in/short/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in short and unsigned short types validation. +// +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +template +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + { + short_pimpl p; + p.pre (); + p._pre (); + p._characters ("-32768"); + p._post (); + assert (p.post_short () == -32768); + } + + { + short_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_short () == 0); + } + + { + short_pimpl p; + p.pre (); + p._pre (); + p._characters ("32767"); + p._post (); + assert (p.post_short () == 32767); + } + + { + unsigned_short_pimpl p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_unsigned_short () == 0); + } + + { + unsigned_short_pimpl p; + p.pre (); + p._pre (); + p._characters ("65535"); + p._post (); + assert (p.post_unsigned_short () == 65535); + } + + // Bad + // + + { + unsigned_short_pimpl p; + p.pre (); + p._pre (); + p._characters ("-1234"); + assert (test_post_fail (p)); + } + + + // Ranges + // + { + short_pimpl p; + p.pre (); + p._pre (); + p._characters ("-32769"); + assert (test_post_fail (p)); + } + + { + short_pimpl p; + p.pre (); + p._pre (); + p._characters ("32768"); + assert (test_post_fail (p)); + } + + { + unsigned_short_pimpl p; + p.pre (); + p._pre (); + p._characters ("65536"); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/string/buildfile b/xsd-tests/cxx/parser/validation/built-in/string/buildfile new file mode 100644 index 0000000..83e5f7a --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/string/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/string/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/string/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/string/driver.cxx new file mode 100644 index 0000000..920385a --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/string/driver.cxx @@ -0,0 +1,512 @@ +// file : cxx/parser/validation/built-in/string/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in string & friends types validation. +// +#include +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +template +bool +test_post_fail (T& p) +{ + try + { + p._post_impl (); // List implementation needs this to be post_impl. + } + catch (invalid_value const&) + { + return true; + } + + return false; +} + +int +main () +{ + typedef xsd::cxx::parser::string_sequence strings; + + // Good. + // + + // string + // + { + string_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" aaa "); + p._characters ("bbb"); + p._characters (" "); + p._post (); + assert (p.post_string () == " \n\t aaa bbb "); + } + + // normalized_string + // + { + normalized_string_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" aaa \n\t "); + p._characters (" bbb"); + p._characters (" "); + p._post (); + assert (p.post_normalized_string () == " aaa bbb "); + } + + // token + // + { + token_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" aaa \n\t "); + p._characters (" bbb \n\t"); + p._characters (" "); + p._post (); + assert (p.post_token () == "aaa bbb"); + } + + // name + // + { + name_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" a:b-c_d123 "); + p._characters (" "); + p._post (); + assert (p.post_name () == "a:b-c_d123"); + } + + { + name_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" _12 "); + p._characters (" "); + p._post (); + assert (p.post_name () == "_12"); + } + + { + name_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" :12 "); + p._characters (" "); + p._post (); + assert (p.post_name () == ":12"); + } + + // nmtoken + // + { + nmtoken_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" 123a:b-c_d123 "); + p._characters (" \n\t"); + p._characters (" "); + p._post (); + assert (p.post_nmtoken () == "123a:b-c_d123"); + } + + // nmtokens + // + { + strings s; + s.push_back ("123"); + s.push_back ("abc"); + + nmtokens_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" 123 "); + p._characters (" \n\t abc "); + p._characters (" "); + p._post (); + assert (p.post_nmtokens () == s); + } + + // ncname + // + { + ncname_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" a.b-c_d123 "); + p._characters (" "); + p._post (); + assert (p.post_ncname () == "a.b-c_d123"); + } + + // id + // + { + id_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" a.b-c_d123 "); + p._characters (" "); + p._post (); + assert (p.post_id () == "a.b-c_d123"); + } + + // idref + // + { + idref_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" a.b-c_d123 "); + p._characters (" "); + p._post (); + assert (p.post_idref () == "a.b-c_d123"); + } + + // idrefs + // + { + strings s; + s.push_back ("a123"); + s.push_back ("abc"); + + idrefs_pimpl p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" a123 "); + p._characters (" \n\t abc "); + p._characters (" "); + p._post (); + assert (p.post_idrefs () == s); + } + + // language + // + { + language_pimpl p; + p.pre (); + p._pre (); + p._characters (" x "); + p._post (); + assert (p.post_language () == "x"); + } + + { + language_pimpl p; + p.pre (); + p._pre (); + p._characters (" en "); + p._post (); + assert (p.post_language () == "en"); + } + + { + language_pimpl p; + p.pre (); + p._pre (); + p._characters (" en"); + p._characters ("-us "); + p._post (); + assert (p.post_language () == "en-us"); + } + + { + language_pimpl p; + p.pre (); + p._pre (); + p._characters ("one-two-three-four44-seven77-eight888"); + p._post (); + assert (p.post_language () == "one-two-three-four44-seven77-eight888"); + } + + + // Bad + // + + // name + // + { + name_pimpl p; + p.pre (); + p._pre (); + p._characters (""); + assert (test_post_fail (p)); + } + + { + name_pimpl p; + p.pre (); + p._pre (); + p._characters (".a"); + assert (test_post_fail (p)); + } + + { + name_pimpl p; + p.pre (); + p._pre (); + p._characters ("-a"); + assert (test_post_fail (p)); + } + + { + name_pimpl p; + p.pre (); + p._pre (); + p._characters ("1a"); + assert (test_post_fail (p)); + } + + { + name_pimpl p; + p.pre (); + p._pre (); + p._characters ("a,b"); + assert (test_post_fail (p)); + } + + { + name_pimpl p; + p.pre (); + p._pre (); + p._characters ("a b"); + assert (test_post_fail (p)); + } + + { + name_pimpl p; + p.pre (); + p._pre (); + p._characters ("a p; + p.pre (); + p._pre (); + p._characters (""); + assert (test_post_fail (p)); + } + + { + nmtoken_pimpl p; + p.pre (); + p._pre (); + p._characters ("a,b"); + assert (test_post_fail (p)); + } + + { + nmtoken_pimpl p; + p.pre (); + p._pre (); + p._characters ("a b"); + assert (test_post_fail (p)); + } + + { + nmtoken_pimpl p; + p.pre (); + p._pre (); + p._characters ("a p; + p.pre (); + p._pre (); + p._characters (" "); + p._characters (" \t\n "); + assert (test_post_fail (p)); + } + + { + nmtokens_pimpl p; + p.pre (); + p._pre (); + p._characters ("ab a,b"); + assert (test_post_fail (p)); + } + + // ncname + // + { + ncname_pimpl p; + p.pre (); + p._pre (); + p._characters (""); + assert (test_post_fail (p)); + } + + { + ncname_pimpl p; + p.pre (); + p._pre (); + p._characters (".a"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl p; + p.pre (); + p._pre (); + p._characters ("-a"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl p; + p.pre (); + p._pre (); + p._characters (":a"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl p; + p.pre (); + p._pre (); + p._characters ("1a"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl p; + p.pre (); + p._pre (); + p._characters ("1:a"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl p; + p.pre (); + p._pre (); + p._characters ("a,b"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl p; + p.pre (); + p._pre (); + p._characters ("a b"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl p; + p.pre (); + p._pre (); + p._characters ("a p; + p.pre (); + p._pre (); + p._characters ("a b"); + assert (test_post_fail (p)); + } + + // idref + // + { + idref_pimpl p; + p.pre (); + p._pre (); + p._characters ("a b"); + assert (test_post_fail (p)); + } + + // idrefs + // + { + idrefs_pimpl p; + p.pre (); + p._pre (); + p._characters (" "); + p._characters (" \t\n "); + assert (test_post_fail (p)); + } + + { + idrefs_pimpl p; + p.pre (); + p._pre (); + p._characters ("ab a p; + p.pre (); + p._pre (); + p._characters (" "); + assert (test_post_fail (p)); + } + + { + language_pimpl p; + p.pre (); + p._pre (); + p._characters ("en-"); + assert (test_post_fail (p)); + } + + { + language_pimpl p; + p.pre (); + p._pre (); + p._characters ("a1"); + assert (test_post_fail (p)); + } + + { + language_pimpl p; + p.pre (); + p._pre (); + p._characters ("en+us"); + assert (test_post_fail (p)); + } + + { + language_pimpl p; + p.pre (); + p._pre (); + p._characters ("en-nine99999"); + assert (test_post_fail (p)); + } +} diff --git a/xsd-tests/cxx/parser/validation/built-in/uri/buildfile b/xsd-tests/cxx/parser/validation/built-in/uri/buildfile new file mode 100644 index 0000000..a8fdf82 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/uri/buildfile @@ -0,0 +1,10 @@ +# file : cxx/parser/validation/built-in/uri/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} + +exe{driver}: {hxx cxx}{*} $libs + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/parser/validation/built-in/uri/driver.cxx b/xsd-tests/cxx/parser/validation/built-in/uri/driver.cxx new file mode 100644 index 0000000..dcc9242 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/built-in/uri/driver.cxx @@ -0,0 +1,53 @@ +// file : cxx/parser/validation/built-in/uri/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in anyURI type validation. +// +#include + +#include +#include + +using namespace xsd::cxx::parser::validating; + +int +main () +{ + // Good. + // + { + uri_pimpl p; + p.pre (); + p._pre (); + p._characters (" "); + p._post (); + assert (p.post_uri () == ""); + } + + { + uri_pimpl p; + p.pre (); + p._pre (); + p._characters ("relative"); + p._post (); + assert (p.post_uri () == "relative"); + } + + { + uri_pimpl p; + p.pre (); + p._pre (); + p._characters ("#id"); + p._post (); + assert (p.post_uri () == "#id"); + } + + { + uri_pimpl p; + p.pre (); + p._pre (); + p._characters ("http://www.example.com/foo#bar"); + p._post (); + assert (p.post_uri () == "http://www.example.com/foo#bar"); + } +} diff --git a/xsd-tests/cxx/parser/validation/choice/buildfile b/xsd-tests/cxx/parser/validation/choice/buildfile new file mode 100644 index 0000000..adf0832 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/choice/buildfile @@ -0,0 +1,22 @@ +# file : cxx/parser/validation/choice/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs \ + testscript + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-validation \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/validation/choice/driver.cxx b/xsd-tests/cxx/parser/validation/choice/driver.cxx new file mode 100644 index 0000000..4a52c5d --- /dev/null +++ b/xsd-tests/cxx/parser/validation/choice/driver.cxx @@ -0,0 +1,126 @@ +// file : cxx/parser/validation/choice/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the choice compositor validation. +// + +#include +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct choice_pimpl: choice_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + c (string const& v) + { + cout << " c = " << v << endl; + } + + virtual void + d (string const& v) + { + cout << " d = " << v << endl; + } + + virtual void + _start_any_element (ro_string const& ns, + ro_string const& name, + ro_string const*) + { + cout << " any: " << ns << "#" << name << endl + << " {" << endl; + } + + virtual void + _any_characters (ro_string const& v) + { + cout << " chars = " << v << endl; + } + + virtual void + _end_any_element (ro_string const&, ro_string const&) + { + cout << " }" << endl; + } + + virtual void + post_choice () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + choice_pimpl choice_p; + type_pimpl type_p; + + choice_p.parsers (string_p, string_p, string_p, string_p); + type_p.parsers (choice_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + try + { + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cout << " " << e << endl + << "}" << endl + << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/validation/choice/test.xsd b/xsd-tests/cxx/parser/validation/choice/test.xsd new file mode 100644 index 0000000..8132bbb --- /dev/null +++ b/xsd-tests/cxx/parser/validation/choice/test.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/validation/choice/testscript b/xsd-tests/cxx/parser/validation/choice/testscript new file mode 100644 index 0000000..c5f5afa --- /dev/null +++ b/xsd-tests/cxx/parser/validation/choice/testscript @@ -0,0 +1,179 @@ +# file : cxx/parser/validation/choice/testscript +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +test.arguments += test.xml + +: valid +: +{ + cat <=test.xml; + + + + a + + b + + + + c + d + + any + + a + + + + c + d + + d + + a + + + + EOI + + $* >>EOO + { + a = a + b = b + } + + { + c = c + d = d + any: other#any + { + chars = any + } + a = a + } + + { + c = c + d = d + d = d + a = a + } + + EOO +} + +: absent1 +: +{ + cat <=test.xml; + + + + + + + + EOI + + $* >>EOO + { + :8:12 error: expected element 'a' + } + + EOO +} + +: absent2 +: +{ + cat <=test.xml; + + + + + c + d + + any + + a + b + + + + EOI + + $* >>EOO + { + c = c + d = d + any: other#any + { + chars = any + } + a = a + :14:8 error: unexpected element 'b' + } + + EOO +} + +: absent3 +: +{ + cat <=test.xml; + + + + + c + + + + EOI + + $* >>EOO + { + c = c + :9:12 error: expected element 'd' + } + + EOO +} + +: absent4 +: +{ + cat <=test.xml; + + + + + x + + + + EOI + + $* >>EOO + { + :8:8 error: expected element 'a' instead of 'x' + } + + EOO +} diff --git a/xsd-tests/cxx/parser/validation/restriction/buildfile b/xsd-tests/cxx/parser/validation/restriction/buildfile new file mode 100644 index 0000000..4c415bf --- /dev/null +++ b/xsd-tests/cxx/parser/validation/restriction/buildfile @@ -0,0 +1,22 @@ +# file : cxx/parser/validation/restriction/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs \ + testscript + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-validation \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/validation/restriction/driver.cxx b/xsd-tests/cxx/parser/validation/restriction/driver.cxx new file mode 100644 index 0000000..206b9f8 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/restriction/driver.cxx @@ -0,0 +1,107 @@ +// file : cxx/parser/validation/restriction/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the restriction compositor validation. +// + +#include +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct base_a_pimpl: base_a_pskel +{ +}; + +struct restriction_a_pimpl: restriction_a_pskel +{ +}; + +struct extension_b_pimpl: extension_b_pskel +{ +}; + +struct restriction_b_pimpl: restriction_b_pskel +{ +}; + +struct type_b_pimpl: type_b_pskel +{ +}; + +struct type_r_pimpl: type_r_pskel +{ +}; + + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + base_a_pimpl base_a_p; + restriction_a_pimpl restriction_a_p; + extension_b_pimpl extension_b_p; + restriction_b_pimpl restriction_b_p; + type_b_pimpl type_b_p; + type_r_pimpl type_r_p; + + base_a_p.parsers (string_p, string_p, string_p, + string_p, string_p, string_p); + + restriction_a_p.parsers (string_p, string_p, string_p, + string_p, string_p, string_p); + + extension_b_p.parsers (string_p, string_p, string_p, + string_p, string_p); + + restriction_b_p.parsers (string_p, string_p, string_p, + string_p, string_p); + + type_b_p.parsers (base_a_p, extension_b_p); + type_r_p.parsers (restriction_a_p, restriction_b_p); + + xml_schema::document doc_b_p (type_b_p, "test", "root"); + xml_schema::document doc_r_p (type_r_p, "test", "root"); + + { + ifstream ifs (argv[1]); + type_b_p.pre (); + doc_b_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_b_p.post_type_b (); + } + + try + { + ifstream ifs (argv[1]); + type_r_p.pre (); + doc_r_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_r_p.post_type_r (); + } + catch (xml_schema::exception const& e) + { + cout << e << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/validation/restriction/test.xsd b/xsd-tests/cxx/parser/validation/restriction/test.xsd new file mode 100644 index 0000000..158ded5 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/restriction/test.xsd @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/validation/restriction/testscript b/xsd-tests/cxx/parser/validation/restriction/testscript new file mode 100644 index 0000000..ea5a4e8 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/restriction/testscript @@ -0,0 +1,159 @@ +# file : cxx/parser/validation/all/testscript +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +test.arguments += test.xml + +: valid +: +{ + cat <=test.xml; + + + + a + b + c + + + + a + b + c + + + + a + b + + + + a + c + + + + a + + + + EOI + + $* +} + +: invalid1 +: +{ + cat <=test.xml; + + + + + b + c + + + + EOI + + $* >>EOO + :7:8 error: expected element 'a' instead of 'b' + EOO +} + +: invalid2 +: +{ + cat <=test.xml; + + + + + a + b + c + + + + EOI + + $* >>EOO + :10:19 error: expected attribute 'z' + EOO +} + +: invalid3 +: +{ + cat <=test.xml; + + + + + a + b + c + + a + b + c + + + + EOI + + $* >>EOO + :11:8 error: unexpected element 'a' + EOO +} + +: invalid4 +: +{ + cat <=test.xml; + + + + + b + + + + EOI + + $* >>EOO + :7:8 error: expected element 'a' instead of 'b' + EOO +} + +: invalid5 +: +{ + cat <=test.xml; + + + + + a + b + + + + EOI + + $* >>EOO + :9:19 error: expected attribute 'y' + EOO +} diff --git a/xsd-tests/cxx/parser/validation/sequence/buildfile b/xsd-tests/cxx/parser/validation/sequence/buildfile new file mode 100644 index 0000000..b205091 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/sequence/buildfile @@ -0,0 +1,22 @@ +# file : cxx/parser/validation/sequence/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test-pskel} {hxx ixx cxx}{test-pskel} $libs \ + testscript + +<{hxx ixx cxx}{test-pskel}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-parser --std c++11 \ + --generate-inline \ + --skel-file-suffix -pskel \ + --output-dir $out_base \ + --generate-validation \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/parser/validation/sequence/driver.cxx b/xsd-tests/cxx/parser/validation/sequence/driver.cxx new file mode 100644 index 0000000..6b5bf70 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/sequence/driver.cxx @@ -0,0 +1,139 @@ +// file : cxx/parser/validation/sequence/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the sequence compositor validation. +// + +#include +#include +#include + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct sequence_pimpl: sequence_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + c (string const& v) + { + cout << " c = " << v << endl; + } + + virtual void + d (string const& v) + { + cout << " d = " << v << endl; + } + + virtual void + e (string const& v) + { + cout << " e = " << v << endl; + } + + virtual void + f (string const& v) + { + cout << " f = " << v << endl; + } + + virtual void + _start_any_element (ro_string const& ns, + ro_string const& name, + ro_string const*) + { + cout << " any: " << ns << "#" << name << endl + << " {" << endl; + } + + virtual void + _any_characters (ro_string const& v) + { + cout << " chars = " << v << endl; + } + + virtual void + _end_any_element (ro_string const&, ro_string const&) + { + cout << " }" << endl; + } + + virtual void + post_sequence () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + sequence_pimpl sequence_p; + type_pimpl type_p; + + sequence_p.parsers (string_p, string_p, string_p, + string_p, string_p, string_p); + type_p.parsers (sequence_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + try + { + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cout << " " << e << endl + << "}" << endl + << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/parser/validation/sequence/test.xsd b/xsd-tests/cxx/parser/validation/sequence/test.xsd new file mode 100644 index 0000000..8753f54 --- /dev/null +++ b/xsd-tests/cxx/parser/validation/sequence/test.xsd @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/parser/validation/sequence/testscript b/xsd-tests/cxx/parser/validation/sequence/testscript new file mode 100644 index 0000000..deebb9f --- /dev/null +++ b/xsd-tests/cxx/parser/validation/sequence/testscript @@ -0,0 +1,328 @@ +# file : cxx/parser/validation/sequence/testscript +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +test.arguments += test.xml + +: valid +: +{ + cat <=test.xml; + + + + c + d + aaabbbccc + f + e + + + + a + b + c + d + d + d + any + f + e + e + + + + a + b + c + d + d + d + any + f + e + e + + c + d + any + f + e + + + + EOI + + $* >>EOO + { + c = c + d = d + any: test#any + { + chars = aaa + any: #a + { + chars = bbb + } + chars = ccc + } + f = f + e = e + } + + { + a = a + b = b + c = c + d = d + d = d + d = d + any: other#any + { + chars = any + } + f = f + e = e + e = e + } + + { + a = a + b = b + c = c + d = d + d = d + d = d + any: other#any + { + chars = any + } + f = f + e = e + e = e + c = c + d = d + any: test#any + { + chars = any + } + f = f + e = e + } + + EOO +} + +: invalid1 +: +{ + cat <=test.xml; + + + + + + + + EOI + + $* >>EOO + { + :8:14 error: expected element 'a' + } + + EOO +} + +: invalid2 +: +{ + cat <=test.xml; + + + + + c + d + any + f + e + + c + d + any + f + e + + c + d + any + f + e + + + + EOI + + $* >>EOO + { + c = c + d = d + any: test#any + { + chars = any + } + f = f + e = e + c = c + d = d + any: test#any + { + chars = any + } + f = f + e = e + :20:8 error: unexpected element 'c' + } + + EOO +} + +: invalid3 +: +{ + cat <=test.xml; + + + + + a + a + c + d + any + f + e + + + + EOI + + $* >>EOO + { + a = a + :9:8 error: expected element 'b' instead of 'a' + } + + EOO +} + +: invalid4 +: +{ + cat <=test.xml; + + + + + d + any + f + e + + + + EOI + + $* >>EOO + { + :8:8 error: expected element 'a' instead of 'd' + } + + EOO +} + +: invalid5 +: +{ + cat <=test.xml; + + + + + c + d + any + f + e + + + + EOI + + $* >>EOO + { + c = c + d = d + :10:13 error: expected element '##targetNamespace#*' instead of 'other1#any' + } + + EOO +} + +: invalid6 +: +{ + cat <=test.xml; + + + + + c + d + any + f + e + e + e + + + + EOI + + $* >>EOO + { + c = c + d = d + any: test#any + { + chars = any + } + f = f + e = e + e = e + :14:8 error: unexpected element 'e' + } + + EOO +} diff --git a/xsd-tests/cxx/tree/any-type/buildfile b/xsd-tests/cxx/tree/any-type/buildfile new file mode 100644 index 0000000..c65c403 --- /dev/null +++ b/xsd-tests/cxx/tree/any-type/buildfile @@ -0,0 +1,26 @@ +# file : cxx/tree/any-type/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --generate-any-type \ + --generate-ostream \ + --generate-comparison \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/any-type/driver.cxx b/xsd-tests/cxx/tree/any-type/driver.cxx new file mode 100644 index 0000000..a8fccf6 --- /dev/null +++ b/xsd-tests/cxx/tree/any-type/driver.cxx @@ -0,0 +1,144 @@ +// file : cxx/tree/any-type/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test anyType and anySimpleType content extraction. +// + +#include // std::auto_ptr/unique_ptr +#include // std::move +#include +#include + +#include +#include + +#include "test.hxx" // Get XSD_CXX11 defined. + +#include + +using namespace std; +using namespace test; +using namespace xercesc; + +namespace xml = xsd::cxx::xml; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + XMLPlatformUtils::Initialize (); + + try + { + // Test parsing + // + XSD_AUTO_PTR r (root (argv[1])); + + // Test API. + // + { + assert (type::a_default_value ().text_content () == "default value"); + } + + { + xml_schema::simple_type x ("fox"); + assert (x.text_content () == "fox"); + x.text_content ("foo"); + assert (x.text_content () == "foo"); + x.text_content ().clear (); + assert (x.text_content () == ""); + x.text_content () = "baz"; + r->s ().push_back (x); + } + + { + xml_schema::type x; + + DOMDocument& doc (x.dom_content_document ()); + + // Copy. + // + DOMElement* e (doc.createElement (xml::string ("dummy").c_str ())); + e->setAttribute (xml::string ("x").c_str (), + xml::string ("foo").c_str ()); + e->setTextContent (xml::string ("data").c_str ()); + x.dom_content ().set (*e); + e->release (); + + r->t ().push_back (x); + } + + { + XSD_AUTO_PTR x (new xml_schema::type); + + DOMDocument& doc (x->dom_content_document ()); + + // Assume ownership. + // + DOMElement* e (doc.createElement (xml::string ("dummy").c_str ())); + e->setAttribute (xml::string ("x").c_str (), + xml::string ("foo").c_str ()); + e->setTextContent (xml::string ("data").c_str ()); + x->dom_content ().set (e); + +#ifdef XSD_CXX11 + r->t ().push_back (std::move (x)); +#else + r->t ().push_back (x); +#endif + } + + // Test printing. + // + cout << *r << endl + << endl; + + // Test serialization. + // + xml_schema::namespace_infomap map; + + map["t"].name = "test"; + map["t"].schema = "test.xsd"; + map["o"].name = "other"; + + stringstream iostr; + root (iostr, *r, map); + + cout << iostr.str () << endl + << endl; + + { + XSD_AUTO_PTR r1 (root (iostr, argv[1])); + + // Xerces-C++ mis-indentation of mixed content messes this up. + // assert (*r == *r); + + stringstream iostr; + root (iostr, *r1, map); + + cout << iostr.str () << endl + << endl; + } + + // Test comparison. + // + assert (*r == *r); + + // Test copy c-tor. + // + type copy (*r); + assert (copy == *r); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + + XMLPlatformUtils::Terminate (); +} diff --git a/xsd-tests/cxx/tree/any-type/output b/xsd-tests/cxx/tree/any-type/output new file mode 100644 index 0000000..580e7db --- /dev/null +++ b/xsd-tests/cxx/tree/any-type/output @@ -0,0 +1,73 @@ + +t: +t: +t: +t: +t: +t: +t: +t: +s: +s: simple +s: baz +l: one two three +a: any simple content + + + + + + any + any + + + nested 1 + nested 2 + + more + + mi + nested 1x + nested 2ed + content + + data + data + + simple + baz + one two three + + + + + + + + any + any + + + nested 1 + nested 2 + + more + + mi + + nested 1x + + nested 2ed + + content + + + data + data + + simple + baz + one two three + + + diff --git a/xsd-tests/cxx/tree/any-type/test.xml b/xsd-tests/cxx/tree/any-type/test.xml new file mode 100644 index 0000000..7c9035a --- /dev/null +++ b/xsd-tests/cxx/tree/any-type/test.xml @@ -0,0 +1,26 @@ + + + + + any + any + + + nested 1 + nested 2 + + more + + minested 1xnested 2edcontent + + + simple + + one two three + + diff --git a/xsd-tests/cxx/tree/any-type/test.xsd b/xsd-tests/cxx/tree/any-type/test.xsd new file mode 100644 index 0000000..37dcc8d --- /dev/null +++ b/xsd-tests/cxx/tree/any-type/test.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/binary/cdr/buildfile b/xsd-tests/cxx/tree/binary/cdr/buildfile new file mode 100644 index 0000000..7a1c5b4 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/cdr/buildfile @@ -0,0 +1,25 @@ +# file : cxx/tree/binary/cdr/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} +import libs += libace%lib{ACE} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-insertion 'ACE_OutputCDR' \ + --generate-extraction 'ACE_InputCDR' \ + --generate-comparison \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/binary/cdr/driver.cxx b/xsd-tests/cxx/tree/binary/cdr/driver.cxx new file mode 100644 index 0000000..fe74bb5 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/cdr/driver.cxx @@ -0,0 +1,143 @@ +// file : tests/cxx/tree/binary/cdr/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test non-polymorphic binary serialization to ACE CDR. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + // Save to a CDR stream. + // + ACE_OutputCDR ace_ocdr; + xml_schema::ostream ocdr (ace_ocdr); + ocdr << *r; + + // Load from a CDR stream. + // + ACE_InputCDR ace_icdr (ace_ocdr); + xml_schema::istream icdr (ace_icdr); + XSD_AUTO_PTR c (new type (icdr)); + + // Compare the two. + // + assert (r->list () == c->list ()); + assert (r->union_ () == c->union_ ()); + assert (r->enumeration () == c->enumeration ()); + + type::complex_sequence rs (r->complex ()), cs (c->complex ()); + + for (type::complex_iterator ri (rs.begin ()), ci (cs.begin ()); + ri != rs.end () && ci != rs.end (); ++ri, ++ci) + { + assert (ri->a () == ci->a ()); + if (ri->b ()) + assert (ri->b () == ci->b ()); + assert (ri->c () == ci->c ()); + + assert (ri->x () == ci->x ()); + if (ri->y ()) + assert (ri->y () == ci->y ()); + } + + // integers + // + assert (r->byte () == c->byte ()); + assert (r->unsigned_byte () == c->unsigned_byte ()); + assert (r->short_ () == c->short_ ()); + assert (r->unsigned_short () == c->unsigned_short ()); + assert (r->int_ () == c->int_ ()); + assert (r->unsigned_int () == c->unsigned_int ()); + assert (r->long_ () == c->long_ ()); + assert (r->unsigned_long () == c->unsigned_long ()); + assert (r->integer () == c->integer ()); + assert (r->non_positive_integer () == c->non_positive_integer ()); + assert (r->non_negative_integer () == c->non_negative_integer ()); + assert (r->positive_integer () == c->positive_integer ()); + assert (r->negative_integer () == c->negative_integer ()); + + // boolean + // + assert (r->boolean () == c->boolean ()); + + // floats + // + assert (r->float_ () == c->float_ ()); + assert (r->double_ () == c->double_ ()); + assert (r->decimal () == c->decimal ()); + + // strings + // + assert (r->string () == c->string ()); + assert (r->normalized_string () == c->normalized_string ()); + assert (r->token () == c->token ()); + assert (r->name () == c->name ()); + assert (r->name_token () == c->name_token ()); + assert (r->name_tokens () == c->name_tokens ()); + assert (r->ncname () == c->ncname ()); + assert (r->language () == c->language ()); + + // qualified name + // + assert (r->qname () == c->qname ()); + + // ID/IDREF + // + assert (r->id () == c->id ()); + assert (r->id_ref () == c->id_ref ()); + assert (r->id_refs () == c->id_refs ()); + + // URI + // + assert (r->any_uri () == c->any_uri ()); + + // binary + // + assert (r->base64_binary () == c->base64_binary ()); + assert (r->hex_binary () == c->hex_binary ()); + + // date/time + // + assert (r->day () == c->day ()); + assert (r->month () == c->month ()); + assert (r->year () == c->year ()); + assert (r->month_day () == c->month_day ()); + assert (r->year_month () == c->year_month ()); + assert (r->date () == c->date ()); + assert (r->time () == c->time ()); + assert (r->date_time () == c->date_time ()); + assert (r->duration () == c->duration ()); + + // anySimpleType + // + assert (!r->any_simple_type_attr ().text_content ().empty ()); + assert (r->any_simple_type_attr () == c->any_simple_type_attr ()); + + assert (!r->any_simple_type ().text_content ().empty ()); + assert (r->any_simple_type () == c->any_simple_type ()); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/binary/cdr/test.xml b/xsd-tests/cxx/tree/binary/cdr/test.xml new file mode 100644 index 0000000..5cedd98 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/cdr/test.xml @@ -0,0 +1,93 @@ + + + 1 2 3 + + abc + + left + + + aaa + + + aaa + bbb + c + cc + ccc + + + + + 65 + 66 + -222 + 57005 + -57005 + 3735928559 + -3735928559 + 16045690984833335023 + -3735928559 + -3735928559 + 3735928559 + 3735928559 + -3735928559 + + + + true + + + + 1234.1234 + 12345678.12345678 + 1234567812345678.1234567812345678 + + + + string + normalized string + one two three + name + name-token + name tokens + ncname + en-us + + + xsi:schemaLocation + + + + elements1 + elements2 + elements1 + elements1 elements2 + + + + http://www.codesynthesis.com + + + + YmFzZTY0IGJpbmFyeQ== + 6865782052696E617279 + + + + 2001-10-26+02:00 + 2001-10-26T21:32:52+02:00 + P1Y2M3DT5H20M30S + ---01+02:00 + --11+02:00 + --11-02+02:00 + 2001+02:00 + 2001-11+02:00 + + + any simple content in element + + diff --git a/xsd-tests/cxx/tree/binary/cdr/test.xsd b/xsd-tests/cxx/tree/binary/cdr/test.xsd new file mode 100644 index 0000000..0629e94 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/cdr/test.xsd @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/binary/polymorphic/buildfile b/xsd-tests/cxx/tree/binary/polymorphic/buildfile new file mode 100644 index 0000000..d34ef27 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/polymorphic/buildfile @@ -0,0 +1,27 @@ +# file : cxx/tree/binary/polymorphic/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} +import libs += libace%lib{ACE} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-polymorphic \ + --root-element-last \ + --generate-insertion 'ACE_OutputCDR' \ + --generate-extraction 'ACE_InputCDR' \ + --generate-comparison \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/binary/polymorphic/driver.cxx b/xsd-tests/cxx/tree/binary/polymorphic/driver.cxx new file mode 100644 index 0000000..15ebf17 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/polymorphic/driver.cxx @@ -0,0 +1,164 @@ +// file : tests/cxx/tree/binary/polymorphic/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test polymorphic binary serialization. +// + +#include // std::auto_ptr/unique_ptr +#include +#include +#include + +#include // ACE_HEX_DUMP + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + // Save to a CDR stream. + // + ACE_OutputCDR ace_ocdr; + xml_schema::ostream ocdr (ace_ocdr); + ocdr << *r; + + /* + // Print the binary representation. + // + cerr << "binary representation size: " << ace_ocdr.total_length () << endl; + + for (const ACE_Message_Block* mb = ace_ocdr.begin (); + mb != 0; + mb = mb->cont ()) + { + ACE_HEX_DUMP ((LM_DEBUG, mb->rd_ptr (), mb->length ())); + } + */ + + // Load from a CDR stream. + // + ACE_InputCDR ace_icdr (ace_ocdr); + xml_schema::istream icdr (ace_icdr); + XSD_AUTO_PTR c (new type (icdr)); + + // Compare the two. + // + assert (r->list () == c->list ()); + assert (r->union_ () == c->union_ ()); + assert (r->enumeration () == c->enumeration ()); + + { + complex& rc (dynamic_cast (r->base ())); + complex& cc (dynamic_cast (c->base ())); + + assert (rc.a () == cc.a ()); + if (rc.b ()) + assert (rc.b () == cc.b ()); + assert (rc.c () == cc.c ()); + + assert (rc.x () == cc.x ()); + if (rc.y ()) + assert (rc.y () == cc.y ()); + } + + { + complex& rc (dynamic_cast (r->sbase ())); + complex& cc (dynamic_cast (c->sbase ())); + + assert (rc.a () == cc.a ()); + if (rc.b ()) + assert (rc.b () == cc.b ()); + assert (rc.c () == cc.c ()); + + assert (rc.x () == cc.x ()); + if (rc.y ()) + assert (rc.y () == cc.y ()); + } + + // integers + // + assert (r->byte () == c->byte ()); + assert (r->unsigned_byte () == c->unsigned_byte ()); + assert (r->short_ () == c->short_ ()); + assert (r->unsigned_short () == c->unsigned_short ()); + assert (r->int_ () == c->int_ ()); + assert (r->unsigned_int () == c->unsigned_int ()); + assert (r->long_ () == c->long_ ()); + assert (r->unsigned_long () == c->unsigned_long ()); + assert (r->integer () == c->integer ()); + assert (r->non_positive_integer () == c->non_positive_integer ()); + assert (r->non_negative_integer () == c->non_negative_integer ()); + assert (r->positive_integer () == c->positive_integer ()); + assert (r->negative_integer () == c->negative_integer ()); + + // boolean + // + assert (r->boolean () == c->boolean ()); + + // floats + // + assert (r->float_ () == c->float_ ()); + assert (r->double_ () == c->double_ ()); + assert (r->decimal () == c->decimal ()); + + // strings + // + assert (r->string () == c->string ()); + assert (r->normalized_string () == c->normalized_string ()); + assert (r->token () == c->token ()); + assert (r->name () == c->name ()); + assert (r->name_token () == c->name_token ()); + assert (r->name_tokens () == c->name_tokens ()); + assert (r->ncname () == c->ncname ()); + assert (r->language () == c->language ()); + + // qualified name + // + assert (r->qname () == c->qname ()); + + // ID/IDREF + // + assert (r->id () == c->id ()); + assert (r->id_ref () == c->id_ref ()); + assert (r->id_refs () == c->id_refs ()); + + // URI + // + assert (r->any_uri () == c->any_uri ()); + + // binary + // + assert (r->base64_binary () == c->base64_binary ()); + assert (r->hex_binary () == c->hex_binary ()); + + // date/time + // + assert (r->date () == c->date ()); + assert (r->date_time () == c->date_time ()); + assert (r->duration () == c->duration ()); + assert (r->day () == c->day ()); + assert (r->month () == c->month ()); + assert (r->month_day () == c->month_day ()); + assert (r->year () == c->year ()); + assert (r->year_month () == c->year_month ()); + assert (r->time () == c->time ()); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/binary/polymorphic/test.xml b/xsd-tests/cxx/tree/binary/polymorphic/test.xml new file mode 100644 index 0000000..ad3a403 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/polymorphic/test.xml @@ -0,0 +1,92 @@ + + + 1 2 3 + + abc + + left + + + aaa + + + + aaa + bbb + c + cc + ccc + + + + + 65 + 66 + -222 + 57005 + -57005 + 3735928559 + -3735928559 + 16045690984833335023 + -3735928559 + -3735928559 + 3735928559 + 3735928559 + -3735928559 + + + + true + + + + 1234.1234 + 12345678.12345678 + 1234567812345678.1234567812345678 + + + + string + normalized string + one two three + name + name-token + name tokens + ncname + en-us + + + xsi:schemaLocation + + + + elements1 + elements2 + elements1 + elements1 elements2 + + + + http://www.codesynthesis.com + + + + YmFzZTY0IGJpbmFyeQ== + 6865782052696E617279 + + + + 2001-10-26+02:00 + 2001-10-26T21:32:52+02:00 + P1Y2M3DT5H20M30S + ---01+02:00 + --11+02:00 + --11-02+02:00 + 2001+02:00 + 2001-11+02:00 + + + + diff --git a/xsd-tests/cxx/tree/binary/polymorphic/test.xsd b/xsd-tests/cxx/tree/binary/polymorphic/test.xsd new file mode 100644 index 0000000..8c214e5 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/polymorphic/test.xsd @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/binary/xdr-ordered/buildfile b/xsd-tests/cxx/tree/binary/xdr-ordered/buildfile new file mode 100644 index 0000000..09414c7 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/xdr-ordered/buildfile @@ -0,0 +1,28 @@ +# file : cxx/tree/binary/xdr-ordered/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +if ($cxx.target.class == 'linux') + import libs += libtirpc%lib{tirpc} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-insertion 'XDR' \ + --generate-extraction 'XDR' \ + --generate-comparison \ + --ordered-type-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/binary/xdr-ordered/driver.cxx b/xsd-tests/cxx/tree/binary/xdr-ordered/driver.cxx new file mode 100644 index 0000000..d61a645 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/xdr-ordered/driver.cxx @@ -0,0 +1,206 @@ +// file : tests/cxx/tree/binary/xdr-ordered/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test non-polymorphic ordered binary serialization to XDR. +// +// Note: just a copy of xdr test with --ordered-type-all option. +// + +#include // std::auto_ptr/unique_ptr +#include // std::memcpy +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +extern "C" int +overflow (void* p, char* buf, int in) +{ + xml_schema::buffer* dst (reinterpret_cast (p)); + + size_t n (static_cast (in)), size (dst->size ()); + dst->size (size + n); + memcpy (dst->data () + size, buf, n); + + return static_cast (n); +} + +struct underflow_info +{ + xml_schema::buffer* buf; + std::size_t pos; +}; + +extern "C" int +underflow (void* p, char* buf, int in) +{ + underflow_info* ui (reinterpret_cast (p)); + + size_t n (static_cast (in)), size (ui->buf->size () - ui->pos); + n = size > n ? n : size; + + memcpy (buf, ui->buf->data () + ui->pos, n); + ui->pos += n; + + return static_cast (n); +} + +// The xdrrec_create function (used below) has slightly different +// prototypes on different platforms. To make this test portable +// we will need to cast the actual function to the following common +// prototype. +// +extern "C" +typedef void (*xdrrec_create_p) ( + XDR*, + unsigned int write_size, + unsigned int read_size, + void* user_data, + int (*read) (void* user_data, char* buf, int n), + int (*write) (void* user_data, char* buf, int n)); + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + xdrrec_create_p xdrrec_create_ = + reinterpret_cast (::xdrrec_create); + + // Save to an XDR stream. + // + XDR xdr; + xml_schema::buffer buf; + xdrrec_create_ (&xdr, 0, 0, reinterpret_cast (&buf), 0, &overflow); + xdr.x_op = XDR_ENCODE; + xsd::cxx::tree::ostream oxdr (xdr); + oxdr << *r; + xdrrec_endofrecord (&xdr, true); // flush the data + xdr_destroy (&xdr); + + // Load from an XDR stream. + // + underflow_info ui; + ui.buf = &buf; + ui.pos = 0; + xdrrec_create_ (&xdr, 0, 0, reinterpret_cast (&ui), &underflow, 0); + xdr.x_op = XDR_DECODE; + xdrrec_skiprecord (&xdr); + xsd::cxx::tree::istream ixdr (xdr); + XSD_AUTO_PTR c (new type (ixdr)); + xdr_destroy (&xdr); + + // Compare the two. + // + assert (r->list () == c->list ()); + assert (r->union_ () == c->union_ ()); + assert (r->enumeration () == c->enumeration ()); + + type::complex_sequence rs (r->complex ()), cs (c->complex ()); + + for (type::complex_iterator ri (rs.begin ()), ci (cs.begin ()); + ri != rs.end () && ci != rs.end (); ++ri, ++ci) + { + assert (ri->a () == ci->a ()); + if (ri->b ()) + assert (ri->b () == ci->b ()); + assert (ri->c () == ci->c ()); + + assert (ri->x () == ci->x ()); + if (ri->y ()) + assert (ri->y () == ci->y ()); + } + + // integers + // + assert (r->byte () == c->byte ()); + assert (r->unsigned_byte () == c->unsigned_byte ()); + assert (r->short_ () == c->short_ ()); + assert (r->unsigned_short () == c->unsigned_short ()); + assert (r->int_ () == c->int_ ()); + assert (r->unsigned_int () == c->unsigned_int ()); + assert (r->long_ () == c->long_ ()); + assert (r->unsigned_long () == c->unsigned_long ()); + assert (r->integer () == c->integer ()); + assert (r->non_positive_integer () == c->non_positive_integer ()); + assert (r->non_negative_integer () == c->non_negative_integer ()); + assert (r->positive_integer () == c->positive_integer ()); + assert (r->negative_integer () == c->negative_integer ()); + + // boolean + // + assert (r->boolean () == c->boolean ()); + + // floats + // + assert (r->float_ () == c->float_ ()); + assert (r->double_ () == c->double_ ()); + assert (r->decimal () == c->decimal ()); + + // strings + // + assert (r->string () == c->string ()); + assert (r->normalized_string () == c->normalized_string ()); + assert (r->token () == c->token ()); + assert (r->name () == c->name ()); + assert (r->name_token () == c->name_token ()); + assert (r->name_tokens () == c->name_tokens ()); + assert (r->ncname () == c->ncname ()); + assert (r->language () == c->language ()); + + // qualified name + // + assert (r->qname () == c->qname ()); + + // ID/IDREF + // + assert (r->id () == c->id ()); + assert (r->id_ref () == c->id_ref ()); + assert (r->id_refs () == c->id_refs ()); + + // URI + // + assert (r->any_uri () == c->any_uri ()); + + // binary + // + assert (r->base64_binary () == c->base64_binary ()); + assert (r->hex_binary () == c->hex_binary ()); + + // date/time + // + assert (r->date () == c->date ()); + assert (r->date_time () == c->date_time ()); + assert (r->duration () == c->duration ()); + assert (r->day () == c->day ()); + assert (r->month () == c->month ()); + assert (r->month_day () == c->month_day ()); + assert (r->year () == c->year ()); + assert (r->year_month () == c->year_month ()); + assert (r->time () == c->time ()); + + // anySimpleType + // + assert (!r->any_simple_type_attr ().text_content ().empty ()); + assert (r->any_simple_type_attr () == c->any_simple_type_attr ()); + + assert (!r->any_simple_type ().text_content ().empty ()); + assert (r->any_simple_type () == c->any_simple_type ()); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/binary/xdr-ordered/test.xml b/xsd-tests/cxx/tree/binary/xdr-ordered/test.xml new file mode 100644 index 0000000..5cedd98 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/xdr-ordered/test.xml @@ -0,0 +1,93 @@ + + + 1 2 3 + + abc + + left + + + aaa + + + aaa + bbb + c + cc + ccc + + + + + 65 + 66 + -222 + 57005 + -57005 + 3735928559 + -3735928559 + 16045690984833335023 + -3735928559 + -3735928559 + 3735928559 + 3735928559 + -3735928559 + + + + true + + + + 1234.1234 + 12345678.12345678 + 1234567812345678.1234567812345678 + + + + string + normalized string + one two three + name + name-token + name tokens + ncname + en-us + + + xsi:schemaLocation + + + + elements1 + elements2 + elements1 + elements1 elements2 + + + + http://www.codesynthesis.com + + + + YmFzZTY0IGJpbmFyeQ== + 6865782052696E617279 + + + + 2001-10-26+02:00 + 2001-10-26T21:32:52+02:00 + P1Y2M3DT5H20M30S + ---01+02:00 + --11+02:00 + --11-02+02:00 + 2001+02:00 + 2001-11+02:00 + + + any simple content in element + + diff --git a/xsd-tests/cxx/tree/binary/xdr-ordered/test.xsd b/xsd-tests/cxx/tree/binary/xdr-ordered/test.xsd new file mode 100644 index 0000000..0629e94 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/xdr-ordered/test.xsd @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/binary/xdr/buildfile b/xsd-tests/cxx/tree/binary/xdr/buildfile new file mode 100644 index 0000000..b8fc2f4 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/xdr/buildfile @@ -0,0 +1,27 @@ +# file : cxx/tree/binary/xdr/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +if ($cxx.target.class == 'linux') + import libs += libtirpc%lib{tirpc} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-insertion 'XDR' \ + --generate-extraction 'XDR' \ + --generate-comparison \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/binary/xdr/driver.cxx b/xsd-tests/cxx/tree/binary/xdr/driver.cxx new file mode 100644 index 0000000..04606ea --- /dev/null +++ b/xsd-tests/cxx/tree/binary/xdr/driver.cxx @@ -0,0 +1,204 @@ +// file : tests/cxx/tree/binary/xdr/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test non-polymorphic binary serialization to XDR. +// + +#include // std::auto_ptr/unique_ptr +#include // std::memcpy +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +extern "C" int +overflow (void* p, char* buf, int in) +{ + xml_schema::buffer* dst (reinterpret_cast (p)); + + size_t n (static_cast (in)), size (dst->size ()); + dst->size (size + n); + memcpy (dst->data () + size, buf, n); + + return static_cast (n); +} + +struct underflow_info +{ + xml_schema::buffer* buf; + std::size_t pos; +}; + +extern "C" int +underflow (void* p, char* buf, int in) +{ + underflow_info* ui (reinterpret_cast (p)); + + size_t n (static_cast (in)), size (ui->buf->size () - ui->pos); + n = size > n ? n : size; + + memcpy (buf, ui->buf->data () + ui->pos, n); + ui->pos += n; + + return static_cast (n); +} + +// The xdrrec_create function (used below) has slightly different +// prototypes on different platforms. To make this test portable +// we will need to cast the actual function to the following common +// prototype. +// +extern "C" +typedef void (*xdrrec_create_p) ( + XDR*, + unsigned int write_size, + unsigned int read_size, + void* user_data, + int (*read) (void* user_data, char* buf, int n), + int (*write) (void* user_data, char* buf, int n)); + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + xdrrec_create_p xdrrec_create_ = + reinterpret_cast (::xdrrec_create); + + // Save to an XDR stream. + // + XDR xdr; + xml_schema::buffer buf; + xdrrec_create_ (&xdr, 0, 0, reinterpret_cast (&buf), 0, &overflow); + xdr.x_op = XDR_ENCODE; + xsd::cxx::tree::ostream oxdr (xdr); + oxdr << *r; + xdrrec_endofrecord (&xdr, true); // flush the data + xdr_destroy (&xdr); + + // Load from an XDR stream. + // + underflow_info ui; + ui.buf = &buf; + ui.pos = 0; + xdrrec_create_ (&xdr, 0, 0, reinterpret_cast (&ui), &underflow, 0); + xdr.x_op = XDR_DECODE; + xdrrec_skiprecord (&xdr); + xsd::cxx::tree::istream ixdr (xdr); + XSD_AUTO_PTR c (new type (ixdr)); + xdr_destroy (&xdr); + + // Compare the two. + // + assert (r->list () == c->list ()); + assert (r->union_ () == c->union_ ()); + assert (r->enumeration () == c->enumeration ()); + + type::complex_sequence rs (r->complex ()), cs (c->complex ()); + + for (type::complex_iterator ri (rs.begin ()), ci (cs.begin ()); + ri != rs.end () && ci != rs.end (); ++ri, ++ci) + { + assert (ri->a () == ci->a ()); + if (ri->b ()) + assert (ri->b () == ci->b ()); + assert (ri->c () == ci->c ()); + + assert (ri->x () == ci->x ()); + if (ri->y ()) + assert (ri->y () == ci->y ()); + } + + // integers + // + assert (r->byte () == c->byte ()); + assert (r->unsigned_byte () == c->unsigned_byte ()); + assert (r->short_ () == c->short_ ()); + assert (r->unsigned_short () == c->unsigned_short ()); + assert (r->int_ () == c->int_ ()); + assert (r->unsigned_int () == c->unsigned_int ()); + assert (r->long_ () == c->long_ ()); + assert (r->unsigned_long () == c->unsigned_long ()); + assert (r->integer () == c->integer ()); + assert (r->non_positive_integer () == c->non_positive_integer ()); + assert (r->non_negative_integer () == c->non_negative_integer ()); + assert (r->positive_integer () == c->positive_integer ()); + assert (r->negative_integer () == c->negative_integer ()); + + // boolean + // + assert (r->boolean () == c->boolean ()); + + // floats + // + assert (r->float_ () == c->float_ ()); + assert (r->double_ () == c->double_ ()); + assert (r->decimal () == c->decimal ()); + + // strings + // + assert (r->string () == c->string ()); + assert (r->normalized_string () == c->normalized_string ()); + assert (r->token () == c->token ()); + assert (r->name () == c->name ()); + assert (r->name_token () == c->name_token ()); + assert (r->name_tokens () == c->name_tokens ()); + assert (r->ncname () == c->ncname ()); + assert (r->language () == c->language ()); + + // qualified name + // + assert (r->qname () == c->qname ()); + + // ID/IDREF + // + assert (r->id () == c->id ()); + assert (r->id_ref () == c->id_ref ()); + assert (r->id_refs () == c->id_refs ()); + + // URI + // + assert (r->any_uri () == c->any_uri ()); + + // binary + // + assert (r->base64_binary () == c->base64_binary ()); + assert (r->hex_binary () == c->hex_binary ()); + + // date/time + // + assert (r->date () == c->date ()); + assert (r->date_time () == c->date_time ()); + assert (r->duration () == c->duration ()); + assert (r->day () == c->day ()); + assert (r->month () == c->month ()); + assert (r->month_day () == c->month_day ()); + assert (r->year () == c->year ()); + assert (r->year_month () == c->year_month ()); + assert (r->time () == c->time ()); + + // anySimpleType + // + assert (!r->any_simple_type_attr ().text_content ().empty ()); + assert (r->any_simple_type_attr () == c->any_simple_type_attr ()); + + assert (!r->any_simple_type ().text_content ().empty ()); + assert (r->any_simple_type () == c->any_simple_type ()); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/binary/xdr/test.xml b/xsd-tests/cxx/tree/binary/xdr/test.xml new file mode 100644 index 0000000..5cedd98 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/xdr/test.xml @@ -0,0 +1,93 @@ + + + 1 2 3 + + abc + + left + + + aaa + + + aaa + bbb + c + cc + ccc + + + + + 65 + 66 + -222 + 57005 + -57005 + 3735928559 + -3735928559 + 16045690984833335023 + -3735928559 + -3735928559 + 3735928559 + 3735928559 + -3735928559 + + + + true + + + + 1234.1234 + 12345678.12345678 + 1234567812345678.1234567812345678 + + + + string + normalized string + one two three + name + name-token + name tokens + ncname + en-us + + + xsi:schemaLocation + + + + elements1 + elements2 + elements1 + elements1 elements2 + + + + http://www.codesynthesis.com + + + + YmFzZTY0IGJpbmFyeQ== + 6865782052696E617279 + + + + 2001-10-26+02:00 + 2001-10-26T21:32:52+02:00 + P1Y2M3DT5H20M30S + ---01+02:00 + --11+02:00 + --11-02+02:00 + 2001+02:00 + 2001-11+02:00 + + + any simple content in element + + diff --git a/xsd-tests/cxx/tree/binary/xdr/test.xsd b/xsd-tests/cxx/tree/binary/xdr/test.xsd new file mode 100644 index 0000000..0629e94 --- /dev/null +++ b/xsd-tests/cxx/tree/binary/xdr/test.xsd @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/buildfile b/xsd-tests/cxx/tree/buildfile new file mode 100644 index 0000000..cfaf0bd --- /dev/null +++ b/xsd-tests/cxx/tree/buildfile @@ -0,0 +1,6 @@ +# file : cxx/tree/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Exclude tests which depend on not yet packaged libraries. +# +./: {*/ -binary/} diff --git a/xsd-tests/cxx/tree/built-in/.gitignore b/xsd-tests/cxx/tree/built-in/.gitignore new file mode 100644 index 0000000..f86b7a2 --- /dev/null +++ b/xsd-tests/cxx/tree/built-in/.gitignore @@ -0,0 +1 @@ +types.?xx diff --git a/xsd-tests/cxx/tree/built-in/buildfile b/xsd-tests/cxx/tree/built-in/buildfile new file mode 100644 index 0000000..8ee8585 --- /dev/null +++ b/xsd-tests/cxx/tree/built-in/buildfile @@ -0,0 +1,25 @@ +# file : cxx/tree/build-in/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -types} {hxx ixx cxx}{types} $libs testscript + +<{hxx ixx cxx}{types}>: xsd{types} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-ostream \ + --generate-serialization \ + --char-type char \ + --generate-default-ctor \ + --generate-from-base-ctor \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/built-in/driver.cxx b/xsd-tests/cxx/tree/built-in/driver.cxx new file mode 100644 index 0000000..4141290 --- /dev/null +++ b/xsd-tests/cxx/tree/built-in/driver.cxx @@ -0,0 +1,93 @@ +// file : cxx/tree/built-in/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test built-in type mapping. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + + +#include "types.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 4) + { + cerr << "usage: " << argv[0] << " elements.xml attributes.xml inherited.xml" << endl; + return 1; + } + + XSD_AUTO_PTR elements ( + xmlns::test::elements (argv[1])); + + XSD_AUTO_PTR attributes ( + xmlns::test::attributes (argv[2])); + + XSD_AUTO_PTR inherited ( + xmlns::test::inherited (argv[3])); + + cerr << "elements:" << *elements << endl + << endl + << "attributes:" << *attributes << endl + << endl + << "inherited:" << *inherited << endl; + + // Test parsing/serialization. + // + + xml_schema::namespace_infomap map; + + map["test"].name = "http://www.codesynthesis.com/xmlns/test"; + map["test"].schema = "types.xsd"; + + { + std::ostringstream ostr; + xmlns::test::elements (ostr, *elements, map); + + std::istringstream istr (ostr.str ()); + XSD_AUTO_PTR elements1 ( + xmlns::test::elements (istr)); + + std::ostringstream ostr1; + xmlns::test::elements (ostr1, *elements1, map); + + if (ostr.str () != ostr1.str ()) + return 1; + } + + { + std::ostringstream ostr; + xmlns::test::attributes (ostr, *attributes, map); + + std::istringstream istr (ostr.str ()); + XSD_AUTO_PTR attributes1 ( + xmlns::test::attributes (istr)); + + std::ostringstream ostr1; + xmlns::test::attributes (ostr1, *attributes1, map); + + if (ostr.str () != ostr1.str ()) + return 1; + } + + { + std::ostringstream ostr; + xmlns::test::inherited (ostr, *inherited, map); + + std::istringstream istr (ostr.str ()); + XSD_AUTO_PTR inherited1 ( + xmlns::test::inherited (istr)); + + std::ostringstream ostr1; + xmlns::test::inherited (ostr1, *inherited1, map); + + if (ostr.str () != ostr1.str ()) + return 1; + } +} diff --git a/xsd-tests/cxx/tree/built-in/testscript b/xsd-tests/cxx/tree/built-in/testscript new file mode 100644 index 0000000..4dae039 --- /dev/null +++ b/xsd-tests/cxx/tree/built-in/testscript @@ -0,0 +1,394 @@ +# file : cxx/tree/any-type/testscript +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +: types +: +{ + cat <=elements.xml; + + + + + 65 + 66 + -222 + 57005 + -57005 + 3735928559 + -3735928559 + 16045690984833335023 + -3735928559 + -3735928559 + 3735928559 + 3735928559 + -3735928559 + + + + true + + + + 1234.1234 + 12345678.12345678 + 12345678.12345678 + + + + string + normalized + string + + one + two three + name + name-token + name tokens + ncname + en-us + + + xsi:schemaLocation + + + + elements1 + elements2 + elements1 + elements1 elements2 + + + + http://www.codesynthesis.com + + + + YmFzZTY0IGJpbmFyeQ== + 6865782052696E617279 + + + + 2001-10-26+02:00 + 2001-10-26T21:32:52+02:00 + P1Y2M3DT5H20M30S + ---01+02:00 + --11+02:00 + --11-02+02:00 + 2001+02:00 + 2001-11+02:00 + + + + + + + + EOI + + cat <=attributes.xml; + + + EOI + + cat <=inherited.xml; + + + + + 65 + 66 + -222 + 57005 + -57005 + 3735928559 + -3735928559 + 16045690984833335023 + -3735928559 + -3735928559 + 3735928559 + 3735928559 + -3735928559 + + + + true + + + + 1234.1234 + 12345678.12345678 + 12345678.12345678 + + + + string + normalized + string + + one + two three + name + name-token + name tokens + ncname + en-us + + + xsi:schemaLocation + + + + elements1 + elements2 + elements1 + elements1 elements2 + + + + http://www.codesynthesis.com + + + + YmFzZTY0IGJpbmFyeQ== + 6865782052696E617279 + + + + 2001-10-26+02:00 + 2001-10-26T21:32:52+02:00 + P1Y2M3DT5H20M30S + ---01+02:00 + --11+02:00 + --11-02+02:00 + 2001+02:00 + 2001-11+02:00 + + + + + + + + EOI + + ln -s $src_base/types.xsd ./; + + $* elements.xml attributes.xml inherited.xml 2>>EOE + elements: + byte: A + unsigned_byte: B + short: -222 + unsigned_short: 57005 + int: -57005 + unsigned_int: 3735928559 + long: -3735928559 + unsigned_long: 16045690984833335023 + integer: -3735928559 + non_positive_integer: -3735928559 + non_negative_integer: 3735928559 + positive_integer: 3735928559 + negative_integer: -3735928559 + boolean: 1 + float: 1234.12 + double: 1.23457e+07 + decimal: 1.23457e+07 + string: string + normalized_string: normalized string + token: one two three + name: name + name_token: name-token + name_tokens: name tokens + ncname: ncname + language: en-us + qname: http://www.w3.org/2001/XMLSchema-instance#schemaLocation + id: elements1 + id: elements2 + id_ref: elements1 + id_refs: elements1 elements2 + any_uri: http://www.codesynthesis.com + base64_binary: YmFzZTY0IGJpbmFyeQ== + + hex_binary: 6865782052696E617279 + date: 2001-10-26+02:00 + date_time: 2001-10-26T21:32:52.000000+02:00 + duration: P1Y2M3DT5H20M30.000000S + day: 01+02:00 + month: 11+02:00 + month_day: 11-02+02:00 + year: 2001+02:00 + year_month: 2001-11+02:00 + time: 21:32:52.000000+02:00 + + attributes: + byte: A + unsigned_byte: B + short: -222 + unsigned_short: 57005 + int: -57005 + unsigned_int: 3735928559 + long: -3735928559 + unsigned_long: 16045690984833335023 + integer: -3735928559 + non_positive_integer: -3735928559 + non_negative_integer: 3735928559 + positive_integer: 3735928559 + negative_integer: -3735928559 + boolean: 0 + float: 1234.12 + double: 1.23457e+07 + decimal: 1.23457e+07 + string: string + normalized_string: normalized string + token: one two three + name: name + name_token: name-token + name_tokens: name tokens + ncname: ncname + language: en-us + qname: http://www.w3.org/2001/XMLSchema-instance#schemaLocation + id: attributes + id_ref: attributes + id_refs: attributes + any_uri: http://www.codesynthesis.com + base64_binary: YmFzZTY0IGJpbmFyeQ== + + hex_binary: 6865782052696E617279 + date: 2001-10-26+02:00 + date_time: 2001-10-26T21:32:52.000000+02:00 + duration: P1Y2M3DT5H20M30.000000S + day: 01+02:00 + month: 11+02:00 + month_day: 11-02+02:00 + year: 2001+02:00 + year_month: 2001-11+02:00 + time: 21:32:52.000000+02:00 + + inherited: + byte: A + unsigned_byte: B + short: -222 + unsigned_short: 57005 + int: -57005 + unsigned_int: 3735928559 + long: -3735928559 + unsigned_long: 16045690984833335023 + integer: -3735928559 + non_positive_integer: -3735928559 + non_negative_integer: 3735928559 + positive_integer: 3735928559 + negative_integer: -3735928559 + boolean: 1 + float: 1234.12 + double: 1.23457e+07 + decimal: 1.23457e+07 + string: string + normalized_string: normalized string + token: one two three + name: name + name_token: name-token + name_tokens: name tokens + ncname: ncname + language: en-us + qname: http://www.w3.org/2001/XMLSchema-instance#schemaLocation + id: elements1 + id: elements2 + id_ref: elements1 + id_refs: elements1 elements2 + any_uri: http://www.codesynthesis.com + base64_binary: YmFzZTY0IGJpbmFyeQ== + + hex_binary: 6865782052696E617279 + date: 2001-10-26+02:00 + date_time: 2001-10-26T21:32:52.000000+02:00 + duration: P1Y2M3DT5H20M30.000000S + day: 01+02:00 + month: 11+02:00 + month_day: 11-02+02:00 + year: 2001+02:00 + year_month: 2001-11+02:00 + time: 21:32:52.000000+02:00 + EOE +} diff --git a/xsd-tests/cxx/tree/built-in/types.xsd b/xsd-tests/cxx/tree/built-in/types.xsd new file mode 100644 index 0000000..22582cb --- /dev/null +++ b/xsd-tests/cxx/tree/built-in/types.xsd @@ -0,0 +1,460 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/chameleon/.gitignore b/xsd-tests/cxx/tree/chameleon/.gitignore new file mode 100644 index 0000000..4ec7484 --- /dev/null +++ b/xsd-tests/cxx/tree/chameleon/.gitignore @@ -0,0 +1 @@ +includer.?xx diff --git a/xsd-tests/cxx/tree/chameleon/buildfile b/xsd-tests/cxx/tree/chameleon/buildfile new file mode 100644 index 0000000..cec3b01 --- /dev/null +++ b/xsd-tests/cxx/tree/chameleon/buildfile @@ -0,0 +1,24 @@ +# file : cxx/tree/chameleon/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -includer} {hxx ixx cxx}{includer} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{includer}>: xsd{includer includee} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-ostream \ + --root-element root \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/chameleon/driver.cxx b/xsd-tests/cxx/tree/chameleon/driver.cxx new file mode 100644 index 0000000..c22ca55 --- /dev/null +++ b/xsd-tests/cxx/tree/chameleon/driver.cxx @@ -0,0 +1,35 @@ +// file : cxx/tree/chameleon/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test chameleon inclusion. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "includer.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + cout << *r << endl; + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/chameleon/includee.xsd b/xsd-tests/cxx/tree/chameleon/includee.xsd new file mode 100644 index 0000000..531a7d0 --- /dev/null +++ b/xsd-tests/cxx/tree/chameleon/includee.xsd @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/chameleon/includer.xsd b/xsd-tests/cxx/tree/chameleon/includer.xsd new file mode 100644 index 0000000..a1c850a --- /dev/null +++ b/xsd-tests/cxx/tree/chameleon/includer.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/chameleon/output b/xsd-tests/cxx/tree/chameleon/output new file mode 100644 index 0000000..c40f715 --- /dev/null +++ b/xsd-tests/cxx/tree/chameleon/output @@ -0,0 +1,3 @@ + +a: a +b: b diff --git a/xsd-tests/cxx/tree/chameleon/test.xml b/xsd-tests/cxx/tree/chameleon/test.xml new file mode 100644 index 0000000..12ff279 --- /dev/null +++ b/xsd-tests/cxx/tree/chameleon/test.xml @@ -0,0 +1,8 @@ + + + a + b + + diff --git a/xsd-tests/cxx/tree/comparison/buildfile b/xsd-tests/cxx/tree/comparison/buildfile new file mode 100644 index 0000000..507a703 --- /dev/null +++ b/xsd-tests/cxx/tree/comparison/buildfile @@ -0,0 +1,22 @@ +# file : cxx/tree/comparison/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-comparison \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/comparison/driver.cxx b/xsd-tests/cxx/tree/comparison/driver.cxx new file mode 100644 index 0000000..aa7b66d --- /dev/null +++ b/xsd-tests/cxx/tree/comparison/driver.cxx @@ -0,0 +1,38 @@ +// file : cxx/tree/comparison/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test generated comparison operators. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + type::complex_sequence s (r->complex ()); + + assert (s[0] == s[0]); + assert (s[0] != s[1]); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/comparison/test.xml b/xsd-tests/cxx/tree/comparison/test.xml new file mode 100644 index 0000000..b5d8158 --- /dev/null +++ b/xsd-tests/cxx/tree/comparison/test.xml @@ -0,0 +1,19 @@ + + + + 123 + abc + abc + def + + + + 123 + abc + abc + xyz + + + diff --git a/xsd-tests/cxx/tree/comparison/test.xsd b/xsd-tests/cxx/tree/comparison/test.xsd new file mode 100644 index 0000000..c234add --- /dev/null +++ b/xsd-tests/cxx/tree/comparison/test.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/compilation/buildfile b/xsd-tests/cxx/tree/compilation/buildfile new file mode 100644 index 0000000..bec2b4b --- /dev/null +++ b/xsd-tests/cxx/tree/compilation/buildfile @@ -0,0 +1,20 @@ +# file : cxx/tree/compilation/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/compilation/driver.cxx b/xsd-tests/cxx/tree/compilation/driver.cxx new file mode 100644 index 0000000..5c5ab39 --- /dev/null +++ b/xsd-tests/cxx/tree/compilation/driver.cxx @@ -0,0 +1,116 @@ +// file : cxx/tree/compilation/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Make sure the runtime library compiles by explicitly instantiating +// all the types. +// + +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +template class xsd::cxx::tree::simple_type; + +// String types. +// +template class xsd::cxx::tree::string< char, xml_schema::simple_type >; +template class xsd::cxx::tree::normalized_string< char, xml_schema::string >; +template class xsd::cxx::tree::token< char, xml_schema::normalized_string >; +template class xsd::cxx::tree::name< char, xml_schema::token >; +template class xsd::cxx::tree::nmtoken< char, xml_schema::token >; +template class xsd::cxx::tree::nmtokens< char, xml_schema::simple_type, xml_schema::nmtoken >; +template class xsd::cxx::tree::ncname< char, xml_schema::name >; +template class xsd::cxx::tree::language< char, xml_schema::token >; + +// ID/IDREF. +// +template class xsd::cxx::tree::id< char, xml_schema::ncname >; +template class xsd::cxx::tree::idref< char, xml_schema::ncname, xml_schema::type >; +template class xsd::cxx::tree::idrefs< char, xml_schema::simple_type, xml_schema::idref >; + +// URI. +// +template class xsd::cxx::tree::uri< char, xml_schema::simple_type >; + +// Qualified name. +// +template class xsd::cxx::tree::qname< char, xml_schema::simple_type, xml_schema::uri, xml_schema::ncname >; + +// Binary. +// +template class xsd::cxx::tree::buffer< char >; +template class xsd::cxx::tree::base64_binary< char, xml_schema::simple_type >; +template class xsd::cxx::tree::hex_binary< char, xml_schema::simple_type >; + +// Date/time. +// +template class xsd::cxx::tree::date< char, xml_schema::simple_type >; +template class xsd::cxx::tree::date_time< char, xml_schema::simple_type >; +template class xsd::cxx::tree::duration< char, xml_schema::simple_type >; +template class xsd::cxx::tree::gday< char, xml_schema::simple_type >; +template class xsd::cxx::tree::gmonth< char, xml_schema::simple_type >; +template class xsd::cxx::tree::gmonth_day< char, xml_schema::simple_type >; +template class xsd::cxx::tree::gyear< char, xml_schema::simple_type >; +template class xsd::cxx::tree::gyear_month< char, xml_schema::simple_type >; +template class xsd::cxx::tree::time< char, xml_schema::simple_type >; + +// Entity. +// +template class xsd::cxx::tree::entity< char, xml_schema::ncname >; +template class xsd::cxx::tree::entities< char, xml_schema::simple_type, xml_schema::entity >; + +// Namespace information and list stream. Used in +// serialization functions. +// +template class xsd::cxx::xml::dom::namespace_info < char >; +template class xsd::cxx::xml::dom::namespace_infomap < char >; +template class xsd::cxx::tree::list_stream < char >; + +// Flags and properties. +// +template class xsd::cxx::tree::properties< char >; + +// Exceptions. +// +template class xsd::cxx::tree::exception< char >; +template class xsd::cxx::tree::parsing< char >; +template class xsd::cxx::tree::expected_element< char >; +template class xsd::cxx::tree::unexpected_element< char >; +template class xsd::cxx::tree::expected_attribute< char >; +template class xsd::cxx::tree::unexpected_enumerator< char >; +template class xsd::cxx::tree::expected_text_content< char >; +template class xsd::cxx::tree::no_type_info< char >; +template class xsd::cxx::tree::not_derived< char >; +template class xsd::cxx::tree::duplicate_id< char >; +template class xsd::cxx::tree::serialization< char >; +template class xsd::cxx::tree::no_prefix_mapping< char >; +template class xsd::cxx::tree::bounds< char >; + +// Parsing/serialization diagnostics. +// +template class xsd::cxx::tree::error< char >; +template class xsd::cxx::tree::diagnostics< char >; + +// Error handler interface. +// +template class xsd::cxx::xml::error_handler< char >; + + +// +// +template class xsd::cxx::tree::fundamental_base; +template class xsd::cxx::tree::one; +template class xsd::cxx::tree::one; +template class xsd::cxx::tree::optional; +template class xsd::cxx::tree::optional; +template class xsd::cxx::tree::sequence; +template class xsd::cxx::tree::sequence; + + +int +main () +{ +} diff --git a/xsd-tests/cxx/tree/compilation/test.xsd b/xsd-tests/cxx/tree/compilation/test.xsd new file mode 100644 index 0000000..07bebc7 --- /dev/null +++ b/xsd-tests/cxx/tree/compilation/test.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/complex/ctor/buildfile b/xsd-tests/cxx/tree/complex/ctor/buildfile new file mode 100644 index 0000000..53e32b7 --- /dev/null +++ b/xsd-tests/cxx/tree/complex/ctor/buildfile @@ -0,0 +1,25 @@ +# file : cxx/tree/complex/ctor/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-default-ctor \ + --generate-from-base-ctor \ + --generate-doxygen \ + --generate-polymorphic \ + --polymorphic-type-all \ + --generate-comparison \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/complex/ctor/driver.cxx b/xsd-tests/cxx/tree/complex/ctor/driver.cxx new file mode 100644 index 0000000..7beaa93 --- /dev/null +++ b/xsd-tests/cxx/tree/complex/ctor/driver.cxx @@ -0,0 +1,122 @@ +// file : cxx/tree/complex/ctor/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test generation of varous complex type constructors. +// + +#include +#include + +#include "test.hxx" + +#ifdef XSD_CXX11 +# include // std::move +# define XSD_MOVE(x) std::move(x) +#else +# define XSD_MOVE(x) x +#endif + +using namespace std; +using namespace test; + +int +main () +{ + // Test case A. + // + { + a_base b1; + a_base b2 ("abc"); // empty ultimate base + required + a_base b3 ("abc", "foo"); // ultimate base + required + + a_derived a1; + a_derived a2 ("foo", "bar"); // empty ultimate base + required + a_derived a3 (b3, "bar"); // base + required + a_derived a4 ("abc", "foo", "bar"); // ultimate base + required + } + + // Test case B. + // + { + b_simple s ("base"); + b_base b ("base", "foo"); + b_derived d ("base", "foo", "bar"); + b_type t ("base"); + } + + // Test case C. + // + { + c_simple s (c_enum::a); + c_base b (c_enum::a, "foo"); + c_derived d (c_enum::a, "foo", "bar"); + c_type t (c_enum::a); + } + + // Test case D. + // + { + d_simple s (1); + d_base b (1, "foo"); + d_derived d (1, "foo", "bar"); + d_type t (1); + } + + // Test case E. + // + { + // e_base + // + e_base b1 (1, "foo", e_complex_type ("bar")); + + XSD_AUTO_PTR c2 (new e_complex_type ("bar")); + e_base b2 (1, "foo", XSD_MOVE (c2)); + + XSD_AUTO_PTR s3 (new e_simple_type ("foo")); + XSD_AUTO_PTR c3 (new e_complex_type ("bar")); + e_base b3 (1, XSD_MOVE (s3), XSD_MOVE (c3)); + + assert (b1 == b2); + assert (b1 == b3); + + // e_derived + // + e_derived d1 (1, "foo", e_complex_type ("bar"), + true, "baz", e_complex_type ("biz")); + + XSD_AUTO_PTR c2a (new e_complex_type ("bar")); + XSD_AUTO_PTR c2b (new e_complex_type ("biz")); + e_derived d2 (1, "foo", XSD_MOVE (c2a), true, "baz", XSD_MOVE (c2b)); + + XSD_AUTO_PTR s3a (new e_simple_type ("foo")); + XSD_AUTO_PTR s3b (new xml_schema::string ("baz")); + XSD_AUTO_PTR c3a (new e_complex_type ("bar")); + XSD_AUTO_PTR c3b (new e_complex_type ("biz")); + e_derived d3 (1, + XSD_MOVE (s3a), + XSD_MOVE (c3a), + true, + XSD_MOVE (s3b), + XSD_MOVE (c3b)); + + assert (d1 == d2); + assert (d1 == d3); + + } + + // Test case F. + // + { + f_type f1 (xml_schema::type (), 1, "foo", f_complex_type ("bar")); + + XSD_AUTO_PTR c2 (new f_complex_type ("bar")); + f_type f2 (1, "foo", XSD_MOVE (c2)); + + XSD_AUTO_PTR s3 (new f_simple_type ("foo")); + XSD_AUTO_PTR c3 (new f_complex_type ("bar")); + f_type f3 (1, XSD_MOVE (s3), XSD_MOVE (c3)); + + assert (f1 == f2); + assert (f1 == f3); + } +} diff --git a/xsd-tests/cxx/tree/complex/ctor/test.xsd b/xsd-tests/cxx/tree/complex/ctor/test.xsd new file mode 100644 index 0000000..b8dd95e --- /dev/null +++ b/xsd-tests/cxx/tree/complex/ctor/test.xsd @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/containment/buildfile b/xsd-tests/cxx/tree/containment/buildfile new file mode 100644 index 0000000..1d0272b --- /dev/null +++ b/xsd-tests/cxx/tree/containment/buildfile @@ -0,0 +1,20 @@ +# file : cxx/tree/containment/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-default-ctor \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/containment/driver.cxx b/xsd-tests/cxx/tree/containment/driver.cxx new file mode 100644 index 0000000..65c17fc --- /dev/null +++ b/xsd-tests/cxx/tree/containment/driver.cxx @@ -0,0 +1,118 @@ +// file : cxx/tree/containment/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test tree node containment. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +#ifdef XSD_CXX11 +# include // std::move +# define XSD_MOVE(x) std::move(x) +#else +# define XSD_MOVE(x) x +#endif + +using namespace std; +using namespace test; + +int +main () +{ + // Change of a container in a sub-tree without ID. + // + { + XSD_AUTO_PTR i (new inner ()); + i->ref ("foo"); + + outer o; + o.i (XSD_MOVE (i)); + o.ref ("foo"); + + assert (o.i ()->ref ()->get () == 0); + assert (o.ref ()->get () == 0); + } + + // Change of container in a sub-tree with ID inside. + // + { + XSD_AUTO_PTR i (new inner ()); + inner* p (i.get ()); + i->id ("foo"); + i->ref ("foo"); + assert (i->ref ()->get () == p); + + outer o; + o.i (XSD_MOVE (i)); + o.ref ("foo"); + + assert (o.i ()->ref ()->get () == p); + assert (o.ref ()->get () == p); + } + + // Change of a container in ID. + // + { + XSD_AUTO_PTR id (new xml_schema::id ("foo")); + + inner i; + i.id (XSD_MOVE (id)); + i.ref ("foo"); + assert (i.ref ()->get () == &i); + } + + // Change of a container in a type derived from ID with ID inside. + // + { + XSD_AUTO_PTR id (new id_ex ("foo")); + id_ex* p (id.get ()); + id->id ("bar"); + + inner i; + i.id_ex (XSD_MOVE (id)); + + i.ref ("foo"); + assert (i.ref ()->get () == &i); + + i.ref ("bar"); + assert (i.ref ()->get () == p); + } + + // IDREF lists + // + { + id i1 ("a"), i2 ("b"); + + XSD_AUTO_PTR ic (new ids); + ic->id ().push_back (i1); + ic->id ().push_back (i2); + + XSD_AUTO_PTR r1 (new xml_schema::idrefs); + r1->push_back (xml_schema::idref ("a")); + r1->push_back (xml_schema::idref ("b")); + + XSD_AUTO_PTR r2 (new idref_list); + r2->push_back (xml_schema::idref ("a")); + r2->push_back (xml_schema::idref ("b")); + + XSD_AUTO_PTR rc1 (new idrefs1); + XSD_AUTO_PTR rc2 (new idrefs2); + + rc1->idrefs (XSD_MOVE (r1)); + rc2->idrefs (XSD_MOVE (r2)); + + model m; + m.ids (XSD_MOVE (ic)); + m.idrefs1 (XSD_MOVE (rc1)); + m.idrefs2 (XSD_MOVE (rc2)); + + assert (m.idrefs1 ().idrefs ()[0].get () != 0); + assert (m.idrefs1 ().idrefs ()[1].get () != 0); + + assert (m.idrefs2 ().idrefs ()[0].get () != 0); + assert (m.idrefs2 ().idrefs ()[1].get () != 0); + } +} diff --git a/xsd-tests/cxx/tree/containment/test.xsd b/xsd-tests/cxx/tree/containment/test.xsd new file mode 100644 index 0000000..72c9379 --- /dev/null +++ b/xsd-tests/cxx/tree/containment/test.xsd @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/default/general/buildfile b/xsd-tests/cxx/tree/default/general/buildfile new file mode 100644 index 0000000..4e482ce --- /dev/null +++ b/xsd-tests/cxx/tree/default/general/buildfile @@ -0,0 +1,26 @@ +# file : cxx/tree/default/general/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --generate-ostream \ + --generate-default-ctor \ + --generate-from-base-ctor \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/default/general/driver.cxx b/xsd-tests/cxx/tree/default/general/driver.cxx new file mode 100644 index 0000000..7031636 --- /dev/null +++ b/xsd-tests/cxx/tree/default/general/driver.cxx @@ -0,0 +1,37 @@ +// file : cxx/tree/default/general/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test default attribute/element values. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1], xml_schema::flags::dont_validate)); + + xml_schema::namespace_infomap map; + map["t"].name = "test"; + root (cout, *r, map); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/default/general/output b/xsd-tests/cxx/tree/default/general/output new file mode 100644 index 0000000..396a698 --- /dev/null +++ b/xsd-tests/cxx/tree/default/general/output @@ -0,0 +1,15 @@ + + + + + + + diff --git a/xsd-tests/cxx/tree/default/general/test.xml b/xsd-tests/cxx/tree/default/general/test.xml new file mode 100644 index 0000000..11bd0a7 --- /dev/null +++ b/xsd-tests/cxx/tree/default/general/test.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/xsd-tests/cxx/tree/default/general/test.xsd b/xsd-tests/cxx/tree/default/general/test.xsd new file mode 100644 index 0000000..9d9cd38 --- /dev/null +++ b/xsd-tests/cxx/tree/default/general/test.xsd @@ -0,0 +1,241 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/default/omit/buildfile b/xsd-tests/cxx/tree/default/omit/buildfile new file mode 100644 index 0000000..407ab1e --- /dev/null +++ b/xsd-tests/cxx/tree/default/omit/buildfile @@ -0,0 +1,27 @@ +# file : cxx/tree/default/omit/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --generate-ostream \ + --generate-default-ctor \ + --generate-from-base-ctor \ + --omit-default-attributes \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/default/omit/driver.cxx b/xsd-tests/cxx/tree/default/omit/driver.cxx new file mode 100644 index 0000000..3dcc0d8 --- /dev/null +++ b/xsd-tests/cxx/tree/default/omit/driver.cxx @@ -0,0 +1,46 @@ +// file : cxx/tree/default/omit/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test default attribute omission from the output. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1], xml_schema::flags::dont_validate)); + + cout << *r << endl + << "default x: " << derived::x_default_value () << endl + << "default y: " << derived::y_default_value () << endl + << "fixed p: " << derived::p_default_value () << endl + << "fixed q1: " << derived::q1_default_value () << endl + << "fixed q2: " << derived::q2_default_value () << endl; + + // Serialize. + // + xml_schema::namespace_infomap map; + map["t"].name = "test"; + root (cout, *r, map); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/default/omit/output b/xsd-tests/cxx/tree/default/omit/output new file mode 100644 index 0000000..150ad58 --- /dev/null +++ b/xsd-tests/cxx/tree/default/omit/output @@ -0,0 +1,19 @@ + +derived: +a: a +x: foo +q1: 1 +y: -20 +p: bar +q2: 2 +default x: foo +default y: -20 +fixed p: bar +fixed q1: 1 +fixed q2: 2 + + + + a + + diff --git a/xsd-tests/cxx/tree/default/omit/test.xml b/xsd-tests/cxx/tree/default/omit/test.xml new file mode 100644 index 0000000..dec39b4 --- /dev/null +++ b/xsd-tests/cxx/tree/default/omit/test.xml @@ -0,0 +1,9 @@ + + + + a + + + diff --git a/xsd-tests/cxx/tree/default/omit/test.xsd b/xsd-tests/cxx/tree/default/omit/test.xsd new file mode 100644 index 0000000..bfc68d4 --- /dev/null +++ b/xsd-tests/cxx/tree/default/omit/test.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/detach/buildfile b/xsd-tests/cxx/tree/detach/buildfile new file mode 100644 index 0000000..07f5f03 --- /dev/null +++ b/xsd-tests/cxx/tree/detach/buildfile @@ -0,0 +1,21 @@ +# file : cxx/tree/detach/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-detach \ + --generate-default-ctor \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/detach/driver.cxx b/xsd-tests/cxx/tree/detach/driver.cxx new file mode 100644 index 0000000..b632b5d --- /dev/null +++ b/xsd-tests/cxx/tree/detach/driver.cxx @@ -0,0 +1,108 @@ +// file : cxx/tree/detach/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the detach functionality. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +#ifdef XSD_CXX11 +# include // std::move +# define XSD_MOVE(x) std::move(x) +#else +# define XSD_MOVE(x) x +#endif + +using namespace std; +using namespace test; + +int +main () +{ + using test::ref; + + // Construct the model. + // + object o1 ("o1"); + o1.data ().push_back ("1-1"); + o1.data ().push_back ("1-2"); + o1.data ().push_back ("1-3"); + + object o2 ("o2"); + o1.data ().push_back ("2-1"); + o1.data ().push_back ("2-2"); + o1.data ().push_back ("2-3"); + + object o3 ("o3"); + o1.data ().push_back ("3-1"); + o1.data ().push_back ("3-2"); + o1.data ().push_back ("3-3"); + + object o4 ("o4"); + o1.data ().push_back ("4-1"); + o1.data ().push_back ("4-2"); + o1.data ().push_back ("4-3"); + + subtree s1; + s1.o ().push_back (o1); + s1.o ().push_back (o2); + s1.r ().push_back (ref ("o2")); + s1.r ().push_back (ref ("o3")); + + subtree s2; + s2.o ().push_back (o3); + s2.o ().push_back (o4); + s2.r ().push_back (ref ("o4")); + s2.r ().push_back (ref ("o1")); + + model m; + m.one (s1); + m.opt (s2); + + // Detach one. + // + XSD_AUTO_PTR p (m.detach_one ()); + assert (p->_container () == 0); + assert (p->r ()[0].get () == &p->o ()[1]); + assert (m.opt ()->r ()[1].get () == 0); + + m.one (XSD_MOVE (p)); + assert (m.opt ()->r ()[1].get () == &m.one ().o ()[0]); + p = m.detach_one (); + + model m1; + m1.one (XSD_MOVE (p)); + m1.opt (s2); + assert (m1.opt ()->r ()[1].get () == &m1.one ().o ()[0]); + + p = m1.detach_one (); + m.seq ().push_back (XSD_MOVE (p)); + + // Detach opt. + // + p = m.opt ().detach (); + assert (!m.opt ()); + assert (p->_container () == 0); + assert (p->r ()[0].get () == &p->o ()[1]); + assert (m.seq ()[0].r ()[1].get () == 0); + + m.seq ().push_back (XSD_MOVE (p)); + + // Detach seq. + // + p = m.seq ().detach_back (); + assert (p->_container () == 0); + assert (p->r ()[0].get () == &p->o ()[1]); + assert (m.seq ()[0].r ()[1].get () == 0); + + m.seq ().push_back (XSD_MOVE (p)); + assert (m.seq ()[0].r ()[1].get () == &m.seq ()[1].o ()[0]); + + m.seq ().detach (m.seq ().begin (), p); + assert (p->_container () == 0); + assert (p->r ()[0].get () == &p->o ()[1]); + assert (m.seq ()[0].r ()[1].get () == 0); +} diff --git a/xsd-tests/cxx/tree/detach/test.xsd b/xsd-tests/cxx/tree/detach/test.xsd new file mode 100644 index 0000000..b9f5166 --- /dev/null +++ b/xsd-tests/cxx/tree/detach/test.xsd @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/dom-association/buildfile b/xsd-tests/cxx/tree/dom-association/buildfile new file mode 100644 index 0000000..85593e5 --- /dev/null +++ b/xsd-tests/cxx/tree/dom-association/buildfile @@ -0,0 +1,27 @@ +# file : cxx/tree/dom-association/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-ostream \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" + +# Define XSD_CXX11 since we include libxsd headers directly. +# +cxx.poptions += -DXSD_CXX11 diff --git a/xsd-tests/cxx/tree/dom-association/dom-parse.cxx b/xsd-tests/cxx/tree/dom-association/dom-parse.cxx new file mode 100644 index 0000000..281eb2c --- /dev/null +++ b/xsd-tests/cxx/tree/dom-association/dom-parse.cxx @@ -0,0 +1,95 @@ +// file : cxx/tree/dom-association/dom-parse.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "dom-parse.hxx" + +#include + +#include +#include // chLatin_* +#include + +#include +#include + +#include +#include + +using namespace xercesc; +namespace xml = xsd::cxx::xml; +namespace tree = xsd::cxx::tree; + +XSD_DOM_AUTO_PTR +parse (std::istream& is, + const std::string& id, + bool validate) +{ + const XMLCh ls_id [] = {chLatin_L, chLatin_S, chNull}; + + // Get an implementation of the Load-Store (LS) interface. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + + XSD_DOM_AUTO_PTR parser ( + impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + // Discard comment nodes in the document. + // + conf->setParameter (XMLUni::fgDOMComments, false); + + // Enable datatype normalization. + // + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + + // Do not create EntityReference nodes in the DOM tree. No + // EntityReference nodes will be created, only the nodes + // corresponding to their fully expanded substitution text + // will be created. + // + conf->setParameter (XMLUni::fgDOMEntities, false); + + // Perform namespace processing. + // + conf->setParameter (XMLUni::fgDOMNamespaces, true); + + // Do not include ignorable whitespace in the DOM tree. + // + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + // Enable/Disable validation. + // + conf->setParameter (XMLUni::fgDOMValidate, validate); + conf->setParameter (XMLUni::fgXercesSchema, validate); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // We will release the DOM document ourselves. + // + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + // Set error handler. + // + tree::error_handler eh; + xml::dom::bits::error_handler_proxy ehp (eh); + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + + // Prepare input stream. + // + xml::sax::std_input_source isrc (is, id); + Wrapper4InputSource wrap (&isrc, false); + + XSD_DOM_AUTO_PTR doc (parser->parse (&wrap)); + + eh.throw_if_failed > (); + + return doc; +} diff --git a/xsd-tests/cxx/tree/dom-association/dom-parse.hxx b/xsd-tests/cxx/tree/dom-association/dom-parse.hxx new file mode 100644 index 0000000..f14a53b --- /dev/null +++ b/xsd-tests/cxx/tree/dom-association/dom-parse.hxx @@ -0,0 +1,23 @@ +// file : cxx/tree/dom-association/dom-parse.hxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef DOM_PARSE +#define DOM_PARSE + +#include +#include + +#include + +#include + +// Parse an XML document from the standard input stream with an +// optional resource id. Resource id is used in diagnostics as +// well as to locate schemas referenced from inside the document. +// +XSD_DOM_AUTO_PTR +parse (std::istream& is, + const std::string& id, + bool validate); + +#endif // DOM_PARSE diff --git a/xsd-tests/cxx/tree/dom-association/driver.cxx b/xsd-tests/cxx/tree/dom-association/driver.cxx new file mode 100644 index 0000000..d85e105 --- /dev/null +++ b/xsd-tests/cxx/tree/dom-association/driver.cxx @@ -0,0 +1,71 @@ +// file : cxx/tree/dom-association/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test DOM association/ownership. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include + +#include "dom-parse.hxx" +#include "test.hxx" + +using namespace std; +using namespace test; +using namespace xercesc; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + int r (0); + + XMLPlatformUtils::Initialize (); + + try + { + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1]); + + DOMDocument* ptr; + +#ifdef XSD_CXX11 + xml_schema::dom::unique_ptr doc (parse (ifs, argv[1], true)); + ptr = doc.get (); + unique_ptr r ( + root (std::move (doc), + xml_schema::flags::keep_dom | xml_schema::flags::own_dom)); +#else + xml_schema::dom::auto_ptr doc (parse (ifs, argv[1], true)); + ptr = doc.get (); + auto_ptr r ( + root (doc, + xml_schema::flags::keep_dom | xml_schema::flags::own_dom)); +#endif + + assert (doc.get () == 0); + assert (r->_node ()->getOwnerDocument () == ptr); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + r = 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + r = 1; + } + + XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd-tests/cxx/tree/dom-association/output b/xsd-tests/cxx/tree/dom-association/output new file mode 100644 index 0000000..e69de29 diff --git a/xsd-tests/cxx/tree/dom-association/test.xml b/xsd-tests/cxx/tree/dom-association/test.xml new file mode 100644 index 0000000..624a80c --- /dev/null +++ b/xsd-tests/cxx/tree/dom-association/test.xml @@ -0,0 +1,7 @@ + + + a + + diff --git a/xsd-tests/cxx/tree/dom-association/test.xsd b/xsd-tests/cxx/tree/dom-association/test.xsd new file mode 100644 index 0000000..07bebc7 --- /dev/null +++ b/xsd-tests/cxx/tree/dom-association/test.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/encoding/char/iso-8859-1/buildfile b/xsd-tests/cxx/tree/encoding/char/iso-8859-1/buildfile new file mode 100644 index 0000000..bdea527 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/iso-8859-1/buildfile @@ -0,0 +1,25 @@ +# file : cxx/tree/encoding/char/iso-8859-1/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --char-encoding iso8859-1 \ + --generate-doxygen \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx b/xsd-tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx new file mode 100644 index 0000000..e356815 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx @@ -0,0 +1,74 @@ +// file : cxx/tree/encoding/char/iso-8859-1/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test ISO-8859-1 encoding. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + try + { + root (argv[1]); + return 1; + } + catch (xsd::cxx::xml::iso8859_1_unrepresentable const&) + { + } + + xsd::cxx::xml::char_transcoder::unrep_char ('?'); + XSD_AUTO_PTR r (root (argv[1])); + + { + type::a_sequence const& s (r->a ()); + + if (s[0] != "abc" || + s[1] != "\xE6" || + s[2] != "\xA2\xA3\xA4\xA5" || + s[3] != "??") + { + cerr << "invalid encoding" << endl; + return 1; + } + } + + { + type::b_sequence const& s (r->b ()); + + if (s[0] != strenum::abc || + s[1] != strenum::a_c || + s[2] != strenum::cxx__bc) + { + cerr << "invalid encoding" << endl; + return 1; + } + } + + xml_schema::namespace_infomap map; + map["t"].name = "test"; + + root (std::cout, *r, map, "ISO-8859-1"); + } + catch (xml_schema::exception const& e) + { + cerr << "xml_schema::exception: " << e.what () << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/encoding/char/iso-8859-1/output b/xsd-tests/cxx/tree/encoding/char/iso-8859-1/output new file mode 100644 index 0000000..cb73faa --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/iso-8859-1/output @@ -0,0 +1,10 @@ + + + abc + æ + ¢£¤¥ + ?? + abc + aâc + âòbc + diff --git a/xsd-tests/cxx/tree/encoding/char/iso-8859-1/test.xml b/xsd-tests/cxx/tree/encoding/char/iso-8859-1/test.xml new file mode 100644 index 0000000..cc05f8d --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/iso-8859-1/test.xml @@ -0,0 +1,14 @@ + + + abc + æ + ¢£¤¥ + Āꪪ + + abc + aâc + âòbc + + diff --git a/xsd-tests/cxx/tree/encoding/char/iso-8859-1/test.xsd b/xsd-tests/cxx/tree/encoding/char/iso-8859-1/test.xsd new file mode 100644 index 0000000..31b8901 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/iso-8859-1/test.xsd @@ -0,0 +1,31 @@ + + + + + + + + Test enum. Valid values are: + abc + aâc + òbc + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/encoding/char/lcp/buildfile b/xsd-tests/cxx/tree/encoding/char/lcp/buildfile new file mode 100644 index 0000000..d935b09 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/lcp/buildfile @@ -0,0 +1,24 @@ +# file : cxx/tree/encoding/char/lcp/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --char-encoding lcp \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/encoding/char/lcp/driver.cxx b/xsd-tests/cxx/tree/encoding/char/lcp/driver.cxx new file mode 100644 index 0000000..97c0875 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/lcp/driver.cxx @@ -0,0 +1,40 @@ +// file : cxx/tree/encoding/char/lcp/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test local code page encoding (--char-encoding lcp). +// The test just makes sure it still compiles and works. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + xml_schema::namespace_infomap map; + map["t"].name = "test"; + + root (std::cout, *r, map); + } + catch (xml_schema::exception const& e) + { + cerr << "xml_schema::exception: " << e.what () << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/encoding/char/lcp/output b/xsd-tests/cxx/tree/encoding/char/lcp/output new file mode 100644 index 0000000..368826d --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/lcp/output @@ -0,0 +1,4 @@ + + + abcd + diff --git a/xsd-tests/cxx/tree/encoding/char/lcp/test.xml b/xsd-tests/cxx/tree/encoding/char/lcp/test.xml new file mode 100644 index 0000000..772512e --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/lcp/test.xml @@ -0,0 +1,7 @@ + + + abcd + + diff --git a/xsd-tests/cxx/tree/encoding/char/lcp/test.xsd b/xsd-tests/cxx/tree/encoding/char/lcp/test.xsd new file mode 100644 index 0000000..1e264e3 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/lcp/test.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/encoding/char/utf-8/buildfile b/xsd-tests/cxx/tree/encoding/char/utf-8/buildfile new file mode 100644 index 0000000..4d48165 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/utf-8/buildfile @@ -0,0 +1,24 @@ +# file : cxx/tree/encoding/char/utf-8/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --generate-doxygen \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/encoding/char/utf-8/driver.cxx b/xsd-tests/cxx/tree/encoding/char/utf-8/driver.cxx new file mode 100644 index 0000000..7892667 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/utf-8/driver.cxx @@ -0,0 +1,63 @@ +// file : cxx/tree/encoding/char/utf-8/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test UTF-8 encoding. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + { + type::a_sequence const& s (r->a ()); + + if (s[0] != "abc" || + s[1] != "\xD5\x95" || + s[2] != "\xEA\xAA\xAA") + { + cerr << "invalid encoding" << endl; + return 1; + } + } + + { + type::b_sequence const& s (r->b ()); + + if (s[0] != strenum::abc || + s[1] != strenum::a_c || + s[2] != strenum::cxx_bc) + { + cerr << "invalid encoding" << endl; + return 1; + } + } + + xml_schema::namespace_infomap map; + map["t"].name = "test"; + + root (std::cout, *r, map, "ASCII"); + } + catch (xml_schema::exception const& e) + { + cerr << "xml_schema::exception: " << e.what () << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/encoding/char/utf-8/output b/xsd-tests/cxx/tree/encoding/char/utf-8/output new file mode 100644 index 0000000..fdfef4c --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/utf-8/output @@ -0,0 +1,9 @@ + + + abc + Օ + + abc + aՕc + ꪪbc + diff --git a/xsd-tests/cxx/tree/encoding/char/utf-8/test.xml b/xsd-tests/cxx/tree/encoding/char/utf-8/test.xml new file mode 100644 index 0000000..0d3e27a --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/utf-8/test.xml @@ -0,0 +1,13 @@ + + + abc + Օ + + + abc + aՕc + ꪪbc + + diff --git a/xsd-tests/cxx/tree/encoding/char/utf-8/test.xsd b/xsd-tests/cxx/tree/encoding/char/utf-8/test.xsd new file mode 100644 index 0000000..d5ee868 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/char/utf-8/test.xsd @@ -0,0 +1,31 @@ + + + + + + + + Test enum. Valid values are: + abc + aՕc + ꪪbc + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/encoding/wchar/buildfile b/xsd-tests/cxx/tree/encoding/wchar/buildfile new file mode 100644 index 0000000..f640976 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/wchar/buildfile @@ -0,0 +1,25 @@ +# file : cxx/tree/encoding/wchar/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --char-type wchar_t \ + --generate-doxygen \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/encoding/wchar/driver.cxx b/xsd-tests/cxx/tree/encoding/wchar/driver.cxx new file mode 100644 index 0000000..dbcbcba --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/wchar/driver.cxx @@ -0,0 +1,55 @@ +// file : cxx/tree/encoding/wchar/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the wide character mapping. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + // Use dont_validate because we do not have instance's system id (path). + // + std::ifstream ifs (argv[1]); + XSD_AUTO_PTR r (root (ifs, xml_schema::flags::dont_validate)); + + { + type::b_sequence const& s (r->b ()); + + if (s[0] != strenum::abc || + s[1] != strenum::a__c || + s[2] != strenum::cxx__bc || + s[3] != strenum::ab__) + { + cerr << "invalid encoding" << endl; + return 1; + } + } + + xml_schema::namespace_infomap map; + map[L"t"].name = L"test"; + + root (std::cout, *r, map, L"ASCII"); + } + catch (xml_schema::exception const& e) + { + cerr << "xml_schema::exception: " << e.what () << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/encoding/wchar/output b/xsd-tests/cxx/tree/encoding/wchar/output new file mode 100644 index 0000000..e0eaef0 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/wchar/output @@ -0,0 +1,10 @@ + + + abc + ῿퟿ + ကჿ + abc + a῿퟿c + ကჿbc + abကჿ + diff --git a/xsd-tests/cxx/tree/encoding/wchar/test.xml b/xsd-tests/cxx/tree/encoding/wchar/test.xml new file mode 100644 index 0000000..9abb1b6 --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/wchar/test.xml @@ -0,0 +1,14 @@ + + + abc + ῿퟿ + ကჿ + + abc + a῿퟿c + ကჿbc + abကჿ + + diff --git a/xsd-tests/cxx/tree/encoding/wchar/test.xsd b/xsd-tests/cxx/tree/encoding/wchar/test.xsd new file mode 100644 index 0000000..0151d2f --- /dev/null +++ b/xsd-tests/cxx/tree/encoding/wchar/test.xsd @@ -0,0 +1,33 @@ + + + + + + + + Test enum. Valid values are: + abc + a῿퟿c + ကჿbc + abကჿ + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/enumeration/ctor/buildfile b/xsd-tests/cxx/tree/enumeration/ctor/buildfile new file mode 100644 index 0000000..96be1ce --- /dev/null +++ b/xsd-tests/cxx/tree/enumeration/ctor/buildfile @@ -0,0 +1,22 @@ +# file : cxx/tree/enumeration/ctor/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-default-ctor \ + --generate-from-base-ctor \ + --generate-doxygen \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/enumeration/ctor/driver.cxx b/xsd-tests/cxx/tree/enumeration/ctor/driver.cxx new file mode 100644 index 0000000..c5ea1f2 --- /dev/null +++ b/xsd-tests/cxx/tree/enumeration/ctor/driver.cxx @@ -0,0 +1,30 @@ +// file : cxx/tree/enumeration/ctor/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test enumeration constructors. +// +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + // Test ctor(const char*). + // + { + string_enum se ("a"); + type t ("a", 1); + } + + // Test ctor(const std::string&) + // + { + string const s ("c"); + string_enum se (s); + type t (s, 3); + } +} diff --git a/xsd-tests/cxx/tree/enumeration/ctor/test.xsd b/xsd-tests/cxx/tree/enumeration/ctor/test.xsd new file mode 100644 index 0000000..c5d625a --- /dev/null +++ b/xsd-tests/cxx/tree/enumeration/ctor/test.xsd @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/enumeration/inheritance/buildfile b/xsd-tests/cxx/tree/enumeration/inheritance/buildfile new file mode 100644 index 0000000..184c95c --- /dev/null +++ b/xsd-tests/cxx/tree/enumeration/inheritance/buildfile @@ -0,0 +1,23 @@ +# file : cxx/tree/enumeration/inheritance/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-ostream \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/enumeration/inheritance/driver.cxx b/xsd-tests/cxx/tree/enumeration/inheritance/driver.cxx new file mode 100644 index 0000000..b517b1f --- /dev/null +++ b/xsd-tests/cxx/tree/enumeration/inheritance/driver.cxx @@ -0,0 +1,53 @@ +// file : cxx/tree/enumeration/inheritance/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Insert test description here. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + switch (*r) + { + case top_bottom::top: + { + cout << "top" << endl; + break; + } + case top_bottom::bottom: + { + cout << "bottom" << endl; + break; + } + default: // Suppress warning. + { + assert (false); + break; + } + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/enumeration/inheritance/output b/xsd-tests/cxx/tree/enumeration/inheritance/output new file mode 100644 index 0000000..fef12e2 --- /dev/null +++ b/xsd-tests/cxx/tree/enumeration/inheritance/output @@ -0,0 +1 @@ +bottom diff --git a/xsd-tests/cxx/tree/enumeration/inheritance/test.xml b/xsd-tests/cxx/tree/enumeration/inheritance/test.xml new file mode 100644 index 0000000..1de9043 --- /dev/null +++ b/xsd-tests/cxx/tree/enumeration/inheritance/test.xml @@ -0,0 +1,3 @@ +bottom diff --git a/xsd-tests/cxx/tree/enumeration/inheritance/test.xsd b/xsd-tests/cxx/tree/enumeration/inheritance/test.xsd new file mode 100644 index 0000000..cf2eeb1 --- /dev/null +++ b/xsd-tests/cxx/tree/enumeration/inheritance/test.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/float/buildfile b/xsd-tests/cxx/tree/float/buildfile new file mode 100644 index 0000000..4872a2f --- /dev/null +++ b/xsd-tests/cxx/tree/float/buildfile @@ -0,0 +1,24 @@ +# file : cxx/tree/float/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/float/driver.cxx b/xsd-tests/cxx/tree/float/driver.cxx new file mode 100644 index 0000000..0f7455f --- /dev/null +++ b/xsd-tests/cxx/tree/float/driver.cxx @@ -0,0 +1,53 @@ +// file : cxx/tree/float/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test floating point (xsd:{float, double, decimal}) type parsing +// and serialization. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + r->simple ().push_back (12.129456); + r->simple ().push_back (123.129456); + r->simple ().push_back (1234.129456); + + r->s (12.129456); + + r->complex ().push_back (12.129456); + r->complex ().push_back (123.129456); + r->complex ().push_back (1234.129456); + r->complex ().push_back (-12.12); + r->complex ().push_back (-123.12); + + r->s (12.129456); + + xml_schema::namespace_infomap map; + + map["t"].name = "test"; + root (cout, *r, map); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/float/output b/xsd-tests/cxx/tree/float/output new file mode 100644 index 0000000..399e28c --- /dev/null +++ b/xsd-tests/cxx/tree/float/output @@ -0,0 +1,35 @@ + + + 0 + 1 + 1e+06 + 1e-07 + 0 1 1e+06 1e-07 + 0 + 1 + 100000000000000 + 1e-15 + 0 1 100000000000000 1e-15 + 0 + 1 + 10000 + 100000000000000 + 0.000000000000001 + 0 1 100000000000000 0.000000000000001 + 0 + 1 + 12.34 + 0.12 + 12.13 + 123.1 + 1234 + 0 + 1 + 12.34 + 0.12 + 12.13 + 123.1 + 1234 + -12.12 + -123.1 + diff --git a/xsd-tests/cxx/tree/float/test.xml b/xsd-tests/cxx/tree/float/test.xml new file mode 100644 index 0000000..e5124a4 --- /dev/null +++ b/xsd-tests/cxx/tree/float/test.xml @@ -0,0 +1,35 @@ + + + 0.0 + 1.0 + 1000000.0 + 0.0000001 + 0.0 1.0 1000000.0 0.0000001 + + 0.0 + 1.0 + 100000000000000.0 + 0.000000000000001 + 0.0 1.0 100000000000000.0 0.000000000000001 + + 0.0 + 1.0 + 10000 + 100000000000000.0 + 0.000000000000001 + 0.0 1.0 100000000000000.0 0.000000000000001 + + 0.0 + 1.0 + 12.34 + 0.12 + + 0.0 + 1.0 + 12.34 + 0.12 + + diff --git a/xsd-tests/cxx/tree/float/test.xsd b/xsd-tests/cxx/tree/float/test.xsd new file mode 100644 index 0000000..c02678d --- /dev/null +++ b/xsd-tests/cxx/tree/float/test.xsd @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/list/ctor/buildfile b/xsd-tests/cxx/tree/list/ctor/buildfile new file mode 100644 index 0000000..2155f95 --- /dev/null +++ b/xsd-tests/cxx/tree/list/ctor/buildfile @@ -0,0 +1,22 @@ +# file : cxx/tree/list/ctor/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-default-ctor \ + --generate-from-base-ctor \ + --generate-doxygen \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/list/ctor/driver.cxx b/xsd-tests/cxx/tree/list/ctor/driver.cxx new file mode 100644 index 0000000..5673e67 --- /dev/null +++ b/xsd-tests/cxx/tree/list/ctor/driver.cxx @@ -0,0 +1,50 @@ +// file : cxx/tree/list/ctor/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test list constructors. +// +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + // Test ctor() + // + { + string_list sl; + + xml_schema::nmtokens nt; + xml_schema::idrefs id; + } + + // Test ctor(size_type, const X&) + // + { + string_list sl (10, "abc"); + size_type st (10, 123); + + xml_schema::nmtokens nt (10, "abc"); + xml_schema::idrefs id (10, "abc"); + } + + // Test ctor(const I& begin, const I& end) + // + { + string_list sl1 (10, "abc"); + string_list sl2 (sl1.begin (), sl1.end ()); + + I i1 (10, 123); + I i2 (i1.begin (), i1.end ()); + + xml_schema::nmtokens nt1 (10, "abc"); + xml_schema::nmtokens nt2 (nt1.begin (), nt1.end ()); + + xml_schema::idrefs id1 (10, "abc"); + xml_schema::idrefs id2 (id1.begin (), id1.end ()); + } +} diff --git a/xsd-tests/cxx/tree/list/ctor/test.xsd b/xsd-tests/cxx/tree/list/ctor/test.xsd new file mode 100644 index 0000000..f090bb8 --- /dev/null +++ b/xsd-tests/cxx/tree/list/ctor/test.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/name-clash/inheritance/buildfile b/xsd-tests/cxx/tree/name-clash/inheritance/buildfile new file mode 100644 index 0000000..530c42f --- /dev/null +++ b/xsd-tests/cxx/tree/name-clash/inheritance/buildfile @@ -0,0 +1,23 @@ +# file : cxx/tree/name-clash/inheritance/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-ostream \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/name-clash/inheritance/driver.cxx b/xsd-tests/cxx/tree/name-clash/inheritance/driver.cxx new file mode 100644 index 0000000..634c56a --- /dev/null +++ b/xsd-tests/cxx/tree/name-clash/inheritance/driver.cxx @@ -0,0 +1,35 @@ +// file : cxx/tree/name-clash/inheritance/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test for name clashes across inheritance hierarchy. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + cout << *r << endl; + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/name-clash/inheritance/output b/xsd-tests/cxx/tree/name-clash/inheritance/output new file mode 100644 index 0000000..54565bb --- /dev/null +++ b/xsd-tests/cxx/tree/name-clash/inheritance/output @@ -0,0 +1,3 @@ + +e: e +e: e1 diff --git a/xsd-tests/cxx/tree/name-clash/inheritance/test.xml b/xsd-tests/cxx/tree/name-clash/inheritance/test.xml new file mode 100644 index 0000000..8c17101 --- /dev/null +++ b/xsd-tests/cxx/tree/name-clash/inheritance/test.xml @@ -0,0 +1,8 @@ + + + e + e1 + + diff --git a/xsd-tests/cxx/tree/name-clash/inheritance/test.xsd b/xsd-tests/cxx/tree/name-clash/inheritance/test.xsd new file mode 100644 index 0000000..b83d7df --- /dev/null +++ b/xsd-tests/cxx/tree/name-clash/inheritance/test.xsd @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/naming/camel/buildfile b/xsd-tests/cxx/tree/naming/camel/buildfile new file mode 100644 index 0000000..8a8410c --- /dev/null +++ b/xsd-tests/cxx/tree/naming/camel/buildfile @@ -0,0 +1,25 @@ +# file : cxx/tree/naming/camel/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --type-naming ucc \ + --function-naming lcc \ + --generate-ostream \ + --generate-comparison \ + --generate-wildcard \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/naming/camel/driver.cxx b/xsd-tests/cxx/tree/naming/camel/driver.cxx new file mode 100644 index 0000000..600b3ff --- /dev/null +++ b/xsd-tests/cxx/tree/naming/camel/driver.cxx @@ -0,0 +1,154 @@ +// file : cxx/tree/naming/camel/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test camel case (upper for types, lower for functions) naming style. +// + +#include +#include + +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + xercesc::XMLPlatformUtils::Initialize (); + + try + { + // Enum 'value' type. + // + { + Gender::Value v; + v = Gender::female; + XSD_UNUSED (v); + } + + // Anonymous type. + // + { + Foo f ("a", "b"); + + if (f.a () != "a" || f.b () != "b") + return 1; + } + + // Type name and accessors/modifiers. + // + { + Type t ("bar"); + + // foo + // + { + Type::FooType* p = 0; + XSD_UNUSED (p); + + Type::FooOptional o; + + if (t.foo ().present ()) + return 1; + + t.foo (o); + } + + // bar + // + { + Type::BarType* p = 0; + XSD_UNUSED (p); + + if (t.bar () != "bar") + return 1; + + t.bar ("barbar"); + } + + // baz + // + { + Type::BazType* p = 0; + XSD_UNUSED (p); + + Type::BazSequence s; + Type::BazIterator i (s.begin ()); + Type::BazConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); + + if (t.baz () != s) + return 1; + + t.baz (s); + } + + // any + // + { + Type::AnySequence s (t.domDocument ()); + Type::AnyIterator i (s.begin ()); + Type::AnyConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); + + if (t.any () != s) + return 1; + + t.any (s); + } + + // foo + // + { + Type::FoxType x = Type::foxDefaultValue (); + + if (t.fox () != x) + return 1; + + t.fox ("fox"); + } + + // any_attribute + // + { + Type::AnyAttributeSet s (t.domDocument ()); + Type::AnyAttributeIterator i (s.begin ()); + Type::AnyAttributeConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); + + if (t.anyAttribute () != s) + return 1; + + t.anyAttribute (s); + } + } + + // Parsing/serialization functions. + // + { + istringstream is ("foo"); + root (is, xml_schema::Flags::dont_validate); + } + + { + ostringstream os; + xml_schema::NamespaceInfomap m; + m["t"].name = "test"; + + root (os, "foo", m); + } + } + catch (xml_schema::Exception const& e) + { + cerr << e << endl; + return 1; + } + + xercesc::XMLPlatformUtils::Terminate (); +} diff --git a/xsd-tests/cxx/tree/naming/camel/test.xsd b/xsd-tests/cxx/tree/naming/camel/test.xsd new file mode 100644 index 0000000..7d0a745 --- /dev/null +++ b/xsd-tests/cxx/tree/naming/camel/test.xsd @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/naming/java/buildfile b/xsd-tests/cxx/tree/naming/java/buildfile new file mode 100644 index 0000000..5d4b447 --- /dev/null +++ b/xsd-tests/cxx/tree/naming/java/buildfile @@ -0,0 +1,25 @@ +# file : cxx/tree/naming/java/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --type-naming java \ + --function-naming java \ + --generate-ostream \ + --generate-comparison \ + --generate-wildcard \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/naming/java/driver.cxx b/xsd-tests/cxx/tree/naming/java/driver.cxx new file mode 100644 index 0000000..b47ff74 --- /dev/null +++ b/xsd-tests/cxx/tree/naming/java/driver.cxx @@ -0,0 +1,153 @@ +// file : cxx/tree/naming/java/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test Java naming style. +// + +#include +#include + +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + xercesc::XMLPlatformUtils::Initialize (); + + try + { + // Enum 'value' type. + // + { + Gender::Value v; + v = Gender::female; + XSD_UNUSED (v); + } + + // Anonymous type. + // + { + Foo f ("a", "b"); + + if (f.getA () != "a" || f.getB () != "b") + return 1; + } + + // Type name and accessors/modifiers. + // + { + Type t ("bar"); + + // foo + // + { + Type::FooType* p = 0; + XSD_UNUSED (p); + Type::FooOptional o; + + if (t.getFoo ().present ()) + return 1; + + t.setFoo (o); + } + + // bar + // + { + Type::BarType* p = 0; + XSD_UNUSED (p); + + if (t.getBar () != "bar") + return 1; + + t.setBar ("barbar"); + } + + // baz + // + { + Type::BazType* p = 0; + XSD_UNUSED (p); + + Type::BazSequence s; + Type::BazIterator i (s.begin ()); + Type::BazConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); + + if (t.getBaz () != s) + return 1; + + t.setBaz (s); + } + + // any + // + { + Type::AnySequence s (t.getDomDocument ()); + Type::AnyIterator i (s.begin ()); + Type::AnyConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); + + if (t.getAny () != s) + return 1; + + t.setAny (s); + } + + // foo + // + { + Type::FoxType x = Type::getFoxDefaultValue (); + + if (t.getFox () != x) + return 1; + + t.setFox ("fox"); + } + + // any_attribute + // + { + Type::AnyAttributeSet s (t.getDomDocument ()); + Type::AnyAttributeIterator i (s.begin ()); + Type::AnyAttributeConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); + + if (t.getAnyAttribute () != s) + return 1; + + t.setAnyAttribute (s); + } + } + + // Parsing/serialization functions. + // + { + istringstream is ("foo"); + parseRoot (is, xml_schema::Flags::dont_validate); + } + + { + ostringstream os; + xml_schema::NamespaceInfomap m; + m["t"].name = "test"; + + serializeRoot (os, "foo", m); + } + } + catch (xml_schema::Exception const& e) + { + cerr << e << endl; + return 1; + } + + xercesc::XMLPlatformUtils::Terminate (); +} diff --git a/xsd-tests/cxx/tree/naming/java/test.xsd b/xsd-tests/cxx/tree/naming/java/test.xsd new file mode 100644 index 0000000..f525534 --- /dev/null +++ b/xsd-tests/cxx/tree/naming/java/test.xsd @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/naming/knr/buildfile b/xsd-tests/cxx/tree/naming/knr/buildfile new file mode 100644 index 0000000..c4c2287 --- /dev/null +++ b/xsd-tests/cxx/tree/naming/knr/buildfile @@ -0,0 +1,25 @@ +# file : cxx/tree/naming/knr/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --type-naming knr \ + --function-naming knr \ + --generate-ostream \ + --generate-comparison \ + --generate-wildcard \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/naming/knr/driver.cxx b/xsd-tests/cxx/tree/naming/knr/driver.cxx new file mode 100644 index 0000000..8c75dd9 --- /dev/null +++ b/xsd-tests/cxx/tree/naming/knr/driver.cxx @@ -0,0 +1,154 @@ +// file : cxx/tree/naming/knr/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test K&R naming style. +// + +#include +#include + +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + xercesc::XMLPlatformUtils::Initialize (); + + try + { + // Enum 'value' type. + // + { + gender::value v; + v = gender::female; + XSD_UNUSED (v); + } + + // Anonymous type. + // + { + foo f ("a", "b"); + + if (f.a () != "a" || f.b () != "b") + return 1; + } + + // Type name and accessors/modifiers. + // + { + type t ("bar"); + + // foo + // + { + type::foo_type* p = 0; + XSD_UNUSED (p); + + type::foo_optional o; + + if (t.foo ().present ()) + return 1; + + t.foo (o); + } + + // bar + // + { + type::bar_type* p = 0; + XSD_UNUSED (p); + + if (t.bar () != "bar") + return 1; + + t.bar ("barbar"); + } + + // baz + // + { + type::baz_type* p = 0; + XSD_UNUSED (p); + + type::baz_sequence s; + type::baz_iterator i (s.begin ()); + type::baz_const_iterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); + + if (t.baz () != s) + return 1; + + t.baz (s); + } + + // any + // + { + type::any_sequence s (t.dom_document ()); + type::any_iterator i (s.begin ()); + type::any_const_iterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); + + if (t.any () != s) + return 1; + + t.any (s); + } + + // foo + // + { + type::fox_type x = type::fox_default_value (); + + if (t.fox () != x) + return 1; + + t.fox ("fox"); + } + + // any_attribute + // + { + type::any_attribute_set s (t.dom_document ()); + type::any_attribute_iterator i (s.begin ()); + type::any_attribute_const_iterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); + + if (t.any_attribute () != s) + return 1; + + t.any_attribute (s); + } + } + + // Parsing/serialization functions. + // + { + istringstream is ("foo"); + root (is, xml_schema::flags::dont_validate); + } + + { + ostringstream os; + xml_schema::namespace_infomap m; + m["t"].name = "test"; + + root (os, "foo", m); + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + + xercesc::XMLPlatformUtils::Terminate (); +} diff --git a/xsd-tests/cxx/tree/naming/knr/test.xsd b/xsd-tests/cxx/tree/naming/knr/test.xsd new file mode 100644 index 0000000..4361544 --- /dev/null +++ b/xsd-tests/cxx/tree/naming/knr/test.xsd @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/order/buildfile b/xsd-tests/cxx/tree/order/buildfile new file mode 100644 index 0000000..91c3cb7 --- /dev/null +++ b/xsd-tests/cxx/tree/order/buildfile @@ -0,0 +1,37 @@ +# file : cxx/tree/order/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --generate-wildcard \ + --generate-comparison \ + --ordered-type t1_base \ + --ordered-type t1_derived \ + --ordered-type t2_base \ + --ordered-type t2_derived \ + --ordered-type t3_type \ + --ordered-type t4_base \ + --ordered-type t4_derived \ + --ordered-type t5_base \ + --ordered-type t5_derived \ + --ordered-type t6_base \ + --ordered-type t6_derived \ + --ordered-type t7_type \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/order/driver.cxx b/xsd-tests/cxx/tree/order/driver.cxx new file mode 100644 index 0000000..f1902ba --- /dev/null +++ b/xsd-tests/cxx/tree/order/driver.cxx @@ -0,0 +1,64 @@ +// file : cxx/tree/order/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test ordered type support. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; +using namespace xercesc; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + XMLPlatformUtils::Initialize (); + + try + { + XSD_AUTO_PTR r (root_ (argv[1], xml_schema::flags::dont_initialize)); + + root c (*r); + assert (c == *r); + + for (root::t1_const_iterator j (r->t1 ().begin ()); + j != r->t1 ().end (); ++j) + { + const t1_derived& d (*j); + + for (t1_derived::content_order_const_iterator i ( + d.content_order ().begin ()); i != d.content_order ().end (); ++i) + { + cout << i->id << ' ' << i->index << endl; + } + } + + xml_schema::namespace_infomap map; + + map["t"].name = "test"; + map["t1"].name = "test1"; + + root_ (cout, *r, map, "UTF-8", xml_schema::flags::dont_initialize); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + + XMLPlatformUtils::Terminate (); +} diff --git a/xsd-tests/cxx/tree/order/output b/xsd-tests/cxx/tree/order/output new file mode 100644 index 0000000..73442fe --- /dev/null +++ b/xsd-tests/cxx/tree/order/output @@ -0,0 +1,92 @@ +2 0 +1 0 +1 1 +2 1 +3 0 +4 0 +3 1 +4 1 + + + + b1 + a1 + a2 + b2 + c1 + d1 + e1 + d2 + f1 + + + b1 + a1 + b2 + a2 + + + a1 + b1 + c1 + c2 + + + a1 + c1 + + + t1 + + b1 + t2 + + a1 + t3 + + b2 + t4 + + a2 + t5 + + d1 + t6 + + c1 + t7 + + + + t5a + + + t1 + + b1 + t2 + + a1 + t3 + + a2 + t4 + + b2 + t5 + + + + t6 + + + t1 + + a1 + t2 + + b1 + t3 + + + diff --git a/xsd-tests/cxx/tree/order/test.xml b/xsd-tests/cxx/tree/order/test.xml new file mode 100644 index 0000000..cd82936 --- /dev/null +++ b/xsd-tests/cxx/tree/order/test.xml @@ -0,0 +1,71 @@ + + + b1 + a1 + a2 + b2 + c1 + d1 + e1 + d2 + f1 + + + b1 + a1 + b2 + a2 + + + a1 + b1 + c1 + c2 + + + a1 + c1 + + + t1 + b1 + t2 + a1 + t3 + b2 + t4 + a2 + t5 + d1 + t6 + c1 + t7 + + + t5a + + + t1 + b1 + t2 + a1 + t3 + a2 + t4 + b2 + t5 + + + t6 + + + t1 + a1 + t2 + b1 + t3 + + diff --git a/xsd-tests/cxx/tree/order/test.xsd b/xsd-tests/cxx/tree/order/test.xsd new file mode 100644 index 0000000..c30c027 --- /dev/null +++ b/xsd-tests/cxx/tree/order/test.xsd @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/polymorphism/comparison/buildfile b/xsd-tests/cxx/tree/polymorphism/comparison/buildfile new file mode 100644 index 0000000..0bb0b77 --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/comparison/buildfile @@ -0,0 +1,25 @@ +# file : cxx/tree/polymorphism/comparison/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --generate-polymorphic \ + --polymorphic-type base \ + --generate-comparison \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/polymorphism/comparison/driver.cxx b/xsd-tests/cxx/tree/polymorphism/comparison/driver.cxx new file mode 100644 index 0000000..cadb225 --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/comparison/driver.cxx @@ -0,0 +1,85 @@ +// file : cxx/tree/polymorphism/comparison/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test comparison of polymorphic object models. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + // Equals. + // + { + derived1 d ("a", 1); + d.b ("b"); + type r1 (d); + + assert (*r == r1); + } + + // Values are not equal. + // + { + derived1 d ("a", 1); + d.b ("c"); + type r1 (d); + + assert (*r != r1); + } + + // Values are not equal. + // + { + derived1 d ("a", 2); + d.b ("b"); + type r1 (d); + + assert (*r != r1); + } + + // Different types. + // + { + derived2 d ("a", 1); + d.c ().push_back ("c"); + type r1 (d); + + assert (*r != r1); + } + + xml_schema::namespace_infomap map; + + map["t"].name = "test"; + + stringstream s; + root (s, *r, map); + + XSD_AUTO_PTR c (root (s, xml_schema::flags::dont_validate)); + + assert (*r == *c); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/polymorphism/comparison/test.xml b/xsd-tests/cxx/tree/polymorphism/comparison/test.xml new file mode 100644 index 0000000..0b8c125 --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/comparison/test.xml @@ -0,0 +1,7 @@ + + + a1b + + diff --git a/xsd-tests/cxx/tree/polymorphism/comparison/test.xsd b/xsd-tests/cxx/tree/polymorphism/comparison/test.xsd new file mode 100644 index 0000000..364d1b3 --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/comparison/test.xsd @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/polymorphism/ostream/buildfile b/xsd-tests/cxx/tree/polymorphism/ostream/buildfile new file mode 100644 index 0000000..2237c73 --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/ostream/buildfile @@ -0,0 +1,26 @@ +# file : cxx/tree/polymorphism/ostream/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-polymorphic \ + --polymorphic-type-all \ + --root-element root \ + --generate-ostream \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/polymorphism/ostream/driver.cxx b/xsd-tests/cxx/tree/polymorphism/ostream/driver.cxx new file mode 100644 index 0000000..b030be9 --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/ostream/driver.cxx @@ -0,0 +1,34 @@ +// file : cxx/tree/polymorphism/ostream/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test printing of polymorphic object models. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + cout << *r << endl; + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/polymorphism/ostream/output b/xsd-tests/cxx/tree/polymorphism/ostream/output new file mode 100644 index 0000000..e7fbd68 --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/ostream/output @@ -0,0 +1,18 @@ + +base: +a: a +fund: 1 +base: +a: a +fund: 1 +b: b +base: +a: a +fund: 1 +c: c1 +c: c2 +base: +a: a +fund: 1 +d: d1 +d: d2 diff --git a/xsd-tests/cxx/tree/polymorphism/ostream/test.xml b/xsd-tests/cxx/tree/polymorphism/ostream/test.xml new file mode 100644 index 0000000..5409d2a --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/ostream/test.xml @@ -0,0 +1,10 @@ + + + a1 + a1b + a1c1c2 + a1d1d2 + + diff --git a/xsd-tests/cxx/tree/polymorphism/ostream/test.xsd b/xsd-tests/cxx/tree/polymorphism/ostream/test.xsd new file mode 100644 index 0000000..688cd5a --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/ostream/test.xsd @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/polymorphism/same-type/buildfile b/xsd-tests/cxx/tree/polymorphism/same-type/buildfile new file mode 100644 index 0000000..46720d6 --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/same-type/buildfile @@ -0,0 +1,25 @@ +# file : cxx/tree/polymorphism/same-type/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-polymorphic \ + --root-element root \ + --generate-ostream \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/polymorphism/same-type/driver.cxx b/xsd-tests/cxx/tree/polymorphism/same-type/driver.cxx new file mode 100644 index 0000000..94f82f5 --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/same-type/driver.cxx @@ -0,0 +1,35 @@ +// file : cxx/tree/polymorphism/same-type/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test substitution group and xsi:type that don't change the type. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + cout << *r << endl; + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/polymorphism/same-type/output b/xsd-tests/cxx/tree/polymorphism/same-type/output new file mode 100644 index 0000000..04b5cbf --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/same-type/output @@ -0,0 +1,9 @@ + +base: +a: a1 +base: +a: a2 +base: +a: a3 +base: +a: a4 diff --git a/xsd-tests/cxx/tree/polymorphism/same-type/test.xml b/xsd-tests/cxx/tree/polymorphism/same-type/test.xml new file mode 100644 index 0000000..f8b6d1e --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/same-type/test.xml @@ -0,0 +1,10 @@ + + + a1 + a2 + a3 + a4 + + diff --git a/xsd-tests/cxx/tree/polymorphism/same-type/test.xsd b/xsd-tests/cxx/tree/polymorphism/same-type/test.xsd new file mode 100644 index 0000000..a4157d3 --- /dev/null +++ b/xsd-tests/cxx/tree/polymorphism/same-type/test.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/prefix/.gitignore b/xsd-tests/cxx/tree/prefix/.gitignore new file mode 100644 index 0000000..2457930 --- /dev/null +++ b/xsd-tests/cxx/tree/prefix/.gitignore @@ -0,0 +1,2 @@ +bar.?xx +foo.?xx diff --git a/xsd-tests/cxx/tree/prefix/bar.xsd b/xsd-tests/cxx/tree/prefix/bar.xsd new file mode 100644 index 0000000..4e20902 --- /dev/null +++ b/xsd-tests/cxx/tree/prefix/bar.xsd @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/prefix/buildfile b/xsd-tests/cxx/tree/prefix/buildfile new file mode 100644 index 0000000..7ac81de --- /dev/null +++ b/xsd-tests/cxx/tree/prefix/buildfile @@ -0,0 +1,31 @@ +# file : cxx/tree/prefix/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +fs = foo bar test + +exe{driver}: {hxx cxx}{* -{$fs}} {hxx ixx cxx}{$fs} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +for f: $fs +{ + <{hxx ixx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --generate-polymorphic \ + --polymorphic-type 'foo#base' \ + --root-element root \ + --output-dir $out_base \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/prefix/driver.cxx b/xsd-tests/cxx/tree/prefix/driver.cxx new file mode 100644 index 0000000..bd2e46d --- /dev/null +++ b/xsd-tests/cxx/tree/prefix/driver.cxx @@ -0,0 +1,34 @@ +// file : cxx/tree/prefix/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test automatic prefix assignment. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + root (std::cout, *r); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/prefix/foo.xsd b/xsd-tests/cxx/tree/prefix/foo.xsd new file mode 100644 index 0000000..97a35cf --- /dev/null +++ b/xsd-tests/cxx/tree/prefix/foo.xsd @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/prefix/output b/xsd-tests/cxx/tree/prefix/output new file mode 100644 index 0000000..9801a23 --- /dev/null +++ b/xsd-tests/cxx/tree/prefix/output @@ -0,0 +1,18 @@ + + + + 123 + + + + 1 + 2 + + + + + 1 + 2 + + + diff --git a/xsd-tests/cxx/tree/prefix/test.xml b/xsd-tests/cxx/tree/prefix/test.xml new file mode 100644 index 0000000..b6d0dd6 --- /dev/null +++ b/xsd-tests/cxx/tree/prefix/test.xml @@ -0,0 +1,19 @@ + + + + 123 + + + + 12 + + + + 12 + + + diff --git a/xsd-tests/cxx/tree/prefix/test.xsd b/xsd-tests/cxx/tree/prefix/test.xsd new file mode 100644 index 0000000..421fdc0 --- /dev/null +++ b/xsd-tests/cxx/tree/prefix/test.xsd @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/test-template/buildfile b/xsd-tests/cxx/tree/test-template/buildfile new file mode 100644 index 0000000..b50e6c3 --- /dev/null +++ b/xsd-tests/cxx/tree/test-template/buildfile @@ -0,0 +1,23 @@ +# file : cxx/tree/test-template/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-ostream \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/test-template/driver.cxx b/xsd-tests/cxx/tree/test-template/driver.cxx new file mode 100644 index 0000000..5257279 --- /dev/null +++ b/xsd-tests/cxx/tree/test-template/driver.cxx @@ -0,0 +1,35 @@ +// file : cxx/tree/test-template/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Insert test description here. +// + +#include // std::auto_ptr/unique_ptr +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + XSD_AUTO_PTR r (root (argv[1])); + + cout << *r << endl; + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd-tests/cxx/tree/test-template/output b/xsd-tests/cxx/tree/test-template/output new file mode 100644 index 0000000..2a50681 --- /dev/null +++ b/xsd-tests/cxx/tree/test-template/output @@ -0,0 +1,2 @@ + +a: a diff --git a/xsd-tests/cxx/tree/test-template/test.xml b/xsd-tests/cxx/tree/test-template/test.xml new file mode 100644 index 0000000..624a80c --- /dev/null +++ b/xsd-tests/cxx/tree/test-template/test.xml @@ -0,0 +1,7 @@ + + + a + + diff --git a/xsd-tests/cxx/tree/test-template/test.xsd b/xsd-tests/cxx/tree/test-template/test.xsd new file mode 100644 index 0000000..07bebc7 --- /dev/null +++ b/xsd-tests/cxx/tree/test-template/test.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/types-only/buildfile b/xsd-tests/cxx/tree/types-only/buildfile new file mode 100644 index 0000000..fa02277 --- /dev/null +++ b/xsd-tests/cxx/tree/types-only/buildfile @@ -0,0 +1,20 @@ +# file : cxx/tree/types-only/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --suppress-parsing \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/types-only/driver.cxx b/xsd-tests/cxx/tree/types-only/driver.cxx new file mode 100644 index 0000000..730b807 --- /dev/null +++ b/xsd-tests/cxx/tree/types-only/driver.cxx @@ -0,0 +1,30 @@ +// file : cxx/tree/types-only/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test that code generated without parsing and serialization functions +// still compiles. +// + +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + color_enum red (color_enum::red); + red_blue_enum blue (red_blue_enum::blue); + + long_string_union num ("123"); + + string_list list; + list.push_back ("Hello"); + list.push_back ("World"); + + complex_type t ("Hello, World!", "foo", color_enum::red); + + anon a ("Hello, World!"); +} diff --git a/xsd-tests/cxx/tree/types-only/test.xsd b/xsd-tests/cxx/tree/types-only/test.xsd new file mode 100644 index 0000000..9f02240 --- /dev/null +++ b/xsd-tests/cxx/tree/types-only/test.xsd @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/union/ctor/buildfile b/xsd-tests/cxx/tree/union/ctor/buildfile new file mode 100644 index 0000000..6715cb6 --- /dev/null +++ b/xsd-tests/cxx/tree/union/ctor/buildfile @@ -0,0 +1,22 @@ +# file : cxx/tree/union/ctor/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-default-ctor \ + --generate-from-base-ctor \ + --generate-doxygen \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/union/ctor/driver.cxx b/xsd-tests/cxx/tree/union/ctor/driver.cxx new file mode 100644 index 0000000..246eea8 --- /dev/null +++ b/xsd-tests/cxx/tree/union/ctor/driver.cxx @@ -0,0 +1,30 @@ +// file : cxx/tree/union/ctor/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test union constructors. +// +#include + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + // Test ctor(const std::string&) + // + { + string const s ("123"); + int_string_union u (s); + type t (s); + } + + // Test ctor(const char*). + // + { + int_string_union u ("123"); + type t ("123"); + } +} diff --git a/xsd-tests/cxx/tree/union/ctor/test.xsd b/xsd-tests/cxx/tree/union/ctor/test.xsd new file mode 100644 index 0000000..9601093 --- /dev/null +++ b/xsd-tests/cxx/tree/union/ctor/test.xsd @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/xsd-tests/cxx/tree/wildcard/buildfile b/xsd-tests/cxx/tree/wildcard/buildfile new file mode 100644 index 0000000..67edcdc --- /dev/null +++ b/xsd-tests/cxx/tree/wildcard/buildfile @@ -0,0 +1,27 @@ +# file : cxx/tree/wildcard/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx ixx cxx}{test} $libs + +exe{driver}: xml{test}: test.input = true +exe{driver}: file{output}: test.stdout = true + +<{hxx ixx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --generate-inline \ + --generate-serialization \ + --generate-wildcard \ + --generate-default-ctor \ + --generate-from-base-ctor \ + --generate-comparison \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/cxx/tree/wildcard/driver.cxx b/xsd-tests/cxx/tree/wildcard/driver.cxx new file mode 100644 index 0000000..e3040c7 --- /dev/null +++ b/xsd-tests/cxx/tree/wildcard/driver.cxx @@ -0,0 +1,203 @@ +// file : cxx/tree/wildcard/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test wildcard (any & anyAttribute) mapping. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include +#include + +#include "test.hxx" // Get XSD_CXX11 defined. + +#include + +using namespace std; +using namespace test; +using namespace xercesc; + +namespace xml = xsd::cxx::xml; + +void +print (type& t) +{ + if (t.att ()) + cout << *t.att () << endl; + + type::any_attribute_set& as (t.any_attribute ()); + + for (type::any_attribute_iterator i (as.begin ()); i != as.end (); ++i) + { + cout << xml::transcode (i->getTextContent ()) << endl; + } + + cout << xml::transcode (t.any ().getTextContent ()) << endl + << t.foo () << endl; + + if (t.any1 ()) + cout << xml::transcode (t.any1 ()->getTextContent ()) << endl; + + cout << t.bar () << endl; + + type::any2_sequence& es (t.any2 ()); + + for (type::any2_iterator i (es.begin ()); i != es.end (); ++i) + { + cout << xml::transcode (i->getTextContent ()) << endl; + } + + cout << endl; +} + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + XMLPlatformUtils::Initialize (); + + try + { + // Test accessors/modifiers for various cardinalities. + // + type t; + + DOMDocument& doc (t.dom_document ()); + + // one + // + { + DOMElement* e (doc.createElement (xml::string ("a").c_str ())); + t.any (*e); + e->release (); + assert (xml::transcode (t.any ().getTagName ()) == "a"); + + t.any (doc.createElement (xml::string ("b").c_str ())); + assert (xml::transcode (t.any ().getTagName ()) == "b"); + } + + // optional + // + { + assert (!t.any1 ().present ()); + + DOMElement* e (doc.createElement (xml::string ("a").c_str ())); + t.any1 (*e); + e->release (); + assert (t.any1 ().present ()); + assert (xml::transcode (t.any1 ().get ().getTagName ()) == "a"); + + t.any1 (doc.createElement (xml::string ("b").c_str ())); + assert (xml::transcode (t.any1 ()->getTagName ()) == "b"); + + type::any1_optional c ( + doc.createElement (xml::string ("c").c_str ()), doc); + t.any1 (c); + assert (xml::transcode (t.any1 ()->getTagName ()) == "c"); + } + + + // sequence + // + { + type::any2_sequence& s (t.any2 ()); + + DOMElement* e (doc.createElement (xml::string ("a").c_str ())); + s.push_back (*e); + e->release (); + s.push_back (doc.createElement (xml::string ("b").c_str ())); + assert (s.size () == 2); + + for (type::any2_iterator i (s.begin ()); i != s.end (); ++i) + { + if (i == s.begin ()) + assert (xml::transcode (i->getTagName ()) == "a"); + else + assert (xml::transcode ((*i).getTagName ()) == "b"); + } + + // copy c-tor + type::any2_sequence cs (s, doc); + assert (cs.size () == 2); + assert (xml::transcode (cs[0].getTagName ()) == "a"); + assert (xml::transcode (cs[1].getTagName ()) == "b"); + + // assignment + t.any2 (cs); + assert (s.size () == 2); + assert (xml::transcode (s[0].getTagName ()) == "a"); + assert (xml::transcode (s[1].getTagName ()) == "b"); + } + + // anyAttribute + // + { + type::any_attribute_set& s (t.any_attribute ()); + + DOMAttr* a (doc.createAttribute (xml::string ("a").c_str ())); + s.insert (*a); + a->release (); + s.insert (doc.createAttribute (xml::string ("b").c_str ())); + assert (s.size () == 2); + + assert (s.find ("a") != s.end ()); + assert (s.find ("b") != s.end ()); + + for (type::any_attribute_iterator i (s.begin ()); i != s.end (); ++i) + { + assert (xml::transcode (i->getName ()) == "a" || + xml::transcode ((*i).getName ()) == "b"); + } + + // copy c-tor + type::any_attribute_set cs (s, doc); + assert (cs.size () == 2); + assert (cs.count ("a")); + assert (cs.count ("b")); + + // assignment + t.any_attribute (cs); + assert (s.size () == 2); + assert (s.count ("a")); + assert (s.count ("b")); + } + + // Test parsing + // + XSD_AUTO_PTR r (root (argv[1])); + print (*r); + + // Test serialization. + // + xml_schema::namespace_infomap map; + + map["t"].name = "test"; + map["t"].schema = "test.xsd"; + map["o"].name = "other"; + + stringstream iostr; + root (iostr, *r, map); + + // cout << iostr.str () << endl + // << endl; + + XSD_AUTO_PTR copy (root (iostr, argv[1])); + assert (*copy == *r); + + print (*copy); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + + XMLPlatformUtils::Terminate (); +} diff --git a/xsd-tests/cxx/tree/wildcard/output b/xsd-tests/cxx/tree/wildcard/output new file mode 100644 index 0000000..b23b488 --- /dev/null +++ b/xsd-tests/cxx/tree/wildcard/output @@ -0,0 +1,24 @@ +att +any +o:any +t:any +o:one +foo +t:bar +bar +o:one1 +o:one2 +o:one3 + +att +any +o:any +t:any +o:one +foo +t:bar +bar +o:one1 +o:one2 +o:one3 + diff --git a/xsd-tests/cxx/tree/wildcard/test.xml b/xsd-tests/cxx/tree/wildcard/test.xml new file mode 100644 index 0000000..b0c3267 --- /dev/null +++ b/xsd-tests/cxx/tree/wildcard/test.xml @@ -0,0 +1,19 @@ + + + o:one + foo + t:bar + bar + o:one1 + o:one2 + o:one3 + + diff --git a/xsd-tests/cxx/tree/wildcard/test.xsd b/xsd-tests/cxx/tree/wildcard/test.xsd new file mode 100644 index 0000000..6c7b308 --- /dev/null +++ b/xsd-tests/cxx/tree/wildcard/test.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/failed/.gitignore b/xsd-tests/failed/.gitignore new file mode 100644 index 0000000..f691ede --- /dev/null +++ b/xsd-tests/failed/.gitignore @@ -0,0 +1 @@ +test-*.?xx diff --git a/xsd-tests/failed/buildfile b/xsd-tests/failed/buildfile new file mode 100644 index 0000000..8739001 --- /dev/null +++ b/xsd-tests/failed/buildfile @@ -0,0 +1,27 @@ +# file : failed/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +fs = test-00 + +exe{driver}: {hxx cxx}{* -{$fs}} {hxx cxx}{$fs} $libs + +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/failed/driver.cxx b/xsd-tests/failed/driver.cxx new file mode 100644 index 0000000..a84b24c --- /dev/null +++ b/xsd-tests/failed/driver.cxx @@ -0,0 +1,9 @@ +// file : failed/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test-00.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/failed/test-00.xsd b/xsd-tests/failed/test-00.xsd new file mode 100644 index 0000000..5223f82 --- /dev/null +++ b/xsd-tests/failed/test-00.xsd @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/xsd-tests/manifest b/xsd-tests/manifest new file mode 100644 index 0000000..7e2e893 --- /dev/null +++ b/xsd-tests/manifest @@ -0,0 +1,15 @@ +: 1 +name: xsd-tests +version: 4.2.0-b.1.z +project: xsd +summary: XML Schema to C++ data binding compiler tests +license: other: GPL-2.0-only with Xerces-C++ linking exception and FLOSS exception +description-file: README +url: https://www.codesynthesis.com/projects/xsd/ +doc-url: https://www.codesynthesis.com/projects/xsd/ +src-url: https://git.codesynthesis.com/cgit/xsd/xsd/tree/xsd-tests/ +email: xsd-users@codesynthesis.com ; Mailing list +depends: * build2 >= 0.13.0 +depends: * bpkg >= 0.13.0 +depends: libxsd == $ +depends: libxerces-c ^3.0.0 diff --git a/xsd-tests/morphing/anonymous/attribute-group/buildfile b/xsd-tests/morphing/anonymous/attribute-group/buildfile new file mode 100644 index 0000000..3df24fc --- /dev/null +++ b/xsd-tests/morphing/anonymous/attribute-group/buildfile @@ -0,0 +1,22 @@ +# file : morphing/anonymous/attribute-group/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/morphing/anonymous/attribute-group/driver.cxx b/xsd-tests/morphing/anonymous/attribute-group/driver.cxx new file mode 100644 index 0000000..1632d7d --- /dev/null +++ b/xsd-tests/morphing/anonymous/attribute-group/driver.cxx @@ -0,0 +1,9 @@ +// file : morphing/anonymous/attribute-group/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/morphing/anonymous/attribute-group/test.xsd b/xsd-tests/morphing/anonymous/attribute-group/test.xsd new file mode 100644 index 0000000..657be8a --- /dev/null +++ b/xsd-tests/morphing/anonymous/attribute-group/test.xsd @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/morphing/anonymous/basic/buildfile b/xsd-tests/morphing/anonymous/basic/buildfile new file mode 100644 index 0000000..e2573e7 --- /dev/null +++ b/xsd-tests/morphing/anonymous/basic/buildfile @@ -0,0 +1,22 @@ +# file : morphing/anonymous/basic/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/morphing/anonymous/basic/driver.cxx b/xsd-tests/morphing/anonymous/basic/driver.cxx new file mode 100644 index 0000000..fc289eb --- /dev/null +++ b/xsd-tests/morphing/anonymous/basic/driver.cxx @@ -0,0 +1,9 @@ +// file : morphing/anonymous/basic/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/morphing/anonymous/basic/test.xsd b/xsd-tests/morphing/anonymous/basic/test.xsd new file mode 100644 index 0000000..ce930d8 --- /dev/null +++ b/xsd-tests/morphing/anonymous/basic/test.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/morphing/anonymous/cyclic-inclusion/.gitignore b/xsd-tests/morphing/anonymous/cyclic-inclusion/.gitignore new file mode 100644 index 0000000..b27b7d8 --- /dev/null +++ b/xsd-tests/morphing/anonymous/cyclic-inclusion/.gitignore @@ -0,0 +1,2 @@ +includee.?xx +includer.?xx diff --git a/xsd-tests/morphing/anonymous/cyclic-inclusion/buildfile b/xsd-tests/morphing/anonymous/cyclic-inclusion/buildfile new file mode 100644 index 0000000..d25143a --- /dev/null +++ b/xsd-tests/morphing/anonymous/cyclic-inclusion/buildfile @@ -0,0 +1,27 @@ +# file : morphing/anonymous/cyclic-inclusion/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +fs = includee includer + +exe{driver}: {hxx cxx}{* -{$fs}} {hxx cxx}{$fs} $libs + +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/morphing/anonymous/cyclic-inclusion/driver.cxx b/xsd-tests/morphing/anonymous/cyclic-inclusion/driver.cxx new file mode 100644 index 0000000..9046ee4 --- /dev/null +++ b/xsd-tests/morphing/anonymous/cyclic-inclusion/driver.cxx @@ -0,0 +1,10 @@ +// file : morphing/anonymous/cyclic-inclusion/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "includee.hxx" +#include "includer.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/morphing/anonymous/cyclic-inclusion/includee.xsd b/xsd-tests/morphing/anonymous/cyclic-inclusion/includee.xsd new file mode 100644 index 0000000..51f7916 --- /dev/null +++ b/xsd-tests/morphing/anonymous/cyclic-inclusion/includee.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + diff --git a/xsd-tests/morphing/anonymous/cyclic-inclusion/includer.xsd b/xsd-tests/morphing/anonymous/cyclic-inclusion/includer.xsd new file mode 100644 index 0000000..54e6b69 --- /dev/null +++ b/xsd-tests/morphing/anonymous/cyclic-inclusion/includer.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + diff --git a/xsd-tests/morphing/anonymous/group/buildfile b/xsd-tests/morphing/anonymous/group/buildfile new file mode 100644 index 0000000..9cedf39 --- /dev/null +++ b/xsd-tests/morphing/anonymous/group/buildfile @@ -0,0 +1,22 @@ +# file : morphing/anonymous/group/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/morphing/anonymous/group/driver.cxx b/xsd-tests/morphing/anonymous/group/driver.cxx new file mode 100644 index 0000000..2a76396 --- /dev/null +++ b/xsd-tests/morphing/anonymous/group/driver.cxx @@ -0,0 +1,9 @@ +// file : morphing/anonymous/group/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/morphing/anonymous/group/test.xsd b/xsd-tests/morphing/anonymous/group/test.xsd new file mode 100644 index 0000000..73e07af --- /dev/null +++ b/xsd-tests/morphing/anonymous/group/test.xsd @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/morphing/anonymous/unstable/.gitignore b/xsd-tests/morphing/anonymous/unstable/.gitignore new file mode 100644 index 0000000..c1b04fd --- /dev/null +++ b/xsd-tests/morphing/anonymous/unstable/.gitignore @@ -0,0 +1 @@ +includee-*.?xx diff --git a/xsd-tests/morphing/anonymous/unstable/buildfile b/xsd-tests/morphing/anonymous/unstable/buildfile new file mode 100644 index 0000000..e83cee7 --- /dev/null +++ b/xsd-tests/morphing/anonymous/unstable/buildfile @@ -0,0 +1,31 @@ +# file : morphing/anonymous/unstable/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +fs = includee-1 includee-2 + +./: {hxx cxx}{$fs} + +# Make sure that the schema files are compilable. +# +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) + }} +} + +# Test that the invalid schema files compilation expectedly fails. +# +./: testscript xsd{** -{$fs}} $xsd + +testscript{*}: +{ + test = $xsd + test.arguments = cxx-tree --std c++11 +} diff --git a/xsd-tests/morphing/anonymous/unstable/includee-1.xsd b/xsd-tests/morphing/anonymous/unstable/includee-1.xsd new file mode 100644 index 0000000..916816f --- /dev/null +++ b/xsd-tests/morphing/anonymous/unstable/includee-1.xsd @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/xsd-tests/morphing/anonymous/unstable/includee-2.xsd b/xsd-tests/morphing/anonymous/unstable/includee-2.xsd new file mode 100644 index 0000000..c0eda26 --- /dev/null +++ b/xsd-tests/morphing/anonymous/unstable/includee-2.xsd @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/xsd-tests/morphing/anonymous/unstable/includer.xsd b/xsd-tests/morphing/anonymous/unstable/includer.xsd new file mode 100644 index 0000000..4593b5f --- /dev/null +++ b/xsd-tests/morphing/anonymous/unstable/includer.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + diff --git a/xsd-tests/morphing/anonymous/unstable/testscript b/xsd-tests/morphing/anonymous/unstable/testscript new file mode 100644 index 0000000..a9057e1 --- /dev/null +++ b/xsd-tests/morphing/anonymous/unstable/testscript @@ -0,0 +1,11 @@ +# file : morphing/anonymous/unstable/testscript +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +: unstable-conflict +: +$* --output-dir $~ $src_base/includer.xsd 2>>/"EOE" != 0 + $src_base/includee-2.xsd:8:28: error: element name 'base' creates an unstable conflict when used as a type name + $src_base/includee-1.xsd:8:31: info: conflicting type is defined here + $src_base/includee-2.xsd:8:28: info: use --anonymous-regex to resolve this conflict + $src_base/includee-2.xsd:8:28: info: and don't forget to pass the same option when translating 'includee-2.xsd' and all the schemas that refer to it + EOE diff --git a/xsd-tests/processing/inheritance/.gitignore b/xsd-tests/processing/inheritance/.gitignore new file mode 100644 index 0000000..2c7adec --- /dev/null +++ b/xsd-tests/processing/inheritance/.gitignore @@ -0,0 +1,3 @@ +driver-??? +driver-???.?xx +test-*.?xx diff --git a/xsd-tests/processing/inheritance/buildfile b/xsd-tests/processing/inheritance/buildfile new file mode 100644 index 0000000..09e64a4 --- /dev/null +++ b/xsd-tests/processing/inheritance/buildfile @@ -0,0 +1,36 @@ +# file : processing/inheritance/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +for nm: 000 001 +{ + dr = "driver-$nm" + sc = "test-$nm" + + ./: exe{$dr}: cxx{$dr} {hxx cxx}{$sc} $libs + + cxx{$dr}: in{driver} + { + # Note: we can't use $nm$ in driver.cxx.in since it will be substituted by + # the latest $nm value. + # + num = $nm + } + + <{hxx cxx}{$sc}>: xsd{$sc} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/processing/inheritance/driver.cxx.in b/xsd-tests/processing/inheritance/driver.cxx.in new file mode 100644 index 0000000..df18427 --- /dev/null +++ b/xsd-tests/processing/inheritance/driver.cxx.in @@ -0,0 +1,9 @@ +// file : processing/inheritance/driver.cxx.in +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test-$num$.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/processing/inheritance/test-000.xsd b/xsd-tests/processing/inheritance/test-000.xsd new file mode 100644 index 0000000..ef1ef71 --- /dev/null +++ b/xsd-tests/processing/inheritance/test-000.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/processing/inheritance/test-001.xsd b/xsd-tests/processing/inheritance/test-001.xsd new file mode 100644 index 0000000..5afc997 --- /dev/null +++ b/xsd-tests/processing/inheritance/test-001.xsd @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/anonymous/buildfile b/xsd-tests/schema/anonymous/buildfile new file mode 100644 index 0000000..cc01697 --- /dev/null +++ b/xsd-tests/schema/anonymous/buildfile @@ -0,0 +1,22 @@ +# file : schema/anonymous/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/anonymous/driver.cxx b/xsd-tests/schema/anonymous/driver.cxx new file mode 100644 index 0000000..f902fdb --- /dev/null +++ b/xsd-tests/schema/anonymous/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/anonymous/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/anonymous/test.xsd b/xsd-tests/schema/anonymous/test.xsd new file mode 100644 index 0000000..cba3300 --- /dev/null +++ b/xsd-tests/schema/anonymous/test.xsd @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/any-attribute/buildfile b/xsd-tests/schema/any-attribute/buildfile new file mode 100644 index 0000000..e4275a4 --- /dev/null +++ b/xsd-tests/schema/any-attribute/buildfile @@ -0,0 +1,12 @@ +# file : schema/any-attribute/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Test that the invalid schema files compilation expectedly fails. +# +./: testscript xsd{*} $xsd + +testscript{*}: +{ + test = $xsd + test.arguments = cxx-tree --std c++11 +} diff --git a/xsd-tests/schema/any-attribute/test.xsd b/xsd-tests/schema/any-attribute/test.xsd new file mode 100644 index 0000000..55419c4 --- /dev/null +++ b/xsd-tests/schema/any-attribute/test.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/any-attribute/testscript b/xsd-tests/schema/any-attribute/testscript new file mode 100644 index 0000000..d9da7c1 --- /dev/null +++ b/xsd-tests/schema/any-attribute/testscript @@ -0,0 +1,8 @@ +# file : schema/any-attribute/testscript +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +: decl-after-any-attribute +: +$* --output-dir $~ $src_base/test.xsd 2>>/"EOE" != 0 + $src_base/test.xsd:12:44: error: anyAttribute must not be followed by other declarations + EOE diff --git a/xsd-tests/schema/any-type/buildfile b/xsd-tests/schema/any-type/buildfile new file mode 100644 index 0000000..e575562 --- /dev/null +++ b/xsd-tests/schema/any-type/buildfile @@ -0,0 +1,24 @@ +# file : schema/any-type/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) 2>>?~%EOE% + %.+(warning F00\d|info):.+%.+ + EOE +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/any-type/driver.cxx b/xsd-tests/schema/any-type/driver.cxx new file mode 100644 index 0000000..a94f099 --- /dev/null +++ b/xsd-tests/schema/any-type/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/any-type/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/any-type/test.xsd b/xsd-tests/schema/any-type/test.xsd new file mode 100644 index 0000000..9e3ff79 --- /dev/null +++ b/xsd-tests/schema/any-type/test.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/any/.gitignore b/xsd-tests/schema/any/.gitignore new file mode 100644 index 0000000..fca6147 --- /dev/null +++ b/xsd-tests/schema/any/.gitignore @@ -0,0 +1,5 @@ +driver-test +driver-fail +driver-test.?xx +driver-fail.?xx +fail.?xx diff --git a/xsd-tests/schema/any/buildfile b/xsd-tests/schema/any/buildfile new file mode 100644 index 0000000..6b76348 --- /dev/null +++ b/xsd-tests/schema/any/buildfile @@ -0,0 +1,47 @@ +# file : schema/any/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +for sc: test fail +{ + dr = "driver-$sc" + + ./: exe{$dr}: cxx{$dr} {hxx cxx}{$sc} $libs + + cxx{$dr}: in{driver} + { + # Note: we can't use $sc$ in driver.cxx.in since it will be substituted by + # the latest $sc value. + # + sch = $sc + } +} + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +<{hxx cxx}{fail}>: xsd{fail} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) 2>>?~%EOE% + %.+(warning T001:|info:).+%{9} + EOE +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/any/driver.cxx.in b/xsd-tests/schema/any/driver.cxx.in new file mode 100644 index 0000000..9c36761 --- /dev/null +++ b/xsd-tests/schema/any/driver.cxx.in @@ -0,0 +1,9 @@ +// file : schema/any/driver.cxx.in +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "$sch$.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/any/fail.xsd b/xsd-tests/schema/any/fail.xsd new file mode 100644 index 0000000..2eb9513 --- /dev/null +++ b/xsd-tests/schema/any/fail.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/any/test.xsd b/xsd-tests/schema/any/test.xsd new file mode 100644 index 0000000..ff896fd --- /dev/null +++ b/xsd-tests/schema/any/test.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/attribute-group/.gitignore b/xsd-tests/schema/attribute-group/.gitignore new file mode 100644 index 0000000..a935c30 --- /dev/null +++ b/xsd-tests/schema/attribute-group/.gitignore @@ -0,0 +1 @@ +global.?xx diff --git a/xsd-tests/schema/attribute-group/buildfile b/xsd-tests/schema/attribute-group/buildfile new file mode 100644 index 0000000..b9ca83b --- /dev/null +++ b/xsd-tests/schema/attribute-group/buildfile @@ -0,0 +1,22 @@ +# file : schema/attribute-group/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -global} {hxx cxx}{global} $libs + +<{hxx cxx}{global}>: xsd{global} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/attribute-group/driver.cxx b/xsd-tests/schema/attribute-group/driver.cxx new file mode 100644 index 0000000..328cef4 --- /dev/null +++ b/xsd-tests/schema/attribute-group/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/attribute-group/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "global.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/attribute-group/global.xsd b/xsd-tests/schema/attribute-group/global.xsd new file mode 100644 index 0000000..6ee0539 --- /dev/null +++ b/xsd-tests/schema/attribute-group/global.xsd @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/attribute/.gitignore b/xsd-tests/schema/attribute/.gitignore new file mode 100644 index 0000000..88cd012 --- /dev/null +++ b/xsd-tests/schema/attribute/.gitignore @@ -0,0 +1,3 @@ +global.?xx +local.?xx +ref.?xx diff --git a/xsd-tests/schema/attribute/buildfile b/xsd-tests/schema/attribute/buildfile new file mode 100644 index 0000000..00e5410 --- /dev/null +++ b/xsd-tests/schema/attribute/buildfile @@ -0,0 +1,27 @@ +# file : schema/attribute/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +fs = global local ref + +exe{driver}: {hxx cxx}{* -{$fs}} {hxx cxx}{$fs} $libs + +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/attribute/driver.cxx b/xsd-tests/schema/attribute/driver.cxx new file mode 100644 index 0000000..3d29b36 --- /dev/null +++ b/xsd-tests/schema/attribute/driver.cxx @@ -0,0 +1,11 @@ +// file : schema/attribute/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "ref.hxx" +#include "global.hxx" +#include "local.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/attribute/global.xsd b/xsd-tests/schema/attribute/global.xsd new file mode 100644 index 0000000..e2dcc93 --- /dev/null +++ b/xsd-tests/schema/attribute/global.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/attribute/local.xsd b/xsd-tests/schema/attribute/local.xsd new file mode 100644 index 0000000..7a7a480 --- /dev/null +++ b/xsd-tests/schema/attribute/local.xsd @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/attribute/ref.xsd b/xsd-tests/schema/attribute/ref.xsd new file mode 100644 index 0000000..d806ff3 --- /dev/null +++ b/xsd-tests/schema/attribute/ref.xsd @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/cardinality/buildfile b/xsd-tests/schema/cardinality/buildfile new file mode 100644 index 0000000..cfbb732 --- /dev/null +++ b/xsd-tests/schema/cardinality/buildfile @@ -0,0 +1,22 @@ +# file : schema/cardinality/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/cardinality/driver.cxx b/xsd-tests/schema/cardinality/driver.cxx new file mode 100644 index 0000000..d8b218e --- /dev/null +++ b/xsd-tests/schema/cardinality/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/cardinality/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/cardinality/test.xsd b/xsd-tests/schema/cardinality/test.xsd new file mode 100644 index 0000000..b27f923 --- /dev/null +++ b/xsd-tests/schema/cardinality/test.xsd @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/chameleon/.gitignore b/xsd-tests/schema/chameleon/.gitignore new file mode 100644 index 0000000..4ec7484 --- /dev/null +++ b/xsd-tests/schema/chameleon/.gitignore @@ -0,0 +1 @@ +includer.?xx diff --git a/xsd-tests/schema/chameleon/buildfile b/xsd-tests/schema/chameleon/buildfile new file mode 100644 index 0000000..0143422 --- /dev/null +++ b/xsd-tests/schema/chameleon/buildfile @@ -0,0 +1,27 @@ +# file : schema/chameleon/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +fs = includer schemas/includee + +exe{driver}: {hxx cxx}{** -{$fs}} {hxx cxx}{$fs} $libs + +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $directory($path($>[0])) \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/chameleon/driver.cxx b/xsd-tests/schema/chameleon/driver.cxx new file mode 100644 index 0000000..7b408ef --- /dev/null +++ b/xsd-tests/schema/chameleon/driver.cxx @@ -0,0 +1,10 @@ +// file : schema/chameleon/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "includer.hxx" +#include "schemas/includee.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/chameleon/includer.xsd b/xsd-tests/schema/chameleon/includer.xsd new file mode 100644 index 0000000..c93ea18 --- /dev/null +++ b/xsd-tests/schema/chameleon/includer.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/xsd-tests/schema/chameleon/schemas/.gitignore b/xsd-tests/schema/chameleon/schemas/.gitignore new file mode 100644 index 0000000..dcf4bb9 --- /dev/null +++ b/xsd-tests/schema/chameleon/schemas/.gitignore @@ -0,0 +1 @@ +includee.?xx diff --git a/xsd-tests/schema/chameleon/schemas/includee.xsd b/xsd-tests/schema/chameleon/schemas/includee.xsd new file mode 100644 index 0000000..d89b9c4 --- /dev/null +++ b/xsd-tests/schema/chameleon/schemas/includee.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/xsd-tests/schema/enumeration/buildfile b/xsd-tests/schema/enumeration/buildfile new file mode 100644 index 0000000..efb6b9e --- /dev/null +++ b/xsd-tests/schema/enumeration/buildfile @@ -0,0 +1,22 @@ +# file : schema/enumeration/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/enumeration/driver.cxx b/xsd-tests/schema/enumeration/driver.cxx new file mode 100644 index 0000000..406c8ab --- /dev/null +++ b/xsd-tests/schema/enumeration/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/enumeration/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/enumeration/test.xsd b/xsd-tests/schema/enumeration/test.xsd new file mode 100644 index 0000000..b8253d9 --- /dev/null +++ b/xsd-tests/schema/enumeration/test.xsd @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/forward/buildfile b/xsd-tests/schema/forward/buildfile new file mode 100644 index 0000000..969f99f --- /dev/null +++ b/xsd-tests/schema/forward/buildfile @@ -0,0 +1,22 @@ +# file : schema/forward/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/forward/driver.cxx b/xsd-tests/schema/forward/driver.cxx new file mode 100644 index 0000000..ee6519e --- /dev/null +++ b/xsd-tests/schema/forward/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/forward/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/forward/test.xsd b/xsd-tests/schema/forward/test.xsd new file mode 100644 index 0000000..c7cc24e --- /dev/null +++ b/xsd-tests/schema/forward/test.xsd @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/group/.gitignore b/xsd-tests/schema/group/.gitignore new file mode 100644 index 0000000..a935c30 --- /dev/null +++ b/xsd-tests/schema/group/.gitignore @@ -0,0 +1 @@ +global.?xx diff --git a/xsd-tests/schema/group/buildfile b/xsd-tests/schema/group/buildfile new file mode 100644 index 0000000..dd926dd --- /dev/null +++ b/xsd-tests/schema/group/buildfile @@ -0,0 +1,27 @@ +# file : schema/group/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +fs = test global + +exe{driver}: {hxx cxx}{* -{$fs}} {hxx cxx}{$fs} $libs + +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/group/driver.cxx b/xsd-tests/schema/group/driver.cxx new file mode 100644 index 0000000..e754194 --- /dev/null +++ b/xsd-tests/schema/group/driver.cxx @@ -0,0 +1,10 @@ +// file : schema/group/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" +#include "global.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/group/global.xsd b/xsd-tests/schema/group/global.xsd new file mode 100644 index 0000000..27ccadf --- /dev/null +++ b/xsd-tests/schema/group/global.xsd @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/group/test.xsd b/xsd-tests/schema/group/test.xsd new file mode 100644 index 0000000..7527cbb --- /dev/null +++ b/xsd-tests/schema/group/test.xsd @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/import/.gitignore b/xsd-tests/schema/import/.gitignore new file mode 100644 index 0000000..6cdf6db --- /dev/null +++ b/xsd-tests/schema/import/.gitignore @@ -0,0 +1 @@ +importer.?xx diff --git a/xsd-tests/schema/import/buildfile b/xsd-tests/schema/import/buildfile new file mode 100644 index 0000000..9e6aec5 --- /dev/null +++ b/xsd-tests/schema/import/buildfile @@ -0,0 +1,27 @@ +# file : schema/import/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +fs = importer schemas/importee + +exe{driver}: {hxx cxx}{** -{$fs}} {hxx cxx}{$fs} $libs + +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $directory($path($>[0])) \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/import/driver.cxx b/xsd-tests/schema/import/driver.cxx new file mode 100644 index 0000000..a94b2f3 --- /dev/null +++ b/xsd-tests/schema/import/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/import/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "importer.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/import/importer.xsd b/xsd-tests/schema/import/importer.xsd new file mode 100644 index 0000000..82fc33c --- /dev/null +++ b/xsd-tests/schema/import/importer.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/import/schemas/.gitignore b/xsd-tests/schema/import/schemas/.gitignore new file mode 100644 index 0000000..945fcfc --- /dev/null +++ b/xsd-tests/schema/import/schemas/.gitignore @@ -0,0 +1 @@ +importee.?xx diff --git a/xsd-tests/schema/import/schemas/importee.xsd b/xsd-tests/schema/import/schemas/importee.xsd new file mode 100644 index 0000000..9b03315 --- /dev/null +++ b/xsd-tests/schema/import/schemas/importee.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/xsd-tests/schema/include/.gitignore b/xsd-tests/schema/include/.gitignore new file mode 100644 index 0000000..4ec7484 --- /dev/null +++ b/xsd-tests/schema/include/.gitignore @@ -0,0 +1 @@ +includer.?xx diff --git a/xsd-tests/schema/include/buildfile b/xsd-tests/schema/include/buildfile new file mode 100644 index 0000000..904e819 --- /dev/null +++ b/xsd-tests/schema/include/buildfile @@ -0,0 +1,27 @@ +# file : schema/include/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +fs = includer schemas/includee + +exe{driver}: {hxx cxx}{** -{$fs}} {hxx cxx}{$fs} $libs + +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $directory($path($>[0])) \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/include/driver.cxx b/xsd-tests/schema/include/driver.cxx new file mode 100644 index 0000000..779d9d6 --- /dev/null +++ b/xsd-tests/schema/include/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/include/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "includer.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/include/includer.xsd b/xsd-tests/schema/include/includer.xsd new file mode 100644 index 0000000..c93ea18 --- /dev/null +++ b/xsd-tests/schema/include/includer.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/xsd-tests/schema/include/schemas/.gitignore b/xsd-tests/schema/include/schemas/.gitignore new file mode 100644 index 0000000..dcf4bb9 --- /dev/null +++ b/xsd-tests/schema/include/schemas/.gitignore @@ -0,0 +1 @@ +includee.?xx diff --git a/xsd-tests/schema/include/schemas/includee.xsd b/xsd-tests/schema/include/schemas/includee.xsd new file mode 100644 index 0000000..0a928f5 --- /dev/null +++ b/xsd-tests/schema/include/schemas/includee.xsd @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/xsd-tests/schema/inheritance/.gitignore b/xsd-tests/schema/inheritance/.gitignore new file mode 100644 index 0000000..9891c35 --- /dev/null +++ b/xsd-tests/schema/inheritance/.gitignore @@ -0,0 +1 @@ +cycle.?xx diff --git a/xsd-tests/schema/inheritance/buildfile b/xsd-tests/schema/inheritance/buildfile new file mode 100644 index 0000000..48c6dde --- /dev/null +++ b/xsd-tests/schema/inheritance/buildfile @@ -0,0 +1,30 @@ +# file : schema/inheritance/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +fs = cycle sourced-forward/includer + +./: {hxx cxx}{$fs} + +# Make sure that the schema files are compilable. +# +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --output-dir $directory($path($>[0])) \ + $path($<[0]) + }} +} + +# Test that the invalid schema files compilation expectedly fails. +# +./: testscript xsd{** -{$fs}} $xsd + +testscript{*}: +{ + test = $xsd + test.arguments = cxx-tree --std c++11 +} diff --git a/xsd-tests/schema/inheritance/cycle.xsd b/xsd-tests/schema/inheritance/cycle.xsd new file mode 100644 index 0000000..c705311 --- /dev/null +++ b/xsd-tests/schema/inheritance/cycle.xsd @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/inheritance/sourced-forward/.gitignore b/xsd-tests/schema/inheritance/sourced-forward/.gitignore new file mode 100644 index 0000000..4ec7484 --- /dev/null +++ b/xsd-tests/schema/inheritance/sourced-forward/.gitignore @@ -0,0 +1 @@ +includer.?xx diff --git a/xsd-tests/schema/inheritance/sourced-forward/includee.xsd b/xsd-tests/schema/inheritance/sourced-forward/includee.xsd new file mode 100644 index 0000000..531027d --- /dev/null +++ b/xsd-tests/schema/inheritance/sourced-forward/includee.xsd @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/xsd-tests/schema/inheritance/sourced-forward/includer.xsd b/xsd-tests/schema/inheritance/sourced-forward/includer.xsd new file mode 100644 index 0000000..7d18efc --- /dev/null +++ b/xsd-tests/schema/inheritance/sourced-forward/includer.xsd @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/xsd-tests/schema/inheritance/testscript b/xsd-tests/schema/inheritance/testscript new file mode 100644 index 0000000..5cc649d --- /dev/null +++ b/xsd-tests/schema/inheritance/testscript @@ -0,0 +1,8 @@ +# file : schema/inheritance/testscript +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +: base-not-found +: +$* --output-dir $~ $src_base/sourced-forward/includee.xsd 2>>/"EOE" != 0 + $src_base/sourced-forward/includee.xsd:7:35: error: base type 'Base' not found in 'Derived' definition + EOE diff --git a/xsd-tests/schema/list/anonymous/test.xsd b/xsd-tests/schema/list/anonymous/test.xsd new file mode 100644 index 0000000..7db39ba --- /dev/null +++ b/xsd-tests/schema/list/anonymous/test.xsd @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/xsd-tests/schema/list/any-simple-type/test.xsd b/xsd-tests/schema/list/any-simple-type/test.xsd new file mode 100644 index 0000000..29fe95c --- /dev/null +++ b/xsd-tests/schema/list/any-simple-type/test.xsd @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/xsd-tests/schema/list/buildfile b/xsd-tests/schema/list/buildfile new file mode 100644 index 0000000..5d8f7fc --- /dev/null +++ b/xsd-tests/schema/list/buildfile @@ -0,0 +1,31 @@ +# file : schema/list/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +fs = test anonymous/test + +./: {hxx cxx}{$fs} + +# Make sure that the schema files are compilable. +# +for f: $fs +{ + <{hxx cxx}{$f}>: xsd{$f} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $directory($path($>[0])) \ + $path($<[0]) + }} +} + +# Test that the invalid schema files compilation expectedly fails. +# +./: testscript xsd{** -{$fs}} $xsd + +testscript{*}: +{ + test = $xsd + test.arguments = cxx-tree --std c++11 +} diff --git a/xsd-tests/schema/list/test.xsd b/xsd-tests/schema/list/test.xsd new file mode 100644 index 0000000..e16a58d --- /dev/null +++ b/xsd-tests/schema/list/test.xsd @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/list/testscript b/xsd-tests/schema/list/testscript new file mode 100644 index 0000000..0916be0 --- /dev/null +++ b/xsd-tests/schema/list/testscript @@ -0,0 +1,8 @@ +# file : schema/list/testscript +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +: invalid-definition +: +$* --output-dir $~ $src_base/any-simple-type/test.xsd 2>>/"EOE" != 0 + $src_base/any-simple-type/test.xsd:9:45: error: item type definition must have variety of atomic or union where all member types must be atomic + EOE diff --git a/xsd-tests/schema/no-namespace/buildfile b/xsd-tests/schema/no-namespace/buildfile new file mode 100644 index 0000000..e407218 --- /dev/null +++ b/xsd-tests/schema/no-namespace/buildfile @@ -0,0 +1,22 @@ +# file : schema/no-namespace/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/no-namespace/driver.cxx b/xsd-tests/schema/no-namespace/driver.cxx new file mode 100644 index 0000000..ef62942 --- /dev/null +++ b/xsd-tests/schema/no-namespace/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/no-namespace/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/no-namespace/test.xsd b/xsd-tests/schema/no-namespace/test.xsd new file mode 100644 index 0000000..b426e8a --- /dev/null +++ b/xsd-tests/schema/no-namespace/test.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/xsd-tests/schema/recursive/buildfile b/xsd-tests/schema/recursive/buildfile new file mode 100644 index 0000000..34542c6 --- /dev/null +++ b/xsd-tests/schema/recursive/buildfile @@ -0,0 +1,22 @@ +# file : schema/recursive/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/recursive/driver.cxx b/xsd-tests/schema/recursive/driver.cxx new file mode 100644 index 0000000..55c33cd --- /dev/null +++ b/xsd-tests/schema/recursive/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/recursive/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/recursive/test.xsd b/xsd-tests/schema/recursive/test.xsd new file mode 100644 index 0000000..6efc7d2 --- /dev/null +++ b/xsd-tests/schema/recursive/test.xsd @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/ref-type/invalid/buildfile b/xsd-tests/schema/ref-type/invalid/buildfile new file mode 100644 index 0000000..42c7bfb --- /dev/null +++ b/xsd-tests/schema/ref-type/invalid/buildfile @@ -0,0 +1,12 @@ +# file : schema/ref-type/invalid/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Test that the invalid schema files compilation expectedly fails. +# +./: testscript xsd{*} $xsd + +testscript{*}: +{ + test = $xsd + test.arguments = cxx-tree --std c++11 +} diff --git a/xsd-tests/schema/ref-type/invalid/invalid-0.xsd b/xsd-tests/schema/ref-type/invalid/invalid-0.xsd new file mode 100644 index 0000000..7ce82ed --- /dev/null +++ b/xsd-tests/schema/ref-type/invalid/invalid-0.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/xsd-tests/schema/ref-type/invalid/invalid-1.xsd b/xsd-tests/schema/ref-type/invalid/invalid-1.xsd new file mode 100644 index 0000000..d989065 --- /dev/null +++ b/xsd-tests/schema/ref-type/invalid/invalid-1.xsd @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/xsd-tests/schema/ref-type/invalid/testscript b/xsd-tests/schema/ref-type/invalid/testscript new file mode 100644 index 0000000..ce2e049 --- /dev/null +++ b/xsd-tests/schema/ref-type/invalid/testscript @@ -0,0 +1,16 @@ +# file : schema/ref-type/invalid/testscript +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +: unresolvable-namespace-prefix +: +$* --output-dir $~ $src_base/invalid-0.xsd 2>>~%EOE%d != 0 + %\.+invalid-0.xsd:10:75: error: unable to resolve namespace ''% + %\.+invalid-0.xsd:11:77: error: unable to resolve namespace prefix 't' in 't:author'% + %\.+invalid-0.xsd:15:81: error: unable to resolve namespace 'http://www.codesynthesis.com/xmlns/phony'% + EOE + +: unresolvable-type +: +$* --output-dir $~ $src_base/invalid-1.xsd 2>>~%EOE%d != 0 + %\.+invalid-1.xsd:9:79: error: unable to resolve type 'author' in namespace 'http://www.codesynthesis.com/xmlns/test'% + EOE diff --git a/xsd-tests/schema/ref-type/valid/.gitignore b/xsd-tests/schema/ref-type/valid/.gitignore new file mode 100644 index 0000000..fd203ec --- /dev/null +++ b/xsd-tests/schema/ref-type/valid/.gitignore @@ -0,0 +1,6 @@ +driver-idref +driver-idrefs +driver-idref.?xx +driver-idrefs.?xx +idref.?xx +idrefs.?xx diff --git a/xsd-tests/schema/ref-type/valid/buildfile b/xsd-tests/schema/ref-type/valid/buildfile new file mode 100644 index 0000000..0534fce --- /dev/null +++ b/xsd-tests/schema/ref-type/valid/buildfile @@ -0,0 +1,35 @@ +# file : schema/ref-type/valid/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +for sc: idref idrefs +{ + dr = "driver-$sc" + + ./: exe{$dr}: cxx{$dr} {hxx cxx}{$sc} $libs + + cxx{$dr}: in{driver} + { + # Note: we can't use $sc$ in driver.cxx.in since it will be substituted by + # the latest $sc value. + # + sch = $sc + } + + <{hxx cxx}{$sc}>: xsd{$sc} $xsd + {{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) + }} +} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/ref-type/valid/driver.cxx.in b/xsd-tests/schema/ref-type/valid/driver.cxx.in new file mode 100644 index 0000000..434aa40 --- /dev/null +++ b/xsd-tests/schema/ref-type/valid/driver.cxx.in @@ -0,0 +1,9 @@ +// file : schema/ref-type/valid/driver.cxx.in +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "$sch$.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/ref-type/valid/idref.xsd b/xsd-tests/schema/ref-type/valid/idref.xsd new file mode 100644 index 0000000..49ebe40 --- /dev/null +++ b/xsd-tests/schema/ref-type/valid/idref.xsd @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/ref-type/valid/idrefs.xsd b/xsd-tests/schema/ref-type/valid/idrefs.xsd new file mode 100644 index 0000000..b68ed03 --- /dev/null +++ b/xsd-tests/schema/ref-type/valid/idrefs.xsd @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/restriction/buildfile b/xsd-tests/schema/restriction/buildfile new file mode 100644 index 0000000..c05718a --- /dev/null +++ b/xsd-tests/schema/restriction/buildfile @@ -0,0 +1,22 @@ +# file : schema/restriction/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/restriction/driver.cxx b/xsd-tests/schema/restriction/driver.cxx new file mode 100644 index 0000000..2ffeb74 --- /dev/null +++ b/xsd-tests/schema/restriction/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/restriction/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/restriction/test.xsd b/xsd-tests/schema/restriction/test.xsd new file mode 100644 index 0000000..331ba78 --- /dev/null +++ b/xsd-tests/schema/restriction/test.xsd @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd-tests/schema/union/buildfile b/xsd-tests/schema/union/buildfile new file mode 100644 index 0000000..00d0a83 --- /dev/null +++ b/xsd-tests/schema/union/buildfile @@ -0,0 +1,22 @@ +# file : schema/union/buildfile +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# Just make sure that the schema files and the xsd-generated C++ mappings are +# compilable. +# +import libs = libxsd%lib{xsd} +import libs += libxerces-c%lib{xerces-c} + +exe{driver}: {hxx cxx}{* -test} {hxx cxx}{test} $libs + +<{hxx cxx}{test}>: xsd{test} $xsd +{{ + diag xsd ($<[0]) # @@ TMP + + $xsd cxx-tree --std c++11 \ + --root-element-all \ + --output-dir $out_base \ + $path($<[0]) +}} + +cxx.poptions =+ "-I$out_base" diff --git a/xsd-tests/schema/union/driver.cxx b/xsd-tests/schema/union/driver.cxx new file mode 100644 index 0000000..45f290f --- /dev/null +++ b/xsd-tests/schema/union/driver.cxx @@ -0,0 +1,9 @@ +// file : schema/union/driver.cxx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "test.hxx" + +int +main (int, char*[]) +{ +} diff --git a/xsd-tests/schema/union/test.xsd b/xsd-tests/schema/union/test.xsd new file mode 100644 index 0000000..706f6f2 --- /dev/null +++ b/xsd-tests/schema/union/test.xsd @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.1