rj_schema 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,598 @@
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
+
17
+ #include "rapidjson/document.h"
18
+ #include "rapidjson/reader.h"
19
+ #include "rapidjson/writer.h"
20
+ #include "rapidjson/stringbuffer.h"
21
+ #include "rapidjson/memorybuffer.h"
22
+
23
+ #ifdef __clang__
24
+ RAPIDJSON_DIAG_PUSH
25
+ RAPIDJSON_DIAG_OFF(c++98-compat)
26
+ #endif
27
+
28
+ using namespace rapidjson;
29
+
30
+ TEST(Writer, Compact) {
31
+ StringStream s("{ \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3] } ");
32
+ StringBuffer buffer;
33
+ Writer<StringBuffer> writer(buffer);
34
+ buffer.ShrinkToFit();
35
+ Reader reader;
36
+ reader.Parse<0>(s, writer);
37
+ EXPECT_STREQ("{\"hello\":\"world\",\"t\":true,\"f\":false,\"n\":null,\"i\":123,\"pi\":3.1416,\"a\":[1,2,3]}", buffer.GetString());
38
+ EXPECT_EQ(77u, buffer.GetSize());
39
+ EXPECT_TRUE(writer.IsComplete());
40
+ }
41
+
42
+ // json -> parse -> writer -> json
43
+ #define TEST_ROUNDTRIP(json) \
44
+ { \
45
+ StringStream s(json); \
46
+ StringBuffer buffer; \
47
+ Writer<StringBuffer> writer(buffer); \
48
+ Reader reader; \
49
+ reader.Parse<kParseFullPrecisionFlag>(s, writer); \
50
+ EXPECT_STREQ(json, buffer.GetString()); \
51
+ EXPECT_TRUE(writer.IsComplete()); \
52
+ }
53
+
54
+ TEST(Writer, Root) {
55
+ TEST_ROUNDTRIP("null");
56
+ TEST_ROUNDTRIP("true");
57
+ TEST_ROUNDTRIP("false");
58
+ TEST_ROUNDTRIP("0");
59
+ TEST_ROUNDTRIP("\"foo\"");
60
+ TEST_ROUNDTRIP("[]");
61
+ TEST_ROUNDTRIP("{}");
62
+ }
63
+
64
+ TEST(Writer, Int) {
65
+ TEST_ROUNDTRIP("[-1]");
66
+ TEST_ROUNDTRIP("[-123]");
67
+ TEST_ROUNDTRIP("[-2147483648]");
68
+ }
69
+
70
+ TEST(Writer, UInt) {
71
+ TEST_ROUNDTRIP("[0]");
72
+ TEST_ROUNDTRIP("[1]");
73
+ TEST_ROUNDTRIP("[123]");
74
+ TEST_ROUNDTRIP("[2147483647]");
75
+ TEST_ROUNDTRIP("[4294967295]");
76
+ }
77
+
78
+ TEST(Writer, Int64) {
79
+ TEST_ROUNDTRIP("[-1234567890123456789]");
80
+ TEST_ROUNDTRIP("[-9223372036854775808]");
81
+ }
82
+
83
+ TEST(Writer, Uint64) {
84
+ TEST_ROUNDTRIP("[1234567890123456789]");
85
+ TEST_ROUNDTRIP("[9223372036854775807]");
86
+ }
87
+
88
+ TEST(Writer, String) {
89
+ TEST_ROUNDTRIP("[\"Hello\"]");
90
+ TEST_ROUNDTRIP("[\"Hello\\u0000World\"]");
91
+ TEST_ROUNDTRIP("[\"\\\"\\\\/\\b\\f\\n\\r\\t\"]");
92
+
93
+ #if RAPIDJSON_HAS_STDSTRING
94
+ {
95
+ StringBuffer buffer;
96
+ Writer<StringBuffer> writer(buffer);
97
+ writer.String(std::string("Hello\n"));
98
+ EXPECT_STREQ("\"Hello\\n\"", buffer.GetString());
99
+ }
100
+ #endif
101
+ }
102
+
103
+ TEST(Writer, Issue_889) {
104
+ char buf[100] = "Hello";
105
+
106
+ StringBuffer buffer;
107
+ Writer<StringBuffer> writer(buffer);
108
+ writer.StartArray();
109
+ writer.String(buf);
110
+ writer.EndArray();
111
+
112
+ EXPECT_STREQ("[\"Hello\"]", buffer.GetString());
113
+ EXPECT_TRUE(writer.IsComplete()); \
114
+ }
115
+
116
+ TEST(Writer, ScanWriteUnescapedString) {
117
+ const char json[] = "[\" \\\"0123456789ABCDEF\"]";
118
+ // ^ scanning stops here.
119
+ char buffer2[sizeof(json) + 32];
120
+
121
+ // Use different offset to test different alignments
122
+ for (int i = 0; i < 32; i++) {
123
+ char* p = buffer2 + i;
124
+ memcpy(p, json, sizeof(json));
125
+ TEST_ROUNDTRIP(p);
126
+ }
127
+ }
128
+
129
+ TEST(Writer, Double) {
130
+ TEST_ROUNDTRIP("[1.2345,1.2345678,0.123456789012,1234567.8]");
131
+ TEST_ROUNDTRIP("0.0");
132
+ TEST_ROUNDTRIP("-0.0"); // Issue #289
133
+ TEST_ROUNDTRIP("1e30");
134
+ TEST_ROUNDTRIP("1.0");
135
+ TEST_ROUNDTRIP("5e-324"); // Min subnormal positive double
136
+ TEST_ROUNDTRIP("2.225073858507201e-308"); // Max subnormal positive double
137
+ TEST_ROUNDTRIP("2.2250738585072014e-308"); // Min normal positive double
138
+ TEST_ROUNDTRIP("1.7976931348623157e308"); // Max double
139
+
140
+ }
141
+
142
+ // UTF8 -> TargetEncoding -> UTF8
143
+ template <typename TargetEncoding>
144
+ void TestTranscode(const char* json) {
145
+ StringStream s(json);
146
+ GenericStringBuffer<TargetEncoding> buffer;
147
+ Writer<GenericStringBuffer<TargetEncoding>, UTF8<>, TargetEncoding> writer(buffer);
148
+ Reader reader;
149
+ reader.Parse(s, writer);
150
+
151
+ StringBuffer buffer2;
152
+ Writer<StringBuffer> writer2(buffer2);
153
+ GenericReader<TargetEncoding, UTF8<> > reader2;
154
+ GenericStringStream<TargetEncoding> s2(buffer.GetString());
155
+ reader2.Parse(s2, writer2);
156
+
157
+ EXPECT_STREQ(json, buffer2.GetString());
158
+ }
159
+
160
+ TEST(Writer, Transcode) {
161
+ const char json[] = "{\"hello\":\"world\",\"t\":true,\"f\":false,\"n\":null,\"i\":123,\"pi\":3.1416,\"a\":[1,2,3],\"dollar\":\"\x24\",\"cents\":\"\xC2\xA2\",\"euro\":\"\xE2\x82\xAC\",\"gclef\":\"\xF0\x9D\x84\x9E\"}";
162
+
163
+ // UTF8 -> UTF16 -> UTF8
164
+ TestTranscode<UTF8<> >(json);
165
+
166
+ // UTF8 -> ASCII -> UTF8
167
+ TestTranscode<ASCII<> >(json);
168
+
169
+ // UTF8 -> UTF16 -> UTF8
170
+ TestTranscode<UTF16<> >(json);
171
+
172
+ // UTF8 -> UTF32 -> UTF8
173
+ TestTranscode<UTF32<> >(json);
174
+
175
+ // UTF8 -> AutoUTF -> UTF8
176
+ UTFType types[] = { kUTF8, kUTF16LE , kUTF16BE, kUTF32LE , kUTF32BE };
177
+ for (size_t i = 0; i < 5; i++) {
178
+ StringStream s(json);
179
+ MemoryBuffer buffer;
180
+ AutoUTFOutputStream<unsigned, MemoryBuffer> os(buffer, types[i], true);
181
+ Writer<AutoUTFOutputStream<unsigned, MemoryBuffer>, UTF8<>, AutoUTF<unsigned> > writer(os);
182
+ Reader reader;
183
+ reader.Parse(s, writer);
184
+
185
+ StringBuffer buffer2;
186
+ Writer<StringBuffer> writer2(buffer2);
187
+ GenericReader<AutoUTF<unsigned>, UTF8<> > reader2;
188
+ MemoryStream s2(buffer.GetBuffer(), buffer.GetSize());
189
+ AutoUTFInputStream<unsigned, MemoryStream> is(s2);
190
+ reader2.Parse(is, writer2);
191
+
192
+ EXPECT_STREQ(json, buffer2.GetString());
193
+ }
194
+
195
+ }
196
+
197
+ #include <sstream>
198
+
199
+ class OStreamWrapper {
200
+ public:
201
+ typedef char Ch;
202
+
203
+ OStreamWrapper(std::ostream& os) : os_(os) {}
204
+
205
+ Ch Peek() const { assert(false); return '\0'; }
206
+ Ch Take() { assert(false); return '\0'; }
207
+ size_t Tell() const { return 0; }
208
+
209
+ Ch* PutBegin() { assert(false); return 0; }
210
+ void Put(Ch c) { os_.put(c); }
211
+ void Flush() { os_.flush(); }
212
+ size_t PutEnd(Ch*) { assert(false); return 0; }
213
+
214
+ private:
215
+ OStreamWrapper(const OStreamWrapper&);
216
+ OStreamWrapper& operator=(const OStreamWrapper&);
217
+
218
+ std::ostream& os_;
219
+ };
220
+
221
+ TEST(Writer, OStreamWrapper) {
222
+ StringStream s("{ \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3], \"u64\": 1234567890123456789, \"i64\":-1234567890123456789 } ");
223
+
224
+ std::stringstream ss;
225
+ OStreamWrapper os(ss);
226
+
227
+ Writer<OStreamWrapper> writer(os);
228
+
229
+ Reader reader;
230
+ reader.Parse<0>(s, writer);
231
+
232
+ std::string actual = ss.str();
233
+ EXPECT_STREQ("{\"hello\":\"world\",\"t\":true,\"f\":false,\"n\":null,\"i\":123,\"pi\":3.1416,\"a\":[1,2,3],\"u64\":1234567890123456789,\"i64\":-1234567890123456789}", actual.c_str());
234
+ }
235
+
236
+ TEST(Writer, AssertRootMayBeAnyValue) {
237
+ #define T(x)\
238
+ {\
239
+ StringBuffer buffer;\
240
+ Writer<StringBuffer> writer(buffer);\
241
+ EXPECT_TRUE(x);\
242
+ }
243
+ T(writer.Bool(false));
244
+ T(writer.Bool(true));
245
+ T(writer.Null());
246
+ T(writer.Int(0));
247
+ T(writer.Uint(0));
248
+ T(writer.Int64(0));
249
+ T(writer.Uint64(0));
250
+ T(writer.Double(0));
251
+ T(writer.String("foo"));
252
+ #undef T
253
+ }
254
+
255
+ TEST(Writer, AssertIncorrectObjectLevel) {
256
+ StringBuffer buffer;
257
+ Writer<StringBuffer> writer(buffer);
258
+ writer.StartObject();
259
+ writer.EndObject();
260
+ ASSERT_THROW(writer.EndObject(), AssertException);
261
+ }
262
+
263
+ TEST(Writer, AssertIncorrectArrayLevel) {
264
+ StringBuffer buffer;
265
+ Writer<StringBuffer> writer(buffer);
266
+ writer.StartArray();
267
+ writer.EndArray();
268
+ ASSERT_THROW(writer.EndArray(), AssertException);
269
+ }
270
+
271
+ TEST(Writer, AssertIncorrectEndObject) {
272
+ StringBuffer buffer;
273
+ Writer<StringBuffer> writer(buffer);
274
+ writer.StartObject();
275
+ ASSERT_THROW(writer.EndArray(), AssertException);
276
+ }
277
+
278
+ TEST(Writer, AssertIncorrectEndArray) {
279
+ StringBuffer buffer;
280
+ Writer<StringBuffer> writer(buffer);
281
+ writer.StartObject();
282
+ ASSERT_THROW(writer.EndArray(), AssertException);
283
+ }
284
+
285
+ TEST(Writer, AssertObjectKeyNotString) {
286
+ #define T(x)\
287
+ {\
288
+ StringBuffer buffer;\
289
+ Writer<StringBuffer> writer(buffer);\
290
+ writer.StartObject();\
291
+ ASSERT_THROW(x, AssertException); \
292
+ }
293
+ T(writer.Bool(false));
294
+ T(writer.Bool(true));
295
+ T(writer.Null());
296
+ T(writer.Int(0));
297
+ T(writer.Uint(0));
298
+ T(writer.Int64(0));
299
+ T(writer.Uint64(0));
300
+ T(writer.Double(0));
301
+ T(writer.StartObject());
302
+ T(writer.StartArray());
303
+ #undef T
304
+ }
305
+
306
+ TEST(Writer, AssertMultipleRoot) {
307
+ StringBuffer buffer;
308
+ Writer<StringBuffer> writer(buffer);
309
+
310
+ writer.StartObject();
311
+ writer.EndObject();
312
+ ASSERT_THROW(writer.StartObject(), AssertException);
313
+
314
+ writer.Reset(buffer);
315
+ writer.Null();
316
+ ASSERT_THROW(writer.Int(0), AssertException);
317
+
318
+ writer.Reset(buffer);
319
+ writer.String("foo");
320
+ ASSERT_THROW(writer.StartArray(), AssertException);
321
+
322
+ writer.Reset(buffer);
323
+ writer.StartArray();
324
+ writer.EndArray();
325
+ //ASSERT_THROW(writer.Double(3.14), AssertException);
326
+ }
327
+
328
+ TEST(Writer, RootObjectIsComplete) {
329
+ StringBuffer buffer;
330
+ Writer<StringBuffer> writer(buffer);
331
+ EXPECT_FALSE(writer.IsComplete());
332
+ writer.StartObject();
333
+ EXPECT_FALSE(writer.IsComplete());
334
+ writer.String("foo");
335
+ EXPECT_FALSE(writer.IsComplete());
336
+ writer.Int(1);
337
+ EXPECT_FALSE(writer.IsComplete());
338
+ writer.EndObject();
339
+ EXPECT_TRUE(writer.IsComplete());
340
+ }
341
+
342
+ TEST(Writer, RootArrayIsComplete) {
343
+ StringBuffer buffer;
344
+ Writer<StringBuffer> writer(buffer);
345
+ EXPECT_FALSE(writer.IsComplete());
346
+ writer.StartArray();
347
+ EXPECT_FALSE(writer.IsComplete());
348
+ writer.String("foo");
349
+ EXPECT_FALSE(writer.IsComplete());
350
+ writer.Int(1);
351
+ EXPECT_FALSE(writer.IsComplete());
352
+ writer.EndArray();
353
+ EXPECT_TRUE(writer.IsComplete());
354
+ }
355
+
356
+ TEST(Writer, RootValueIsComplete) {
357
+ #define T(x)\
358
+ {\
359
+ StringBuffer buffer;\
360
+ Writer<StringBuffer> writer(buffer);\
361
+ EXPECT_FALSE(writer.IsComplete()); \
362
+ x; \
363
+ EXPECT_TRUE(writer.IsComplete()); \
364
+ }
365
+ T(writer.Null());
366
+ T(writer.Bool(true));
367
+ T(writer.Bool(false));
368
+ T(writer.Int(0));
369
+ T(writer.Uint(0));
370
+ T(writer.Int64(0));
371
+ T(writer.Uint64(0));
372
+ T(writer.Double(0));
373
+ T(writer.String(""));
374
+ #undef T
375
+ }
376
+
377
+ TEST(Writer, InvalidEncoding) {
378
+ // Fail in decoding invalid UTF-8 sequence http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
379
+ {
380
+ GenericStringBuffer<UTF16<> > buffer;
381
+ Writer<GenericStringBuffer<UTF16<> >, UTF8<>, UTF16<> > writer(buffer);
382
+ writer.StartArray();
383
+ EXPECT_FALSE(writer.String("\xfe"));
384
+ EXPECT_FALSE(writer.String("\xff"));
385
+ EXPECT_FALSE(writer.String("\xfe\xfe\xff\xff"));
386
+ writer.EndArray();
387
+ }
388
+
389
+ // Fail in encoding
390
+ {
391
+ StringBuffer buffer;
392
+ Writer<StringBuffer, UTF32<> > writer(buffer);
393
+ static const UTF32<>::Ch s[] = { 0x110000, 0 }; // Out of U+0000 to U+10FFFF
394
+ EXPECT_FALSE(writer.String(s));
395
+ }
396
+
397
+ // Fail in unicode escaping in ASCII output
398
+ {
399
+ StringBuffer buffer;
400
+ Writer<StringBuffer, UTF32<>, ASCII<> > writer(buffer);
401
+ static const UTF32<>::Ch s[] = { 0x110000, 0 }; // Out of U+0000 to U+10FFFF
402
+ EXPECT_FALSE(writer.String(s));
403
+ }
404
+ }
405
+
406
+ TEST(Writer, ValidateEncoding) {
407
+ {
408
+ StringBuffer buffer;
409
+ Writer<StringBuffer, UTF8<>, UTF8<>, CrtAllocator, kWriteValidateEncodingFlag> writer(buffer);
410
+ writer.StartArray();
411
+ EXPECT_TRUE(writer.String("\x24")); // Dollar sign U+0024
412
+ EXPECT_TRUE(writer.String("\xC2\xA2")); // Cents sign U+00A2
413
+ EXPECT_TRUE(writer.String("\xE2\x82\xAC")); // Euro sign U+20AC
414
+ EXPECT_TRUE(writer.String("\xF0\x9D\x84\x9E")); // G clef sign U+1D11E
415
+ EXPECT_TRUE(writer.String("\x01")); // SOH control U+0001
416
+ EXPECT_TRUE(writer.String("\x1B")); // Escape control U+001B
417
+ writer.EndArray();
418
+ EXPECT_STREQ("[\"\x24\",\"\xC2\xA2\",\"\xE2\x82\xAC\",\"\xF0\x9D\x84\x9E\",\"\\u0001\",\"\\u001B\"]", buffer.GetString());
419
+ }
420
+
421
+ // Fail in decoding invalid UTF-8 sequence http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
422
+ {
423
+ StringBuffer buffer;
424
+ Writer<StringBuffer, UTF8<>, UTF8<>, CrtAllocator, kWriteValidateEncodingFlag> writer(buffer);
425
+ writer.StartArray();
426
+ EXPECT_FALSE(writer.String("\xfe"));
427
+ EXPECT_FALSE(writer.String("\xff"));
428
+ EXPECT_FALSE(writer.String("\xfe\xfe\xff\xff"));
429
+ writer.EndArray();
430
+ }
431
+ }
432
+
433
+ TEST(Writer, InvalidEventSequence) {
434
+ // {]
435
+ {
436
+ StringBuffer buffer;
437
+ Writer<StringBuffer> writer(buffer);
438
+ writer.StartObject();
439
+ EXPECT_THROW(writer.EndArray(), AssertException);
440
+ EXPECT_FALSE(writer.IsComplete());
441
+ }
442
+
443
+ // [}
444
+ {
445
+ StringBuffer buffer;
446
+ Writer<StringBuffer> writer(buffer);
447
+ writer.StartArray();
448
+ EXPECT_THROW(writer.EndObject(), AssertException);
449
+ EXPECT_FALSE(writer.IsComplete());
450
+ }
451
+
452
+ // { 1:
453
+ {
454
+ StringBuffer buffer;
455
+ Writer<StringBuffer> writer(buffer);
456
+ writer.StartObject();
457
+ EXPECT_THROW(writer.Int(1), AssertException);
458
+ EXPECT_FALSE(writer.IsComplete());
459
+ }
460
+
461
+ // { 'a' }
462
+ {
463
+ StringBuffer buffer;
464
+ Writer<StringBuffer> writer(buffer);
465
+ writer.StartObject();
466
+ writer.Key("a");
467
+ EXPECT_THROW(writer.EndObject(), AssertException);
468
+ EXPECT_FALSE(writer.IsComplete());
469
+ }
470
+
471
+ // { 'a':'b','c' }
472
+ {
473
+ StringBuffer buffer;
474
+ Writer<StringBuffer> writer(buffer);
475
+ writer.StartObject();
476
+ writer.Key("a");
477
+ writer.String("b");
478
+ writer.Key("c");
479
+ EXPECT_THROW(writer.EndObject(), AssertException);
480
+ EXPECT_FALSE(writer.IsComplete());
481
+ }
482
+ }
483
+
484
+ TEST(Writer, NaN) {
485
+ double nan = std::numeric_limits<double>::quiet_NaN();
486
+
487
+ EXPECT_TRUE(internal::Double(nan).IsNan());
488
+ StringBuffer buffer;
489
+ {
490
+ Writer<StringBuffer> writer(buffer);
491
+ EXPECT_FALSE(writer.Double(nan));
492
+ }
493
+ {
494
+ Writer<StringBuffer, UTF8<>, UTF8<>, CrtAllocator, kWriteNanAndInfFlag> writer(buffer);
495
+ EXPECT_TRUE(writer.Double(nan));
496
+ EXPECT_STREQ("NaN", buffer.GetString());
497
+ }
498
+ GenericStringBuffer<UTF16<> > buffer2;
499
+ Writer<GenericStringBuffer<UTF16<> > > writer2(buffer2);
500
+ EXPECT_FALSE(writer2.Double(nan));
501
+ }
502
+
503
+ TEST(Writer, Inf) {
504
+ double inf = std::numeric_limits<double>::infinity();
505
+
506
+ EXPECT_TRUE(internal::Double(inf).IsInf());
507
+ StringBuffer buffer;
508
+ {
509
+ Writer<StringBuffer> writer(buffer);
510
+ EXPECT_FALSE(writer.Double(inf));
511
+ }
512
+ {
513
+ Writer<StringBuffer> writer(buffer);
514
+ EXPECT_FALSE(writer.Double(-inf));
515
+ }
516
+ {
517
+ Writer<StringBuffer, UTF8<>, UTF8<>, CrtAllocator, kWriteNanAndInfFlag> writer(buffer);
518
+ EXPECT_TRUE(writer.Double(inf));
519
+ }
520
+ {
521
+ Writer<StringBuffer, UTF8<>, UTF8<>, CrtAllocator, kWriteNanAndInfFlag> writer(buffer);
522
+ EXPECT_TRUE(writer.Double(-inf));
523
+ }
524
+ EXPECT_STREQ("Infinity-Infinity", buffer.GetString());
525
+ }
526
+
527
+ TEST(Writer, RawValue) {
528
+ StringBuffer buffer;
529
+ Writer<StringBuffer> writer(buffer);
530
+ writer.StartObject();
531
+ writer.Key("a");
532
+ writer.Int(1);
533
+ writer.Key("raw");
534
+ const char json[] = "[\"Hello\\nWorld\", 123.456]";
535
+ writer.RawValue(json, strlen(json), kArrayType);
536
+ writer.EndObject();
537
+ EXPECT_TRUE(writer.IsComplete());
538
+ EXPECT_STREQ("{\"a\":1,\"raw\":[\"Hello\\nWorld\", 123.456]}", buffer.GetString());
539
+ }
540
+
541
+ TEST(Write, RawValue_Issue1152) {
542
+ {
543
+ GenericStringBuffer<UTF32<> > sb;
544
+ Writer<GenericStringBuffer<UTF32<> >, UTF8<>, UTF32<> > writer(sb);
545
+ writer.RawValue("null", 4, kNullType);
546
+ EXPECT_TRUE(writer.IsComplete());
547
+ const unsigned *out = sb.GetString();
548
+ EXPECT_EQ(static_cast<unsigned>('n'), out[0]);
549
+ EXPECT_EQ(static_cast<unsigned>('u'), out[1]);
550
+ EXPECT_EQ(static_cast<unsigned>('l'), out[2]);
551
+ EXPECT_EQ(static_cast<unsigned>('l'), out[3]);
552
+ EXPECT_EQ(static_cast<unsigned>(0 ), out[4]);
553
+ }
554
+
555
+ {
556
+ GenericStringBuffer<UTF8<> > sb;
557
+ Writer<GenericStringBuffer<UTF8<> >, UTF16<>, UTF8<> > writer(sb);
558
+ writer.RawValue(L"null", 4, kNullType);
559
+ EXPECT_TRUE(writer.IsComplete());
560
+ EXPECT_STREQ("null", sb.GetString());
561
+ }
562
+
563
+ {
564
+ // Fail in transcoding
565
+ GenericStringBuffer<UTF16<> > buffer;
566
+ Writer<GenericStringBuffer<UTF16<> >, UTF8<>, UTF16<> > writer(buffer);
567
+ EXPECT_FALSE(writer.RawValue("\"\xfe\"", 3, kStringType));
568
+ }
569
+
570
+ {
571
+ // Fail in encoding validation
572
+ StringBuffer buffer;
573
+ Writer<StringBuffer, UTF8<>, UTF8<>, CrtAllocator, kWriteValidateEncodingFlag> writer(buffer);
574
+ EXPECT_FALSE(writer.RawValue("\"\xfe\"", 3, kStringType));
575
+ }
576
+ }
577
+
578
+ #if RAPIDJSON_HAS_CXX11_RVALUE_REFS
579
+ static Writer<StringBuffer> WriterGen(StringBuffer &target) {
580
+ Writer<StringBuffer> writer(target);
581
+ writer.StartObject();
582
+ writer.Key("a");
583
+ writer.Int(1);
584
+ return writer;
585
+ }
586
+
587
+ TEST(Writer, MoveCtor) {
588
+ StringBuffer buffer;
589
+ Writer<StringBuffer> writer(WriterGen(buffer));
590
+ writer.EndObject();
591
+ EXPECT_TRUE(writer.IsComplete());
592
+ EXPECT_STREQ("{\"a\":1}", buffer.GetString());
593
+ }
594
+ #endif
595
+
596
+ #ifdef __clang__
597
+ RAPIDJSON_DIAG_POP
598
+ #endif