mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-25 15:45:38 +00:00
Squashed 'external/rapidjson/' content from commit 2e8f5d897
git-subtree-dir: external/rapidjson git-subtree-split: 2e8f5d897d9d461a7273b4b812b0127f321b1dcf
This commit is contained in:
commit
6e7ab511db
22
.gitattributes
vendored
Normal file
22
.gitattributes
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Set the default behavior, in case people don't have core.autocrlf set.
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# Explicitly declare text files you want to always be normalized and converted
|
||||||
|
# to native line endings on checkout.
|
||||||
|
*.cpp text
|
||||||
|
*.h text
|
||||||
|
*.txt text
|
||||||
|
*.md text
|
||||||
|
*.cmake text
|
||||||
|
*.svg text
|
||||||
|
*.dot text
|
||||||
|
*.yml text
|
||||||
|
*.in text
|
||||||
|
*.sh text
|
||||||
|
*.autopkg text
|
||||||
|
Dockerfile text
|
||||||
|
|
||||||
|
# Denote all files that are truly binary and should not be modified.
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.json binary
|
29
.gitignore
vendored
Normal file
29
.gitignore
vendored
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/bin/*
|
||||||
|
!/bin/data
|
||||||
|
!/bin/encodings
|
||||||
|
!/bin/jsonchecker
|
||||||
|
!/bin/types
|
||||||
|
!/bin/unittestschema
|
||||||
|
/build
|
||||||
|
/doc/html
|
||||||
|
/doc/doxygen_*.db
|
||||||
|
*.a
|
||||||
|
|
||||||
|
# Temporary files created during CMake build
|
||||||
|
CMakeCache.txt
|
||||||
|
CMakeFiles
|
||||||
|
cmake_install.cmake
|
||||||
|
CTestTestfile.cmake
|
||||||
|
Makefile
|
||||||
|
RapidJSON*.cmake
|
||||||
|
RapidJSON.pc
|
||||||
|
Testing
|
||||||
|
/googletest
|
||||||
|
install_manifest.txt
|
||||||
|
Doxyfile
|
||||||
|
Doxyfile.zh-cn
|
||||||
|
DartConfiguration.tcl
|
||||||
|
*.nupkg
|
||||||
|
|
||||||
|
# Files created by OS
|
||||||
|
*.DS_Store
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "thirdparty/gtest"]
|
||||||
|
path = thirdparty/gtest
|
||||||
|
url = https://github.com/google/googletest.git
|
166
.travis.yml
Normal file
166
.travis.yml
Normal file
|
@ -0,0 +1,166 @@
|
||||||
|
sudo: required
|
||||||
|
dist: xenial
|
||||||
|
|
||||||
|
language: cpp
|
||||||
|
cache:
|
||||||
|
- ccache
|
||||||
|
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- cmake
|
||||||
|
- valgrind
|
||||||
|
- clang-8
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
- USE_CCACHE=1
|
||||||
|
- CCACHE_SLOPPINESS=pch_defines,time_macros
|
||||||
|
- CCACHE_COMPRESS=1
|
||||||
|
- CCACHE_MAXSIZE=100M
|
||||||
|
- ARCH_FLAGS_x86='-m32' # #266: don't use SSE on 32-bit
|
||||||
|
- ARCH_FLAGS_x86_64='-msse4.2' # use SSE4.2 on 64-bit
|
||||||
|
- ARCH_FLAGS_aarch64='-march=armv8-a'
|
||||||
|
- GITHUB_REPO='Tencent/rapidjson'
|
||||||
|
- secure: "HrsaCb+N66EG1HR+LWH1u51SjaJyRwJEDzqJGYMB7LJ/bfqb9mWKF1fLvZGk46W5t7TVaXRDD5KHFx9DPWvKn4gRUVkwTHEy262ah5ORh8M6n/6VVVajeV/AYt2C0sswdkDBDO4Xq+xy5gdw3G8s1A4Inbm73pUh+6vx+7ltBbk="
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
# gcc
|
||||||
|
- env: CONF=release ARCH=x86 CXX11=ON CXX17=OFF MEMBERSMAP=OFF
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=release ARCH=x86_64 CXX11=ON CXX17=OFF MEMBERSMAP=OFF
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=release ARCH=x86_64 CXX11=ON CXX17=OFF MEMBERSMAP=ON
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=OFF MEMBERSMAP=OFF
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=OFF MEMBERSMAP=OFF
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=ON MEMBERSMAP=ON CXX_FLAGS='-D_GLIBCXX_DEBUG'
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=ON MEMBERSMAP=ON CXX_FLAGS='-D_GLIBCXX_DEBUG'
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=release ARCH=aarch64 CXX11=ON CXX17=OFF MEMBERSMAP=OFF
|
||||||
|
compiler: gcc
|
||||||
|
arch: arm64
|
||||||
|
- env: CONF=release ARCH=aarch64 CXX11=OFF CXX17=OFF MEMBERSMAP=OFF
|
||||||
|
compiler: gcc
|
||||||
|
arch: arm64
|
||||||
|
- env: CONF=release ARCH=aarch64 CXX11=OFF CXX17=ON MEMBERSMAP=ON
|
||||||
|
compiler: gcc
|
||||||
|
arch: arm64
|
||||||
|
# clang
|
||||||
|
- env: CONF=release ARCH=x86 CXX11=ON CXX17=OFF MEMBERSMAP=ON CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=release ARCH=x86_64 CXX11=ON CXX17=OFF MEMBERSMAP=ON CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=release ARCH=x86_64 CXX11=ON CXX17=OFF MEMBERSMAP=OFF CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=OFF MEMBERSMAP=ON CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=OFF MEMBERSMAP=ON CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=ON MEMBERSMAP=OFF CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=ON MEMBERSMAP=OFF CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: amd64
|
||||||
|
- env: CONF=debug ARCH=aarch64 CXX11=ON CXX17=OFF MEMBERSMAP=ON CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: arm64
|
||||||
|
- env: CONF=debug ARCH=aarch64 CXX11=OFF CXX17=OFF MEMBERSMAP=ON CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: arm64
|
||||||
|
- env: CONF=debug ARCH=aarch64 CXX11=OFF CXX17=ON MEMBERSMAP=OFF CCACHE_CPP2=yes
|
||||||
|
compiler: clang
|
||||||
|
arch: arm64
|
||||||
|
# coverage report
|
||||||
|
- env: CONF=debug ARCH=x86 GCOV_FLAGS='--coverage' CXX_FLAGS='-O0' CXX11=OFF CXX17=OFF
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
cache:
|
||||||
|
- ccache
|
||||||
|
- pip
|
||||||
|
after_success:
|
||||||
|
- pip install --user cpp-coveralls
|
||||||
|
- coveralls -r .. --gcov-options '\-lp' -e thirdparty -e example -e test -e build/CMakeFiles -e include/rapidjson/msinttypes -e include/rapidjson/internal/meta.h -e include/rapidjson/error/en.h
|
||||||
|
- env: CONF=debug ARCH=x86_64 GCOV_FLAGS='--coverage' CXX_FLAGS='-O0' CXX11=ON CXX17=OFF MEMBERSMAP=ON
|
||||||
|
compiler: gcc
|
||||||
|
arch: amd64
|
||||||
|
cache:
|
||||||
|
- ccache
|
||||||
|
- pip
|
||||||
|
after_success:
|
||||||
|
- pip install --user cpp-coveralls
|
||||||
|
- coveralls -r .. --gcov-options '\-lp' -e thirdparty -e example -e test -e build/CMakeFiles -e include/rapidjson/msinttypes -e include/rapidjson/internal/meta.h -e include/rapidjson/error/en.h
|
||||||
|
- env: CONF=debug ARCH=aarch64 GCOV_FLAGS='--coverage' CXX_FLAGS='-O0' CXX11=OFF CXX17=ON
|
||||||
|
compiler: gcc
|
||||||
|
arch: arm64
|
||||||
|
cache:
|
||||||
|
- ccache
|
||||||
|
- pip
|
||||||
|
after_success:
|
||||||
|
- pip install --user cpp-coveralls
|
||||||
|
- coveralls -r .. --gcov-options '\-lp' -e thirdparty -e example -e test -e build/CMakeFiles -e include/rapidjson/msinttypes -e include/rapidjson/internal/meta.h -e include/rapidjson/error/en.h
|
||||||
|
- script: # Documentation task
|
||||||
|
- cd build
|
||||||
|
- cmake .. -DRAPIDJSON_HAS_STDSTRING=ON -DCMAKE_VERBOSE_MAKEFILE=ON
|
||||||
|
- make travis_doc
|
||||||
|
cache: false
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- doxygen
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- if [ "x86_64" = "$(arch)" ]; then sudo apt-get install -y g++-multilib libc6-dbg:i386 --allow-unauthenticated; fi
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
# travis provides clang-7 for amd64 and clang-3.8 for arm64
|
||||||
|
# here use clang-8 to all architectures as clang-7 is not available for arm64
|
||||||
|
- if [ -f /usr/bin/clang++-8 ]; then
|
||||||
|
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-8 1000;
|
||||||
|
sudo update-alternatives --config clang++;
|
||||||
|
export PATH=/usr/bin:$PATH;
|
||||||
|
fi
|
||||||
|
- if [ "$CXX" = "clang++" ]; then export CCACHE_CPP2=yes; fi
|
||||||
|
- ccache -s
|
||||||
|
# hack to avoid Valgrind bug (https://bugs.kde.org/show_bug.cgi?id=326469),
|
||||||
|
# exposed by merging PR#163 (using -march=native)
|
||||||
|
# TODO: Since this bug is already fixed. Remove this when valgrind can be upgraded.
|
||||||
|
- sed -i "s/-march=native//" CMakeLists.txt
|
||||||
|
- mkdir build
|
||||||
|
|
||||||
|
script:
|
||||||
|
- if [ "$CXX" = "clang++" ]; then export CXXFLAGS="-stdlib=libc++ ${CXXFLAGS}"; fi
|
||||||
|
- >
|
||||||
|
eval "ARCH_FLAGS=\${ARCH_FLAGS_${ARCH}}" ;
|
||||||
|
(cd build && cmake
|
||||||
|
-DRAPIDJSON_HAS_STDSTRING=ON
|
||||||
|
-DRAPIDJSON_USE_MEMBERSMAP=$MEMBERSMAP
|
||||||
|
-DRAPIDJSON_BUILD_CXX11=$CXX11
|
||||||
|
-DRAPIDJSON_BUILD_CXX17=$CXX17
|
||||||
|
-DCMAKE_VERBOSE_MAKEFILE=ON
|
||||||
|
-DCMAKE_BUILD_TYPE=$CONF
|
||||||
|
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS $GCOV_FLAGS $CXX_FLAGS"
|
||||||
|
-DCMAKE_EXE_LINKER_FLAGS=$GCOV_FLAGS
|
||||||
|
..)
|
||||||
|
- cd build
|
||||||
|
- make tests -j 2
|
||||||
|
- make examples -j 2
|
||||||
|
- ctest -j 2 -V `[ "$CONF" = "release" ] || echo "-E perftest"`
|
158
CHANGELOG.md
Normal file
158
CHANGELOG.md
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
# Change Log
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
## 1.1.0 - 2016-08-25
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* Add GenericDocument ctor overload to specify JSON type (#369)
|
||||||
|
* Add FAQ (#372, #373, #374, #376)
|
||||||
|
* Add forward declaration header `fwd.h`
|
||||||
|
* Add @PlatformIO Library Registry manifest file (#400)
|
||||||
|
* Implement assignment operator for BigInteger (#404)
|
||||||
|
* Add comments support (#443)
|
||||||
|
* Adding coapp definition (#460)
|
||||||
|
* documenttest.cpp: EXPECT_THROW when checking empty allocator (470)
|
||||||
|
* GenericDocument: add implicit conversion to ParseResult (#480)
|
||||||
|
* Use <wchar.h> with C++ linkage on Windows ARM (#485)
|
||||||
|
* Detect little endian for Microsoft ARM targets
|
||||||
|
* Check Nan/Inf when writing a double (#510)
|
||||||
|
* Add JSON Schema Implementation (#522)
|
||||||
|
* Add iostream wrapper (#530)
|
||||||
|
* Add Jsonx example for converting JSON into JSONx (a XML format) (#531)
|
||||||
|
* Add optional unresolvedTokenIndex parameter to Pointer::Get() (#532)
|
||||||
|
* Add encoding validation option for Writer/PrettyWriter (#534)
|
||||||
|
* Add Writer::SetMaxDecimalPlaces() (#536)
|
||||||
|
* Support {0, } and {0, m} in Regex (#539)
|
||||||
|
* Add Value::Get/SetFloat(), Value::IsLossLessFloat/Double() (#540)
|
||||||
|
* Add stream position check to reader unit tests (#541)
|
||||||
|
* Add Templated accessors and range-based for (#542)
|
||||||
|
* Add (Pretty)Writer::RawValue() (#543)
|
||||||
|
* Add Document::Parse(std::string), Document::Parse(const char*, size_t length) and related APIs. (#553)
|
||||||
|
* Add move constructor for GenericSchemaDocument (#554)
|
||||||
|
* Add VS2010 and VS2015 to AppVeyor CI (#555)
|
||||||
|
* Add parse-by-parts example (#556, #562)
|
||||||
|
* Support parse number as string (#564, #589)
|
||||||
|
* Add kFormatSingleLineArray for PrettyWriter (#577)
|
||||||
|
* Added optional support for trailing commas (#584)
|
||||||
|
* Added filterkey and filterkeydom examples (#615)
|
||||||
|
* Added npm docs (#639)
|
||||||
|
* Allow options for writing and parsing NaN/Infinity (#641)
|
||||||
|
* Add std::string overload to PrettyWriter::Key() when RAPIDJSON_HAS_STDSTRING is defined (#698)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Fix gcc/clang/vc warnings (#350, #394, #397, #444, #447, #473, #515, #582, #589, #595, #667)
|
||||||
|
* Fix documentation (#482, #511, #550, #557, #614, #635, #660)
|
||||||
|
* Fix emscripten alignment issue (#535)
|
||||||
|
* Fix missing allocator to uses of AddMember in document (#365)
|
||||||
|
* CMake will no longer complain that the minimum CMake version is not specified (#501)
|
||||||
|
* Make it usable with old VC8 (VS2005) (#383)
|
||||||
|
* Prohibit C++11 move from Document to Value (#391)
|
||||||
|
* Try to fix incorrect 64-bit alignment (#419)
|
||||||
|
* Check return of fwrite to avoid warn_unused_result build failures (#421)
|
||||||
|
* Fix UB in GenericDocument::ParseStream (#426)
|
||||||
|
* Keep Document value unchanged on parse error (#439)
|
||||||
|
* Add missing return statement (#450)
|
||||||
|
* Fix Document::Parse(const Ch*) for transcoding (#478)
|
||||||
|
* encodings.h: fix typo in preprocessor condition (#495)
|
||||||
|
* Custom Microsoft headers are necessary only for Visual Studio 2012 and lower (#559)
|
||||||
|
* Fix memory leak for invalid regex (26e69ffde95ba4773ab06db6457b78f308716f4b)
|
||||||
|
* Fix a bug in schema minimum/maximum keywords for 64-bit integer (e7149d665941068ccf8c565e77495521331cf390)
|
||||||
|
* Fix a crash bug in regex (#605)
|
||||||
|
* Fix schema "required" keyword cannot handle duplicated keys (#609)
|
||||||
|
* Fix cmake CMP0054 warning (#612)
|
||||||
|
* Added missing include guards in istreamwrapper.h and ostreamwrapper.h (#634)
|
||||||
|
* Fix undefined behaviour (#646)
|
||||||
|
* Fix buffer overrun using PutN (#673)
|
||||||
|
* Fix rapidjson::value::Get<std::string>() may returns wrong data (#681)
|
||||||
|
* Add Flush() for all value types (#689)
|
||||||
|
* Handle malloc() fail in PoolAllocator (#691)
|
||||||
|
* Fix builds on x32 platform. #703
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Clarify problematic JSON license (#392)
|
||||||
|
* Move Travis to container based infrastructure (#504, #558)
|
||||||
|
* Make whitespace array more compact (#513)
|
||||||
|
* Optimize Writer::WriteString() with SIMD (#544)
|
||||||
|
* x86-64 48-bit pointer optimization for GenericValue (#546)
|
||||||
|
* Define RAPIDJSON_HAS_CXX11_RVALUE_REFS directly in clang (#617)
|
||||||
|
* Make GenericSchemaDocument constructor explicit (#674)
|
||||||
|
* Optimize FindMember when use std::string (#690)
|
||||||
|
|
||||||
|
## [1.0.2] - 2015-05-14
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* Add Value::XXXMember(...) overloads for std::string (#335)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Include rapidjson.h for all internal/error headers.
|
||||||
|
* Parsing some numbers incorrectly in full-precision mode (`kFullPrecisionParseFlag`) (#342)
|
||||||
|
* Fix some numbers parsed incorrectly (#336)
|
||||||
|
* Fix alignment of 64bit platforms (#328)
|
||||||
|
* Fix MemoryPoolAllocator::Clear() to clear user-buffer (0691502573f1afd3341073dd24b12c3db20fbde4)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* CMakeLists for include as a thirdparty in projects (#334, #337)
|
||||||
|
* Change Document::ParseStream() to use stack allocator for Reader (ffbe38614732af8e0b3abdc8b50071f386a4a685)
|
||||||
|
|
||||||
|
## [1.0.1] - 2015-04-25
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* Changelog following [Keep a CHANGELOG](https://github.com/olivierlacan/keep-a-changelog) suggestions.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Parsing of some numbers (e.g. "1e-00011111111111") causing assertion (#314).
|
||||||
|
* Visual C++ 32-bit compilation error in `diyfp.h` (#317).
|
||||||
|
|
||||||
|
## [1.0.0] - 2015-04-22
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* 100% [Coverall](https://coveralls.io/r/Tencent/rapidjson?branch=master) coverage.
|
||||||
|
* Version macros (#311)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* A bug in trimming long number sequence (4824f12efbf01af72b8cb6fc96fae7b097b73015).
|
||||||
|
* Double quote in unicode escape (#288).
|
||||||
|
* Negative zero roundtrip (double only) (#289).
|
||||||
|
* Standardize behavior of `memcpy()` and `malloc()` (0c5c1538dcfc7f160e5a4aa208ddf092c787be5a, #305, 0e8bbe5e3ef375e7f052f556878be0bd79e9062d).
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
* Remove an invalid `Document::ParseInsitu()` API (e7f1c6dd08b522cfcf9aed58a333bd9a0c0ccbeb).
|
||||||
|
|
||||||
|
## 1.0-beta - 2015-04-8
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* RFC 7159 (#101)
|
||||||
|
* Optional Iterative Parser (#76)
|
||||||
|
* Deep-copy values (#20)
|
||||||
|
* Error code and message (#27)
|
||||||
|
* ASCII Encoding (#70)
|
||||||
|
* `kParseStopWhenDoneFlag` (#83)
|
||||||
|
* `kParseFullPrecisionFlag` (881c91d696f06b7f302af6d04ec14dd08db66ceb)
|
||||||
|
* Add `Key()` to handler concept (#134)
|
||||||
|
* C++11 compatibility and support (#128)
|
||||||
|
* Optimized number-to-string and vice versa conversions (#137, #80)
|
||||||
|
* Short-String Optimization (#131)
|
||||||
|
* Local stream optimization by traits (#32)
|
||||||
|
* Travis & Appveyor Continuous Integration, with Valgrind verification (#24, #242)
|
||||||
|
* Redo all documentation (English, Simplified Chinese)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Copyright ownership transferred to THL A29 Limited (a Tencent company).
|
||||||
|
* Migrating from Premake to CMAKE (#192)
|
||||||
|
* Resolve all warning reports
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
* Remove other JSON libraries for performance comparison (#180)
|
||||||
|
|
||||||
|
## 0.11 - 2012-11-16
|
||||||
|
|
||||||
|
## 0.1 - 2011-11-18
|
||||||
|
|
||||||
|
[Unreleased]: https://github.com/Tencent/rapidjson/compare/v1.1.0...HEAD
|
||||||
|
[1.1.0]: https://github.com/Tencent/rapidjson/compare/v1.0.2...v1.1.0
|
||||||
|
[1.0.2]: https://github.com/Tencent/rapidjson/compare/v1.0.1...v1.0.2
|
||||||
|
[1.0.1]: https://github.com/Tencent/rapidjson/compare/v1.0.0...v1.0.1
|
||||||
|
[1.0.0]: https://github.com/Tencent/rapidjson/compare/v1.0-beta...v1.0.0
|
248
CMakeLists.txt
Normal file
248
CMakeLists.txt
Normal file
|
@ -0,0 +1,248 @@
|
||||||
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
||||||
|
if(POLICY CMP0025)
|
||||||
|
# detect Apple's Clang
|
||||||
|
cmake_policy(SET CMP0025 NEW)
|
||||||
|
endif()
|
||||||
|
if(POLICY CMP0054)
|
||||||
|
cmake_policy(SET CMP0054 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules)
|
||||||
|
|
||||||
|
set(LIB_MAJOR_VERSION "1")
|
||||||
|
set(LIB_MINOR_VERSION "1")
|
||||||
|
set(LIB_PATCH_VERSION "0")
|
||||||
|
set(LIB_VERSION_STRING "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_PATCH_VERSION}")
|
||||||
|
|
||||||
|
if (CMAKE_VERSION VERSION_LESS 3.0)
|
||||||
|
PROJECT(RapidJSON CXX)
|
||||||
|
else()
|
||||||
|
cmake_policy(SET CMP0048 NEW)
|
||||||
|
PROJECT(RapidJSON VERSION "${LIB_VERSION_STRING}" LANGUAGES CXX)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# compile in release with debug info mode by default
|
||||||
|
if(NOT CMAKE_BUILD_TYPE)
|
||||||
|
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Build all binaries in a separate directory
|
||||||
|
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
|
option(RAPIDJSON_BUILD_DOC "Build rapidjson documentation." ON)
|
||||||
|
option(RAPIDJSON_BUILD_EXAMPLES "Build rapidjson examples." ON)
|
||||||
|
option(RAPIDJSON_BUILD_TESTS "Build rapidjson perftests and unittests." ON)
|
||||||
|
option(RAPIDJSON_BUILD_THIRDPARTY_GTEST
|
||||||
|
"Use gtest installation in `thirdparty/gtest` by default if available" OFF)
|
||||||
|
|
||||||
|
option(RAPIDJSON_BUILD_CXX11 "Build rapidjson with C++11" ON)
|
||||||
|
option(RAPIDJSON_BUILD_CXX17 "Build rapidjson with C++17" OFF)
|
||||||
|
if(RAPIDJSON_BUILD_CXX11)
|
||||||
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(RAPIDJSON_BUILD_ASAN "Build rapidjson with address sanitizer (gcc/clang)" OFF)
|
||||||
|
option(RAPIDJSON_BUILD_UBSAN "Build rapidjson with undefined behavior sanitizer (gcc/clang)" OFF)
|
||||||
|
|
||||||
|
option(RAPIDJSON_ENABLE_INSTRUMENTATION_OPT "Build rapidjson with -march or -mcpu options" ON)
|
||||||
|
|
||||||
|
option(RAPIDJSON_HAS_STDSTRING "" OFF)
|
||||||
|
if(RAPIDJSON_HAS_STDSTRING)
|
||||||
|
add_definitions(-DRAPIDJSON_HAS_STDSTRING)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(RAPIDJSON_USE_MEMBERSMAP "" OFF)
|
||||||
|
if(RAPIDJSON_USE_MEMBERSMAP)
|
||||||
|
add_definitions(-DRAPIDJSON_USE_MEMBERSMAP=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_program(CCACHE_FOUND ccache)
|
||||||
|
if(CCACHE_FOUND)
|
||||||
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
|
||||||
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
|
||||||
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments -fcolor-diagnostics")
|
||||||
|
endif()
|
||||||
|
endif(CCACHE_FOUND)
|
||||||
|
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
if(RAPIDJSON_ENABLE_INSTRUMENTATION_OPT AND NOT CMAKE_CROSSCOMPILING)
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native")
|
||||||
|
else()
|
||||||
|
#FIXME: x86 is -march=native, but doesn't mean every arch is this option. To keep original project's compatibility, I leave this except POWER.
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror")
|
||||||
|
set(EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wsign-conversion)
|
||||||
|
if (RAPIDJSON_BUILD_CXX11 AND CMAKE_VERSION VERSION_LESS 3.1)
|
||||||
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7.0")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
|
endif()
|
||||||
|
elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
|
||||||
|
endif()
|
||||||
|
if (RAPIDJSON_BUILD_ASAN)
|
||||||
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.0")
|
||||||
|
message(FATAL_ERROR "GCC < 4.8 doesn't support the address sanitizer")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if (RAPIDJSON_BUILD_UBSAN)
|
||||||
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9.0")
|
||||||
|
message(FATAL_ERROR "GCC < 4.9 doesn't support the undefined behavior sanitizer")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
if(NOT CMAKE_CROSSCOMPILING)
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native")
|
||||||
|
else()
|
||||||
|
#FIXME: x86 is -march=native, but doesn't mean every arch is this option. To keep original project's compatibility, I leave this except POWER.
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wno-missing-field-initializers")
|
||||||
|
set(EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wimplicit-fallthrough)
|
||||||
|
if (RAPIDJSON_BUILD_CXX11 AND CMAKE_VERSION VERSION_LESS 3.1)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
|
elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.0")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
|
||||||
|
endif()
|
||||||
|
if (RAPIDJSON_BUILD_ASAN)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
||||||
|
endif()
|
||||||
|
if (RAPIDJSON_BUILD_UBSAN)
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
||||||
|
# CMake >= 3.10 should handle the above CMAKE_CXX_STANDARD fine, otherwise use /std:c++XX with MSVC >= 19.10
|
||||||
|
if (RAPIDJSON_BUILD_CXX11 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.10")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++11")
|
||||||
|
elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.14")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17")
|
||||||
|
endif()
|
||||||
|
# Always compile with /WX
|
||||||
|
if(CMAKE_CXX_FLAGS MATCHES "/WX-")
|
||||||
|
string(REGEX REPLACE "/WX-" "/WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
|
||||||
|
endif()
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qarch=auto")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#add extra search paths for libraries and includes
|
||||||
|
SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "The directory the headers are installed in")
|
||||||
|
SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE STRING "Directory where lib will install")
|
||||||
|
SET(DOC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}" CACHE PATH "Path to the documentation")
|
||||||
|
|
||||||
|
IF(UNIX OR CYGWIN)
|
||||||
|
SET(_CMAKE_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}")
|
||||||
|
ELSEIF(WIN32)
|
||||||
|
SET(_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/cmake")
|
||||||
|
ENDIF()
|
||||||
|
SET(CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" CACHE PATH "The directory cmake files are installed in")
|
||||||
|
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
|
|
||||||
|
if(RAPIDJSON_BUILD_DOC)
|
||||||
|
add_subdirectory(doc)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_target(travis_doc)
|
||||||
|
add_custom_command(TARGET travis_doc
|
||||||
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/travis-doxygen.sh)
|
||||||
|
|
||||||
|
if(RAPIDJSON_BUILD_EXAMPLES)
|
||||||
|
add_subdirectory(example)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(RAPIDJSON_BUILD_TESTS)
|
||||||
|
if(MSVC11)
|
||||||
|
# required for VS2012 due to missing support for variadic templates
|
||||||
|
add_definitions(-D_VARIADIC_MAX=10)
|
||||||
|
endif(MSVC11)
|
||||||
|
add_subdirectory(test)
|
||||||
|
include(CTest)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# pkg-config
|
||||||
|
IF (UNIX OR CYGWIN)
|
||||||
|
CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
|
||||||
|
@ONLY)
|
||||||
|
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
|
||||||
|
DESTINATION "${LIB_INSTALL_DIR}/pkgconfig"
|
||||||
|
COMPONENT pkgconfig)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
install(FILES readme.md
|
||||||
|
DESTINATION "${DOC_INSTALL_DIR}"
|
||||||
|
COMPONENT doc)
|
||||||
|
|
||||||
|
install(DIRECTORY include/rapidjson
|
||||||
|
DESTINATION "${INCLUDE_INSTALL_DIR}"
|
||||||
|
COMPONENT dev)
|
||||||
|
|
||||||
|
install(DIRECTORY example/
|
||||||
|
DESTINATION "${DOC_INSTALL_DIR}/examples"
|
||||||
|
COMPONENT examples
|
||||||
|
# Following patterns are for excluding the intermediate/object files
|
||||||
|
# from an install of in-source CMake build.
|
||||||
|
PATTERN "CMakeFiles" EXCLUDE
|
||||||
|
PATTERN "Makefile" EXCLUDE
|
||||||
|
PATTERN "cmake_install.cmake" EXCLUDE)
|
||||||
|
|
||||||
|
# Provide config and version files to be used by other applications
|
||||||
|
# ===============================
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Export package for use from the build tree
|
||||||
|
EXPORT( PACKAGE ${PROJECT_NAME} )
|
||||||
|
|
||||||
|
# Create the RapidJSONConfig.cmake file for other cmake projects.
|
||||||
|
# ... for the build tree
|
||||||
|
SET( CONFIG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
SET( CONFIG_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
SET( ${PROJECT_NAME}_INCLUDE_DIR "\${${PROJECT_NAME}_SOURCE_DIR}/include" )
|
||||||
|
|
||||||
|
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake @ONLY )
|
||||||
|
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}ConfigVersion.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake @ONLY)
|
||||||
|
|
||||||
|
# ... for the install tree
|
||||||
|
SET( CMAKECONFIG_INSTALL_DIR ${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME} )
|
||||||
|
FILE( RELATIVE_PATH REL_INCLUDE_DIR
|
||||||
|
"${CMAKECONFIG_INSTALL_DIR}"
|
||||||
|
"${CMAKE_INSTALL_PREFIX}/include" )
|
||||||
|
|
||||||
|
SET( ${PROJECT_NAME}_INCLUDE_DIR "\${${PROJECT_NAME}_CMAKE_DIR}/${REL_INCLUDE_DIR}" )
|
||||||
|
SET( CONFIG_SOURCE_DIR )
|
||||||
|
SET( CONFIG_DIR )
|
||||||
|
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Config.cmake @ONLY )
|
||||||
|
|
||||||
|
INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Config.cmake"
|
||||||
|
DESTINATION ${CMAKECONFIG_INSTALL_DIR} )
|
||||||
|
|
||||||
|
# Install files
|
||||||
|
INSTALL(FILES
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
||||||
|
DESTINATION "${CMAKE_INSTALL_DIR}"
|
||||||
|
COMPONENT dev)
|
30
CMakeModules/FindGTestSrc.cmake
Normal file
30
CMakeModules/FindGTestSrc.cmake
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
|
||||||
|
SET(GTEST_SEARCH_PATH
|
||||||
|
"${GTEST_SOURCE_DIR}"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/../thirdparty/gtest/googletest")
|
||||||
|
|
||||||
|
IF(UNIX)
|
||||||
|
IF(RAPIDJSON_BUILD_THIRDPARTY_GTEST)
|
||||||
|
LIST(APPEND GTEST_SEARCH_PATH "/usr/src/gtest")
|
||||||
|
ELSE()
|
||||||
|
LIST(INSERT GTEST_SEARCH_PATH 1 "/usr/src/gtest")
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
FIND_PATH(GTEST_SOURCE_DIR
|
||||||
|
NAMES CMakeLists.txt src/gtest_main.cc
|
||||||
|
PATHS ${GTEST_SEARCH_PATH})
|
||||||
|
|
||||||
|
|
||||||
|
# Debian installs gtest include directory in /usr/include, thus need to look
|
||||||
|
# for include directory separately from source directory.
|
||||||
|
FIND_PATH(GTEST_INCLUDE_DIR
|
||||||
|
NAMES gtest/gtest.h
|
||||||
|
PATH_SUFFIXES include
|
||||||
|
HINTS ${GTEST_SOURCE_DIR}
|
||||||
|
PATHS ${GTEST_SEARCH_PATH})
|
||||||
|
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(GTestSrc DEFAULT_MSG
|
||||||
|
GTEST_SOURCE_DIR
|
||||||
|
GTEST_INCLUDE_DIR)
|
7
RapidJSON.pc.in
Normal file
7
RapidJSON.pc.in
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
includedir=@INCLUDE_INSTALL_DIR@
|
||||||
|
|
||||||
|
Name: @PROJECT_NAME@
|
||||||
|
Description: A fast JSON parser/generator for C++ with both SAX/DOM style API
|
||||||
|
Version: @LIB_VERSION_STRING@
|
||||||
|
URL: https://github.com/Tencent/rapidjson
|
||||||
|
Cflags: -I${includedir}
|
25
RapidJSONConfig.cmake.in
Normal file
25
RapidJSONConfig.cmake.in
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
################################################################################
|
||||||
|
# CMake minimum version required
|
||||||
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# RapidJSON source dir
|
||||||
|
set( RapidJSON_SOURCE_DIR "@CONFIG_SOURCE_DIR@")
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# RapidJSON build dir
|
||||||
|
set( RapidJSON_DIR "@CONFIG_DIR@")
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Compute paths
|
||||||
|
get_filename_component(RapidJSON_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||||
|
|
||||||
|
set( RapidJSON_INCLUDE_DIR "@RapidJSON_INCLUDE_DIR@" )
|
||||||
|
set( RapidJSON_INCLUDE_DIRS "@RapidJSON_INCLUDE_DIR@" )
|
||||||
|
message(STATUS "RapidJSON found. Headers: ${RapidJSON_INCLUDE_DIRS}")
|
||||||
|
|
||||||
|
if(NOT TARGET rapidjson)
|
||||||
|
add_library(rapidjson INTERFACE IMPORTED)
|
||||||
|
set_property(TARGET rapidjson PROPERTY
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES ${RapidJSON_INCLUDE_DIRS})
|
||||||
|
endif()
|
10
RapidJSONConfigVersion.cmake.in
Normal file
10
RapidJSONConfigVersion.cmake.in
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
SET(PACKAGE_VERSION "@LIB_VERSION_STRING@")
|
||||||
|
|
||||||
|
IF (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
|
||||||
|
SET(PACKAGE_VERSION_EXACT "true")
|
||||||
|
ENDIF (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
|
||||||
|
IF (NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
|
||||||
|
SET(PACKAGE_VERSION_COMPATIBLE "true")
|
||||||
|
ELSE (NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
|
||||||
|
SET(PACKAGE_VERSION_UNSUITABLE "true")
|
||||||
|
ENDIF (NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
|
102
appveyor.yml
Normal file
102
appveyor.yml
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
version: 1.1.0.{build}
|
||||||
|
|
||||||
|
configuration:
|
||||||
|
- Debug
|
||||||
|
- Release
|
||||||
|
|
||||||
|
environment:
|
||||||
|
matrix:
|
||||||
|
# - VS_VERSION: 9 2008
|
||||||
|
# VS_PLATFORM: win32
|
||||||
|
# - VS_VERSION: 9 2008
|
||||||
|
# VS_PLATFORM: x64
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
|
VS_VERSION: 10 2010
|
||||||
|
VS_PLATFORM: win32
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: OFF
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
|
VS_VERSION: 10 2010
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: ON
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
|
VS_VERSION: 11 2012
|
||||||
|
VS_PLATFORM: win32
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: ON
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
|
VS_VERSION: 11 2012
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: OFF
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
|
VS_VERSION: 12 2013
|
||||||
|
VS_PLATFORM: win32
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: OFF
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
|
||||||
|
VS_VERSION: 12 2013
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: ON
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
VS_VERSION: 14 2015
|
||||||
|
VS_PLATFORM: win32
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: ON
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
VS_VERSION: 14 2015
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: OFF
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
VS_VERSION: 15 2017
|
||||||
|
VS_PLATFORM: win32
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: OFF
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
VS_VERSION: 15 2017
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: ON
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
VS_VERSION: 15 2017
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: ON
|
||||||
|
CXX17: OFF
|
||||||
|
MEMBERSMAP: OFF
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
VS_VERSION: 15 2017
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: ON
|
||||||
|
MEMBERSMAP: OFF
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
|
VS_VERSION: 16 2019
|
||||||
|
VS_PLATFORM: x64
|
||||||
|
CXX11: OFF
|
||||||
|
CXX17: ON
|
||||||
|
MEMBERSMAP: ON
|
||||||
|
|
||||||
|
before_build:
|
||||||
|
- git submodule update --init --recursive
|
||||||
|
- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=true -DRAPIDJSON_BUILD_CXX11=%CXX11% -DRAPIDJSON_BUILD_CXX17=%CXX17% -DRAPIDJSON_USE_MEMBERSMAP=%MEMBERSMAP% -Wno-dev
|
||||||
|
|
||||||
|
build:
|
||||||
|
project: Build\VS\RapidJSON.sln
|
||||||
|
parallel: true
|
||||||
|
verbosity: minimal
|
||||||
|
|
||||||
|
test_script:
|
||||||
|
- cd Build\VS && if %CONFIGURATION%==Debug (ctest --verbose -E perftest --build-config %CONFIGURATION%) else (ctest --verbose --build-config %CONFIGURATION%)
|
1
bin/data/abcde.txt
Normal file
1
bin/data/abcde.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
abcde
|
22
bin/data/glossary.json
Normal file
22
bin/data/glossary.json
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"glossary": {
|
||||||
|
"title": "example glossary",
|
||||||
|
"GlossDiv": {
|
||||||
|
"title": "S",
|
||||||
|
"GlossList": {
|
||||||
|
"GlossEntry": {
|
||||||
|
"ID": "SGML",
|
||||||
|
"SortAs": "SGML",
|
||||||
|
"GlossTerm": "Standard Generalized Markup Language",
|
||||||
|
"Acronym": "SGML",
|
||||||
|
"Abbrev": "ISO 8879:1986",
|
||||||
|
"GlossDef": {
|
||||||
|
"para": "A meta-markup language, used to create markup languages such as DocBook.",
|
||||||
|
"GlossSeeAlso": ["GML", "XML"]
|
||||||
|
},
|
||||||
|
"GlossSee": "markup"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
27
bin/data/menu.json
Normal file
27
bin/data/menu.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{"menu": {
|
||||||
|
"header": "SVG Viewer",
|
||||||
|
"items": [
|
||||||
|
{"id": "Open"},
|
||||||
|
{"id": "OpenNew", "label": "Open New"},
|
||||||
|
null,
|
||||||
|
{"id": "ZoomIn", "label": "Zoom In"},
|
||||||
|
{"id": "ZoomOut", "label": "Zoom Out"},
|
||||||
|
{"id": "OriginalView", "label": "Original View"},
|
||||||
|
null,
|
||||||
|
{"id": "Quality"},
|
||||||
|
{"id": "Pause"},
|
||||||
|
{"id": "Mute"},
|
||||||
|
null,
|
||||||
|
{"id": "Find", "label": "Find..."},
|
||||||
|
{"id": "FindAgain", "label": "Find Again"},
|
||||||
|
{"id": "Copy"},
|
||||||
|
{"id": "CopyAgain", "label": "Copy Again"},
|
||||||
|
{"id": "CopySVG", "label": "Copy SVG"},
|
||||||
|
{"id": "ViewSVG", "label": "View SVG"},
|
||||||
|
{"id": "ViewSource", "label": "View Source"},
|
||||||
|
{"id": "SaveAs", "label": "Save As"},
|
||||||
|
null,
|
||||||
|
{"id": "Help"},
|
||||||
|
{"id": "About", "label": "About Adobe CVG Viewer..."}
|
||||||
|
]
|
||||||
|
}}
|
1
bin/data/readme.txt
Normal file
1
bin/data/readme.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
sample.json is obtained from http://code.google.com/p/json-test-suite/downloads/detail?name=sample.zip
|
3315
bin/data/sample.json
Normal file
3315
bin/data/sample.json
Normal file
File diff suppressed because it is too large
Load diff
88
bin/data/webapp.json
Normal file
88
bin/data/webapp.json
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
{"web-app": {
|
||||||
|
"servlet": [
|
||||||
|
{
|
||||||
|
"servlet-name": "cofaxCDS",
|
||||||
|
"servlet-class": "org.cofax.cds.CDSServlet",
|
||||||
|
"init-param": {
|
||||||
|
"configGlossary:installationAt": "Philadelphia, PA",
|
||||||
|
"configGlossary:adminEmail": "ksm@pobox.com",
|
||||||
|
"configGlossary:poweredBy": "Cofax",
|
||||||
|
"configGlossary:poweredByIcon": "/images/cofax.gif",
|
||||||
|
"configGlossary:staticPath": "/content/static",
|
||||||
|
"templateProcessorClass": "org.cofax.WysiwygTemplate",
|
||||||
|
"templateLoaderClass": "org.cofax.FilesTemplateLoader",
|
||||||
|
"templatePath": "templates",
|
||||||
|
"templateOverridePath": "",
|
||||||
|
"defaultListTemplate": "listTemplate.htm",
|
||||||
|
"defaultFileTemplate": "articleTemplate.htm",
|
||||||
|
"useJSP": false,
|
||||||
|
"jspListTemplate": "listTemplate.jsp",
|
||||||
|
"jspFileTemplate": "articleTemplate.jsp",
|
||||||
|
"cachePackageTagsTrack": 200,
|
||||||
|
"cachePackageTagsStore": 200,
|
||||||
|
"cachePackageTagsRefresh": 60,
|
||||||
|
"cacheTemplatesTrack": 100,
|
||||||
|
"cacheTemplatesStore": 50,
|
||||||
|
"cacheTemplatesRefresh": 15,
|
||||||
|
"cachePagesTrack": 200,
|
||||||
|
"cachePagesStore": 100,
|
||||||
|
"cachePagesRefresh": 10,
|
||||||
|
"cachePagesDirtyRead": 10,
|
||||||
|
"searchEngineListTemplate": "forSearchEnginesList.htm",
|
||||||
|
"searchEngineFileTemplate": "forSearchEngines.htm",
|
||||||
|
"searchEngineRobotsDb": "WEB-INF/robots.db",
|
||||||
|
"useDataStore": true,
|
||||||
|
"dataStoreClass": "org.cofax.SqlDataStore",
|
||||||
|
"redirectionClass": "org.cofax.SqlRedirection",
|
||||||
|
"dataStoreName": "cofax",
|
||||||
|
"dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
|
||||||
|
"dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
|
||||||
|
"dataStoreUser": "sa",
|
||||||
|
"dataStorePassword": "dataStoreTestQuery",
|
||||||
|
"dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
|
||||||
|
"dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
|
||||||
|
"dataStoreInitConns": 10,
|
||||||
|
"dataStoreMaxConns": 100,
|
||||||
|
"dataStoreConnUsageLimit": 100,
|
||||||
|
"dataStoreLogLevel": "debug",
|
||||||
|
"maxUrlLength": 500}},
|
||||||
|
{
|
||||||
|
"servlet-name": "cofaxEmail",
|
||||||
|
"servlet-class": "org.cofax.cds.EmailServlet",
|
||||||
|
"init-param": {
|
||||||
|
"mailHost": "mail1",
|
||||||
|
"mailHostOverride": "mail2"}},
|
||||||
|
{
|
||||||
|
"servlet-name": "cofaxAdmin",
|
||||||
|
"servlet-class": "org.cofax.cds.AdminServlet"},
|
||||||
|
|
||||||
|
{
|
||||||
|
"servlet-name": "fileServlet",
|
||||||
|
"servlet-class": "org.cofax.cds.FileServlet"},
|
||||||
|
{
|
||||||
|
"servlet-name": "cofaxTools",
|
||||||
|
"servlet-class": "org.cofax.cms.CofaxToolsServlet",
|
||||||
|
"init-param": {
|
||||||
|
"templatePath": "toolstemplates/",
|
||||||
|
"log": 1,
|
||||||
|
"logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
|
||||||
|
"logMaxSize": "",
|
||||||
|
"dataLog": 1,
|
||||||
|
"dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
|
||||||
|
"dataLogMaxSize": "",
|
||||||
|
"removePageCache": "/content/admin/remove?cache=pages&id=",
|
||||||
|
"removeTemplateCache": "/content/admin/remove?cache=templates&id=",
|
||||||
|
"fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
|
||||||
|
"lookInContext": 1,
|
||||||
|
"adminGroupID": 4,
|
||||||
|
"betaServer": true}}],
|
||||||
|
"servlet-mapping": {
|
||||||
|
"cofaxCDS": "/",
|
||||||
|
"cofaxEmail": "/cofaxutil/aemail/*",
|
||||||
|
"cofaxAdmin": "/admin/*",
|
||||||
|
"fileServlet": "/static/*",
|
||||||
|
"cofaxTools": "/tools/*"},
|
||||||
|
|
||||||
|
"taglib": {
|
||||||
|
"taglib-uri": "cofax.tld",
|
||||||
|
"taglib-location": "/WEB-INF/tlds/cofax.tld"}}}
|
26
bin/data/widget.json
Normal file
26
bin/data/widget.json
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{"widget": {
|
||||||
|
"debug": "on",
|
||||||
|
"window": {
|
||||||
|
"title": "Sample Konfabulator Widget",
|
||||||
|
"name": "main_window",
|
||||||
|
"width": 500,
|
||||||
|
"height": 500
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"src": "Images/Sun.png",
|
||||||
|
"name": "sun1",
|
||||||
|
"hOffset": 250,
|
||||||
|
"vOffset": 250,
|
||||||
|
"alignment": "center"
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"data": "Click Here",
|
||||||
|
"size": 36,
|
||||||
|
"style": "bold",
|
||||||
|
"name": "text1",
|
||||||
|
"hOffset": 250,
|
||||||
|
"vOffset": 100,
|
||||||
|
"alignment": "center",
|
||||||
|
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
|
||||||
|
}
|
||||||
|
}}
|
150
bin/draft-04/schema
Normal file
150
bin/draft-04/schema
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
{
|
||||||
|
"id": "http://json-schema.org/draft-04/schema#",
|
||||||
|
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||||
|
"description": "Core schema meta-schema",
|
||||||
|
"definitions": {
|
||||||
|
"schemaArray": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": { "$ref": "#" }
|
||||||
|
},
|
||||||
|
"positiveInteger": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"positiveIntegerDefault0": {
|
||||||
|
"allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ]
|
||||||
|
},
|
||||||
|
"simpleTypes": {
|
||||||
|
"enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
|
||||||
|
},
|
||||||
|
"stringArray": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"minItems": 1,
|
||||||
|
"uniqueItems": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri"
|
||||||
|
},
|
||||||
|
"$schema": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"default": {},
|
||||||
|
"multipleOf": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"exclusiveMinimum": true
|
||||||
|
},
|
||||||
|
"maximum": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"exclusiveMaximum": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"minimum": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"exclusiveMinimum": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"maxLength": { "$ref": "#/definitions/positiveInteger" },
|
||||||
|
"minLength": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
||||||
|
"pattern": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "regex"
|
||||||
|
},
|
||||||
|
"additionalItems": {
|
||||||
|
"anyOf": [
|
||||||
|
{ "type": "boolean" },
|
||||||
|
{ "$ref": "#" }
|
||||||
|
],
|
||||||
|
"default": {}
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
"anyOf": [
|
||||||
|
{ "$ref": "#" },
|
||||||
|
{ "$ref": "#/definitions/schemaArray" }
|
||||||
|
],
|
||||||
|
"default": {}
|
||||||
|
},
|
||||||
|
"maxItems": { "$ref": "#/definitions/positiveInteger" },
|
||||||
|
"minItems": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
||||||
|
"uniqueItems": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"maxProperties": { "$ref": "#/definitions/positiveInteger" },
|
||||||
|
"minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
||||||
|
"required": { "$ref": "#/definitions/stringArray" },
|
||||||
|
"additionalProperties": {
|
||||||
|
"anyOf": [
|
||||||
|
{ "type": "boolean" },
|
||||||
|
{ "$ref": "#" }
|
||||||
|
],
|
||||||
|
"default": {}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": { "$ref": "#" },
|
||||||
|
"default": {}
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": { "$ref": "#" },
|
||||||
|
"default": {}
|
||||||
|
},
|
||||||
|
"patternProperties": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": { "$ref": "#" },
|
||||||
|
"default": {}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"anyOf": [
|
||||||
|
{ "$ref": "#" },
|
||||||
|
{ "$ref": "#/definitions/stringArray" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"enum": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"uniqueItems": true
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"anyOf": [
|
||||||
|
{ "$ref": "#/definitions/simpleTypes" },
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": { "$ref": "#/definitions/simpleTypes" },
|
||||||
|
"minItems": 1,
|
||||||
|
"uniqueItems": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"allOf": { "$ref": "#/definitions/schemaArray" },
|
||||||
|
"anyOf": { "$ref": "#/definitions/schemaArray" },
|
||||||
|
"oneOf": { "$ref": "#/definitions/schemaArray" },
|
||||||
|
"not": { "$ref": "#" }
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"exclusiveMaximum": [ "maximum" ],
|
||||||
|
"exclusiveMinimum": [ "minimum" ]
|
||||||
|
},
|
||||||
|
"default": {}
|
||||||
|
}
|
BIN
bin/encodings/utf16be.json
Normal file
BIN
bin/encodings/utf16be.json
Normal file
Binary file not shown.
BIN
bin/encodings/utf16bebom.json
Normal file
BIN
bin/encodings/utf16bebom.json
Normal file
Binary file not shown.
BIN
bin/encodings/utf16le.json
Normal file
BIN
bin/encodings/utf16le.json
Normal file
Binary file not shown.
BIN
bin/encodings/utf16lebom.json
Normal file
BIN
bin/encodings/utf16lebom.json
Normal file
Binary file not shown.
BIN
bin/encodings/utf32be.json
Normal file
BIN
bin/encodings/utf32be.json
Normal file
Binary file not shown.
BIN
bin/encodings/utf32bebom.json
Normal file
BIN
bin/encodings/utf32bebom.json
Normal file
Binary file not shown.
BIN
bin/encodings/utf32le.json
Normal file
BIN
bin/encodings/utf32le.json
Normal file
Binary file not shown.
BIN
bin/encodings/utf32lebom.json
Normal file
BIN
bin/encodings/utf32lebom.json
Normal file
Binary file not shown.
7
bin/encodings/utf8.json
Normal file
7
bin/encodings/utf8.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"en":"I can eat glass and it doesn't hurt me.",
|
||||||
|
"zh-Hant":"我能吞下玻璃而不傷身體。",
|
||||||
|
"zh-Hans":"我能吞下玻璃而不伤身体。",
|
||||||
|
"ja":"私はガラスを食べられます。それは私を傷つけません。",
|
||||||
|
"ko":"나는 유리를 먹을 수 있어요. 그래도 아프지 않아요"
|
||||||
|
}
|
7
bin/encodings/utf8bom.json
Normal file
7
bin/encodings/utf8bom.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"en":"I can eat glass and it doesn't hurt me.",
|
||||||
|
"zh-Hant":"我能吞下玻璃而不傷身體。",
|
||||||
|
"zh-Hans":"我能吞下玻璃而不伤身体。",
|
||||||
|
"ja":"私はガラスを食べられます。それは私を傷つけません。",
|
||||||
|
"ko":"나는 유리를 먹을 수 있어요. 그래도 아프지 않아요"
|
||||||
|
}
|
1
bin/jsonchecker/fail1.json
Normal file
1
bin/jsonchecker/fail1.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
"A JSON payload should be an object or array, not a string."
|
1
bin/jsonchecker/fail10.json
Normal file
1
bin/jsonchecker/fail10.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Extra value after close": true} "misplaced quoted value"
|
1
bin/jsonchecker/fail11.json
Normal file
1
bin/jsonchecker/fail11.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Illegal expression": 1 + 2}
|
1
bin/jsonchecker/fail12.json
Normal file
1
bin/jsonchecker/fail12.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Illegal invocation": alert()}
|
1
bin/jsonchecker/fail13.json
Normal file
1
bin/jsonchecker/fail13.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Numbers cannot have leading zeroes": 013}
|
1
bin/jsonchecker/fail14.json
Normal file
1
bin/jsonchecker/fail14.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Numbers cannot be hex": 0x14}
|
1
bin/jsonchecker/fail15.json
Normal file
1
bin/jsonchecker/fail15.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["Illegal backslash escape: \x15"]
|
1
bin/jsonchecker/fail16.json
Normal file
1
bin/jsonchecker/fail16.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[\naked]
|
1
bin/jsonchecker/fail17.json
Normal file
1
bin/jsonchecker/fail17.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["Illegal backslash escape: \017"]
|
1
bin/jsonchecker/fail18.json
Normal file
1
bin/jsonchecker/fail18.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
|
1
bin/jsonchecker/fail19.json
Normal file
1
bin/jsonchecker/fail19.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Missing colon" null}
|
1
bin/jsonchecker/fail2.json
Normal file
1
bin/jsonchecker/fail2.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["Unclosed array"
|
1
bin/jsonchecker/fail20.json
Normal file
1
bin/jsonchecker/fail20.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Double colon":: null}
|
1
bin/jsonchecker/fail21.json
Normal file
1
bin/jsonchecker/fail21.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Comma instead of colon", null}
|
1
bin/jsonchecker/fail22.json
Normal file
1
bin/jsonchecker/fail22.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["Colon instead of comma": false]
|
1
bin/jsonchecker/fail23.json
Normal file
1
bin/jsonchecker/fail23.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["Bad value", truth]
|
1
bin/jsonchecker/fail24.json
Normal file
1
bin/jsonchecker/fail24.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
['single quote']
|
1
bin/jsonchecker/fail25.json
Normal file
1
bin/jsonchecker/fail25.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[" tab character in string "]
|
1
bin/jsonchecker/fail26.json
Normal file
1
bin/jsonchecker/fail26.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["tab\ character\ in\ string\ "]
|
2
bin/jsonchecker/fail27.json
Normal file
2
bin/jsonchecker/fail27.json
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
["line
|
||||||
|
break"]
|
2
bin/jsonchecker/fail28.json
Normal file
2
bin/jsonchecker/fail28.json
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
["line\
|
||||||
|
break"]
|
1
bin/jsonchecker/fail29.json
Normal file
1
bin/jsonchecker/fail29.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[0e]
|
1
bin/jsonchecker/fail3.json
Normal file
1
bin/jsonchecker/fail3.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{unquoted_key: "keys must be quoted"}
|
1
bin/jsonchecker/fail30.json
Normal file
1
bin/jsonchecker/fail30.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[0e+]
|
1
bin/jsonchecker/fail31.json
Normal file
1
bin/jsonchecker/fail31.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[0e+-1]
|
1
bin/jsonchecker/fail32.json
Normal file
1
bin/jsonchecker/fail32.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Comma instead if closing brace": true,
|
1
bin/jsonchecker/fail33.json
Normal file
1
bin/jsonchecker/fail33.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["mismatch"}
|
1
bin/jsonchecker/fail4.json
Normal file
1
bin/jsonchecker/fail4.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["extra comma",]
|
1
bin/jsonchecker/fail5.json
Normal file
1
bin/jsonchecker/fail5.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["double extra comma",,]
|
1
bin/jsonchecker/fail6.json
Normal file
1
bin/jsonchecker/fail6.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[ , "<-- missing value"]
|
1
bin/jsonchecker/fail7.json
Normal file
1
bin/jsonchecker/fail7.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["Comma after the close"],
|
1
bin/jsonchecker/fail8.json
Normal file
1
bin/jsonchecker/fail8.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
["Extra close"]]
|
1
bin/jsonchecker/fail9.json
Normal file
1
bin/jsonchecker/fail9.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"Extra comma": true,}
|
58
bin/jsonchecker/pass1.json
Normal file
58
bin/jsonchecker/pass1.json
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
[
|
||||||
|
"JSON Test Pattern pass1",
|
||||||
|
{"object with 1 member":["array with 1 element"]},
|
||||||
|
{},
|
||||||
|
[],
|
||||||
|
-42,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"integer": 1234567890,
|
||||||
|
"real": -9876.543210,
|
||||||
|
"e": 0.123456789e-12,
|
||||||
|
"E": 1.234567890E+34,
|
||||||
|
"": 23456789012E66,
|
||||||
|
"zero": 0,
|
||||||
|
"one": 1,
|
||||||
|
"space": " ",
|
||||||
|
"quote": "\"",
|
||||||
|
"backslash": "\\",
|
||||||
|
"controls": "\b\f\n\r\t",
|
||||||
|
"slash": "/ & \/",
|
||||||
|
"alpha": "abcdefghijklmnopqrstuvwyz",
|
||||||
|
"ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
|
||||||
|
"digit": "0123456789",
|
||||||
|
"0123456789": "digit",
|
||||||
|
"special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
|
||||||
|
"hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
|
||||||
|
"true": true,
|
||||||
|
"false": false,
|
||||||
|
"null": null,
|
||||||
|
"array":[ ],
|
||||||
|
"object":{ },
|
||||||
|
"address": "50 St. James Street",
|
||||||
|
"url": "http://www.JSON.org/",
|
||||||
|
"comment": "// /* <!-- --",
|
||||||
|
"# -- --> */": " ",
|
||||||
|
" s p a c e d " :[1,2 , 3
|
||||||
|
|
||||||
|
,
|
||||||
|
|
||||||
|
4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],
|
||||||
|
"jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
|
||||||
|
"quotes": "" \u0022 %22 0x22 034 "",
|
||||||
|
"\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
|
||||||
|
: "A key can be any string"
|
||||||
|
},
|
||||||
|
0.5 ,98.6
|
||||||
|
,
|
||||||
|
99.44
|
||||||
|
,
|
||||||
|
|
||||||
|
1066,
|
||||||
|
1e1,
|
||||||
|
0.1e1,
|
||||||
|
1e-1,
|
||||||
|
1e00,2e+00,2e-00
|
||||||
|
,"rosebud"]
|
1
bin/jsonchecker/pass2.json
Normal file
1
bin/jsonchecker/pass2.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
|
6
bin/jsonchecker/pass3.json
Normal file
6
bin/jsonchecker/pass3.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"JSON Test Pattern pass3": {
|
||||||
|
"The outermost value": "must be an object or array.",
|
||||||
|
"In this test": "It is an object."
|
||||||
|
}
|
||||||
|
}
|
3
bin/jsonchecker/readme.txt
Normal file
3
bin/jsonchecker/readme.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Test suite from http://json.org/JSON_checker/.
|
||||||
|
|
||||||
|
If the JSON_checker is working correctly, it must accept all of the pass*.json files and reject all of the fail*.json files.
|
1
bin/jsonschema/.gitignore
vendored
Normal file
1
bin/jsonschema/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
TODO
|
4
bin/jsonschema/.travis.yml
Normal file
4
bin/jsonschema/.travis.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
language: python
|
||||||
|
python: "2.7"
|
||||||
|
install: pip install jsonschema
|
||||||
|
script: bin/jsonschema_suite check
|
19
bin/jsonschema/LICENSE
Normal file
19
bin/jsonschema/LICENSE
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (c) 2012 Julian Berman
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
148
bin/jsonschema/README.md
Normal file
148
bin/jsonschema/README.md
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
JSON Schema Test Suite [![Build Status](https://travis-ci.org/json-schema/JSON-Schema-Test-Suite.png?branch=develop)](https://travis-ci.org/json-schema/JSON-Schema-Test-Suite)
|
||||||
|
======================
|
||||||
|
|
||||||
|
This repository contains a set of JSON objects that implementors of JSON Schema
|
||||||
|
validation libraries can use to test their validators.
|
||||||
|
|
||||||
|
It is meant to be language agnostic and should require only a JSON parser.
|
||||||
|
|
||||||
|
The conversion of the JSON objects into tests within your test framework of
|
||||||
|
choice is still the job of the validator implementor.
|
||||||
|
|
||||||
|
Structure of a Test
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
If you're going to use this suite, you need to know how tests are laid out. The
|
||||||
|
tests are contained in the `tests` directory at the root of this repository.
|
||||||
|
|
||||||
|
Inside that directory is a subdirectory for each draft or version of the
|
||||||
|
schema. We'll use `draft3` as an example.
|
||||||
|
|
||||||
|
If you look inside the draft directory, there are a number of `.json` files,
|
||||||
|
which logically group a set of test cases together. Often the grouping is by
|
||||||
|
property under test, but not always, especially within optional test files
|
||||||
|
(discussed below).
|
||||||
|
|
||||||
|
Inside each `.json` file is a single array containing objects. It's easiest to
|
||||||
|
illustrate the structure of these with an example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"description": "the description of the test case",
|
||||||
|
"schema": {"the schema that should" : "be validated against"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a specific test of a valid instance",
|
||||||
|
"data": "the instance",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "another specific test this time, invalid",
|
||||||
|
"data": 15,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
So a description, a schema, and some tests, where tests is an array containing
|
||||||
|
one or more objects with descriptions, data, and a boolean indicating whether
|
||||||
|
they should be valid or invalid.
|
||||||
|
|
||||||
|
Coverage
|
||||||
|
--------
|
||||||
|
|
||||||
|
Draft 3 and 4 should have full coverage. If you see anything missing or think
|
||||||
|
there is a useful test missing, please send a pull request or open an issue.
|
||||||
|
|
||||||
|
Who Uses the Test Suite
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
This suite is being used by:
|
||||||
|
|
||||||
|
### Coffeescript ###
|
||||||
|
|
||||||
|
* [jsck](https://github.com/pandastrike/jsck)
|
||||||
|
|
||||||
|
### Dart ###
|
||||||
|
|
||||||
|
* [json_schema](https://github.com/patefacio/json_schema)
|
||||||
|
|
||||||
|
### Erlang ###
|
||||||
|
|
||||||
|
* [jesse](https://github.com/klarna/jesse)
|
||||||
|
|
||||||
|
### Go ###
|
||||||
|
|
||||||
|
* [gojsonschema](https://github.com/sigu-399/gojsonschema)
|
||||||
|
* [validate-json](https://github.com/cesanta/validate-json)
|
||||||
|
|
||||||
|
### Haskell ###
|
||||||
|
|
||||||
|
* [aeson-schema](https://github.com/timjb/aeson-schema)
|
||||||
|
* [hjsonschema](https://github.com/seagreen/hjsonschema)
|
||||||
|
|
||||||
|
### Java ###
|
||||||
|
|
||||||
|
* [json-schema-validator](https://github.com/fge/json-schema-validator)
|
||||||
|
|
||||||
|
### JavaScript ###
|
||||||
|
|
||||||
|
* [json-schema-benchmark](https://github.com/Muscula/json-schema-benchmark)
|
||||||
|
* [direct-schema](https://github.com/IreneKnapp/direct-schema)
|
||||||
|
* [is-my-json-valid](https://github.com/mafintosh/is-my-json-valid)
|
||||||
|
* [jassi](https://github.com/iclanzan/jassi)
|
||||||
|
* [JaySchema](https://github.com/natesilva/jayschema)
|
||||||
|
* [json-schema-valid](https://github.com/ericgj/json-schema-valid)
|
||||||
|
* [Jsonary](https://github.com/jsonary-js/jsonary)
|
||||||
|
* [jsonschema](https://github.com/tdegrunt/jsonschema)
|
||||||
|
* [request-validator](https://github.com/bugventure/request-validator)
|
||||||
|
* [skeemas](https://github.com/Prestaul/skeemas)
|
||||||
|
* [tv4](https://github.com/geraintluff/tv4)
|
||||||
|
* [z-schema](https://github.com/zaggino/z-schema)
|
||||||
|
* [jsen](https://github.com/bugventure/jsen)
|
||||||
|
* [ajv](https://github.com/epoberezkin/ajv)
|
||||||
|
|
||||||
|
### Node.js ###
|
||||||
|
|
||||||
|
The JSON Schema Test Suite is also available as an
|
||||||
|
[npm](https://www.npmjs.com/package/json-schema-test-suite) package.
|
||||||
|
Node-specific support is maintained on the [node branch](https://github.com/json-schema/JSON-Schema-Test-Suite/tree/node).
|
||||||
|
See [NODE-README.md](https://github.com/json-schema/JSON-Schema-Test-Suite/blob/node/NODE-README.md)
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
### .NET ###
|
||||||
|
|
||||||
|
* [Newtonsoft.Json.Schema](https://github.com/JamesNK/Newtonsoft.Json.Schema)
|
||||||
|
|
||||||
|
### PHP ###
|
||||||
|
|
||||||
|
* [json-schema](https://github.com/justinrainbow/json-schema)
|
||||||
|
|
||||||
|
### Python ###
|
||||||
|
|
||||||
|
* [jsonschema](https://github.com/Julian/jsonschema)
|
||||||
|
|
||||||
|
### Ruby ###
|
||||||
|
|
||||||
|
* [json-schema](https://github.com/hoxworth/json-schema)
|
||||||
|
|
||||||
|
### Rust ###
|
||||||
|
|
||||||
|
* [valico](https://github.com/rustless/valico)
|
||||||
|
|
||||||
|
### Swift ###
|
||||||
|
|
||||||
|
* [JSONSchema](https://github.com/kylef/JSONSchema.swift)
|
||||||
|
|
||||||
|
If you use it as well, please fork and send a pull request adding yourself to
|
||||||
|
the list :).
|
||||||
|
|
||||||
|
Contributing
|
||||||
|
------------
|
||||||
|
|
||||||
|
If you see something missing or incorrect, a pull request is most welcome!
|
||||||
|
|
||||||
|
There are some sanity checks in place for testing the test suite. You can run
|
||||||
|
them with `bin/jsonschema_suite check` or `tox`. They will be run automatically by
|
||||||
|
[Travis CI](https://travis-ci.org/) as well.
|
283
bin/jsonschema/bin/jsonschema_suite
Executable file
283
bin/jsonschema/bin/jsonschema_suite
Executable file
|
@ -0,0 +1,283 @@
|
||||||
|
#! /usr/bin/env python
|
||||||
|
from __future__ import print_function
|
||||||
|
import sys
|
||||||
|
import textwrap
|
||||||
|
|
||||||
|
try:
|
||||||
|
import argparse
|
||||||
|
except ImportError:
|
||||||
|
print(textwrap.dedent("""
|
||||||
|
The argparse library could not be imported. jsonschema_suite requires
|
||||||
|
either Python 2.7 or for you to install argparse. You can do so by
|
||||||
|
running `pip install argparse`, `easy_install argparse` or by
|
||||||
|
downloading argparse and running `python2.6 setup.py install`.
|
||||||
|
|
||||||
|
See https://pypi.python.org/pypi/argparse for details.
|
||||||
|
""".strip("\n")))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
import errno
|
||||||
|
import fnmatch
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import random
|
||||||
|
import shutil
|
||||||
|
import unittest
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
if getattr(unittest, "skipIf", None) is None:
|
||||||
|
unittest.skipIf = lambda cond, msg : lambda fn : fn
|
||||||
|
|
||||||
|
try:
|
||||||
|
import jsonschema
|
||||||
|
except ImportError:
|
||||||
|
jsonschema = None
|
||||||
|
else:
|
||||||
|
validators = getattr(
|
||||||
|
jsonschema.validators, "validators", jsonschema.validators
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
ROOT_DIR = os.path.join(
|
||||||
|
os.path.dirname(__file__), os.pardir).rstrip("__pycache__")
|
||||||
|
SUITE_ROOT_DIR = os.path.join(ROOT_DIR, "tests")
|
||||||
|
|
||||||
|
REMOTES = {
|
||||||
|
"integer.json": {"type": "integer"},
|
||||||
|
"subSchemas.json": {
|
||||||
|
"integer": {"type": "integer"},
|
||||||
|
"refToInteger": {"$ref": "#/integer"},
|
||||||
|
},
|
||||||
|
"folder/folderInteger.json": {"type": "integer"}
|
||||||
|
}
|
||||||
|
REMOTES_DIR = os.path.join(ROOT_DIR, "remotes")
|
||||||
|
|
||||||
|
TESTSUITE_SCHEMA = {
|
||||||
|
"$schema": "http://json-schema.org/draft-03/schema#",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"description": {"type": "string", "required": True},
|
||||||
|
"schema": {"required": True},
|
||||||
|
"tests": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"description": {"type": "string", "required": True},
|
||||||
|
"data": {"required": True},
|
||||||
|
"valid": {"type": "boolean", "required": True}
|
||||||
|
},
|
||||||
|
"additionalProperties": False
|
||||||
|
},
|
||||||
|
"minItems": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": False,
|
||||||
|
"minItems": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def files(paths):
|
||||||
|
for path in paths:
|
||||||
|
with open(path) as test_file:
|
||||||
|
yield json.load(test_file)
|
||||||
|
|
||||||
|
|
||||||
|
def groups(paths):
|
||||||
|
for test_file in files(paths):
|
||||||
|
for group in test_file:
|
||||||
|
yield group
|
||||||
|
|
||||||
|
|
||||||
|
def cases(paths):
|
||||||
|
for test_group in groups(paths):
|
||||||
|
for test in test_group["tests"]:
|
||||||
|
test["schema"] = test_group["schema"]
|
||||||
|
yield test
|
||||||
|
|
||||||
|
|
||||||
|
def collect(root_dir):
|
||||||
|
for root, dirs, files in os.walk(root_dir):
|
||||||
|
for filename in fnmatch.filter(files, "*.json"):
|
||||||
|
yield os.path.join(root, filename)
|
||||||
|
|
||||||
|
|
||||||
|
class SanityTests(unittest.TestCase):
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
print("Looking for tests in %s" % SUITE_ROOT_DIR)
|
||||||
|
cls.test_files = list(collect(SUITE_ROOT_DIR))
|
||||||
|
print("Found %s test files" % len(cls.test_files))
|
||||||
|
assert cls.test_files, "Didn't find the test files!"
|
||||||
|
|
||||||
|
def test_all_files_are_valid_json(self):
|
||||||
|
for path in self.test_files:
|
||||||
|
with open(path) as test_file:
|
||||||
|
try:
|
||||||
|
json.load(test_file)
|
||||||
|
except ValueError as error:
|
||||||
|
self.fail("%s contains invalid JSON (%s)" % (path, error))
|
||||||
|
|
||||||
|
def test_all_descriptions_have_reasonable_length(self):
|
||||||
|
for case in cases(self.test_files):
|
||||||
|
descript = case["description"]
|
||||||
|
self.assertLess(
|
||||||
|
len(descript),
|
||||||
|
60,
|
||||||
|
"%r is too long! (keep it to less than 60 chars)" % (descript,)
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_all_descriptions_are_unique(self):
|
||||||
|
for group in groups(self.test_files):
|
||||||
|
descriptions = set(test["description"] for test in group["tests"])
|
||||||
|
self.assertEqual(
|
||||||
|
len(descriptions),
|
||||||
|
len(group["tests"]),
|
||||||
|
"%r contains a duplicate description" % (group,)
|
||||||
|
)
|
||||||
|
|
||||||
|
@unittest.skipIf(jsonschema is None, "Validation library not present!")
|
||||||
|
def test_all_schemas_are_valid(self):
|
||||||
|
for schema in os.listdir(SUITE_ROOT_DIR):
|
||||||
|
schema_validator = validators.get(schema)
|
||||||
|
if schema_validator is not None:
|
||||||
|
test_files = collect(os.path.join(SUITE_ROOT_DIR, schema))
|
||||||
|
for case in cases(test_files):
|
||||||
|
try:
|
||||||
|
schema_validator.check_schema(case["schema"])
|
||||||
|
except jsonschema.SchemaError as error:
|
||||||
|
self.fail("%s contains an invalid schema (%s)" %
|
||||||
|
(case, error))
|
||||||
|
else:
|
||||||
|
warnings.warn("No schema validator for %s" % schema)
|
||||||
|
|
||||||
|
@unittest.skipIf(jsonschema is None, "Validation library not present!")
|
||||||
|
def test_suites_are_valid(self):
|
||||||
|
validator = jsonschema.Draft3Validator(TESTSUITE_SCHEMA)
|
||||||
|
for tests in files(self.test_files):
|
||||||
|
try:
|
||||||
|
validator.validate(tests)
|
||||||
|
except jsonschema.ValidationError as error:
|
||||||
|
self.fail(str(error))
|
||||||
|
|
||||||
|
def test_remote_schemas_are_updated(self):
|
||||||
|
for url, schema in REMOTES.items():
|
||||||
|
filepath = os.path.join(REMOTES_DIR, url)
|
||||||
|
with open(filepath) as schema_file:
|
||||||
|
self.assertEqual(json.load(schema_file), schema)
|
||||||
|
|
||||||
|
|
||||||
|
def main(arguments):
|
||||||
|
if arguments.command == "check":
|
||||||
|
suite = unittest.TestLoader().loadTestsFromTestCase(SanityTests)
|
||||||
|
result = unittest.TextTestRunner(verbosity=2).run(suite)
|
||||||
|
sys.exit(not result.wasSuccessful())
|
||||||
|
elif arguments.command == "flatten":
|
||||||
|
selected_cases = [case for case in cases(collect(arguments.version))]
|
||||||
|
|
||||||
|
if arguments.randomize:
|
||||||
|
random.shuffle(selected_cases)
|
||||||
|
|
||||||
|
json.dump(selected_cases, sys.stdout, indent=4, sort_keys=True)
|
||||||
|
elif arguments.command == "remotes":
|
||||||
|
json.dump(REMOTES, sys.stdout, indent=4, sort_keys=True)
|
||||||
|
elif arguments.command == "dump_remotes":
|
||||||
|
if arguments.update:
|
||||||
|
shutil.rmtree(arguments.out_dir, ignore_errors=True)
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.makedirs(arguments.out_dir)
|
||||||
|
except OSError as e:
|
||||||
|
if e.errno == errno.EEXIST:
|
||||||
|
print("%s already exists. Aborting." % arguments.out_dir)
|
||||||
|
sys.exit(1)
|
||||||
|
raise
|
||||||
|
|
||||||
|
for url, schema in REMOTES.items():
|
||||||
|
filepath = os.path.join(arguments.out_dir, url)
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.makedirs(os.path.dirname(filepath))
|
||||||
|
except OSError as e:
|
||||||
|
if e.errno != errno.EEXIST:
|
||||||
|
raise
|
||||||
|
|
||||||
|
with open(filepath, "wb") as out_file:
|
||||||
|
json.dump(schema, out_file, indent=4, sort_keys=True)
|
||||||
|
elif arguments.command == "serve":
|
||||||
|
try:
|
||||||
|
from flask import Flask, jsonify
|
||||||
|
except ImportError:
|
||||||
|
print(textwrap.dedent("""
|
||||||
|
The Flask library is required to serve the remote schemas.
|
||||||
|
|
||||||
|
You can install it by running `pip install Flask`.
|
||||||
|
|
||||||
|
Alternatively, see the `jsonschema_suite remotes` or
|
||||||
|
`jsonschema_suite dump_remotes` commands to create static files
|
||||||
|
that can be served with your own web server.
|
||||||
|
""".strip("\n")))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
@app.route("/<path:path>")
|
||||||
|
def serve_path(path):
|
||||||
|
if path in REMOTES:
|
||||||
|
return jsonify(REMOTES[path])
|
||||||
|
return "Document does not exist.", 404
|
||||||
|
|
||||||
|
app.run(port=1234)
|
||||||
|
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="JSON Schema Test Suite utilities",
|
||||||
|
)
|
||||||
|
subparsers = parser.add_subparsers(help="utility commands", dest="command")
|
||||||
|
|
||||||
|
check = subparsers.add_parser("check", help="Sanity check the test suite.")
|
||||||
|
|
||||||
|
flatten = subparsers.add_parser(
|
||||||
|
"flatten",
|
||||||
|
help="Output a flattened file containing a selected version's test cases."
|
||||||
|
)
|
||||||
|
flatten.add_argument(
|
||||||
|
"--randomize",
|
||||||
|
action="store_true",
|
||||||
|
help="Randomize the order of the outputted cases.",
|
||||||
|
)
|
||||||
|
flatten.add_argument(
|
||||||
|
"version", help="The directory containing the version to output",
|
||||||
|
)
|
||||||
|
|
||||||
|
remotes = subparsers.add_parser(
|
||||||
|
"remotes",
|
||||||
|
help="Output the expected URLs and their associated schemas for remote "
|
||||||
|
"ref tests as a JSON object."
|
||||||
|
)
|
||||||
|
|
||||||
|
dump_remotes = subparsers.add_parser(
|
||||||
|
"dump_remotes", help="Dump the remote ref schemas into a file tree",
|
||||||
|
)
|
||||||
|
dump_remotes.add_argument(
|
||||||
|
"--update",
|
||||||
|
action="store_true",
|
||||||
|
help="Update the remotes in an existing directory.",
|
||||||
|
)
|
||||||
|
dump_remotes.add_argument(
|
||||||
|
"--out-dir",
|
||||||
|
default=REMOTES_DIR,
|
||||||
|
type=os.path.abspath,
|
||||||
|
help="The output directory to create as the root of the file tree",
|
||||||
|
)
|
||||||
|
|
||||||
|
serve = subparsers.add_parser(
|
||||||
|
"serve",
|
||||||
|
help="Start a webserver to serve schemas used by remote ref tests."
|
||||||
|
)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main(parser.parse_args())
|
3
bin/jsonschema/remotes/folder/folderInteger.json
Normal file
3
bin/jsonschema/remotes/folder/folderInteger.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"type": "integer"
|
||||||
|
}
|
3
bin/jsonschema/remotes/integer.json
Normal file
3
bin/jsonschema/remotes/integer.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"type": "integer"
|
||||||
|
}
|
8
bin/jsonschema/remotes/subSchemas.json
Normal file
8
bin/jsonschema/remotes/subSchemas.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"integer": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"refToInteger": {
|
||||||
|
"$ref": "#/integer"
|
||||||
|
}
|
||||||
|
}
|
82
bin/jsonschema/tests/draft3/additionalItems.json
Normal file
82
bin/jsonschema/tests/draft3/additionalItems.json
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "additionalItems as schema",
|
||||||
|
"schema": {
|
||||||
|
"items": [],
|
||||||
|
"additionalItems": {"type": "integer"}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "additional items match schema",
|
||||||
|
"data": [ 1, 2, 3, 4 ],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "additional items do not match schema",
|
||||||
|
"data": [ 1, 2, 3, "foo" ],
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "items is schema, no additionalItems",
|
||||||
|
"schema": {
|
||||||
|
"items": {},
|
||||||
|
"additionalItems": false
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "all items match schema",
|
||||||
|
"data": [ 1, 2, 3, 4, 5 ],
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "array of items with no additionalItems",
|
||||||
|
"schema": {
|
||||||
|
"items": [{}, {}, {}],
|
||||||
|
"additionalItems": false
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "no additional items present",
|
||||||
|
"data": [ 1, 2, 3 ],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "additional items are not permitted",
|
||||||
|
"data": [ 1, 2, 3, 4 ],
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "additionalItems as false without items",
|
||||||
|
"schema": {"additionalItems": false},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description":
|
||||||
|
"items defaults to empty schema so everything is valid",
|
||||||
|
"data": [ 1, 2, 3, 4, 5 ],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-arrays",
|
||||||
|
"data": {"foo" : "bar"},
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "additionalItems are allowed by default",
|
||||||
|
"schema": {"items": []},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "only the first items are validated",
|
||||||
|
"data": [1, "foo", false],
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
88
bin/jsonschema/tests/draft3/additionalProperties.json
Normal file
88
bin/jsonschema/tests/draft3/additionalProperties.json
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description":
|
||||||
|
"additionalProperties being false does not allow other properties",
|
||||||
|
"schema": {
|
||||||
|
"properties": {"foo": {}, "bar": {}},
|
||||||
|
"patternProperties": { "^v": {} },
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "no additional properties is valid",
|
||||||
|
"data": {"foo": 1},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an additional property is invalid",
|
||||||
|
"data": {"foo" : 1, "bar" : 2, "quux" : "boom"},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-objects",
|
||||||
|
"data": [1, 2, 3],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "patternProperties are not additional properties",
|
||||||
|
"data": {"foo":1, "vroom": 2},
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description":
|
||||||
|
"additionalProperties allows a schema which should validate",
|
||||||
|
"schema": {
|
||||||
|
"properties": {"foo": {}, "bar": {}},
|
||||||
|
"additionalProperties": {"type": "boolean"}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "no additional properties is valid",
|
||||||
|
"data": {"foo": 1},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an additional valid property is valid",
|
||||||
|
"data": {"foo" : 1, "bar" : 2, "quux" : true},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an additional invalid property is invalid",
|
||||||
|
"data": {"foo" : 1, "bar" : 2, "quux" : 12},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description":
|
||||||
|
"additionalProperties can exist by itself",
|
||||||
|
"schema": {
|
||||||
|
"additionalProperties": {"type": "boolean"}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an additional valid property is valid",
|
||||||
|
"data": {"foo" : true},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an additional invalid property is invalid",
|
||||||
|
"data": {"foo" : 1},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "additionalProperties are allowed by default",
|
||||||
|
"schema": {"properties": {"foo": {}, "bar": {}}},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "additional properties are allowed",
|
||||||
|
"data": {"foo": 1, "bar": 2, "quux": true},
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
49
bin/jsonschema/tests/draft3/default.json
Normal file
49
bin/jsonschema/tests/draft3/default.json
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "invalid type for default",
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"foo": {
|
||||||
|
"type": "integer",
|
||||||
|
"default": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "valid when property is specified",
|
||||||
|
"data": {"foo": 13},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "still valid when the invalid default is used",
|
||||||
|
"data": {},
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "invalid string value for default",
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"bar": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 4,
|
||||||
|
"default": "bad"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "valid when property is specified",
|
||||||
|
"data": {"bar": "good"},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "still valid when the invalid default is used",
|
||||||
|
"data": {},
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
108
bin/jsonschema/tests/draft3/dependencies.json
Normal file
108
bin/jsonschema/tests/draft3/dependencies.json
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "dependencies",
|
||||||
|
"schema": {
|
||||||
|
"dependencies": {"bar": "foo"}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "neither",
|
||||||
|
"data": {},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "nondependant",
|
||||||
|
"data": {"foo": 1},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "with dependency",
|
||||||
|
"data": {"foo": 1, "bar": 2},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "missing dependency",
|
||||||
|
"data": {"bar": 2},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-objects",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "multiple dependencies",
|
||||||
|
"schema": {
|
||||||
|
"dependencies": {"quux": ["foo", "bar"]}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "neither",
|
||||||
|
"data": {},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "nondependants",
|
||||||
|
"data": {"foo": 1, "bar": 2},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "with dependencies",
|
||||||
|
"data": {"foo": 1, "bar": 2, "quux": 3},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "missing dependency",
|
||||||
|
"data": {"foo": 1, "quux": 2},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "missing other dependency",
|
||||||
|
"data": {"bar": 1, "quux": 2},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "missing both dependencies",
|
||||||
|
"data": {"quux": 1},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "multiple dependencies subschema",
|
||||||
|
"schema": {
|
||||||
|
"dependencies": {
|
||||||
|
"bar": {
|
||||||
|
"properties": {
|
||||||
|
"foo": {"type": "integer"},
|
||||||
|
"bar": {"type": "integer"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "valid",
|
||||||
|
"data": {"foo": 1, "bar": 2},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "wrong type",
|
||||||
|
"data": {"foo": "quux", "bar": 2},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "wrong type other",
|
||||||
|
"data": {"foo": 2, "bar": "quux"},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "wrong type both",
|
||||||
|
"data": {"foo": "quux", "bar": "quux"},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
80
bin/jsonschema/tests/draft3/disallow.json
Normal file
80
bin/jsonschema/tests/draft3/disallow.json
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "disallow",
|
||||||
|
"schema": {
|
||||||
|
"disallow": "integer"
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "allowed",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "disallowed",
|
||||||
|
"data": 1,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "multiple disallow",
|
||||||
|
"schema": {
|
||||||
|
"disallow": ["integer", "boolean"]
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "valid",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch",
|
||||||
|
"data": 1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "other mismatch",
|
||||||
|
"data": true,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "multiple disallow subschema",
|
||||||
|
"schema": {
|
||||||
|
"disallow":
|
||||||
|
["string",
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"foo": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "match",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "other match",
|
||||||
|
"data": {"foo": 1},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "other mismatch",
|
||||||
|
"data": {"foo": "bar"},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
60
bin/jsonschema/tests/draft3/divisibleBy.json
Normal file
60
bin/jsonschema/tests/draft3/divisibleBy.json
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "by int",
|
||||||
|
"schema": {"divisibleBy": 2},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "int by int",
|
||||||
|
"data": 10,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "int by int fail",
|
||||||
|
"data": 7,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-numbers",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "by number",
|
||||||
|
"schema": {"divisibleBy": 1.5},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "zero is divisible by anything (except 0)",
|
||||||
|
"data": 0,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "4.5 is divisible by 1.5",
|
||||||
|
"data": 4.5,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "35 is not divisible by 1.5",
|
||||||
|
"data": 35,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "by small number",
|
||||||
|
"schema": {"divisibleBy": 0.0001},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "0.0075 is divisible by 0.0001",
|
||||||
|
"data": 0.0075,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "0.00751 is not divisible by 0.0001",
|
||||||
|
"data": 0.00751,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
71
bin/jsonschema/tests/draft3/enum.json
Normal file
71
bin/jsonschema/tests/draft3/enum.json
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "simple enum validation",
|
||||||
|
"schema": {"enum": [1, 2, 3]},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "one of the enum is valid",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "something else is invalid",
|
||||||
|
"data": 4,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "heterogeneous enum validation",
|
||||||
|
"schema": {"enum": [6, "foo", [], true, {"foo": 12}]},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "one of the enum is valid",
|
||||||
|
"data": [],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "something else is invalid",
|
||||||
|
"data": null,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "objects are deep compared",
|
||||||
|
"data": {"foo": false},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "enums in properties",
|
||||||
|
"schema": {
|
||||||
|
"type":"object",
|
||||||
|
"properties": {
|
||||||
|
"foo": {"enum":["foo"]},
|
||||||
|
"bar": {"enum":["bar"], "required":true}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "both properties are valid",
|
||||||
|
"data": {"foo":"foo", "bar":"bar"},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "missing optional property is valid",
|
||||||
|
"data": {"bar":"bar"},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "missing required property is invalid",
|
||||||
|
"data": {"foo":"foo"},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "missing all properties is invalid",
|
||||||
|
"data": {},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
94
bin/jsonschema/tests/draft3/extends.json
Normal file
94
bin/jsonschema/tests/draft3/extends.json
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "extends",
|
||||||
|
"schema": {
|
||||||
|
"properties": {"bar": {"type": "integer", "required": true}},
|
||||||
|
"extends": {
|
||||||
|
"properties": {
|
||||||
|
"foo": {"type": "string", "required": true}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "extends",
|
||||||
|
"data": {"foo": "baz", "bar": 2},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch extends",
|
||||||
|
"data": {"foo": "baz"},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch extended",
|
||||||
|
"data": {"bar": 2},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "wrong type",
|
||||||
|
"data": {"foo": "baz", "bar": "quux"},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "multiple extends",
|
||||||
|
"schema": {
|
||||||
|
"properties": {"bar": {"type": "integer", "required": true}},
|
||||||
|
"extends" : [
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"foo": {"type": "string", "required": true}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"baz": {"type": "null", "required": true}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "valid",
|
||||||
|
"data": {"foo": "quux", "bar": 2, "baz": null},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch first extends",
|
||||||
|
"data": {"bar": 2, "baz": null},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch second extends",
|
||||||
|
"data": {"foo": "quux", "bar": 2},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch both",
|
||||||
|
"data": {"bar": 2},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "extends simple types",
|
||||||
|
"schema": {
|
||||||
|
"minimum": 20,
|
||||||
|
"extends": {"maximum": 30}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "valid",
|
||||||
|
"data": 25,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch extends",
|
||||||
|
"data": 35,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
46
bin/jsonschema/tests/draft3/items.json
Normal file
46
bin/jsonschema/tests/draft3/items.json
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "a schema given for items",
|
||||||
|
"schema": {
|
||||||
|
"items": {"type": "integer"}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "valid items",
|
||||||
|
"data": [ 1, 2, 3 ],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "wrong type of items",
|
||||||
|
"data": [1, "x"],
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-arrays",
|
||||||
|
"data": {"foo" : "bar"},
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array of schemas for items",
|
||||||
|
"schema": {
|
||||||
|
"items": [
|
||||||
|
{"type": "integer"},
|
||||||
|
{"type": "string"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "correct types",
|
||||||
|
"data": [ 1, "foo" ],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "wrong types",
|
||||||
|
"data": [ "foo", 1 ],
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
28
bin/jsonschema/tests/draft3/maxItems.json
Normal file
28
bin/jsonschema/tests/draft3/maxItems.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "maxItems validation",
|
||||||
|
"schema": {"maxItems": 2},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "shorter is valid",
|
||||||
|
"data": [1],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "exact length is valid",
|
||||||
|
"data": [1, 2],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "too long is invalid",
|
||||||
|
"data": [1, 2, 3],
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-arrays",
|
||||||
|
"data": "foobar",
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
33
bin/jsonschema/tests/draft3/maxLength.json
Normal file
33
bin/jsonschema/tests/draft3/maxLength.json
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "maxLength validation",
|
||||||
|
"schema": {"maxLength": 2},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "shorter is valid",
|
||||||
|
"data": "f",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "exact length is valid",
|
||||||
|
"data": "fo",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "too long is invalid",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-strings",
|
||||||
|
"data": 10,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "two supplementary Unicode code points is long enough",
|
||||||
|
"data": "\uD83D\uDCA9\uD83D\uDCA9",
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
42
bin/jsonschema/tests/draft3/maximum.json
Normal file
42
bin/jsonschema/tests/draft3/maximum.json
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "maximum validation",
|
||||||
|
"schema": {"maximum": 3.0},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "below the maximum is valid",
|
||||||
|
"data": 2.6,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "above the maximum is invalid",
|
||||||
|
"data": 3.5,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-numbers",
|
||||||
|
"data": "x",
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "exclusiveMaximum validation",
|
||||||
|
"schema": {
|
||||||
|
"maximum": 3.0,
|
||||||
|
"exclusiveMaximum": true
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "below the maximum is still valid",
|
||||||
|
"data": 2.2,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "boundary point is invalid",
|
||||||
|
"data": 3.0,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
28
bin/jsonschema/tests/draft3/minItems.json
Normal file
28
bin/jsonschema/tests/draft3/minItems.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "minItems validation",
|
||||||
|
"schema": {"minItems": 1},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "longer is valid",
|
||||||
|
"data": [1, 2],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "exact length is valid",
|
||||||
|
"data": [1],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "too short is invalid",
|
||||||
|
"data": [],
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-arrays",
|
||||||
|
"data": "",
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
33
bin/jsonschema/tests/draft3/minLength.json
Normal file
33
bin/jsonschema/tests/draft3/minLength.json
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "minLength validation",
|
||||||
|
"schema": {"minLength": 2},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "longer is valid",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "exact length is valid",
|
||||||
|
"data": "fo",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "too short is invalid",
|
||||||
|
"data": "f",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-strings",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "one supplementary Unicode code point is not long enough",
|
||||||
|
"data": "\uD83D\uDCA9",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
42
bin/jsonschema/tests/draft3/minimum.json
Normal file
42
bin/jsonschema/tests/draft3/minimum.json
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "minimum validation",
|
||||||
|
"schema": {"minimum": 1.1},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "above the minimum is valid",
|
||||||
|
"data": 2.6,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "below the minimum is invalid",
|
||||||
|
"data": 0.6,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-numbers",
|
||||||
|
"data": "x",
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "exclusiveMinimum validation",
|
||||||
|
"schema": {
|
||||||
|
"minimum": 1.1,
|
||||||
|
"exclusiveMinimum": true
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "above the minimum is still valid",
|
||||||
|
"data": 1.2,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "boundary point is invalid",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
107
bin/jsonschema/tests/draft3/optional/bignum.json
Normal file
107
bin/jsonschema/tests/draft3/optional/bignum.json
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "integer",
|
||||||
|
"schema": {"type": "integer"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a bignum is an integer",
|
||||||
|
"data": 12345678910111213141516171819202122232425262728293031,
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "number",
|
||||||
|
"schema": {"type": "number"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a bignum is a number",
|
||||||
|
"data": 98249283749234923498293171823948729348710298301928331,
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "integer",
|
||||||
|
"schema": {"type": "integer"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a negative bignum is an integer",
|
||||||
|
"data": -12345678910111213141516171819202122232425262728293031,
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "number",
|
||||||
|
"schema": {"type": "number"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a negative bignum is a number",
|
||||||
|
"data": -98249283749234923498293171823948729348710298301928331,
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "string",
|
||||||
|
"schema": {"type": "string"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a bignum is not a string",
|
||||||
|
"data": 98249283749234923498293171823948729348710298301928331,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "integer comparison",
|
||||||
|
"schema": {"maximum": 18446744073709551615},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "comparison works for high numbers",
|
||||||
|
"data": 18446744073709551600,
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "float comparison with high precision",
|
||||||
|
"schema": {
|
||||||
|
"maximum": 972783798187987123879878123.18878137,
|
||||||
|
"exclusiveMaximum": true
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "comparison works for high numbers",
|
||||||
|
"data": 972783798187987123879878123.188781371,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "integer comparison",
|
||||||
|
"schema": {"minimum": -18446744073709551615},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "comparison works for very negative numbers",
|
||||||
|
"data": -18446744073709551600,
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "float comparison with high precision on negative numbers",
|
||||||
|
"schema": {
|
||||||
|
"minimum": -972783798187987123879878123.18878137,
|
||||||
|
"exclusiveMinimum": true
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "comparison works for very negative numbers",
|
||||||
|
"data": -972783798187987123879878123.188781371,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
222
bin/jsonschema/tests/draft3/optional/format.json
Normal file
222
bin/jsonschema/tests/draft3/optional/format.json
Normal file
|
@ -0,0 +1,222 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "validation of regular expressions",
|
||||||
|
"schema": {"format": "regex"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a valid regular expression",
|
||||||
|
"data": "([abc])+\\s+$",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a regular expression with unclosed parens is invalid",
|
||||||
|
"data": "^(abc]",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "validation of date-time strings",
|
||||||
|
"schema": {"format": "date-time"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a valid date-time string",
|
||||||
|
"data": "1963-06-19T08:30:06.283185Z",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid date-time string",
|
||||||
|
"data": "06/19/1963 08:30:06 PST",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "only RFC3339 not all of ISO 8601 are valid",
|
||||||
|
"data": "2013-350T01:01:01",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "validation of date strings",
|
||||||
|
"schema": {"format": "date"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a valid date string",
|
||||||
|
"data": "1963-06-19",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid date string",
|
||||||
|
"data": "06/19/1963",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "validation of time strings",
|
||||||
|
"schema": {"format": "time"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a valid time string",
|
||||||
|
"data": "08:30:06",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid time string",
|
||||||
|
"data": "8:30 AM",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "validation of URIs",
|
||||||
|
"schema": {"format": "uri"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a valid URI",
|
||||||
|
"data": "http://foo.bar/?baz=qux#quux",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a valid protocol-relative URI",
|
||||||
|
"data": "//foo.bar/?baz=qux#quux",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid URI",
|
||||||
|
"data": "\\\\WINDOWS\\fileshare",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid URI though valid URI reference",
|
||||||
|
"data": "abc",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "validation of e-mail addresses",
|
||||||
|
"schema": {"format": "email"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a valid e-mail address",
|
||||||
|
"data": "joe.bloggs@example.com",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid e-mail address",
|
||||||
|
"data": "2962",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "validation of IP addresses",
|
||||||
|
"schema": {"format": "ip-address"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a valid IP address",
|
||||||
|
"data": "192.168.0.1",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an IP address with too many components",
|
||||||
|
"data": "127.0.0.0.1",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an IP address with out-of-range values",
|
||||||
|
"data": "256.256.256.256",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "validation of IPv6 addresses",
|
||||||
|
"schema": {"format": "ipv6"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a valid IPv6 address",
|
||||||
|
"data": "::1",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an IPv6 address with out-of-range values",
|
||||||
|
"data": "12345::",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an IPv6 address with too many components",
|
||||||
|
"data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an IPv6 address containing illegal characters",
|
||||||
|
"data": "::laptop",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "validation of host names",
|
||||||
|
"schema": {"format": "host-name"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a valid host name",
|
||||||
|
"data": "www.example.com",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a host name starting with an illegal character",
|
||||||
|
"data": "-a-host-name-that-starts-with--",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a host name containing illegal characters",
|
||||||
|
"data": "not_a_valid_host_name",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a host name with a component too long",
|
||||||
|
"data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "validation of CSS colors",
|
||||||
|
"schema": {"format": "color"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a valid CSS color name",
|
||||||
|
"data": "fuchsia",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a valid six-digit CSS color code",
|
||||||
|
"data": "#CC8899",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a valid three-digit CSS color code",
|
||||||
|
"data": "#C89",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid CSS color code",
|
||||||
|
"data": "#00332520",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid CSS color name",
|
||||||
|
"data": "puce",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a CSS color name containing invalid characters",
|
||||||
|
"data": "light_grayish_red-violet",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
18
bin/jsonschema/tests/draft3/optional/jsregex.json
Normal file
18
bin/jsonschema/tests/draft3/optional/jsregex.json
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "ECMA 262 regex dialect recognition",
|
||||||
|
"schema": { "format": "regex" },
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "[^] is a valid regex",
|
||||||
|
"data": "[^]",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ECMA 262 has no support for lookbehind",
|
||||||
|
"data": "(?<=foo)bar",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,15 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "some languages do not distinguish between different types of numeric value",
|
||||||
|
"schema": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a float is not an integer even without fractional part",
|
||||||
|
"data": 1.0,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
34
bin/jsonschema/tests/draft3/pattern.json
Normal file
34
bin/jsonschema/tests/draft3/pattern.json
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "pattern validation",
|
||||||
|
"schema": {"pattern": "^a*$"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a matching pattern is valid",
|
||||||
|
"data": "aaa",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a non-matching pattern is invalid",
|
||||||
|
"data": "abc",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-strings",
|
||||||
|
"data": true,
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "pattern is not anchored",
|
||||||
|
"schema": {"pattern": "a+"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "matches a substring",
|
||||||
|
"data": "xxaayy",
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
110
bin/jsonschema/tests/draft3/patternProperties.json
Normal file
110
bin/jsonschema/tests/draft3/patternProperties.json
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description":
|
||||||
|
"patternProperties validates properties matching a regex",
|
||||||
|
"schema": {
|
||||||
|
"patternProperties": {
|
||||||
|
"f.*o": {"type": "integer"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a single valid match is valid",
|
||||||
|
"data": {"foo": 1},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "multiple valid matches is valid",
|
||||||
|
"data": {"foo": 1, "foooooo" : 2},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a single invalid match is invalid",
|
||||||
|
"data": {"foo": "bar", "fooooo": 2},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "multiple invalid matches is invalid",
|
||||||
|
"data": {"foo": "bar", "foooooo" : "baz"},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-objects",
|
||||||
|
"data": 12,
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "multiple simultaneous patternProperties are validated",
|
||||||
|
"schema": {
|
||||||
|
"patternProperties": {
|
||||||
|
"a*": {"type": "integer"},
|
||||||
|
"aaa*": {"maximum": 20}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "a single valid match is valid",
|
||||||
|
"data": {"a": 21},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a simultaneous match is valid",
|
||||||
|
"data": {"aaaa": 18},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "multiple matches is valid",
|
||||||
|
"data": {"a": 21, "aaaa": 18},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid due to one is invalid",
|
||||||
|
"data": {"a": "bar"},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid due to the other is invalid",
|
||||||
|
"data": {"aaaa": 31},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an invalid due to both is invalid",
|
||||||
|
"data": {"aaa": "foo", "aaaa": 31},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "regexes are not anchored by default and are case sensitive",
|
||||||
|
"schema": {
|
||||||
|
"patternProperties": {
|
||||||
|
"[0-9]{2,}": { "type": "boolean" },
|
||||||
|
"X_": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "non recognized members are ignored",
|
||||||
|
"data": { "answer 1": "42" },
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "recognized members are accounted for",
|
||||||
|
"data": { "a31b": null },
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "regexes are case sensitive",
|
||||||
|
"data": { "a_x_3": 3 },
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "regexes are case sensitive, 2",
|
||||||
|
"data": { "a_X_3": 3 },
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
92
bin/jsonschema/tests/draft3/properties.json
Normal file
92
bin/jsonschema/tests/draft3/properties.json
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "object properties validation",
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"foo": {"type": "integer"},
|
||||||
|
"bar": {"type": "string"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "both properties present and valid is valid",
|
||||||
|
"data": {"foo": 1, "bar": "baz"},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "one property invalid is invalid",
|
||||||
|
"data": {"foo": 1, "bar": {}},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "both properties invalid is invalid",
|
||||||
|
"data": {"foo": [], "bar": {}},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "doesn't invalidate other properties",
|
||||||
|
"data": {"quux": []},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ignores non-objects",
|
||||||
|
"data": [],
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description":
|
||||||
|
"properties, patternProperties, additionalProperties interaction",
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"foo": {"type": "array", "maxItems": 3},
|
||||||
|
"bar": {"type": "array"}
|
||||||
|
},
|
||||||
|
"patternProperties": {"f.o": {"minItems": 2}},
|
||||||
|
"additionalProperties": {"type": "integer"}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "property validates property",
|
||||||
|
"data": {"foo": [1, 2]},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "property invalidates property",
|
||||||
|
"data": {"foo": [1, 2, 3, 4]},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "patternProperty invalidates property",
|
||||||
|
"data": {"foo": []},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "patternProperty validates nonproperty",
|
||||||
|
"data": {"fxo": [1, 2]},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "patternProperty invalidates nonproperty",
|
||||||
|
"data": {"fxo": []},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "additionalProperty ignores property",
|
||||||
|
"data": {"bar": []},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "additionalProperty validates others",
|
||||||
|
"data": {"quux": 3},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "additionalProperty invalidates others",
|
||||||
|
"data": {"quux": "foo"},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
159
bin/jsonschema/tests/draft3/ref.json
Normal file
159
bin/jsonschema/tests/draft3/ref.json
Normal file
|
@ -0,0 +1,159 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "root pointer ref",
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"foo": {"$ref": "#"}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "match",
|
||||||
|
"data": {"foo": false},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "recursive match",
|
||||||
|
"data": {"foo": {"foo": false}},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch",
|
||||||
|
"data": {"bar": false},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "recursive mismatch",
|
||||||
|
"data": {"foo": {"bar": false}},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "relative pointer ref to object",
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"foo": {"type": "integer"},
|
||||||
|
"bar": {"$ref": "#/properties/foo"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "match",
|
||||||
|
"data": {"bar": 3},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch",
|
||||||
|
"data": {"bar": true},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "relative pointer ref to array",
|
||||||
|
"schema": {
|
||||||
|
"items": [
|
||||||
|
{"type": "integer"},
|
||||||
|
{"$ref": "#/items/0"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "match array",
|
||||||
|
"data": [1, 2],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "mismatch array",
|
||||||
|
"data": [1, "foo"],
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "escaped pointer ref",
|
||||||
|
"schema": {
|
||||||
|
"tilda~field": {"type": "integer"},
|
||||||
|
"slash/field": {"type": "integer"},
|
||||||
|
"percent%field": {"type": "integer"},
|
||||||
|
"properties": {
|
||||||
|
"tilda": {"$ref": "#/tilda~0field"},
|
||||||
|
"slash": {"$ref": "#/slash~1field"},
|
||||||
|
"percent": {"$ref": "#/percent%25field"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "slash invalid",
|
||||||
|
"data": {"slash": "aoeu"},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "tilda invalid",
|
||||||
|
"data": {"tilda": "aoeu"},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "percent invalid",
|
||||||
|
"data": {"percent": "aoeu"},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "slash valid",
|
||||||
|
"data": {"slash": 123},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "tilda valid",
|
||||||
|
"data": {"tilda": 123},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "percent valid",
|
||||||
|
"data": {"percent": 123},
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "nested refs",
|
||||||
|
"schema": {
|
||||||
|
"definitions": {
|
||||||
|
"a": {"type": "integer"},
|
||||||
|
"b": {"$ref": "#/definitions/a"},
|
||||||
|
"c": {"$ref": "#/definitions/b"}
|
||||||
|
},
|
||||||
|
"$ref": "#/definitions/c"
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "nested ref valid",
|
||||||
|
"data": 5,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "nested ref invalid",
|
||||||
|
"data": "a",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "remote ref, containing refs itself",
|
||||||
|
"schema": {"$ref": "http://json-schema.org/draft-03/schema#"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "remote ref valid",
|
||||||
|
"data": {"items": {"type": "integer"}},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "remote ref invalid",
|
||||||
|
"data": {"items": {"type": 1}},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
74
bin/jsonschema/tests/draft3/refRemote.json
Normal file
74
bin/jsonschema/tests/draft3/refRemote.json
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "remote ref",
|
||||||
|
"schema": {"$ref": "http://localhost:1234/integer.json"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "remote ref valid",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "remote ref invalid",
|
||||||
|
"data": "a",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "fragment within remote ref",
|
||||||
|
"schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "remote fragment valid",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "remote fragment invalid",
|
||||||
|
"data": "a",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ref within remote ref",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "http://localhost:1234/subSchemas.json#/refToInteger"
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "ref within ref valid",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "ref within ref invalid",
|
||||||
|
"data": "a",
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "change resolution scope",
|
||||||
|
"schema": {
|
||||||
|
"id": "http://localhost:1234/",
|
||||||
|
"items": {
|
||||||
|
"id": "folder/",
|
||||||
|
"items": {"$ref": "folderInteger.json"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "changed scope ref valid",
|
||||||
|
"data": [[1]],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "changed scope ref invalid",
|
||||||
|
"data": [["a"]],
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
53
bin/jsonschema/tests/draft3/required.json
Normal file
53
bin/jsonschema/tests/draft3/required.json
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "required validation",
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"foo": {"required" : true},
|
||||||
|
"bar": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "present required property is valid",
|
||||||
|
"data": {"foo": 1},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "non-present required property is invalid",
|
||||||
|
"data": {"bar": 1},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "required default validation",
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"foo": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "not required by default",
|
||||||
|
"data": {},
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "required explicitly false validation",
|
||||||
|
"schema": {
|
||||||
|
"properties": {
|
||||||
|
"foo": {"required": false}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "not required if required is false",
|
||||||
|
"data": {},
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
474
bin/jsonschema/tests/draft3/type.json
Normal file
474
bin/jsonschema/tests/draft3/type.json
Normal file
|
@ -0,0 +1,474 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "integer type matches integers",
|
||||||
|
"schema": {"type": "integer"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an integer is an integer",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a float is not an integer",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a string is not an integer",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is not an integer",
|
||||||
|
"data": {},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array is not an integer",
|
||||||
|
"data": [],
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a boolean is not an integer",
|
||||||
|
"data": true,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "null is not an integer",
|
||||||
|
"data": null,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "number type matches numbers",
|
||||||
|
"schema": {"type": "number"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an integer is a number",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a float is a number",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a string is not a number",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is not a number",
|
||||||
|
"data": {},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array is not a number",
|
||||||
|
"data": [],
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a boolean is not a number",
|
||||||
|
"data": true,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "null is not a number",
|
||||||
|
"data": null,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "string type matches strings",
|
||||||
|
"schema": {"type": "string"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "1 is not a string",
|
||||||
|
"data": 1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a float is not a string",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a string is a string",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is not a string",
|
||||||
|
"data": {},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array is not a string",
|
||||||
|
"data": [],
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a boolean is not a string",
|
||||||
|
"data": true,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "null is not a string",
|
||||||
|
"data": null,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "object type matches objects",
|
||||||
|
"schema": {"type": "object"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an integer is not an object",
|
||||||
|
"data": 1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a float is not an object",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a string is not an object",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is an object",
|
||||||
|
"data": {},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array is not an object",
|
||||||
|
"data": [],
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a boolean is not an object",
|
||||||
|
"data": true,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "null is not an object",
|
||||||
|
"data": null,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "array type matches arrays",
|
||||||
|
"schema": {"type": "array"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an integer is not an array",
|
||||||
|
"data": 1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a float is not an array",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a string is not an array",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is not an array",
|
||||||
|
"data": {},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array is an array",
|
||||||
|
"data": [],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a boolean is not an array",
|
||||||
|
"data": true,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "null is not an array",
|
||||||
|
"data": null,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "boolean type matches booleans",
|
||||||
|
"schema": {"type": "boolean"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an integer is not a boolean",
|
||||||
|
"data": 1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a float is not a boolean",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a string is not a boolean",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is not a boolean",
|
||||||
|
"data": {},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array is not a boolean",
|
||||||
|
"data": [],
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a boolean is a boolean",
|
||||||
|
"data": true,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "null is not a boolean",
|
||||||
|
"data": null,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "null type matches only the null object",
|
||||||
|
"schema": {"type": "null"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an integer is not null",
|
||||||
|
"data": 1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a float is not null",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a string is not null",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is not null",
|
||||||
|
"data": {},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array is not null",
|
||||||
|
"data": [],
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a boolean is not null",
|
||||||
|
"data": true,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "null is null",
|
||||||
|
"data": null,
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "any type matches any type",
|
||||||
|
"schema": {"type": "any"},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "any type includes integers",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "any type includes float",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "any type includes string",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "any type includes object",
|
||||||
|
"data": {},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "any type includes array",
|
||||||
|
"data": [],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "any type includes boolean",
|
||||||
|
"data": true,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "any type includes null",
|
||||||
|
"data": null,
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "multiple types can be specified in an array",
|
||||||
|
"schema": {"type": ["integer", "string"]},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an integer is valid",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a string is valid",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a float is invalid",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is invalid",
|
||||||
|
"data": {},
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array is invalid",
|
||||||
|
"data": [],
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a boolean is invalid",
|
||||||
|
"data": true,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "null is invalid",
|
||||||
|
"data": null,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "types can include schemas",
|
||||||
|
"schema": {
|
||||||
|
"type": [
|
||||||
|
"array",
|
||||||
|
{"type": "object"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an integer is invalid",
|
||||||
|
"data": 1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a string is invalid",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a float is invalid",
|
||||||
|
"data": 1.1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is valid",
|
||||||
|
"data": {},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array is valid",
|
||||||
|
"data": [],
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a boolean is invalid",
|
||||||
|
"data": true,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "null is invalid",
|
||||||
|
"data": null,
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description":
|
||||||
|
"when types includes a schema it should fully validate the schema",
|
||||||
|
"schema": {
|
||||||
|
"type": [
|
||||||
|
"integer",
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"foo": {"type": "null"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an integer is valid",
|
||||||
|
"data": 1,
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is valid only if it is fully valid",
|
||||||
|
"data": {"foo": null},
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an object is invalid otherwise",
|
||||||
|
"data": {"foo": "bar"},
|
||||||
|
"valid": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "types from separate schemas are merged",
|
||||||
|
"schema": {
|
||||||
|
"type": [
|
||||||
|
{"type": ["string"]},
|
||||||
|
{"type": ["array", "null"]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tests": [
|
||||||
|
{
|
||||||
|
"description": "an integer is invalid",
|
||||||
|
"data": 1,
|
||||||
|
"valid": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "a string is valid",
|
||||||
|
"data": "foo",
|
||||||
|
"valid": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "an array is valid",
|
||||||
|
"data": [1, 2, 3],
|
||||||
|
"valid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue