pygments.rb 1.2.1 → 2.0.0.rc2

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 (378) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ci.yml +28 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +5 -6
  6. data/CHANGELOG.adoc +119 -0
  7. data/Gemfile +3 -1
  8. data/LICENSE +1 -1
  9. data/README.adoc +161 -0
  10. data/Rakefile +10 -21
  11. data/bench.rb +8 -7
  12. data/cache-lexers.rb +3 -2
  13. data/lib/pygments.rb +10 -11
  14. data/lib/pygments/lexer.rb +5 -5
  15. data/lib/pygments/mentos.py +23 -66
  16. data/lib/pygments/popen.rb +152 -204
  17. data/lib/pygments/version.rb +2 -2
  18. data/pygments.rb.gemspec +11 -9
  19. data/test/test_pygments.rb +51 -84
  20. data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +21 -3
  21. data/vendor/pygments-main/Pygments-2.7.3.dist-info/INSTALLER +1 -0
  22. data/vendor/pygments-main/{LICENSE → Pygments-2.7.3.dist-info/LICENSE} +1 -1
  23. data/vendor/pygments-main/Pygments-2.7.3.dist-info/METADATA +49 -0
  24. data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +482 -0
  25. data/vendor/pygments-main/Pygments-2.7.3.dist-info/REQUESTED +0 -0
  26. data/vendor/pygments-main/Pygments-2.7.3.dist-info/WHEEL +5 -0
  27. data/vendor/pygments-main/Pygments-2.7.3.dist-info/entry_points.txt +3 -0
  28. data/vendor/pygments-main/Pygments-2.7.3.dist-info/top_level.txt +1 -0
  29. data/vendor/pygments-main/bin/pygmentize +8 -0
  30. data/vendor/pygments-main/pygments/__init__.py +6 -11
  31. data/vendor/pygments-main/pygments/__main__.py +18 -0
  32. data/vendor/pygments-main/pygments/cmdline.py +38 -29
  33. data/vendor/pygments-main/pygments/console.py +6 -9
  34. data/vendor/pygments-main/pygments/filter.py +4 -6
  35. data/vendor/pygments-main/pygments/filters/__init__.py +609 -21
  36. data/vendor/pygments-main/pygments/formatter.py +4 -4
  37. data/vendor/pygments-main/pygments/formatters/__init__.py +9 -8
  38. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -3
  39. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
  40. data/vendor/pygments-main/pygments/formatters/html.py +223 -135
  41. data/vendor/pygments-main/pygments/formatters/img.py +68 -41
  42. data/vendor/pygments-main/pygments/formatters/irc.py +39 -39
  43. data/vendor/pygments-main/pygments/formatters/latex.py +56 -26
  44. data/vendor/pygments-main/pygments/formatters/other.py +12 -8
  45. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -29
  46. data/vendor/pygments-main/pygments/formatters/svg.py +38 -4
  47. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -31
  48. data/vendor/pygments-main/pygments/formatters/terminal256.py +22 -12
  49. data/vendor/pygments-main/pygments/lexer.py +41 -39
  50. data/vendor/pygments-main/pygments/lexers/__init__.py +342 -0
  51. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1645 -0
  52. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +232 -0
  53. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +71 -0
  54. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1725 -0
  55. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +5327 -0
  56. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +293 -0
  57. data/vendor/pygments-main/pygments/lexers/_mapping.py +551 -0
  58. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1172 -0
  59. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1282 -0
  60. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2547 -0
  61. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +4753 -0
  62. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +678 -0
  63. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3094 -0
  64. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1161 -0
  65. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +558 -0
  66. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +421 -0
  67. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1004 -0
  68. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +113 -0
  69. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +280 -0
  70. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1939 -0
  71. data/vendor/pygments-main/pygments/lexers/actionscript.py +245 -0
  72. data/vendor/pygments-main/pygments/lexers/agile.py +24 -0
  73. data/vendor/pygments-main/pygments/lexers/algebra.py +240 -0
  74. data/vendor/pygments-main/pygments/lexers/ambient.py +76 -0
  75. data/vendor/pygments-main/pygments/lexers/ampl.py +87 -0
  76. data/vendor/pygments-main/pygments/lexers/apl.py +101 -0
  77. data/vendor/pygments-main/pygments/lexers/archetype.py +318 -0
  78. data/vendor/pygments-main/pygments/lexers/arrow.py +117 -0
  79. data/vendor/pygments-main/pygments/lexers/asm.py +1005 -0
  80. data/vendor/pygments-main/pygments/lexers/automation.py +374 -0
  81. data/vendor/pygments-main/pygments/lexers/bare.py +104 -0
  82. data/vendor/pygments-main/pygments/lexers/basic.py +662 -0
  83. data/vendor/pygments-main/pygments/lexers/bibtex.py +160 -0
  84. data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
  85. data/vendor/pygments-main/pygments/lexers/business.py +627 -0
  86. data/vendor/pygments-main/pygments/lexers/c_cpp.py +344 -0
  87. data/vendor/pygments-main/pygments/lexers/c_like.py +566 -0
  88. data/vendor/pygments-main/pygments/lexers/capnproto.py +78 -0
  89. data/vendor/pygments-main/pygments/lexers/chapel.py +112 -0
  90. data/vendor/pygments-main/pygments/lexers/clean.py +179 -0
  91. data/vendor/pygments-main/pygments/lexers/compiled.py +34 -0
  92. data/vendor/pygments-main/pygments/lexers/configs.py +984 -0
  93. data/vendor/pygments-main/pygments/lexers/console.py +114 -0
  94. data/vendor/pygments-main/pygments/lexers/crystal.py +392 -0
  95. data/vendor/pygments-main/pygments/lexers/csound.py +467 -0
  96. data/vendor/pygments-main/pygments/lexers/css.py +691 -0
  97. data/vendor/pygments-main/pygments/lexers/d.py +256 -0
  98. data/vendor/pygments-main/pygments/lexers/dalvik.py +125 -0
  99. data/vendor/pygments-main/pygments/lexers/data.py +698 -0
  100. data/vendor/pygments-main/pygments/lexers/devicetree.py +109 -0
  101. data/vendor/pygments-main/pygments/lexers/diff.py +165 -0
  102. data/vendor/pygments-main/pygments/lexers/dotnet.py +707 -0
  103. data/vendor/pygments-main/pygments/lexers/dsls.py +960 -0
  104. data/vendor/pygments-main/pygments/lexers/dylan.py +287 -0
  105. data/vendor/pygments-main/pygments/lexers/ecl.py +139 -0
  106. data/vendor/pygments-main/pygments/lexers/eiffel.py +65 -0
  107. data/vendor/pygments-main/pygments/lexers/elm.py +121 -0
  108. data/vendor/pygments-main/pygments/lexers/email.py +151 -0
  109. data/vendor/pygments-main/pygments/lexers/erlang.py +530 -0
  110. data/vendor/pygments-main/pygments/lexers/esoteric.py +304 -0
  111. data/vendor/pygments-main/pygments/lexers/ezhil.py +77 -0
  112. data/vendor/pygments-main/pygments/lexers/factor.py +344 -0
  113. data/vendor/pygments-main/pygments/lexers/fantom.py +250 -0
  114. data/vendor/pygments-main/pygments/lexers/felix.py +273 -0
  115. data/vendor/pygments-main/pygments/lexers/floscript.py +83 -0
  116. data/vendor/pygments-main/pygments/lexers/forth.py +178 -0
  117. data/vendor/pygments-main/pygments/lexers/fortran.py +206 -0
  118. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  119. data/vendor/pygments-main/pygments/lexers/freefem.py +898 -0
  120. data/vendor/pygments-main/pygments/lexers/functional.py +21 -0
  121. data/vendor/pygments-main/pygments/lexers/gdscript.py +346 -0
  122. data/vendor/pygments-main/pygments/lexers/go.py +101 -0
  123. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +270 -0
  124. data/vendor/pygments-main/pygments/lexers/graph.py +85 -0
  125. data/vendor/pygments-main/pygments/lexers/graphics.py +800 -0
  126. data/vendor/pygments-main/pygments/lexers/haskell.py +870 -0
  127. data/vendor/pygments-main/pygments/lexers/haxe.py +936 -0
  128. data/vendor/pygments-main/pygments/lexers/hdl.py +472 -0
  129. data/vendor/pygments-main/pygments/lexers/hexdump.py +103 -0
  130. data/vendor/pygments-main/pygments/lexers/html.py +614 -0
  131. data/vendor/pygments-main/pygments/lexers/idl.py +281 -0
  132. data/vendor/pygments-main/pygments/lexers/igor.py +420 -0
  133. data/vendor/pygments-main/pygments/lexers/inferno.py +96 -0
  134. data/vendor/pygments-main/pygments/lexers/installers.py +322 -0
  135. data/vendor/pygments-main/pygments/lexers/int_fiction.py +1368 -0
  136. data/vendor/pygments-main/pygments/lexers/iolang.py +63 -0
  137. data/vendor/pygments-main/pygments/lexers/j.py +146 -0
  138. data/vendor/pygments-main/pygments/lexers/javascript.py +1540 -0
  139. data/vendor/pygments-main/pygments/lexers/julia.py +331 -0
  140. data/vendor/pygments-main/pygments/lexers/jvm.py +1673 -0
  141. data/vendor/pygments-main/pygments/lexers/lisp.py +2699 -0
  142. data/vendor/pygments-main/pygments/lexers/make.py +206 -0
  143. data/vendor/pygments-main/pygments/lexers/markup.py +765 -0
  144. data/vendor/pygments-main/pygments/lexers/math.py +21 -0
  145. data/vendor/pygments-main/pygments/lexers/matlab.py +720 -0
  146. data/vendor/pygments-main/pygments/lexers/mime.py +226 -0
  147. data/vendor/pygments-main/pygments/lexers/ml.py +958 -0
  148. data/vendor/pygments-main/pygments/lexers/modeling.py +366 -0
  149. data/vendor/pygments-main/pygments/lexers/modula2.py +1580 -0
  150. data/vendor/pygments-main/pygments/lexers/monte.py +204 -0
  151. data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
  152. data/vendor/pygments-main/pygments/lexers/ncl.py +894 -0
  153. data/vendor/pygments-main/pygments/lexers/nimrod.py +159 -0
  154. data/vendor/pygments-main/pygments/lexers/nit.py +64 -0
  155. data/vendor/pygments-main/pygments/lexers/nix.py +136 -0
  156. data/vendor/pygments-main/pygments/lexers/oberon.py +121 -0
  157. data/vendor/pygments-main/pygments/lexers/objective.py +504 -0
  158. data/vendor/pygments-main/pygments/lexers/ooc.py +85 -0
  159. data/vendor/pygments-main/pygments/lexers/other.py +41 -0
  160. data/vendor/pygments-main/pygments/lexers/parasail.py +79 -0
  161. data/vendor/pygments-main/pygments/lexers/parsers.py +800 -0
  162. data/vendor/pygments-main/pygments/lexers/pascal.py +644 -0
  163. data/vendor/pygments-main/pygments/lexers/pawn.py +205 -0
  164. data/vendor/pygments-main/pygments/lexers/perl.py +732 -0
  165. data/vendor/pygments-main/pygments/lexers/php.py +321 -0
  166. data/vendor/pygments-main/pygments/lexers/pointless.py +71 -0
  167. data/vendor/pygments-main/pygments/lexers/pony.py +94 -0
  168. data/vendor/pygments-main/pygments/lexers/praat.py +302 -0
  169. data/vendor/pygments-main/pygments/lexers/prolog.py +306 -0
  170. data/vendor/pygments-main/pygments/lexers/promql.py +183 -0
  171. data/vendor/pygments-main/pygments/lexers/python.py +1151 -0
  172. data/vendor/pygments-main/pygments/lexers/qvt.py +152 -0
  173. data/vendor/pygments-main/pygments/lexers/r.py +191 -0
  174. data/vendor/pygments-main/pygments/lexers/rdf.py +463 -0
  175. data/vendor/pygments-main/pygments/lexers/rebol.py +431 -0
  176. data/vendor/pygments-main/pygments/lexers/resource.py +85 -0
  177. data/vendor/pygments-main/pygments/lexers/ride.py +139 -0
  178. data/vendor/pygments-main/pygments/lexers/rnc.py +67 -0
  179. data/vendor/pygments-main/pygments/lexers/roboconf.py +82 -0
  180. data/vendor/pygments-main/pygments/lexers/robotframework.py +552 -0
  181. data/vendor/pygments-main/pygments/lexers/ruby.py +517 -0
  182. data/vendor/pygments-main/pygments/lexers/rust.py +224 -0
  183. data/vendor/pygments-main/pygments/lexers/sas.py +228 -0
  184. data/vendor/pygments-main/pygments/lexers/scdoc.py +83 -0
  185. data/vendor/pygments-main/pygments/lexers/scripting.py +1284 -0
  186. data/vendor/pygments-main/pygments/lexers/sgf.py +61 -0
  187. data/vendor/pygments-main/pygments/lexers/shell.py +914 -0
  188. data/vendor/pygments-main/pygments/lexers/sieve.py +69 -0
  189. data/vendor/pygments-main/pygments/lexers/slash.py +185 -0
  190. data/vendor/pygments-main/pygments/lexers/smalltalk.py +195 -0
  191. data/vendor/pygments-main/pygments/lexers/smv.py +79 -0
  192. data/vendor/pygments-main/pygments/lexers/snobol.py +83 -0
  193. data/vendor/pygments-main/pygments/lexers/solidity.py +92 -0
  194. data/vendor/pygments-main/pygments/lexers/special.py +105 -0
  195. data/vendor/pygments-main/pygments/lexers/sql.py +837 -0
  196. data/vendor/pygments-main/pygments/lexers/stata.py +171 -0
  197. data/vendor/pygments-main/pygments/lexers/supercollider.py +95 -0
  198. data/vendor/pygments-main/pygments/lexers/tcl.py +145 -0
  199. data/vendor/pygments-main/pygments/lexers/templates.py +2264 -0
  200. data/vendor/pygments-main/pygments/lexers/teraterm.py +335 -0
  201. data/vendor/pygments-main/pygments/lexers/testing.py +207 -0
  202. data/vendor/pygments-main/pygments/lexers/text.py +26 -0
  203. data/vendor/pygments-main/pygments/lexers/textedit.py +169 -0
  204. data/vendor/pygments-main/pygments/lexers/textfmts.py +430 -0
  205. data/vendor/pygments-main/pygments/lexers/theorem.py +474 -0
  206. data/vendor/pygments-main/pygments/lexers/tnt.py +263 -0
  207. data/vendor/pygments-main/pygments/lexers/trafficscript.py +54 -0
  208. data/vendor/pygments-main/pygments/lexers/typoscript.py +219 -0
  209. data/vendor/pygments-main/pygments/lexers/unicon.py +412 -0
  210. data/vendor/pygments-main/pygments/lexers/urbi.py +146 -0
  211. data/vendor/pygments-main/pygments/lexers/usd.py +90 -0
  212. data/vendor/pygments-main/pygments/lexers/varnish.py +190 -0
  213. data/vendor/pygments-main/pygments/lexers/verification.py +114 -0
  214. data/vendor/pygments-main/pygments/lexers/web.py +24 -0
  215. data/vendor/pygments-main/pygments/lexers/webidl.py +299 -0
  216. data/vendor/pygments-main/pygments/lexers/webmisc.py +991 -0
  217. data/vendor/pygments-main/pygments/lexers/whiley.py +116 -0
  218. data/vendor/pygments-main/pygments/lexers/x10.py +69 -0
  219. data/vendor/pygments-main/pygments/lexers/xorg.py +37 -0
  220. data/vendor/pygments-main/pygments/lexers/yang.py +104 -0
  221. data/vendor/pygments-main/pygments/lexers/zig.py +124 -0
  222. data/vendor/pygments-main/pygments/modeline.py +1 -1
  223. data/vendor/pygments-main/pygments/plugin.py +4 -2
  224. data/vendor/pygments-main/pygments/regexopt.py +1 -1
  225. data/vendor/pygments-main/pygments/scanner.py +2 -2
  226. data/vendor/pygments-main/pygments/sphinxext.py +2 -4
  227. data/vendor/pygments-main/pygments/style.py +61 -24
  228. data/vendor/pygments-main/pygments/styles/__init__.py +10 -4
  229. data/vendor/pygments-main/pygments/styles/abap.py +1 -1
  230. data/vendor/pygments-main/pygments/styles/algol.py +1 -1
  231. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -1
  232. data/vendor/pygments-main/pygments/styles/arduino.py +2 -2
  233. data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
  234. data/vendor/pygments-main/pygments/styles/borland.py +1 -1
  235. data/vendor/pygments-main/pygments/styles/bw.py +1 -1
  236. data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
  237. data/vendor/pygments-main/pygments/styles/default.py +1 -1
  238. data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
  239. data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
  240. data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
  241. data/vendor/pygments-main/pygments/styles/igor.py +1 -1
  242. data/vendor/pygments-main/pygments/styles/inkpot.py +67 -0
  243. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -1
  244. data/vendor/pygments-main/pygments/styles/manni.py +1 -1
  245. data/vendor/pygments-main/pygments/styles/monokai.py +4 -3
  246. data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
  247. data/vendor/pygments-main/pygments/styles/native.py +1 -1
  248. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -1
  249. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -1
  250. data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
  251. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
  252. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -1
  253. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  254. data/vendor/pygments-main/pygments/styles/sas.py +1 -1
  255. data/vendor/pygments-main/pygments/styles/solarized.py +134 -0
  256. data/vendor/pygments-main/pygments/styles/stata_dark.py +41 -0
  257. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -15
  258. data/vendor/pygments-main/pygments/styles/tango.py +1 -1
  259. data/vendor/pygments-main/pygments/styles/trac.py +1 -1
  260. data/vendor/pygments-main/pygments/styles/vim.py +1 -1
  261. data/vendor/pygments-main/pygments/styles/vs.py +1 -1
  262. data/vendor/pygments-main/pygments/styles/xcode.py +1 -1
  263. data/vendor/pygments-main/pygments/token.py +1 -1
  264. data/vendor/pygments-main/pygments/unistring.py +47 -108
  265. data/vendor/pygments-main/pygments/util.py +15 -92
  266. metadata +69 -136
  267. data/CHANGELOG.md +0 -111
  268. data/README.md +0 -121
  269. data/circle.yml +0 -20
  270. data/test/test_data.py +0 -514
  271. data/test/test_data_generated +0 -2582
  272. data/vendor/custom_lexers/github.py +0 -565
  273. data/vendor/pygments-main/CHANGES +0 -1186
  274. data/vendor/pygments-main/MANIFEST.in +0 -6
  275. data/vendor/pygments-main/Makefile +0 -65
  276. data/vendor/pygments-main/README.rst +0 -39
  277. data/vendor/pygments-main/REVISION +0 -1
  278. data/vendor/pygments-main/TODO +0 -12
  279. data/vendor/pygments-main/doc/Makefile +0 -153
  280. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  281. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  282. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  283. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  284. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  285. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  286. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  287. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  288. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  289. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  290. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  291. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  292. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  293. data/vendor/pygments-main/doc/conf.py +0 -241
  294. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  295. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  296. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  297. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  298. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  299. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  300. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  301. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  302. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  303. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  304. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  305. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  306. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  307. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  308. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  309. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  310. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  311. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  312. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  313. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  314. data/vendor/pygments-main/doc/download.rst +0 -41
  315. data/vendor/pygments-main/doc/faq.rst +0 -139
  316. data/vendor/pygments-main/doc/index.rst +0 -54
  317. data/vendor/pygments-main/doc/languages.rst +0 -154
  318. data/vendor/pygments-main/doc/make.bat +0 -190
  319. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  320. data/vendor/pygments-main/external/autopygmentize +0 -101
  321. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  322. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  323. data/vendor/pygments-main/external/moin-parser.py +0 -112
  324. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  325. data/vendor/pygments-main/external/rst-directive.py +0 -82
  326. data/vendor/pygments-main/pygmentize +0 -8
  327. data/vendor/pygments-main/requirements.txt +0 -5
  328. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  329. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  330. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  331. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  332. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  333. data/vendor/pygments-main/scripts/pylintrc +0 -301
  334. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  335. data/vendor/pygments-main/setup.cfg +0 -10
  336. data/vendor/pygments-main/setup.py +0 -77
  337. data/vendor/pygments-main/tox.ini +0 -7
  338. data/vendor/simplejson/.gitignore +0 -10
  339. data/vendor/simplejson/.travis.yml +0 -5
  340. data/vendor/simplejson/CHANGES.txt +0 -291
  341. data/vendor/simplejson/LICENSE.txt +0 -19
  342. data/vendor/simplejson/MANIFEST.in +0 -5
  343. data/vendor/simplejson/README.rst +0 -19
  344. data/vendor/simplejson/conf.py +0 -179
  345. data/vendor/simplejson/index.rst +0 -628
  346. data/vendor/simplejson/scripts/make_docs.py +0 -18
  347. data/vendor/simplejson/setup.py +0 -104
  348. data/vendor/simplejson/simplejson/__init__.py +0 -510
  349. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  350. data/vendor/simplejson/simplejson/decoder.py +0 -425
  351. data/vendor/simplejson/simplejson/encoder.py +0 -567
  352. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  353. data/vendor/simplejson/simplejson/scanner.py +0 -77
  354. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  355. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  356. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  357. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  358. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  359. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  360. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  361. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  362. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  363. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  364. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  365. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  366. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  367. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  368. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  369. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  370. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  371. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  372. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  373. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  374. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  375. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  376. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  377. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  378. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -1,9 +0,0 @@
1
- from unittest import TestCase
2
-
3
- import simplejson as json
4
-
5
- class TestDefault(TestCase):
6
- def test_default(self):
7
- self.assertEquals(
8
- json.dumps(type, default=repr),
9
- json.dumps(repr(type)))
@@ -1,67 +0,0 @@
1
- from unittest import TestCase
2
- from cStringIO import StringIO
3
-
4
- import simplejson as json
5
-
6
- class TestDump(TestCase):
7
- def test_dump(self):
8
- sio = StringIO()
9
- json.dump({}, sio)
10
- self.assertEquals(sio.getvalue(), '{}')
11
-
12
- def test_dumps(self):
13
- self.assertEquals(json.dumps({}), '{}')
14
-
15
- def test_encode_truefalse(self):
16
- self.assertEquals(json.dumps(
17
- {True: False, False: True}, sort_keys=True),
18
- '{"false": true, "true": false}')
19
- self.assertEquals(json.dumps(
20
- {2: 3.0, 4.0: 5L, False: 1, 6L: True, "7": 0}, sort_keys=True),
21
- '{"false": 1, "2": 3.0, "4.0": 5, "6": true, "7": 0}')
22
-
23
- def test_ordered_dict(self):
24
- # http://bugs.python.org/issue6105
25
- items = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)]
26
- s = json.dumps(json.OrderedDict(items))
27
- self.assertEqual(s, '{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5}')
28
-
29
- def test_indent_unknown_type_acceptance(self):
30
- """
31
- A test against the regression mentioned at `github issue 29`_.
32
-
33
- The indent parameter should accept any type which pretends to be
34
- an instance of int or long when it comes to being multiplied by
35
- strings, even if it is not actually an int or long, for
36
- backwards compatibility.
37
-
38
- .. _github issue 29:
39
- http://github.com/simplejson/simplejson/issue/29
40
- """
41
-
42
- class AwesomeInt(object):
43
- """An awesome reimplementation of integers"""
44
-
45
- def __init__(self, *args, **kwargs):
46
- if len(args) > 0:
47
- # [construct from literals, objects, etc.]
48
- # ...
49
-
50
- # Finally, if args[0] is an integer, store it
51
- if isinstance(args[0], int):
52
- self._int = args[0]
53
-
54
- # [various methods]
55
-
56
- def __mul__(self, other):
57
- # [various ways to multiply AwesomeInt objects]
58
- # ... finally, if the right-hand operand is not awesome enough,
59
- # try to do a normal integer multiplication
60
- if hasattr(self, '_int'):
61
- return self._int * other
62
- else:
63
- raise NotImplementedError("To do non-awesome things with"
64
- " this object, please construct it from an integer!")
65
-
66
- s = json.dumps(range(3), indent=AwesomeInt(3))
67
- self.assertEqual(s, '[\n 0,\n 1,\n 2\n]')
@@ -1,46 +0,0 @@
1
- from unittest import TestCase
2
-
3
- import simplejson.encoder
4
-
5
- CASES = [
6
- (u'/\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\x08\x0c\n\r\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?', '"/\\\\\\"\\ucafe\\ubabe\\uab98\\ufcde\\ubcda\\uef4a\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?"'),
7
- (u'\u0123\u4567\u89ab\ucdef\uabcd\uef4a', '"\\u0123\\u4567\\u89ab\\ucdef\\uabcd\\uef4a"'),
8
- (u'controls', '"controls"'),
9
- (u'\x08\x0c\n\r\t', '"\\b\\f\\n\\r\\t"'),
10
- (u'{"object with 1 member":["array with 1 element"]}', '"{\\"object with 1 member\\":[\\"array with 1 element\\"]}"'),
11
- (u' s p a c e d ', '" s p a c e d "'),
12
- (u'\U0001d120', '"\\ud834\\udd20"'),
13
- (u'\u03b1\u03a9', '"\\u03b1\\u03a9"'),
14
- ('\xce\xb1\xce\xa9', '"\\u03b1\\u03a9"'),
15
- (u'\u03b1\u03a9', '"\\u03b1\\u03a9"'),
16
- ('\xce\xb1\xce\xa9', '"\\u03b1\\u03a9"'),
17
- (u'\u03b1\u03a9', '"\\u03b1\\u03a9"'),
18
- (u'\u03b1\u03a9', '"\\u03b1\\u03a9"'),
19
- (u"`1~!@#$%^&*()_+-={':[,]}|;.</>?", '"`1~!@#$%^&*()_+-={\':[,]}|;.</>?"'),
20
- (u'\x08\x0c\n\r\t', '"\\b\\f\\n\\r\\t"'),
21
- (u'\u0123\u4567\u89ab\ucdef\uabcd\uef4a', '"\\u0123\\u4567\\u89ab\\ucdef\\uabcd\\uef4a"'),
22
- ]
23
-
24
- class TestEncodeBaseStringAscii(TestCase):
25
- def test_py_encode_basestring_ascii(self):
26
- self._test_encode_basestring_ascii(simplejson.encoder.py_encode_basestring_ascii)
27
-
28
- def test_c_encode_basestring_ascii(self):
29
- if not simplejson.encoder.c_encode_basestring_ascii:
30
- return
31
- self._test_encode_basestring_ascii(simplejson.encoder.c_encode_basestring_ascii)
32
-
33
- def _test_encode_basestring_ascii(self, encode_basestring_ascii):
34
- fname = encode_basestring_ascii.__name__
35
- for input_string, expect in CASES:
36
- result = encode_basestring_ascii(input_string)
37
- #self.assertEquals(result, expect,
38
- # '{0!r} != {1!r} for {2}({3!r})'.format(
39
- # result, expect, fname, input_string))
40
- self.assertEquals(result, expect,
41
- '%r != %r for %s(%r)' % (result, expect, fname, input_string))
42
-
43
- def test_sorted_dict(self):
44
- items = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)]
45
- s = simplejson.dumps(dict(items), sort_keys=True)
46
- self.assertEqual(s, '{"five": 5, "four": 4, "one": 1, "three": 3, "two": 2}')
@@ -1,32 +0,0 @@
1
- import unittest
2
-
3
- import simplejson.decoder
4
- import simplejson.encoder
5
-
6
-
7
- class TestEncodeForHTML(unittest.TestCase):
8
-
9
- def setUp(self):
10
- self.decoder = simplejson.decoder.JSONDecoder()
11
- self.encoder = simplejson.encoder.JSONEncoderForHTML()
12
-
13
- def test_basic_encode(self):
14
- self.assertEqual(r'"\u0026"', self.encoder.encode('&'))
15
- self.assertEqual(r'"\u003c"', self.encoder.encode('<'))
16
- self.assertEqual(r'"\u003e"', self.encoder.encode('>'))
17
-
18
- def test_basic_roundtrip(self):
19
- for char in '&<>':
20
- self.assertEqual(
21
- char, self.decoder.decode(
22
- self.encoder.encode(char)))
23
-
24
- def test_prevent_script_breakout(self):
25
- bad_string = '</script><script>alert("gotcha")</script>'
26
- self.assertEqual(
27
- r'"\u003c/script\u003e\u003cscript\u003e'
28
- r'alert(\"gotcha\")\u003c/script\u003e"',
29
- self.encoder.encode(bad_string))
30
- self.assertEqual(
31
- bad_string, self.decoder.decode(
32
- self.encoder.encode(bad_string)))
@@ -1,34 +0,0 @@
1
- from unittest import TestCase
2
-
3
- import simplejson as json
4
-
5
- class TestErrors(TestCase):
6
- def test_string_keys_error(self):
7
- data = [{'a': 'A', 'b': (2, 4), 'c': 3.0, ('d',): 'D tuple'}]
8
- self.assertRaises(TypeError, json.dumps, data)
9
-
10
- def test_decode_error(self):
11
- err = None
12
- try:
13
- json.loads('{}\na\nb')
14
- except json.JSONDecodeError, e:
15
- err = e
16
- else:
17
- self.fail('Expected JSONDecodeError')
18
- self.assertEquals(err.lineno, 2)
19
- self.assertEquals(err.colno, 1)
20
- self.assertEquals(err.endlineno, 3)
21
- self.assertEquals(err.endcolno, 2)
22
-
23
- def test_scan_error(self):
24
- err = None
25
- for t in (str, unicode):
26
- try:
27
- json.loads(t('{"asdf": "'))
28
- except json.JSONDecodeError, e:
29
- err = e
30
- else:
31
- self.fail('Expected JSONDecodeError')
32
- self.assertEquals(err.lineno, 1)
33
- self.assertEquals(err.colno, 9)
34
-
@@ -1,91 +0,0 @@
1
- from unittest import TestCase
2
-
3
- import simplejson as json
4
-
5
- # Fri Dec 30 18:57:26 2005
6
- JSONDOCS = [
7
- # http://json.org/JSON_checker/test/fail1.json
8
- '"A JSON payload should be an object or array, not a string."',
9
- # http://json.org/JSON_checker/test/fail2.json
10
- '["Unclosed array"',
11
- # http://json.org/JSON_checker/test/fail3.json
12
- '{unquoted_key: "keys must be quoted}',
13
- # http://json.org/JSON_checker/test/fail4.json
14
- '["extra comma",]',
15
- # http://json.org/JSON_checker/test/fail5.json
16
- '["double extra comma",,]',
17
- # http://json.org/JSON_checker/test/fail6.json
18
- '[ , "<-- missing value"]',
19
- # http://json.org/JSON_checker/test/fail7.json
20
- '["Comma after the close"],',
21
- # http://json.org/JSON_checker/test/fail8.json
22
- '["Extra close"]]',
23
- # http://json.org/JSON_checker/test/fail9.json
24
- '{"Extra comma": true,}',
25
- # http://json.org/JSON_checker/test/fail10.json
26
- '{"Extra value after close": true} "misplaced quoted value"',
27
- # http://json.org/JSON_checker/test/fail11.json
28
- '{"Illegal expression": 1 + 2}',
29
- # http://json.org/JSON_checker/test/fail12.json
30
- '{"Illegal invocation": alert()}',
31
- # http://json.org/JSON_checker/test/fail13.json
32
- '{"Numbers cannot have leading zeroes": 013}',
33
- # http://json.org/JSON_checker/test/fail14.json
34
- '{"Numbers cannot be hex": 0x14}',
35
- # http://json.org/JSON_checker/test/fail15.json
36
- '["Illegal backslash escape: \\x15"]',
37
- # http://json.org/JSON_checker/test/fail16.json
38
- '["Illegal backslash escape: \\\'"]',
39
- # http://json.org/JSON_checker/test/fail17.json
40
- '["Illegal backslash escape: \\017"]',
41
- # http://json.org/JSON_checker/test/fail18.json
42
- '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]',
43
- # http://json.org/JSON_checker/test/fail19.json
44
- '{"Missing colon" null}',
45
- # http://json.org/JSON_checker/test/fail20.json
46
- '{"Double colon":: null}',
47
- # http://json.org/JSON_checker/test/fail21.json
48
- '{"Comma instead of colon", null}',
49
- # http://json.org/JSON_checker/test/fail22.json
50
- '["Colon instead of comma": false]',
51
- # http://json.org/JSON_checker/test/fail23.json
52
- '["Bad value", truth]',
53
- # http://json.org/JSON_checker/test/fail24.json
54
- "['single quote']",
55
- # http://code.google.com/p/simplejson/issues/detail?id=3
56
- u'["A\u001FZ control characters in string"]',
57
- ]
58
-
59
- SKIPS = {
60
- 1: "why not have a string payload?",
61
- 18: "spec doesn't specify any nesting limitations",
62
- }
63
-
64
- class TestFail(TestCase):
65
- def test_failures(self):
66
- for idx, doc in enumerate(JSONDOCS):
67
- idx = idx + 1
68
- if idx in SKIPS:
69
- json.loads(doc)
70
- continue
71
- try:
72
- json.loads(doc)
73
- except json.JSONDecodeError:
74
- pass
75
- else:
76
- #self.fail("Expected failure for fail{0}.json: {1!r}".format(idx, doc))
77
- self.fail("Expected failure for fail%d.json: %r" % (idx, doc))
78
-
79
- def test_array_decoder_issue46(self):
80
- # http://code.google.com/p/simplejson/issues/detail?id=46
81
- for doc in [u'[,]', '[,]']:
82
- try:
83
- json.loads(doc)
84
- except json.JSONDecodeError, e:
85
- self.assertEquals(e.pos, 1)
86
- self.assertEquals(e.lineno, 1)
87
- self.assertEquals(e.colno, 1)
88
- except Exception, e:
89
- self.fail("Unexpected exception raised %r %s" % (e, e))
90
- else:
91
- self.fail("Unexpected success parsing '[,]'")
@@ -1,19 +0,0 @@
1
- import math
2
- from unittest import TestCase
3
-
4
- import simplejson as json
5
-
6
- class TestFloat(TestCase):
7
- def test_floats(self):
8
- for num in [1617161771.7650001, math.pi, math.pi**100,
9
- math.pi**-100, 3.1]:
10
- self.assertEquals(float(json.dumps(num)), num)
11
- self.assertEquals(json.loads(json.dumps(num)), num)
12
- self.assertEquals(json.loads(unicode(json.dumps(num))), num)
13
-
14
- def test_ints(self):
15
- for num in [1, 1L, 1<<32, 1<<64]:
16
- self.assertEquals(json.dumps(num), str(num))
17
- self.assertEquals(int(json.dumps(num)), num)
18
- self.assertEquals(json.loads(json.dumps(num)), num)
19
- self.assertEquals(json.loads(unicode(json.dumps(num))), num)
@@ -1,86 +0,0 @@
1
- from unittest import TestCase
2
-
3
- import simplejson as json
4
- import textwrap
5
- from StringIO import StringIO
6
-
7
- class TestIndent(TestCase):
8
- def test_indent(self):
9
- h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh',
10
- 'i-vhbjkhnth',
11
- {'nifty': 87}, {'field': 'yes', 'morefield': False} ]
12
-
13
- expect = textwrap.dedent("""\
14
- [
15
- \t[
16
- \t\t"blorpie"
17
- \t],
18
- \t[
19
- \t\t"whoops"
20
- \t],
21
- \t[],
22
- \t"d-shtaeou",
23
- \t"d-nthiouh",
24
- \t"i-vhbjkhnth",
25
- \t{
26
- \t\t"nifty": 87
27
- \t},
28
- \t{
29
- \t\t"field": "yes",
30
- \t\t"morefield": false
31
- \t}
32
- ]""")
33
-
34
-
35
- d1 = json.dumps(h)
36
- d2 = json.dumps(h, indent='\t', sort_keys=True, separators=(',', ': '))
37
- d3 = json.dumps(h, indent=' ', sort_keys=True, separators=(',', ': '))
38
- d4 = json.dumps(h, indent=2, sort_keys=True, separators=(',', ': '))
39
-
40
- h1 = json.loads(d1)
41
- h2 = json.loads(d2)
42
- h3 = json.loads(d3)
43
- h4 = json.loads(d4)
44
-
45
- self.assertEquals(h1, h)
46
- self.assertEquals(h2, h)
47
- self.assertEquals(h3, h)
48
- self.assertEquals(h4, h)
49
- self.assertEquals(d3, expect.replace('\t', ' '))
50
- self.assertEquals(d4, expect.replace('\t', ' '))
51
- # NOTE: Python 2.4 textwrap.dedent converts tabs to spaces,
52
- # so the following is expected to fail. Python 2.4 is not a
53
- # supported platform in simplejson 2.1.0+.
54
- self.assertEquals(d2, expect)
55
-
56
- def test_indent0(self):
57
- h = {3: 1}
58
- def check(indent, expected):
59
- d1 = json.dumps(h, indent=indent)
60
- self.assertEquals(d1, expected)
61
-
62
- sio = StringIO()
63
- json.dump(h, sio, indent=indent)
64
- self.assertEquals(sio.getvalue(), expected)
65
-
66
- # indent=0 should emit newlines
67
- check(0, '{\n"3": 1\n}')
68
- # indent=None is more compact
69
- check(None, '{"3": 1}')
70
-
71
- def test_separators(self):
72
- lst = [1,2,3,4]
73
- expect = '[\n1,\n2,\n3,\n4\n]'
74
- expect_spaces = '[\n1, \n2, \n3, \n4\n]'
75
- # Ensure that separators still works
76
- self.assertEquals(
77
- expect_spaces,
78
- json.dumps(lst, indent=0, separators=(', ', ': ')))
79
- # Force the new defaults
80
- self.assertEquals(
81
- expect,
82
- json.dumps(lst, indent=0, separators=(',', ': ')))
83
- # Added in 2.1.4
84
- self.assertEquals(
85
- expect,
86
- json.dumps(lst, indent=0))
@@ -1,20 +0,0 @@
1
- from unittest import TestCase
2
-
3
- import simplejson as json
4
- from operator import itemgetter
5
-
6
- class TestItemSortKey(TestCase):
7
- def test_simple_first(self):
8
- a = {'a': 1, 'c': 5, 'jack': 'jill', 'pick': 'axe', 'array': [1, 5, 6, 9], 'tuple': (83, 12, 3), 'crate': 'dog', 'zeak': 'oh'}
9
- self.assertEquals(
10
- '{"a": 1, "c": 5, "crate": "dog", "jack": "jill", "pick": "axe", "zeak": "oh", "array": [1, 5, 6, 9], "tuple": [83, 12, 3]}',
11
- json.dumps(a, item_sort_key=json.simple_first))
12
-
13
- def test_case(self):
14
- a = {'a': 1, 'c': 5, 'Jack': 'jill', 'pick': 'axe', 'Array': [1, 5, 6, 9], 'tuple': (83, 12, 3), 'crate': 'dog', 'zeak': 'oh'}
15
- self.assertEquals(
16
- '{"Array": [1, 5, 6, 9], "Jack": "jill", "a": 1, "c": 5, "crate": "dog", "pick": "axe", "tuple": [83, 12, 3], "zeak": "oh"}',
17
- json.dumps(a, item_sort_key=itemgetter(0)))
18
- self.assertEquals(
19
- '{"a": 1, "Array": [1, 5, 6, 9], "c": 5, "crate": "dog", "Jack": "jill", "pick": "axe", "tuple": [83, 12, 3], "zeak": "oh"}',
20
- json.dumps(a, item_sort_key=lambda kv: kv[0].lower()))
@@ -1,121 +0,0 @@
1
- import unittest
2
- import simplejson as json
3
- from StringIO import StringIO
4
-
5
- try:
6
- from collections import namedtuple
7
- except ImportError:
8
- class Value(tuple):
9
- def __new__(cls, *args):
10
- return tuple.__new__(cls, args)
11
-
12
- def _asdict(self):
13
- return {'value': self[0]}
14
- class Point(tuple):
15
- def __new__(cls, *args):
16
- return tuple.__new__(cls, args)
17
-
18
- def _asdict(self):
19
- return {'x': self[0], 'y': self[1]}
20
- else:
21
- Value = namedtuple('Value', ['value'])
22
- Point = namedtuple('Point', ['x', 'y'])
23
-
24
- class DuckValue(object):
25
- def __init__(self, *args):
26
- self.value = Value(*args)
27
-
28
- def _asdict(self):
29
- return self.value._asdict()
30
-
31
- class DuckPoint(object):
32
- def __init__(self, *args):
33
- self.point = Point(*args)
34
-
35
- def _asdict(self):
36
- return self.point._asdict()
37
-
38
- class DeadDuck(object):
39
- _asdict = None
40
-
41
- class DeadDict(dict):
42
- _asdict = None
43
-
44
- CONSTRUCTORS = [
45
- lambda v: v,
46
- lambda v: [v],
47
- lambda v: [{'key': v}],
48
- ]
49
-
50
- class TestNamedTuple(unittest.TestCase):
51
- def test_namedtuple_dumps(self):
52
- for v in [Value(1), Point(1, 2), DuckValue(1), DuckPoint(1, 2)]:
53
- d = v._asdict()
54
- self.assertEqual(d, json.loads(json.dumps(v)))
55
- self.assertEqual(
56
- d,
57
- json.loads(json.dumps(v, namedtuple_as_object=True)))
58
- self.assertEqual(d, json.loads(json.dumps(v, tuple_as_array=False)))
59
- self.assertEqual(
60
- d,
61
- json.loads(json.dumps(v, namedtuple_as_object=True,
62
- tuple_as_array=False)))
63
-
64
- def test_namedtuple_dumps_false(self):
65
- for v in [Value(1), Point(1, 2)]:
66
- l = list(v)
67
- self.assertEqual(
68
- l,
69
- json.loads(json.dumps(v, namedtuple_as_object=False)))
70
- self.assertRaises(TypeError, json.dumps, v,
71
- tuple_as_array=False, namedtuple_as_object=False)
72
-
73
- def test_namedtuple_dump(self):
74
- for v in [Value(1), Point(1, 2), DuckValue(1), DuckPoint(1, 2)]:
75
- d = v._asdict()
76
- sio = StringIO()
77
- json.dump(v, sio)
78
- self.assertEqual(d, json.loads(sio.getvalue()))
79
- sio = StringIO()
80
- json.dump(v, sio, namedtuple_as_object=True)
81
- self.assertEqual(
82
- d,
83
- json.loads(sio.getvalue()))
84
- sio = StringIO()
85
- json.dump(v, sio, tuple_as_array=False)
86
- self.assertEqual(d, json.loads(sio.getvalue()))
87
- sio = StringIO()
88
- json.dump(v, sio, namedtuple_as_object=True,
89
- tuple_as_array=False)
90
- self.assertEqual(
91
- d,
92
- json.loads(sio.getvalue()))
93
-
94
- def test_namedtuple_dump_false(self):
95
- for v in [Value(1), Point(1, 2)]:
96
- l = list(v)
97
- sio = StringIO()
98
- json.dump(v, sio, namedtuple_as_object=False)
99
- self.assertEqual(
100
- l,
101
- json.loads(sio.getvalue()))
102
- self.assertRaises(TypeError, json.dump, v, StringIO(),
103
- tuple_as_array=False, namedtuple_as_object=False)
104
-
105
- def test_asdict_not_callable_dump(self):
106
- for f in CONSTRUCTORS:
107
- self.assertRaises(TypeError,
108
- json.dump, f(DeadDuck()), StringIO(), namedtuple_as_object=True)
109
- sio = StringIO()
110
- json.dump(f(DeadDict()), sio, namedtuple_as_object=True)
111
- self.assertEqual(
112
- json.dumps(f({})),
113
- sio.getvalue())
114
-
115
- def test_asdict_not_callable_dumps(self):
116
- for f in CONSTRUCTORS:
117
- self.assertRaises(TypeError,
118
- json.dumps, f(DeadDuck()), namedtuple_as_object=True)
119
- self.assertEqual(
120
- json.dumps(f({})),
121
- json.dumps(f(DeadDict()), namedtuple_as_object=True))