rj_schema 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +18 -0
  3. data/ext/rj_schema/extconf.rb +7 -0
  4. data/ext/rj_schema/rapidjson/CHANGELOG.md +158 -0
  5. data/ext/rj_schema/rapidjson/CMakeLists.txt +221 -0
  6. data/ext/rj_schema/rapidjson/CMakeModules/FindGTestSrc.cmake +30 -0
  7. data/ext/rj_schema/rapidjson/RapidJSON.pc.in +7 -0
  8. data/ext/rj_schema/rapidjson/RapidJSONConfig.cmake.in +15 -0
  9. data/ext/rj_schema/rapidjson/RapidJSONConfigVersion.cmake.in +10 -0
  10. data/ext/rj_schema/rapidjson/appveyor.yml +41 -0
  11. data/ext/rj_schema/rapidjson/bin/data/glossary.json +22 -0
  12. data/ext/rj_schema/rapidjson/bin/data/menu.json +27 -0
  13. data/ext/rj_schema/rapidjson/bin/data/readme.txt +1 -0
  14. data/ext/rj_schema/rapidjson/bin/data/sample.json +3315 -0
  15. data/ext/rj_schema/rapidjson/bin/data/webapp.json +88 -0
  16. data/ext/rj_schema/rapidjson/bin/data/widget.json +26 -0
  17. data/ext/rj_schema/rapidjson/bin/draft-04/schema +150 -0
  18. data/ext/rj_schema/rapidjson/bin/encodings/utf16be.json +0 -0
  19. data/ext/rj_schema/rapidjson/bin/encodings/utf16bebom.json +0 -0
  20. data/ext/rj_schema/rapidjson/bin/encodings/utf16le.json +0 -0
  21. data/ext/rj_schema/rapidjson/bin/encodings/utf16lebom.json +0 -0
  22. data/ext/rj_schema/rapidjson/bin/encodings/utf32be.json +0 -0
  23. data/ext/rj_schema/rapidjson/bin/encodings/utf32bebom.json +0 -0
  24. data/ext/rj_schema/rapidjson/bin/encodings/utf32le.json +0 -0
  25. data/ext/rj_schema/rapidjson/bin/encodings/utf32lebom.json +0 -0
  26. data/ext/rj_schema/rapidjson/bin/encodings/utf8.json +7 -0
  27. data/ext/rj_schema/rapidjson/bin/encodings/utf8bom.json +7 -0
  28. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail1.json +1 -0
  29. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail10.json +1 -0
  30. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail11.json +1 -0
  31. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail12.json +1 -0
  32. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail13.json +1 -0
  33. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail14.json +1 -0
  34. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail15.json +1 -0
  35. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail16.json +1 -0
  36. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail17.json +1 -0
  37. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail18.json +1 -0
  38. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail19.json +1 -0
  39. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail2.json +1 -0
  40. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail20.json +1 -0
  41. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail21.json +1 -0
  42. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail22.json +1 -0
  43. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail23.json +1 -0
  44. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail24.json +1 -0
  45. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail25.json +1 -0
  46. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail26.json +1 -0
  47. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail27.json +2 -0
  48. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail28.json +2 -0
  49. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail29.json +1 -0
  50. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail3.json +1 -0
  51. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail30.json +1 -0
  52. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail31.json +1 -0
  53. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail32.json +1 -0
  54. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail33.json +1 -0
  55. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail4.json +1 -0
  56. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail5.json +1 -0
  57. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail6.json +1 -0
  58. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail7.json +1 -0
  59. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail8.json +1 -0
  60. data/ext/rj_schema/rapidjson/bin/jsonchecker/fail9.json +1 -0
  61. data/ext/rj_schema/rapidjson/bin/jsonchecker/pass1.json +58 -0
  62. data/ext/rj_schema/rapidjson/bin/jsonchecker/pass2.json +1 -0
  63. data/ext/rj_schema/rapidjson/bin/jsonchecker/pass3.json +6 -0
  64. data/ext/rj_schema/rapidjson/bin/jsonchecker/readme.txt +3 -0
  65. data/ext/rj_schema/rapidjson/bin/jsonschema/LICENSE +19 -0
  66. data/ext/rj_schema/rapidjson/bin/jsonschema/README.md +148 -0
  67. data/ext/rj_schema/rapidjson/bin/jsonschema/bin/jsonschema_suite +283 -0
  68. data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/folder/folderInteger.json +3 -0
  69. data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/integer.json +3 -0
  70. data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/subSchemas.json +8 -0
  71. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/additionalItems.json +82 -0
  72. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/additionalProperties.json +88 -0
  73. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/default.json +49 -0
  74. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/dependencies.json +108 -0
  75. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/disallow.json +80 -0
  76. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/divisibleBy.json +60 -0
  77. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/enum.json +71 -0
  78. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/extends.json +94 -0
  79. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/items.json +46 -0
  80. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maxItems.json +28 -0
  81. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maxLength.json +33 -0
  82. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maximum.json +42 -0
  83. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minItems.json +28 -0
  84. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minLength.json +33 -0
  85. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minimum.json +42 -0
  86. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/bignum.json +107 -0
  87. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/format.json +222 -0
  88. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/jsregex.json +18 -0
  89. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/zeroTerminatedFloats.json +15 -0
  90. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/pattern.json +34 -0
  91. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/patternProperties.json +110 -0
  92. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/properties.json +92 -0
  93. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/ref.json +159 -0
  94. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/refRemote.json +74 -0
  95. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/required.json +53 -0
  96. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/type.json +474 -0
  97. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/uniqueItems.json +79 -0
  98. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/additionalItems.json +82 -0
  99. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/additionalProperties.json +88 -0
  100. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/allOf.json +112 -0
  101. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/anyOf.json +68 -0
  102. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/default.json +49 -0
  103. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/definitions.json +32 -0
  104. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/dependencies.json +113 -0
  105. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/enum.json +72 -0
  106. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/items.json +46 -0
  107. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxItems.json +28 -0
  108. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxLength.json +33 -0
  109. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxProperties.json +28 -0
  110. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maximum.json +42 -0
  111. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minItems.json +28 -0
  112. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minLength.json +33 -0
  113. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minProperties.json +28 -0
  114. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minimum.json +42 -0
  115. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/multipleOf.json +60 -0
  116. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/not.json +96 -0
  117. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/oneOf.json +68 -0
  118. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/bignum.json +107 -0
  119. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/format.json +148 -0
  120. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/zeroTerminatedFloats.json +15 -0
  121. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/pattern.json +34 -0
  122. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/patternProperties.json +110 -0
  123. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/properties.json +92 -0
  124. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/ref.json +159 -0
  125. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/refRemote.json +74 -0
  126. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/required.json +39 -0
  127. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/type.json +330 -0
  128. data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/uniqueItems.json +79 -0
  129. data/ext/rj_schema/rapidjson/bin/jsonschema/tox.ini +8 -0
  130. data/ext/rj_schema/rapidjson/bin/types/booleans.json +102 -0
  131. data/ext/rj_schema/rapidjson/bin/types/floats.json +102 -0
  132. data/ext/rj_schema/rapidjson/bin/types/guids.json +102 -0
  133. data/ext/rj_schema/rapidjson/bin/types/integers.json +102 -0
  134. data/ext/rj_schema/rapidjson/bin/types/mixed.json +592 -0
  135. data/ext/rj_schema/rapidjson/bin/types/nulls.json +102 -0
  136. data/ext/rj_schema/rapidjson/bin/types/paragraphs.json +102 -0
  137. data/ext/rj_schema/rapidjson/bin/types/readme.txt +1 -0
  138. data/ext/rj_schema/rapidjson/contrib/natvis/LICENSE +45 -0
  139. data/ext/rj_schema/rapidjson/contrib/natvis/README.md +7 -0
  140. data/ext/rj_schema/rapidjson/contrib/natvis/rapidjson.natvis +38 -0
  141. data/ext/rj_schema/rapidjson/doc/CMakeLists.txt +27 -0
  142. data/ext/rj_schema/rapidjson/doc/Doxyfile.in +2369 -0
  143. data/ext/rj_schema/rapidjson/doc/Doxyfile.zh-cn.in +2369 -0
  144. data/ext/rj_schema/rapidjson/doc/diagram/architecture.dot +50 -0
  145. data/ext/rj_schema/rapidjson/doc/diagram/architecture.png +0 -0
  146. data/ext/rj_schema/rapidjson/doc/diagram/insituparsing.dot +65 -0
  147. data/ext/rj_schema/rapidjson/doc/diagram/insituparsing.png +0 -0
  148. data/ext/rj_schema/rapidjson/doc/diagram/iterative-parser-states-diagram.dot +62 -0
  149. data/ext/rj_schema/rapidjson/doc/diagram/iterative-parser-states-diagram.png +0 -0
  150. data/ext/rj_schema/rapidjson/doc/diagram/makefile +8 -0
  151. data/ext/rj_schema/rapidjson/doc/diagram/move1.dot +47 -0
  152. data/ext/rj_schema/rapidjson/doc/diagram/move1.png +0 -0
  153. data/ext/rj_schema/rapidjson/doc/diagram/move2.dot +62 -0
  154. data/ext/rj_schema/rapidjson/doc/diagram/move2.png +0 -0
  155. data/ext/rj_schema/rapidjson/doc/diagram/move3.dot +60 -0
  156. data/ext/rj_schema/rapidjson/doc/diagram/move3.png +0 -0
  157. data/ext/rj_schema/rapidjson/doc/diagram/normalparsing.dot +56 -0
  158. data/ext/rj_schema/rapidjson/doc/diagram/normalparsing.png +0 -0
  159. data/ext/rj_schema/rapidjson/doc/diagram/simpledom.dot +54 -0
  160. data/ext/rj_schema/rapidjson/doc/diagram/simpledom.png +0 -0
  161. data/ext/rj_schema/rapidjson/doc/diagram/tutorial.dot +58 -0
  162. data/ext/rj_schema/rapidjson/doc/diagram/tutorial.png +0 -0
  163. data/ext/rj_schema/rapidjson/doc/diagram/utilityclass.dot +73 -0
  164. data/ext/rj_schema/rapidjson/doc/diagram/utilityclass.png +0 -0
  165. data/ext/rj_schema/rapidjson/doc/dom.md +280 -0
  166. data/ext/rj_schema/rapidjson/doc/dom.zh-cn.md +284 -0
  167. data/ext/rj_schema/rapidjson/doc/encoding.md +146 -0
  168. data/ext/rj_schema/rapidjson/doc/encoding.zh-cn.md +152 -0
  169. data/ext/rj_schema/rapidjson/doc/faq.md +289 -0
  170. data/ext/rj_schema/rapidjson/doc/faq.zh-cn.md +290 -0
  171. data/ext/rj_schema/rapidjson/doc/features.md +104 -0
  172. data/ext/rj_schema/rapidjson/doc/features.zh-cn.md +103 -0
  173. data/ext/rj_schema/rapidjson/doc/internals.md +368 -0
  174. data/ext/rj_schema/rapidjson/doc/internals.zh-cn.md +363 -0
  175. data/ext/rj_schema/rapidjson/doc/logo/rapidjson.png +0 -0
  176. data/ext/rj_schema/rapidjson/doc/logo/rapidjson.svg +119 -0
  177. data/ext/rj_schema/rapidjson/doc/misc/DoxygenLayout.xml +194 -0
  178. data/ext/rj_schema/rapidjson/doc/misc/doxygenextra.css +274 -0
  179. data/ext/rj_schema/rapidjson/doc/misc/footer.html +11 -0
  180. data/ext/rj_schema/rapidjson/doc/misc/header.html +24 -0
  181. data/ext/rj_schema/rapidjson/doc/npm.md +31 -0
  182. data/ext/rj_schema/rapidjson/doc/performance.md +26 -0
  183. data/ext/rj_schema/rapidjson/doc/performance.zh-cn.md +26 -0
  184. data/ext/rj_schema/rapidjson/doc/pointer.md +234 -0
  185. data/ext/rj_schema/rapidjson/doc/pointer.zh-cn.md +234 -0
  186. data/ext/rj_schema/rapidjson/doc/sax.md +509 -0
  187. data/ext/rj_schema/rapidjson/doc/sax.zh-cn.md +487 -0
  188. data/ext/rj_schema/rapidjson/doc/schema.md +505 -0
  189. data/ext/rj_schema/rapidjson/doc/schema.zh-cn.md +237 -0
  190. data/ext/rj_schema/rapidjson/doc/stream.md +426 -0
  191. data/ext/rj_schema/rapidjson/doc/stream.zh-cn.md +426 -0
  192. data/ext/rj_schema/rapidjson/doc/tutorial.md +536 -0
  193. data/ext/rj_schema/rapidjson/doc/tutorial.zh-cn.md +534 -0
  194. data/ext/rj_schema/rapidjson/docker/debian/Dockerfile +8 -0
  195. data/ext/rj_schema/rapidjson/example/CMakeLists.txt +45 -0
  196. data/ext/rj_schema/rapidjson/example/archiver/archiver.cpp +292 -0
  197. data/ext/rj_schema/rapidjson/example/archiver/archiver.h +145 -0
  198. data/ext/rj_schema/rapidjson/example/archiver/archivertest.cpp +287 -0
  199. data/ext/rj_schema/rapidjson/example/capitalize/capitalize.cpp +67 -0
  200. data/ext/rj_schema/rapidjson/example/condense/condense.cpp +32 -0
  201. data/ext/rj_schema/rapidjson/example/filterkey/filterkey.cpp +135 -0
  202. data/ext/rj_schema/rapidjson/example/filterkeydom/filterkeydom.cpp +170 -0
  203. data/ext/rj_schema/rapidjson/example/jsonx/jsonx.cpp +207 -0
  204. data/ext/rj_schema/rapidjson/example/lookaheadparser/lookaheadparser.cpp +350 -0
  205. data/ext/rj_schema/rapidjson/example/messagereader/messagereader.cpp +105 -0
  206. data/ext/rj_schema/rapidjson/example/parsebyparts/parsebyparts.cpp +176 -0
  207. data/ext/rj_schema/rapidjson/example/pretty/pretty.cpp +30 -0
  208. data/ext/rj_schema/rapidjson/example/prettyauto/prettyauto.cpp +56 -0
  209. data/ext/rj_schema/rapidjson/example/schemavalidator/schemavalidator.cpp +78 -0
  210. data/ext/rj_schema/rapidjson/example/serialize/serialize.cpp +173 -0
  211. data/ext/rj_schema/rapidjson/example/simpledom/simpledom.cpp +29 -0
  212. data/ext/rj_schema/rapidjson/example/simplepullreader/simplepullreader.cpp +53 -0
  213. data/ext/rj_schema/rapidjson/example/simplereader/simplereader.cpp +42 -0
  214. data/ext/rj_schema/rapidjson/example/simplewriter/simplewriter.cpp +36 -0
  215. data/ext/rj_schema/rapidjson/example/tutorial/tutorial.cpp +151 -0
  216. data/ext/rj_schema/rapidjson/include/rapidjson/allocators.h +271 -0
  217. data/ext/rj_schema/rapidjson/include/rapidjson/cursorstreamwrapper.h +78 -0
  218. data/ext/rj_schema/rapidjson/include/rapidjson/document.h +2630 -0
  219. data/ext/rj_schema/rapidjson/include/rapidjson/encodedstream.h +299 -0
  220. data/ext/rj_schema/rapidjson/include/rapidjson/encodings.h +716 -0
  221. data/ext/rj_schema/rapidjson/include/rapidjson/error/en.h +74 -0
  222. data/ext/rj_schema/rapidjson/include/rapidjson/error/error.h +161 -0
  223. data/ext/rj_schema/rapidjson/include/rapidjson/filereadstream.h +99 -0
  224. data/ext/rj_schema/rapidjson/include/rapidjson/filewritestream.h +104 -0
  225. data/ext/rj_schema/rapidjson/include/rapidjson/fwd.h +151 -0
  226. data/ext/rj_schema/rapidjson/include/rapidjson/internal/biginteger.h +290 -0
  227. data/ext/rj_schema/rapidjson/include/rapidjson/internal/diyfp.h +258 -0
  228. data/ext/rj_schema/rapidjson/include/rapidjson/internal/dtoa.h +245 -0
  229. data/ext/rj_schema/rapidjson/include/rapidjson/internal/ieee754.h +78 -0
  230. data/ext/rj_schema/rapidjson/include/rapidjson/internal/itoa.h +304 -0
  231. data/ext/rj_schema/rapidjson/include/rapidjson/internal/meta.h +181 -0
  232. data/ext/rj_schema/rapidjson/include/rapidjson/internal/pow10.h +55 -0
  233. data/ext/rj_schema/rapidjson/include/rapidjson/internal/regex.h +734 -0
  234. data/ext/rj_schema/rapidjson/include/rapidjson/internal/stack.h +231 -0
  235. data/ext/rj_schema/rapidjson/include/rapidjson/internal/strfunc.h +69 -0
  236. data/ext/rj_schema/rapidjson/include/rapidjson/internal/strtod.h +269 -0
  237. data/ext/rj_schema/rapidjson/include/rapidjson/internal/swap.h +46 -0
  238. data/ext/rj_schema/rapidjson/include/rapidjson/istreamwrapper.h +115 -0
  239. data/ext/rj_schema/rapidjson/include/rapidjson/memorybuffer.h +70 -0
  240. data/ext/rj_schema/rapidjson/include/rapidjson/memorystream.h +71 -0
  241. data/ext/rj_schema/rapidjson/include/rapidjson/msinttypes/inttypes.h +316 -0
  242. data/ext/rj_schema/rapidjson/include/rapidjson/msinttypes/stdint.h +300 -0
  243. data/ext/rj_schema/rapidjson/include/rapidjson/ostreamwrapper.h +81 -0
  244. data/ext/rj_schema/rapidjson/include/rapidjson/pointer.h +1363 -0
  245. data/ext/rj_schema/rapidjson/include/rapidjson/prettywriter.h +277 -0
  246. data/ext/rj_schema/rapidjson/include/rapidjson/rapidjson.h +628 -0
  247. data/ext/rj_schema/rapidjson/include/rapidjson/reader.h +2222 -0
  248. data/ext/rj_schema/rapidjson/include/rapidjson/schema.h +2479 -0
  249. data/ext/rj_schema/rapidjson/include/rapidjson/stream.h +223 -0
  250. data/ext/rj_schema/rapidjson/include/rapidjson/stringbuffer.h +121 -0
  251. data/ext/rj_schema/rapidjson/include/rapidjson/writer.h +716 -0
  252. data/ext/rj_schema/rapidjson/include_dirs.js +2 -0
  253. data/ext/rj_schema/rapidjson/library.json +15 -0
  254. data/ext/rj_schema/rapidjson/license.txt +57 -0
  255. data/ext/rj_schema/rapidjson/package.json +24 -0
  256. data/ext/rj_schema/rapidjson/rapidjson.autopkg +77 -0
  257. data/ext/rj_schema/rapidjson/readme.md +160 -0
  258. data/ext/rj_schema/rapidjson/readme.zh-cn.md +152 -0
  259. data/ext/rj_schema/rapidjson/test/CMakeLists.txt +20 -0
  260. data/ext/rj_schema/rapidjson/test/perftest/CMakeLists.txt +28 -0
  261. data/ext/rj_schema/rapidjson/test/perftest/misctest.cpp +974 -0
  262. data/ext/rj_schema/rapidjson/test/perftest/perftest.cpp +24 -0
  263. data/ext/rj_schema/rapidjson/test/perftest/perftest.h +185 -0
  264. data/ext/rj_schema/rapidjson/test/perftest/platformtest.cpp +166 -0
  265. data/ext/rj_schema/rapidjson/test/perftest/rapidjsontest.cpp +472 -0
  266. data/ext/rj_schema/rapidjson/test/perftest/schematest.cpp +216 -0
  267. data/ext/rj_schema/rapidjson/test/unittest/CMakeLists.txt +92 -0
  268. data/ext/rj_schema/rapidjson/test/unittest/allocatorstest.cpp +102 -0
  269. data/ext/rj_schema/rapidjson/test/unittest/bigintegertest.cpp +133 -0
  270. data/ext/rj_schema/rapidjson/test/unittest/cursorstreamwrappertest.cpp +115 -0
  271. data/ext/rj_schema/rapidjson/test/unittest/documenttest.cpp +672 -0
  272. data/ext/rj_schema/rapidjson/test/unittest/dtoatest.cpp +98 -0
  273. data/ext/rj_schema/rapidjson/test/unittest/encodedstreamtest.cpp +313 -0
  274. data/ext/rj_schema/rapidjson/test/unittest/encodingstest.cpp +451 -0
  275. data/ext/rj_schema/rapidjson/test/unittest/filestreamtest.cpp +112 -0
  276. data/ext/rj_schema/rapidjson/test/unittest/fwdtest.cpp +230 -0
  277. data/ext/rj_schema/rapidjson/test/unittest/istreamwrappertest.cpp +181 -0
  278. data/ext/rj_schema/rapidjson/test/unittest/itoatest.cpp +160 -0
  279. data/ext/rj_schema/rapidjson/test/unittest/jsoncheckertest.cpp +143 -0
  280. data/ext/rj_schema/rapidjson/test/unittest/namespacetest.cpp +70 -0
  281. data/ext/rj_schema/rapidjson/test/unittest/ostreamwrappertest.cpp +92 -0
  282. data/ext/rj_schema/rapidjson/test/unittest/pointertest.cpp +1529 -0
  283. data/ext/rj_schema/rapidjson/test/unittest/prettywritertest.cpp +344 -0
  284. data/ext/rj_schema/rapidjson/test/unittest/readertest.cpp +1895 -0
  285. data/ext/rj_schema/rapidjson/test/unittest/regextest.cpp +638 -0
  286. data/ext/rj_schema/rapidjson/test/unittest/schematest.cpp +2009 -0
  287. data/ext/rj_schema/rapidjson/test/unittest/simdtest.cpp +219 -0
  288. data/ext/rj_schema/rapidjson/test/unittest/strfunctest.cpp +30 -0
  289. data/ext/rj_schema/rapidjson/test/unittest/stringbuffertest.cpp +192 -0
  290. data/ext/rj_schema/rapidjson/test/unittest/strtodtest.cpp +132 -0
  291. data/ext/rj_schema/rapidjson/test/unittest/unittest.cpp +51 -0
  292. data/ext/rj_schema/rapidjson/test/unittest/unittest.h +140 -0
  293. data/ext/rj_schema/rapidjson/test/unittest/valuetest.cpp +1829 -0
  294. data/ext/rj_schema/rapidjson/test/unittest/writertest.cpp +598 -0
  295. data/ext/rj_schema/rapidjson/test/valgrind.supp +17 -0
  296. data/ext/rj_schema/rapidjson/travis-doxygen.sh +121 -0
  297. data/ext/rj_schema/rj_schema.cpp +136 -0
  298. data/lib/rj_schema.rb +7 -0
  299. metadata +371 -0
@@ -0,0 +1,115 @@
1
+ // Tencent is pleased to support the open source community by making RapidJSON available.
2
+ //
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
4
+ //
5
+ // Licensed under the MIT License (the "License"); you may not use this file except
6
+ // in compliance with the License. You may obtain a copy of the License at
7
+ //
8
+ // http://opensource.org/licenses/MIT
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software distributed
11
+ // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
12
+ // CONDITIONS OF ANY KIND, either express or implied. See the License for the
13
+ // specific language governing permissions and limitations under the License.
14
+
15
+ #include "unittest.h"
16
+ #include "rapidjson/document.h"
17
+ #include "rapidjson/cursorstreamwrapper.h"
18
+
19
+ using namespace rapidjson;
20
+
21
+ // static const char json[] = "{\"string\"\n\n:\"my string\",\"array\"\n:[\"1\", \"2\", \"3\"]}";
22
+
23
+ bool testJson(const char *json, size_t &line, size_t &col) {
24
+ StringStream ss(json);
25
+ CursorStreamWrapper<StringStream> csw(ss);
26
+ Document document;
27
+ document.ParseStream(csw);
28
+ bool ret = document.HasParseError();
29
+ if (ret) {
30
+ col = csw.GetColumn();
31
+ line = csw.GetLine();
32
+ }
33
+ return ret;
34
+ }
35
+
36
+ TEST(CursorStreamWrapper, MissingFirstBracket) {
37
+ const char json[] = "\"string\"\n\n:\"my string\",\"array\"\n:[\"1\", \"2\", \"3\"]}";
38
+ size_t col, line;
39
+ bool ret = testJson(json, line, col);
40
+ EXPECT_TRUE(ret);
41
+ EXPECT_EQ(line, 3);
42
+ EXPECT_EQ(col, 0);
43
+ }
44
+
45
+ TEST(CursorStreamWrapper, MissingQuotes) {
46
+ const char json[] = "{\"string\n\n:\"my string\",\"array\"\n:[\"1\", \"2\", \"3\"]}";
47
+ size_t col, line;
48
+ bool ret = testJson(json, line, col);
49
+ EXPECT_TRUE(ret);
50
+ EXPECT_EQ(line, 1);
51
+ EXPECT_EQ(col, 8);
52
+ }
53
+
54
+ TEST(CursorStreamWrapper, MissingColon) {
55
+ const char json[] = "{\"string\"\n\n\"my string\",\"array\"\n:[\"1\", \"2\", \"3\"]}";
56
+ size_t col, line;
57
+ bool ret = testJson(json, line, col);
58
+ EXPECT_TRUE(ret);
59
+ EXPECT_EQ(line, 3);
60
+ EXPECT_EQ(col, 0);
61
+ }
62
+
63
+ TEST(CursorStreamWrapper, MissingSecondQuotes) {
64
+ const char json[] = "{\"string\"\n\n:my string\",\"array\"\n:[\"1\", \"2\", \"3\"]}";
65
+ size_t col, line;
66
+ bool ret = testJson(json, line, col);
67
+ EXPECT_TRUE(ret);
68
+ EXPECT_EQ(line, 3);
69
+ EXPECT_EQ(col, 1);
70
+ }
71
+
72
+ TEST(CursorStreamWrapper, MissingComma) {
73
+ const char json[] = "{\"string\"\n\n:\"my string\"\"array\"\n:[\"1\", \"2\", \"3\"]}";
74
+ size_t col, line;
75
+ bool ret = testJson(json, line, col);
76
+ EXPECT_TRUE(ret);
77
+ EXPECT_EQ(line, 3);
78
+ EXPECT_EQ(col, 12);
79
+ }
80
+
81
+ TEST(CursorStreamWrapper, MissingArrayBracket) {
82
+ const char json[] = "{\"string\"\n\n:\"my string\",\"array\"\n:\"1\", \"2\", \"3\"]}";
83
+ size_t col, line;
84
+ bool ret = testJson(json, line, col);
85
+ EXPECT_TRUE(ret);
86
+ EXPECT_EQ(line, 4);
87
+ EXPECT_EQ(col, 9);
88
+ }
89
+
90
+ TEST(CursorStreamWrapper, MissingArrayComma) {
91
+ const char json[] = "{\"string\"\n\n:\"my string\",\"array\"\n:[\"1\" \"2\", \"3\"]}";
92
+ size_t col, line;
93
+ bool ret = testJson(json, line, col);
94
+ EXPECT_TRUE(ret);
95
+ EXPECT_EQ(line, 4);
96
+ EXPECT_EQ(col, 6);
97
+ }
98
+
99
+ TEST(CursorStreamWrapper, MissingLastArrayBracket) {
100
+ const char json8[] = "{\"string\"\n\n:\"my string\",\"array\"\n:[\"1\", \"2\", \"3\"}";
101
+ size_t col, line;
102
+ bool ret = testJson(json8, line, col);
103
+ EXPECT_TRUE(ret);
104
+ EXPECT_EQ(line, 4);
105
+ EXPECT_EQ(col, 15);
106
+ }
107
+
108
+ TEST(CursorStreamWrapper, MissingLastBracket) {
109
+ const char json9[] = "{\"string\"\n\n:\"my string\",\"array\"\n:[\"1\", \"2\", \"3\"]";
110
+ size_t col, line;
111
+ bool ret = testJson(json9, line, col);
112
+ EXPECT_TRUE(ret);
113
+ EXPECT_EQ(line, 4);
114
+ EXPECT_EQ(col, 16);
115
+ }
@@ -0,0 +1,672 @@
1
+ // Tencent is pleased to support the open source community by making RapidJSON available.
2
+ //
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
4
+ //
5
+ // Licensed under the MIT License (the "License"); you may not use this file except
6
+ // in compliance with the License. You may obtain a copy of the License at
7
+ //
8
+ // http://opensource.org/licenses/MIT
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software distributed
11
+ // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
12
+ // CONDITIONS OF ANY KIND, either express or implied. See the License for the
13
+ // specific language governing permissions and limitations under the License.
14
+
15
+ #include "unittest.h"
16
+ #include "rapidjson/document.h"
17
+ #include "rapidjson/writer.h"
18
+ #include "rapidjson/filereadstream.h"
19
+ #include "rapidjson/encodedstream.h"
20
+ #include "rapidjson/stringbuffer.h"
21
+ #include <sstream>
22
+ #include <algorithm>
23
+
24
+ #ifdef __clang__
25
+ RAPIDJSON_DIAG_PUSH
26
+ RAPIDJSON_DIAG_OFF(c++98-compat)
27
+ RAPIDJSON_DIAG_OFF(missing-variable-declarations)
28
+ #endif
29
+
30
+ using namespace rapidjson;
31
+
32
+ template <typename DocumentType>
33
+ void ParseCheck(DocumentType& doc) {
34
+ typedef typename DocumentType::ValueType ValueType;
35
+
36
+ EXPECT_FALSE(doc.HasParseError());
37
+ if (doc.HasParseError())
38
+ printf("Error: %d at %zu\n", static_cast<int>(doc.GetParseError()), doc.GetErrorOffset());
39
+ EXPECT_TRUE(static_cast<ParseResult>(doc));
40
+
41
+ EXPECT_TRUE(doc.IsObject());
42
+
43
+ EXPECT_TRUE(doc.HasMember("hello"));
44
+ const ValueType& hello = doc["hello"];
45
+ EXPECT_TRUE(hello.IsString());
46
+ EXPECT_STREQ("world", hello.GetString());
47
+
48
+ EXPECT_TRUE(doc.HasMember("t"));
49
+ const ValueType& t = doc["t"];
50
+ EXPECT_TRUE(t.IsTrue());
51
+
52
+ EXPECT_TRUE(doc.HasMember("f"));
53
+ const ValueType& f = doc["f"];
54
+ EXPECT_TRUE(f.IsFalse());
55
+
56
+ EXPECT_TRUE(doc.HasMember("n"));
57
+ const ValueType& n = doc["n"];
58
+ EXPECT_TRUE(n.IsNull());
59
+
60
+ EXPECT_TRUE(doc.HasMember("i"));
61
+ const ValueType& i = doc["i"];
62
+ EXPECT_TRUE(i.IsNumber());
63
+ EXPECT_EQ(123, i.GetInt());
64
+
65
+ EXPECT_TRUE(doc.HasMember("pi"));
66
+ const ValueType& pi = doc["pi"];
67
+ EXPECT_TRUE(pi.IsNumber());
68
+ EXPECT_DOUBLE_EQ(3.1416, pi.GetDouble());
69
+
70
+ EXPECT_TRUE(doc.HasMember("a"));
71
+ const ValueType& a = doc["a"];
72
+ EXPECT_TRUE(a.IsArray());
73
+ EXPECT_EQ(4u, a.Size());
74
+ for (SizeType j = 0; j < 4; j++)
75
+ EXPECT_EQ(j + 1, a[j].GetUint());
76
+ }
77
+
78
+ template <typename Allocator, typename StackAllocator>
79
+ void ParseTest() {
80
+ typedef GenericDocument<UTF8<>, Allocator, StackAllocator> DocumentType;
81
+ DocumentType doc;
82
+
83
+ const char* json = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ";
84
+
85
+ doc.Parse(json);
86
+ ParseCheck(doc);
87
+
88
+ doc.SetNull();
89
+ StringStream s(json);
90
+ doc.template ParseStream<0>(s);
91
+ ParseCheck(doc);
92
+
93
+ doc.SetNull();
94
+ char *buffer = strdup(json);
95
+ doc.ParseInsitu(buffer);
96
+ ParseCheck(doc);
97
+ free(buffer);
98
+
99
+ // Parse(const Ch*, size_t)
100
+ size_t length = strlen(json);
101
+ buffer = reinterpret_cast<char*>(malloc(length * 2));
102
+ memcpy(buffer, json, length);
103
+ memset(buffer + length, 'X', length);
104
+ #if RAPIDJSON_HAS_STDSTRING
105
+ std::string s2(buffer, length); // backup buffer
106
+ #endif
107
+ doc.SetNull();
108
+ doc.Parse(buffer, length);
109
+ free(buffer);
110
+ ParseCheck(doc);
111
+
112
+ #if RAPIDJSON_HAS_STDSTRING
113
+ // Parse(std::string)
114
+ doc.SetNull();
115
+ doc.Parse(s2);
116
+ ParseCheck(doc);
117
+ #endif
118
+ }
119
+
120
+ TEST(Document, Parse) {
121
+ ParseTest<MemoryPoolAllocator<>, CrtAllocator>();
122
+ ParseTest<MemoryPoolAllocator<>, MemoryPoolAllocator<> >();
123
+ ParseTest<CrtAllocator, MemoryPoolAllocator<> >();
124
+ ParseTest<CrtAllocator, CrtAllocator>();
125
+ }
126
+
127
+ TEST(Document, UnchangedOnParseError) {
128
+ Document doc;
129
+ doc.SetArray().PushBack(0, doc.GetAllocator());
130
+
131
+ ParseResult noError;
132
+ EXPECT_TRUE(noError);
133
+
134
+ ParseResult err = doc.Parse("{]");
135
+ EXPECT_TRUE(doc.HasParseError());
136
+ EXPECT_NE(err, noError);
137
+ EXPECT_NE(err.Code(), noError);
138
+ EXPECT_NE(noError, doc.GetParseError());
139
+ EXPECT_EQ(err.Code(), doc.GetParseError());
140
+ EXPECT_EQ(err.Offset(), doc.GetErrorOffset());
141
+ EXPECT_TRUE(doc.IsArray());
142
+ EXPECT_EQ(doc.Size(), 1u);
143
+
144
+ err = doc.Parse("{}");
145
+ EXPECT_FALSE(doc.HasParseError());
146
+ EXPECT_FALSE(err.IsError());
147
+ EXPECT_TRUE(err);
148
+ EXPECT_EQ(err, noError);
149
+ EXPECT_EQ(err.Code(), noError);
150
+ EXPECT_EQ(err.Code(), doc.GetParseError());
151
+ EXPECT_EQ(err.Offset(), doc.GetErrorOffset());
152
+ EXPECT_TRUE(doc.IsObject());
153
+ EXPECT_EQ(doc.MemberCount(), 0u);
154
+ }
155
+
156
+ static FILE* OpenEncodedFile(const char* filename) {
157
+ const char *paths[] = {
158
+ "encodings",
159
+ "bin/encodings",
160
+ "../bin/encodings",
161
+ "../../bin/encodings",
162
+ "../../../bin/encodings"
163
+ };
164
+ char buffer[1024];
165
+ for (size_t i = 0; i < sizeof(paths) / sizeof(paths[0]); i++) {
166
+ sprintf(buffer, "%s/%s", paths[i], filename);
167
+ FILE *fp = fopen(buffer, "rb");
168
+ if (fp)
169
+ return fp;
170
+ }
171
+ return 0;
172
+ }
173
+
174
+ TEST(Document, Parse_Encoding) {
175
+ const char* json = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ";
176
+
177
+ typedef GenericDocument<UTF16<> > DocumentType;
178
+ DocumentType doc;
179
+
180
+ // Parse<unsigned, SourceEncoding>(const SourceEncoding::Ch*)
181
+ // doc.Parse<kParseDefaultFlags, UTF8<> >(json);
182
+ // EXPECT_FALSE(doc.HasParseError());
183
+ // EXPECT_EQ(0, StrCmp(doc[L"hello"].GetString(), L"world"));
184
+
185
+ // Parse<unsigned, SourceEncoding>(const SourceEncoding::Ch*, size_t)
186
+ size_t length = strlen(json);
187
+ char* buffer = reinterpret_cast<char*>(malloc(length * 2));
188
+ memcpy(buffer, json, length);
189
+ memset(buffer + length, 'X', length);
190
+ #if RAPIDJSON_HAS_STDSTRING
191
+ std::string s2(buffer, length); // backup buffer
192
+ #endif
193
+ doc.SetNull();
194
+ doc.Parse<kParseDefaultFlags, UTF8<> >(buffer, length);
195
+ free(buffer);
196
+ EXPECT_FALSE(doc.HasParseError());
197
+ if (doc.HasParseError())
198
+ printf("Error: %d at %zu\n", static_cast<int>(doc.GetParseError()), doc.GetErrorOffset());
199
+ EXPECT_EQ(0, StrCmp(doc[L"hello"].GetString(), L"world"));
200
+
201
+ #if RAPIDJSON_HAS_STDSTRING
202
+ // Parse<unsigned, SourceEncoding>(std::string)
203
+ doc.SetNull();
204
+
205
+ #if defined(_MSC_VER) && _MSC_VER < 1800
206
+ doc.Parse<kParseDefaultFlags, UTF8<> >(s2.c_str()); // VS2010 or below cannot handle templated function overloading. Use const char* instead.
207
+ #else
208
+ doc.Parse<kParseDefaultFlags, UTF8<> >(s2);
209
+ #endif
210
+ EXPECT_FALSE(doc.HasParseError());
211
+ EXPECT_EQ(0, StrCmp(doc[L"hello"].GetString(), L"world"));
212
+ #endif
213
+ }
214
+
215
+ TEST(Document, ParseStream_EncodedInputStream) {
216
+ // UTF8 -> UTF16
217
+ FILE* fp = OpenEncodedFile("utf8.json");
218
+ char buffer[256];
219
+ FileReadStream bis(fp, buffer, sizeof(buffer));
220
+ EncodedInputStream<UTF8<>, FileReadStream> eis(bis);
221
+
222
+ GenericDocument<UTF16<> > d;
223
+ d.ParseStream<0, UTF8<> >(eis);
224
+ EXPECT_FALSE(d.HasParseError());
225
+
226
+ fclose(fp);
227
+
228
+ wchar_t expected[] = L"I can eat glass and it doesn't hurt me.";
229
+ GenericValue<UTF16<> >& v = d[L"en"];
230
+ EXPECT_TRUE(v.IsString());
231
+ EXPECT_EQ(sizeof(expected) / sizeof(wchar_t) - 1, v.GetStringLength());
232
+ EXPECT_EQ(0, StrCmp(expected, v.GetString()));
233
+
234
+ // UTF16 -> UTF8 in memory
235
+ StringBuffer bos;
236
+ typedef EncodedOutputStream<UTF8<>, StringBuffer> OutputStream;
237
+ OutputStream eos(bos, false); // Not writing BOM
238
+ {
239
+ Writer<OutputStream, UTF16<>, UTF8<> > writer(eos);
240
+ d.Accept(writer);
241
+ }
242
+
243
+ // Condense the original file and compare.
244
+ fp = OpenEncodedFile("utf8.json");
245
+ FileReadStream is(fp, buffer, sizeof(buffer));
246
+ Reader reader;
247
+ StringBuffer bos2;
248
+ Writer<StringBuffer> writer2(bos2);
249
+ reader.Parse(is, writer2);
250
+ fclose(fp);
251
+
252
+ EXPECT_EQ(bos.GetSize(), bos2.GetSize());
253
+ EXPECT_EQ(0, memcmp(bos.GetString(), bos2.GetString(), bos2.GetSize()));
254
+ }
255
+
256
+ TEST(Document, ParseStream_AutoUTFInputStream) {
257
+ // Any -> UTF8
258
+ FILE* fp = OpenEncodedFile("utf32be.json");
259
+ char buffer[256];
260
+ FileReadStream bis(fp, buffer, sizeof(buffer));
261
+ AutoUTFInputStream<unsigned, FileReadStream> eis(bis);
262
+
263
+ Document d;
264
+ d.ParseStream<0, AutoUTF<unsigned> >(eis);
265
+ EXPECT_FALSE(d.HasParseError());
266
+
267
+ fclose(fp);
268
+
269
+ char expected[] = "I can eat glass and it doesn't hurt me.";
270
+ Value& v = d["en"];
271
+ EXPECT_TRUE(v.IsString());
272
+ EXPECT_EQ(sizeof(expected) - 1, v.GetStringLength());
273
+ EXPECT_EQ(0, StrCmp(expected, v.GetString()));
274
+
275
+ // UTF8 -> UTF8 in memory
276
+ StringBuffer bos;
277
+ Writer<StringBuffer> writer(bos);
278
+ d.Accept(writer);
279
+
280
+ // Condense the original file and compare.
281
+ fp = OpenEncodedFile("utf8.json");
282
+ FileReadStream is(fp, buffer, sizeof(buffer));
283
+ Reader reader;
284
+ StringBuffer bos2;
285
+ Writer<StringBuffer> writer2(bos2);
286
+ reader.Parse(is, writer2);
287
+ fclose(fp);
288
+
289
+ EXPECT_EQ(bos.GetSize(), bos2.GetSize());
290
+ EXPECT_EQ(0, memcmp(bos.GetString(), bos2.GetString(), bos2.GetSize()));
291
+ }
292
+
293
+ TEST(Document, Swap) {
294
+ Document d1;
295
+ Document::AllocatorType& a = d1.GetAllocator();
296
+
297
+ d1.SetArray().PushBack(1, a).PushBack(2, a);
298
+
299
+ Value o;
300
+ o.SetObject().AddMember("a", 1, a);
301
+
302
+ // Swap between Document and Value
303
+ d1.Swap(o);
304
+ EXPECT_TRUE(d1.IsObject());
305
+ EXPECT_TRUE(o.IsArray());
306
+
307
+ d1.Swap(o);
308
+ EXPECT_TRUE(d1.IsArray());
309
+ EXPECT_TRUE(o.IsObject());
310
+
311
+ o.Swap(d1);
312
+ EXPECT_TRUE(d1.IsObject());
313
+ EXPECT_TRUE(o.IsArray());
314
+
315
+ // Swap between Document and Document
316
+ Document d2;
317
+ d2.SetArray().PushBack(3, a);
318
+ d1.Swap(d2);
319
+ EXPECT_TRUE(d1.IsArray());
320
+ EXPECT_TRUE(d2.IsObject());
321
+ EXPECT_EQ(&d2.GetAllocator(), &a);
322
+
323
+ // reset value
324
+ Value().Swap(d1);
325
+ EXPECT_TRUE(d1.IsNull());
326
+
327
+ // reset document, including allocator
328
+ Document().Swap(d2);
329
+ EXPECT_TRUE(d2.IsNull());
330
+ EXPECT_NE(&d2.GetAllocator(), &a);
331
+
332
+ // testing std::swap compatibility
333
+ d1.SetBool(true);
334
+ using std::swap;
335
+ swap(d1, d2);
336
+ EXPECT_TRUE(d1.IsNull());
337
+ EXPECT_TRUE(d2.IsTrue());
338
+
339
+ swap(o, d2);
340
+ EXPECT_TRUE(o.IsTrue());
341
+ EXPECT_TRUE(d2.IsArray());
342
+ }
343
+
344
+
345
+ // This should be slow due to assignment in inner-loop.
346
+ struct OutputStringStream : public std::ostringstream {
347
+ typedef char Ch;
348
+
349
+ virtual ~OutputStringStream();
350
+
351
+ void Put(char c) {
352
+ put(c);
353
+ }
354
+ void Flush() {}
355
+ };
356
+
357
+ OutputStringStream::~OutputStringStream() {}
358
+
359
+ TEST(Document, AcceptWriter) {
360
+ Document doc;
361
+ doc.Parse(" { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ");
362
+
363
+ OutputStringStream os;
364
+ Writer<OutputStringStream> writer(os);
365
+ doc.Accept(writer);
366
+
367
+ EXPECT_EQ("{\"hello\":\"world\",\"t\":true,\"f\":false,\"n\":null,\"i\":123,\"pi\":3.1416,\"a\":[1,2,3,4]}", os.str());
368
+ }
369
+
370
+ TEST(Document, UserBuffer) {
371
+ typedef GenericDocument<UTF8<>, MemoryPoolAllocator<>, MemoryPoolAllocator<> > DocumentType;
372
+ char valueBuffer[4096];
373
+ char parseBuffer[1024];
374
+ MemoryPoolAllocator<> valueAllocator(valueBuffer, sizeof(valueBuffer));
375
+ MemoryPoolAllocator<> parseAllocator(parseBuffer, sizeof(parseBuffer));
376
+ DocumentType doc(&valueAllocator, sizeof(parseBuffer) / 2, &parseAllocator);
377
+ doc.Parse(" { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ");
378
+ EXPECT_FALSE(doc.HasParseError());
379
+ EXPECT_LE(valueAllocator.Size(), sizeof(valueBuffer));
380
+ EXPECT_LE(parseAllocator.Size(), sizeof(parseBuffer));
381
+
382
+ // Cover MemoryPoolAllocator::Capacity()
383
+ EXPECT_LE(valueAllocator.Size(), valueAllocator.Capacity());
384
+ EXPECT_LE(parseAllocator.Size(), parseAllocator.Capacity());
385
+ }
386
+
387
+ // Issue 226: Value of string type should not point to NULL
388
+ TEST(Document, AssertAcceptInvalidNameType) {
389
+ Document doc;
390
+ doc.SetObject();
391
+ doc.AddMember("a", 0, doc.GetAllocator());
392
+ doc.FindMember("a")->name.SetNull(); // Change name to non-string type.
393
+
394
+ OutputStringStream os;
395
+ Writer<OutputStringStream> writer(os);
396
+ ASSERT_THROW(doc.Accept(writer), AssertException);
397
+ }
398
+
399
+ // Issue 44: SetStringRaw doesn't work with wchar_t
400
+ TEST(Document, UTF16_Document) {
401
+ GenericDocument< UTF16<> > json;
402
+ json.Parse<kParseValidateEncodingFlag>(L"[{\"created_at\":\"Wed Oct 30 17:13:20 +0000 2012\"}]");
403
+
404
+ ASSERT_TRUE(json.IsArray());
405
+ GenericValue< UTF16<> >& v = json[0];
406
+ ASSERT_TRUE(v.IsObject());
407
+
408
+ GenericValue< UTF16<> >& s = v[L"created_at"];
409
+ ASSERT_TRUE(s.IsString());
410
+
411
+ EXPECT_EQ(0, memcmp(L"Wed Oct 30 17:13:20 +0000 2012", s.GetString(), (s.GetStringLength() + 1) * sizeof(wchar_t)));
412
+ }
413
+
414
+ #if RAPIDJSON_HAS_CXX11_RVALUE_REFS
415
+
416
+ #if 0 // Many old compiler does not support these. Turn it off temporaily.
417
+
418
+ #include <type_traits>
419
+
420
+ TEST(Document, Traits) {
421
+ static_assert(std::is_constructible<Document>::value, "");
422
+ static_assert(std::is_default_constructible<Document>::value, "");
423
+ #ifndef _MSC_VER
424
+ static_assert(!std::is_copy_constructible<Document>::value, "");
425
+ #endif
426
+ static_assert(std::is_move_constructible<Document>::value, "");
427
+
428
+ static_assert(!std::is_nothrow_constructible<Document>::value, "");
429
+ static_assert(!std::is_nothrow_default_constructible<Document>::value, "");
430
+ #ifndef _MSC_VER
431
+ static_assert(!std::is_nothrow_copy_constructible<Document>::value, "");
432
+ static_assert(std::is_nothrow_move_constructible<Document>::value, "");
433
+ #endif
434
+
435
+ static_assert(std::is_assignable<Document,Document>::value, "");
436
+ #ifndef _MSC_VER
437
+ static_assert(!std::is_copy_assignable<Document>::value, "");
438
+ #endif
439
+ static_assert(std::is_move_assignable<Document>::value, "");
440
+
441
+ #ifndef _MSC_VER
442
+ static_assert(std::is_nothrow_assignable<Document, Document>::value, "");
443
+ #endif
444
+ static_assert(!std::is_nothrow_copy_assignable<Document>::value, "");
445
+ #ifndef _MSC_VER
446
+ static_assert(std::is_nothrow_move_assignable<Document>::value, "");
447
+ #endif
448
+
449
+ static_assert( std::is_destructible<Document>::value, "");
450
+ #ifndef _MSC_VER
451
+ static_assert(std::is_nothrow_destructible<Document>::value, "");
452
+ #endif
453
+ }
454
+
455
+ #endif
456
+
457
+ template <typename Allocator>
458
+ struct DocumentMove: public ::testing::Test {
459
+ };
460
+
461
+ typedef ::testing::Types< CrtAllocator, MemoryPoolAllocator<> > MoveAllocatorTypes;
462
+ TYPED_TEST_CASE(DocumentMove, MoveAllocatorTypes);
463
+
464
+ TYPED_TEST(DocumentMove, MoveConstructor) {
465
+ typedef TypeParam Allocator;
466
+ typedef GenericDocument<UTF8<>, Allocator> D;
467
+ Allocator allocator;
468
+
469
+ D a(&allocator);
470
+ a.Parse("[\"one\", \"two\", \"three\"]");
471
+ EXPECT_FALSE(a.HasParseError());
472
+ EXPECT_TRUE(a.IsArray());
473
+ EXPECT_EQ(3u, a.Size());
474
+ EXPECT_EQ(&a.GetAllocator(), &allocator);
475
+
476
+ // Document b(a); // does not compile (!is_copy_constructible)
477
+ D b(std::move(a));
478
+ EXPECT_TRUE(a.IsNull());
479
+ EXPECT_TRUE(b.IsArray());
480
+ EXPECT_EQ(3u, b.Size());
481
+ EXPECT_THROW(a.GetAllocator(), AssertException);
482
+ EXPECT_EQ(&b.GetAllocator(), &allocator);
483
+
484
+ b.Parse("{\"Foo\": \"Bar\", \"Baz\": 42}");
485
+ EXPECT_FALSE(b.HasParseError());
486
+ EXPECT_TRUE(b.IsObject());
487
+ EXPECT_EQ(2u, b.MemberCount());
488
+
489
+ // Document c = a; // does not compile (!is_copy_constructible)
490
+ D c = std::move(b);
491
+ EXPECT_TRUE(b.IsNull());
492
+ EXPECT_TRUE(c.IsObject());
493
+ EXPECT_EQ(2u, c.MemberCount());
494
+ EXPECT_THROW(b.GetAllocator(), AssertException);
495
+ EXPECT_EQ(&c.GetAllocator(), &allocator);
496
+ }
497
+
498
+ TYPED_TEST(DocumentMove, MoveConstructorParseError) {
499
+ typedef TypeParam Allocator;
500
+ typedef GenericDocument<UTF8<>, Allocator> D;
501
+
502
+ ParseResult noError;
503
+ D a;
504
+ a.Parse("{ 4 = 4]");
505
+ ParseResult error(a.GetParseError(), a.GetErrorOffset());
506
+ EXPECT_TRUE(a.HasParseError());
507
+ EXPECT_NE(error, noError);
508
+ EXPECT_NE(error.Code(), noError);
509
+ EXPECT_NE(error.Code(), noError.Code());
510
+ EXPECT_NE(error.Offset(), noError.Offset());
511
+
512
+ D b(std::move(a));
513
+ EXPECT_FALSE(a.HasParseError());
514
+ EXPECT_TRUE(b.HasParseError());
515
+ EXPECT_EQ(a.GetParseError(), noError);
516
+ EXPECT_EQ(a.GetParseError(), noError.Code());
517
+ EXPECT_EQ(a.GetErrorOffset(), noError.Offset());
518
+ EXPECT_EQ(b.GetParseError(), error);
519
+ EXPECT_EQ(b.GetParseError(), error.Code());
520
+ EXPECT_EQ(b.GetErrorOffset(), error.Offset());
521
+
522
+ D c(std::move(b));
523
+ EXPECT_FALSE(b.HasParseError());
524
+ EXPECT_TRUE(c.HasParseError());
525
+ EXPECT_EQ(b.GetParseError(), noError.Code());
526
+ EXPECT_EQ(c.GetParseError(), error.Code());
527
+ EXPECT_EQ(b.GetErrorOffset(), noError.Offset());
528
+ EXPECT_EQ(c.GetErrorOffset(), error.Offset());
529
+ }
530
+
531
+ // This test does not properly use parsing, just for testing.
532
+ // It must call ClearStack() explicitly to prevent memory leak.
533
+ // But here we cannot as ClearStack() is private.
534
+ #if 0
535
+ TYPED_TEST(DocumentMove, MoveConstructorStack) {
536
+ typedef TypeParam Allocator;
537
+ typedef UTF8<> Encoding;
538
+ typedef GenericDocument<Encoding, Allocator> Document;
539
+
540
+ Document a;
541
+ size_t defaultCapacity = a.GetStackCapacity();
542
+
543
+ // Trick Document into getting GetStackCapacity() to return non-zero
544
+ typedef GenericReader<Encoding, Encoding, Allocator> Reader;
545
+ Reader reader(&a.GetAllocator());
546
+ GenericStringStream<Encoding> is("[\"one\", \"two\", \"three\"]");
547
+ reader.template Parse<kParseDefaultFlags>(is, a);
548
+ size_t capacity = a.GetStackCapacity();
549
+ EXPECT_GT(capacity, 0u);
550
+
551
+ Document b(std::move(a));
552
+ EXPECT_EQ(a.GetStackCapacity(), defaultCapacity);
553
+ EXPECT_EQ(b.GetStackCapacity(), capacity);
554
+
555
+ Document c = std::move(b);
556
+ EXPECT_EQ(b.GetStackCapacity(), defaultCapacity);
557
+ EXPECT_EQ(c.GetStackCapacity(), capacity);
558
+ }
559
+ #endif
560
+
561
+ TYPED_TEST(DocumentMove, MoveAssignment) {
562
+ typedef TypeParam Allocator;
563
+ typedef GenericDocument<UTF8<>, Allocator> D;
564
+ Allocator allocator;
565
+
566
+ D a(&allocator);
567
+ a.Parse("[\"one\", \"two\", \"three\"]");
568
+ EXPECT_FALSE(a.HasParseError());
569
+ EXPECT_TRUE(a.IsArray());
570
+ EXPECT_EQ(3u, a.Size());
571
+ EXPECT_EQ(&a.GetAllocator(), &allocator);
572
+
573
+ // Document b; b = a; // does not compile (!is_copy_assignable)
574
+ D b;
575
+ b = std::move(a);
576
+ EXPECT_TRUE(a.IsNull());
577
+ EXPECT_TRUE(b.IsArray());
578
+ EXPECT_EQ(3u, b.Size());
579
+ EXPECT_THROW(a.GetAllocator(), AssertException);
580
+ EXPECT_EQ(&b.GetAllocator(), &allocator);
581
+
582
+ b.Parse("{\"Foo\": \"Bar\", \"Baz\": 42}");
583
+ EXPECT_FALSE(b.HasParseError());
584
+ EXPECT_TRUE(b.IsObject());
585
+ EXPECT_EQ(2u, b.MemberCount());
586
+
587
+ // Document c; c = a; // does not compile (see static_assert)
588
+ D c;
589
+ c = std::move(b);
590
+ EXPECT_TRUE(b.IsNull());
591
+ EXPECT_TRUE(c.IsObject());
592
+ EXPECT_EQ(2u, c.MemberCount());
593
+ EXPECT_THROW(b.GetAllocator(), AssertException);
594
+ EXPECT_EQ(&c.GetAllocator(), &allocator);
595
+ }
596
+
597
+ TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
598
+ typedef TypeParam Allocator;
599
+ typedef GenericDocument<UTF8<>, Allocator> D;
600
+
601
+ ParseResult noError;
602
+ D a;
603
+ a.Parse("{ 4 = 4]");
604
+ ParseResult error(a.GetParseError(), a.GetErrorOffset());
605
+ EXPECT_TRUE(a.HasParseError());
606
+ EXPECT_NE(error.Code(), noError.Code());
607
+ EXPECT_NE(error.Offset(), noError.Offset());
608
+
609
+ D b;
610
+ b = std::move(a);
611
+ EXPECT_FALSE(a.HasParseError());
612
+ EXPECT_TRUE(b.HasParseError());
613
+ EXPECT_EQ(a.GetParseError(), noError.Code());
614
+ EXPECT_EQ(b.GetParseError(), error.Code());
615
+ EXPECT_EQ(a.GetErrorOffset(), noError.Offset());
616
+ EXPECT_EQ(b.GetErrorOffset(), error.Offset());
617
+
618
+ D c;
619
+ c = std::move(b);
620
+ EXPECT_FALSE(b.HasParseError());
621
+ EXPECT_TRUE(c.HasParseError());
622
+ EXPECT_EQ(b.GetParseError(), noError.Code());
623
+ EXPECT_EQ(c.GetParseError(), error.Code());
624
+ EXPECT_EQ(b.GetErrorOffset(), noError.Offset());
625
+ EXPECT_EQ(c.GetErrorOffset(), error.Offset());
626
+ }
627
+
628
+ // This test does not properly use parsing, just for testing.
629
+ // It must call ClearStack() explicitly to prevent memory leak.
630
+ // But here we cannot as ClearStack() is private.
631
+ #if 0
632
+ TYPED_TEST(DocumentMove, MoveAssignmentStack) {
633
+ typedef TypeParam Allocator;
634
+ typedef UTF8<> Encoding;
635
+ typedef GenericDocument<Encoding, Allocator> D;
636
+
637
+ D a;
638
+ size_t defaultCapacity = a.GetStackCapacity();
639
+
640
+ // Trick Document into getting GetStackCapacity() to return non-zero
641
+ typedef GenericReader<Encoding, Encoding, Allocator> Reader;
642
+ Reader reader(&a.GetAllocator());
643
+ GenericStringStream<Encoding> is("[\"one\", \"two\", \"three\"]");
644
+ reader.template Parse<kParseDefaultFlags>(is, a);
645
+ size_t capacity = a.GetStackCapacity();
646
+ EXPECT_GT(capacity, 0u);
647
+
648
+ D b;
649
+ b = std::move(a);
650
+ EXPECT_EQ(a.GetStackCapacity(), defaultCapacity);
651
+ EXPECT_EQ(b.GetStackCapacity(), capacity);
652
+
653
+ D c;
654
+ c = std::move(b);
655
+ EXPECT_EQ(b.GetStackCapacity(), defaultCapacity);
656
+ EXPECT_EQ(c.GetStackCapacity(), capacity);
657
+ }
658
+ #endif
659
+
660
+ #endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
661
+
662
+ // Issue 22: Memory corruption via operator=
663
+ // Fixed by making unimplemented assignment operator private.
664
+ //TEST(Document, Assignment) {
665
+ // Document d1;
666
+ // Document d2;
667
+ // d1 = d2;
668
+ //}
669
+
670
+ #ifdef __clang__
671
+ RAPIDJSON_DIAG_POP
672
+ #endif