guard-mthaml 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (341) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +34 -0
  3. data/lib/guard/mthaml.rb +140 -0
  4. data/lib/guard/mthaml/compiler/MtHaml.php +255 -0
  5. data/lib/guard/mthaml/templates/Guardfile +12 -0
  6. data/lib/guard/mthaml/version.rb +5 -0
  7. data/vendor/autoload.php +7 -0
  8. data/vendor/coffeescript/coffeescript/LICENSE +22 -0
  9. data/vendor/coffeescript/coffeescript/README.md +96 -0
  10. data/vendor/coffeescript/coffeescript/composer.json +23 -0
  11. data/vendor/coffeescript/coffeescript/grammar.y +309 -0
  12. data/vendor/coffeescript/coffeescript/make.php +115 -0
  13. data/vendor/coffeescript/coffeescript/src/CoffeeScript/Compiler.php +76 -0
  14. data/vendor/coffeescript/coffeescript/src/CoffeeScript/Error.php +15 -0
  15. data/vendor/coffeescript/coffeescript/src/CoffeeScript/Helpers.php +116 -0
  16. data/vendor/coffeescript/coffeescript/src/CoffeeScript/Init.php +96 -0
  17. data/vendor/coffeescript/coffeescript/src/CoffeeScript/Lexer.php +1356 -0
  18. data/vendor/coffeescript/coffeescript/src/CoffeeScript/Nodes.php +105 -0
  19. data/vendor/coffeescript/coffeescript/src/CoffeeScript/Parser.php +3326 -0
  20. data/vendor/coffeescript/coffeescript/src/CoffeeScript/Rewriter.php +552 -0
  21. data/vendor/coffeescript/coffeescript/src/CoffeeScript/Scope.php +196 -0
  22. data/vendor/coffeescript/coffeescript/src/CoffeeScript/SyntaxError.php +9 -0
  23. data/vendor/coffeescript/coffeescript/src/CoffeeScript/Value.php +20 -0
  24. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Access.php +31 -0
  25. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Arr.php +69 -0
  26. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Assign.php +353 -0
  27. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Base.php +288 -0
  28. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Block.php +294 -0
  29. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Call.php +283 -0
  30. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Class.php +282 -0
  31. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Closure.php +49 -0
  32. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Code.php +203 -0
  33. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Comment.php +39 -0
  34. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Existence.php +42 -0
  35. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Extends.php +26 -0
  36. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/For.php +250 -0
  37. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/If.php +161 -0
  38. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/In.php +99 -0
  39. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Index.php +27 -0
  40. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Literal.php +96 -0
  41. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Obj.php +126 -0
  42. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Op.php +292 -0
  43. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Param.php +119 -0
  44. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Parens.php +45 -0
  45. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Range.php +225 -0
  46. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Return.php +56 -0
  47. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Slice.php +47 -0
  48. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Splat.php +100 -0
  49. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Switch.php +121 -0
  50. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Throw.php +37 -0
  51. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Try.php +79 -0
  52. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Value.php +210 -0
  53. data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/While.php +112 -0
  54. data/vendor/coffeescript/coffeescript/tests/cases/arrays.coffee +77 -0
  55. data/vendor/coffeescript/coffeescript/tests/cases/assignment.coffee +352 -0
  56. data/vendor/coffeescript/coffeescript/tests/cases/booleans.coffee +21 -0
  57. data/vendor/coffeescript/coffeescript/tests/cases/classes.coffee +681 -0
  58. data/vendor/coffeescript/coffeescript/tests/cases/comments.coffee +207 -0
  59. data/vendor/coffeescript/coffeescript/tests/cases/compilation.coffee +72 -0
  60. data/vendor/coffeescript/coffeescript/tests/cases/comprehensions.coffee +501 -0
  61. data/vendor/coffeescript/coffeescript/tests/cases/control_flow.coffee +430 -0
  62. data/vendor/coffeescript/coffeescript/tests/cases/eval.coffee +29 -0
  63. data/vendor/coffeescript/coffeescript/tests/cases/exception_handling.coffee +102 -0
  64. data/vendor/coffeescript/coffeescript/tests/cases/formatting.coffee +146 -0
  65. data/vendor/coffeescript/coffeescript/tests/cases/function_invocation.coffee +552 -0
  66. data/vendor/coffeescript/coffeescript/tests/cases/functions.coffee +188 -0
  67. data/vendor/coffeescript/coffeescript/tests/cases/helpers.coffee +96 -0
  68. data/vendor/coffeescript/coffeescript/tests/cases/importing.coffee +18 -0
  69. data/vendor/coffeescript/coffeescript/tests/cases/interpolation.coffee +138 -0
  70. data/vendor/coffeescript/coffeescript/tests/cases/javascript_literals.coffee +10 -0
  71. data/vendor/coffeescript/coffeescript/tests/cases/numbers.coffee +76 -0
  72. data/vendor/coffeescript/coffeescript/tests/cases/objects.coffee +271 -0
  73. data/vendor/coffeescript/coffeescript/tests/cases/operators.coffee +277 -0
  74. data/vendor/coffeescript/coffeescript/tests/cases/option_parser.coffee +43 -0
  75. data/vendor/coffeescript/coffeescript/tests/cases/ranges.coffee +88 -0
  76. data/vendor/coffeescript/coffeescript/tests/cases/regexps.coffee +63 -0
  77. data/vendor/coffeescript/coffeescript/tests/cases/scope.coffee +43 -0
  78. data/vendor/coffeescript/coffeescript/tests/cases/slicing_and_splicing.coffee +143 -0
  79. data/vendor/coffeescript/coffeescript/tests/cases/soaks.coffee +134 -0
  80. data/vendor/coffeescript/coffeescript/tests/cases/strict.coffee +155 -0
  81. data/vendor/coffeescript/coffeescript/tests/cases/strings.coffee +107 -0
  82. data/vendor/coffeescript/coffeescript/tests/css/style.css +43 -0
  83. data/vendor/coffeescript/coffeescript/tests/index.php +119 -0
  84. data/vendor/coffeescript/coffeescript/tests/js/lib/coffeescript_1.1.1.js +8 -0
  85. data/vendor/coffeescript/coffeescript/tests/js/lib/coffeescript_1.2.0.js +8 -0
  86. data/vendor/coffeescript/coffeescript/tests/js/lib/coffeescript_1.3.0.js +8 -0
  87. data/vendor/coffeescript/coffeescript/tests/js/lib/coffeescript_1.3.1.js +8 -0
  88. data/vendor/coffeescript/coffeescript/tests/js/lib/diff.js +276 -0
  89. data/vendor/coffeescript/coffeescript/tests/js/main.js +123 -0
  90. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/LICENSE.txt +10 -0
  91. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/Lempar.php +948 -0
  92. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Action.php +257 -0
  93. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/ActionTable.php +299 -0
  94. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Config.php +574 -0
  95. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Data.php +1857 -0
  96. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Parser.php +851 -0
  97. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/PropagationLink.php +126 -0
  98. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Rule.php +144 -0
  99. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/State.php +283 -0
  100. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Symbol.php +288 -0
  101. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/cli.php +5 -0
  102. data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/ParserGenerator.php +811 -0
  103. data/vendor/composer/ClassLoader.php +383 -0
  104. data/vendor/composer/autoload_classmap.php +9 -0
  105. data/vendor/composer/autoload_namespaces.php +12 -0
  106. data/vendor/composer/autoload_psr4.php +10 -0
  107. data/vendor/composer/autoload_real.php +50 -0
  108. data/vendor/composer/installed.json +166 -0
  109. data/vendor/michelf/php-markdown/License.md +36 -0
  110. data/vendor/michelf/php-markdown/Michelf/Markdown.inc.php +10 -0
  111. data/vendor/michelf/php-markdown/Michelf/Markdown.php +3117 -0
  112. data/vendor/michelf/php-markdown/Michelf/MarkdownExtra.inc.php +11 -0
  113. data/vendor/michelf/php-markdown/Michelf/MarkdownExtra.php +38 -0
  114. data/vendor/michelf/php-markdown/Michelf/MarkdownInterface.inc.php +9 -0
  115. data/vendor/michelf/php-markdown/Michelf/MarkdownInterface.php +37 -0
  116. data/vendor/michelf/php-markdown/Readme.md +305 -0
  117. data/vendor/michelf/php-markdown/Readme.php +31 -0
  118. data/vendor/michelf/php-markdown/composer.json +31 -0
  119. data/vendor/mthaml/mthaml/CHANGELOG +48 -0
  120. data/vendor/mthaml/mthaml/LICENSE +44 -0
  121. data/vendor/mthaml/mthaml/README.markdown +262 -0
  122. data/vendor/mthaml/mthaml/composer.json +45 -0
  123. data/vendor/mthaml/mthaml/docs/Makefile +153 -0
  124. data/vendor/mthaml/mthaml/docs/_static/mthaml.css +30 -0
  125. data/vendor/mthaml/mthaml/docs/_theme/mthaml/theme.conf +4 -0
  126. data/vendor/mthaml/mthaml/docs/conf.py +242 -0
  127. data/vendor/mthaml/mthaml/docs/index.rst +18 -0
  128. data/vendor/mthaml/mthaml/docs/twig-syntax.rst +274 -0
  129. data/vendor/mthaml/mthaml/examples/README.md +5 -0
  130. data/vendor/mthaml/mthaml/examples/autoload.php +8 -0
  131. data/vendor/mthaml/mthaml/examples/example-php.haml +5 -0
  132. data/vendor/mthaml/mthaml/examples/example-php.php +37 -0
  133. data/vendor/mthaml/mthaml/examples/example-twig-noext.twig +11 -0
  134. data/vendor/mthaml/mthaml/examples/example-twig.haml +9 -0
  135. data/vendor/mthaml/mthaml/examples/example-twig.php +60 -0
  136. data/vendor/mthaml/mthaml/examples/example.twig.haml +8 -0
  137. data/vendor/mthaml/mthaml/lib/MtHaml/Autoloader.php +22 -0
  138. data/vendor/mthaml/mthaml/lib/MtHaml/Environment.php +178 -0
  139. data/vendor/mthaml/mthaml/lib/MtHaml/Escaping.php +33 -0
  140. data/vendor/mthaml/mthaml/lib/MtHaml/Exception.php +9 -0
  141. data/vendor/mthaml/mthaml/lib/MtHaml/Exception/SyntaxErrorException.php +9 -0
  142. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/AbstractFilter.php +43 -0
  143. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Cdata.php +16 -0
  144. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/CoffeeScript.php +33 -0
  145. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Css.php +26 -0
  146. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Escaped.php +22 -0
  147. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/FilterInterface.php +15 -0
  148. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Javascript.php +26 -0
  149. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Less.php +27 -0
  150. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Less/LeafoLess.php +20 -0
  151. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Less/OyejorgeLess.php +23 -0
  152. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Markdown.php +58 -0
  153. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Markdown/CebeMarkdown.php +22 -0
  154. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Markdown/Ciconia.php +21 -0
  155. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Markdown/MichelfMarkdown.php +21 -0
  156. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Markdown/Parsedown.php +21 -0
  157. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Php.php +37 -0
  158. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Plain.php +24 -0
  159. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Preserve.php +19 -0
  160. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Scss.php +37 -0
  161. data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Twig.php +47 -0
  162. data/vendor/mthaml/mthaml/lib/MtHaml/Indentation/Indentation.php +96 -0
  163. data/vendor/mthaml/mthaml/lib/MtHaml/Indentation/IndentationException.php +9 -0
  164. data/vendor/mthaml/mthaml/lib/MtHaml/Indentation/IndentationInterface.php +50 -0
  165. data/vendor/mthaml/mthaml/lib/MtHaml/Indentation/Undefined.php +41 -0
  166. data/vendor/mthaml/mthaml/lib/MtHaml/Node/Comment.php +71 -0
  167. data/vendor/mthaml/mthaml/lib/MtHaml/Node/Doctype.php +96 -0
  168. data/vendor/mthaml/mthaml/lib/MtHaml/Node/EscapableAbstract.php +19 -0
  169. data/vendor/mthaml/mthaml/lib/MtHaml/Node/Filter.php +51 -0
  170. data/vendor/mthaml/mthaml/lib/MtHaml/Node/Insert.php +42 -0
  171. data/vendor/mthaml/mthaml/lib/MtHaml/Node/InterpolatedString.php +73 -0
  172. data/vendor/mthaml/mthaml/lib/MtHaml/Node/NestAbstract.php +117 -0
  173. data/vendor/mthaml/mthaml/lib/MtHaml/Node/NestInterface.php +10 -0
  174. data/vendor/mthaml/mthaml/lib/MtHaml/Node/NodeAbstract.php +77 -0
  175. data/vendor/mthaml/mthaml/lib/MtHaml/Node/ObjectRefClass.php +42 -0
  176. data/vendor/mthaml/mthaml/lib/MtHaml/Node/ObjectRefId.php +42 -0
  177. data/vendor/mthaml/mthaml/lib/MtHaml/Node/Root.php +35 -0
  178. data/vendor/mthaml/mthaml/lib/MtHaml/Node/Run.php +71 -0
  179. data/vendor/mthaml/mthaml/lib/MtHaml/Node/Statement.php +45 -0
  180. data/vendor/mthaml/mthaml/lib/MtHaml/Node/Tag.php +90 -0
  181. data/vendor/mthaml/mthaml/lib/MtHaml/Node/TagAttribute.php +62 -0
  182. data/vendor/mthaml/mthaml/lib/MtHaml/Node/TagAttributeInterpolation.php +24 -0
  183. data/vendor/mthaml/mthaml/lib/MtHaml/Node/TagAttributeList.php +24 -0
  184. data/vendor/mthaml/mthaml/lib/MtHaml/Node/Text.php +37 -0
  185. data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/Autoclose.php +25 -0
  186. data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/Escaping.php +105 -0
  187. data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/MergeAttrs.php +110 -0
  188. data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/Midblock.php +37 -0
  189. data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/NodeVisitorAbstract.php +226 -0
  190. data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/NodeVisitorInterface.php +97 -0
  191. data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/PhpRenderer.php +288 -0
  192. data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/Printer.php +265 -0
  193. data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/RendererAbstract.php +581 -0
  194. data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/TwigRenderer.php +252 -0
  195. data/vendor/mthaml/mthaml/lib/MtHaml/Parser.php +862 -0
  196. data/vendor/mthaml/mthaml/lib/MtHaml/Parser/Buffer.php +147 -0
  197. data/vendor/mthaml/mthaml/lib/MtHaml/Runtime.php +218 -0
  198. data/vendor/mthaml/mthaml/lib/MtHaml/Runtime/AttributeInterpolation.php +16 -0
  199. data/vendor/mthaml/mthaml/lib/MtHaml/Runtime/AttributeList.php +16 -0
  200. data/vendor/mthaml/mthaml/lib/MtHaml/Support/Php/Executor.php +157 -0
  201. data/vendor/mthaml/mthaml/lib/MtHaml/Support/Twig/Extension.php +47 -0
  202. data/vendor/mthaml/mthaml/lib/MtHaml/Support/Twig/Lexer.php +48 -0
  203. data/vendor/mthaml/mthaml/lib/MtHaml/Support/Twig/Loader.php +81 -0
  204. data/vendor/mthaml/mthaml/lib/MtHaml/Target/Php.php +23 -0
  205. data/vendor/mthaml/mthaml/lib/MtHaml/Target/TargetAbstract.php +87 -0
  206. data/vendor/mthaml/mthaml/lib/MtHaml/Target/TargetInterface.php +12 -0
  207. data/vendor/mthaml/mthaml/lib/MtHaml/Target/Twig.php +23 -0
  208. data/vendor/mthaml/mthaml/lib/MtHaml/TreeBuilder.php +100 -0
  209. data/vendor/mthaml/mthaml/lib/MtHaml/TreeBuilderException.php +9 -0
  210. data/vendor/mthaml/mthaml/phpunit.xml +25 -0
  211. data/vendor/mthaml/mthaml/test/MtHaml/Tests/EnvironmentTest.php +59 -0
  212. data/vendor/mthaml/mthaml/test/MtHaml/Tests/HamlSpecTest.php +83 -0
  213. data/vendor/mthaml/mthaml/test/MtHaml/Tests/IndentationTest.php +140 -0
  214. data/vendor/mthaml/mthaml/test/MtHaml/Tests/Node/DoctypeTest.php +51 -0
  215. data/vendor/mthaml/mthaml/test/MtHaml/Tests/Node/NodeTest.php +110 -0
  216. data/vendor/mthaml/mthaml/test/MtHaml/Tests/NodeVisitor/PhpRendererTest.php +113 -0
  217. data/vendor/mthaml/mthaml/test/MtHaml/Tests/NodeVisitor/TwigRendererTest.php +68 -0
  218. data/vendor/mthaml/mthaml/test/MtHaml/Tests/NodeVisitorsTest.php +44 -0
  219. data/vendor/mthaml/mthaml/test/MtHaml/Tests/Parser/BufferTest.php +77 -0
  220. data/vendor/mthaml/mthaml/test/MtHaml/Tests/ParserTest.php +47 -0
  221. data/vendor/mthaml/mthaml/test/MtHaml/Tests/RuntimeTest.php +356 -0
  222. data/vendor/mthaml/mthaml/test/MtHaml/Tests/Support/Php/ExecutorTest.php +83 -0
  223. data/vendor/mthaml/mthaml/test/MtHaml/Tests/Support/Twig/LoaderTest.php +65 -0
  224. data/vendor/mthaml/mthaml/test/MtHaml/Tests/TestCase.php +49 -0
  225. data/vendor/mthaml/mthaml/test/MtHaml/Tests/TestCaseTest.php +50 -0
  226. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/Support/Php/Executor.001.haml +1 -0
  227. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/attr_list_php.test +20 -0
  228. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/attr_list_twig.test +12 -0
  229. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/boolean_attr_php.test +16 -0
  230. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/boolean_attr_twig.test +16 -0
  231. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/bug28_php.test +15 -0
  232. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/bug28_twig.test +15 -0
  233. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/bug42.test +13 -0
  234. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/bug8_twig.test +10 -0
  235. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/coffeescript_filter.test +31 -0
  236. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/comments.test +26 -0
  237. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/cond_cmt.test +25 -0
  238. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype.test +18 -0
  239. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype_html4.test +20 -0
  240. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype_invalid.test +12 -0
  241. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype_invalid_xhtml.test +12 -0
  242. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype_php.test +18 -0
  243. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype_xhtml.test +30 -0
  244. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/filters.test +51 -0
  245. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/insert_non_echo_php.test +11 -0
  246. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/insert_non_echo_twig.test +11 -0
  247. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/interpolation_in_html_attrs_php.test +31 -0
  248. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/interpolation_in_html_attrs_twig.test +31 -0
  249. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/less_filter_leafo.test +33 -0
  250. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/less_filter_oyejorge.test +49 -0
  251. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/markdown_filter_cebemarkdown.test +35 -0
  252. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/markdown_filter_ciconia.test +36 -0
  253. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/markdown_filter_michelf.test +34 -0
  254. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/markdown_filter_parsedown.test +31 -0
  255. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/markdown_optimization_filter_michelf.test +23 -0
  256. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/mergeattrs.test +18 -0
  257. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/nuke_inner_whitespace.test +77 -0
  258. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/nuke_outer_whitespace.test +122 -0
  259. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/object_ref_php.test +14 -0
  260. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/object_ref_twig.test +14 -0
  261. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/php.test +109 -0
  262. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/php_autoescaping.test +22 -0
  263. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/php_autoescaping_once.test +25 -0
  264. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/php_blocks.test +29 -0
  265. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/php_filters.test +42 -0
  266. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/scss_filter.test +32 -0
  267. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/strip_inline_comments_php.test +22 -0
  268. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/test.test +24 -0
  269. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/trailing_semicolon_php.test +14 -0
  270. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/try_catch_php.test +17 -0
  271. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/twig.test +112 -0
  272. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/twig_blocks.test +29 -0
  273. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/twig_filters.test +37 -0
  274. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/twig_whitespace.test +32 -0
  275. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/whitespace.test +63 -0
  276. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/autoclose.test +30 -0
  277. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/escaping.test +52 -0
  278. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/escaping_attr_once.test +52 -0
  279. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/escaping_html_false.test +52 -0
  280. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/mergeattrs.test +26 -0
  281. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/midblock.test +54 -0
  282. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/midblock_002.test +32 -0
  283. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/attr_list.test +14 -0
  284. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/attrs.test +42 -0
  285. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/attrs_002.test +35 -0
  286. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/attrs_003.test +30 -0
  287. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/attrs_html_linebreak.test +17 -0
  288. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/blocks.test +27 -0
  289. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/blocks_002.test +15 -0
  290. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/boolean_attr.test +19 -0
  291. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/bug28.test +15 -0
  292. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/bug8.test +11 -0
  293. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/cond_cmt.test +23 -0
  294. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/doctype.test +11 -0
  295. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/double_equal.test +7 -0
  296. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/empty_line_after_multiline.test +10 -0
  297. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_001.test +8 -0
  298. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_002.test +8 -0
  299. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_003.test +8 -0
  300. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_004.test +6 -0
  301. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_005.test +5 -0
  302. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_006.test +7 -0
  303. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_007.test +7 -0
  304. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_008.test +7 -0
  305. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_009.test +5 -0
  306. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_010.test +5 -0
  307. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_013.test +5 -0
  308. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_016.test +7 -0
  309. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_017.test +8 -0
  310. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_018.test +6 -0
  311. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_019.test +6 -0
  312. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_020.test +5 -0
  313. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters.test +20 -0
  314. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters_002.test +19 -0
  315. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters_003.test +13 -0
  316. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters_004.test +21 -0
  317. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters_005.test +22 -0
  318. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters_006.test +23 -0
  319. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/insertflags.test +17 -0
  320. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/interpolation.test +36 -0
  321. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/interpolation_in_html_attrs.test +17 -0
  322. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/multiline.test +18 -0
  323. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/multiline_code.test +59 -0
  324. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/multiple_attr_kinds.test +47 -0
  325. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/non_rendered_comment.test +31 -0
  326. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ns.test +11 -0
  327. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/object_ref.test +22 -0
  328. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/object_ref_error1.test +5 -0
  329. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/object_ref_error2.test +5 -0
  330. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/quotes_in_haml.test +10 -0
  331. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ruby19_attrs.test +11 -0
  332. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ruby_attrs_comma.test +23 -0
  333. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ruby_attrs_comma_errors_001.test +5 -0
  334. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ruby_attrs_comma_errors_002.test +5 -0
  335. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ruby_attrs_comma_errors_003.test +5 -0
  336. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/standard.test +114 -0
  337. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/tagflags.test +39 -0
  338. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/runtime/php_filters.test +28 -0
  339. data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/runtime/twig_filters.test +31 -0
  340. data/vendor/mthaml/mthaml/test/bootstrap.php +3 -0
  341. metadata +398 -0
@@ -0,0 +1,352 @@
1
+ # Assignment
2
+ # ----------
3
+
4
+ # * Assignment
5
+ # * Compound Assignment
6
+ # * Destructuring Assignment
7
+ # * Context Property (@) Assignment
8
+ # * Existential Assignment (?=)
9
+
10
+ test "context property assignment (using @)", ->
11
+ nonce = {}
12
+ addMethod = ->
13
+ @method = -> nonce
14
+ this
15
+ eq nonce, addMethod.call({}).method()
16
+
17
+ test "unassignable values", ->
18
+ nonce = {}
19
+ for nonref in ['', '""', '0', 'f()'].concat CoffeeScript.RESERVED
20
+ eq nonce, (try CoffeeScript.compile "#{nonref} = v" catch e then nonce)
21
+
22
+ # Compound Assignment
23
+
24
+ test "boolean operators", ->
25
+ nonce = {}
26
+
27
+ a = 0
28
+ a or= nonce
29
+ eq nonce, a
30
+
31
+ b = 1
32
+ b or= nonce
33
+ eq 1, b
34
+
35
+ c = 0
36
+ c and= nonce
37
+ eq 0, c
38
+
39
+ d = 1
40
+ d and= nonce
41
+ eq nonce, d
42
+
43
+ # ensure that RHS is treated as a group
44
+ e = f = false
45
+ e and= f or true
46
+ eq false, e
47
+
48
+ test "compound assignment as a sub expression", ->
49
+ [a, b, c] = [1, 2, 3]
50
+ eq 6, (a + b += c)
51
+ eq 1, a
52
+ eq 5, b
53
+ eq 3, c
54
+
55
+ # *note: this test could still use refactoring*
56
+ test "compound assignment should be careful about caching variables", ->
57
+ count = 0
58
+ list = []
59
+
60
+ list[++count] or= 1
61
+ eq 1, list[1]
62
+ eq 1, count
63
+
64
+ list[++count] ?= 2
65
+ eq 2, list[2]
66
+ eq 2, count
67
+
68
+ list[count++] and= 6
69
+ eq 6, list[2]
70
+ eq 3, count
71
+
72
+ base = ->
73
+ ++count
74
+ base
75
+
76
+ base().four or= 4
77
+ eq 4, base.four
78
+ eq 4, count
79
+
80
+ base().five ?= 5
81
+ eq 5, base.five
82
+ eq 5, count
83
+
84
+ test "compound assignment with implicit objects", ->
85
+ obj = undefined
86
+ obj ?=
87
+ one: 1
88
+
89
+ eq 1, obj.one
90
+
91
+ obj and=
92
+ two: 2
93
+
94
+ eq undefined, obj.one
95
+ eq 2, obj.two
96
+
97
+ test "compound assignment (math operators)", ->
98
+ num = 10
99
+ num -= 5
100
+ eq 5, num
101
+
102
+ num *= 10
103
+ eq 50, num
104
+
105
+ num /= 10
106
+ eq 5, num
107
+
108
+ num %= 3
109
+ eq 2, num
110
+
111
+ test "more compound assignment", ->
112
+ a = {}
113
+ val = undefined
114
+ val ||= a
115
+ val ||= true
116
+ eq a, val
117
+
118
+ b = {}
119
+ val &&= true
120
+ eq val, true
121
+ val &&= b
122
+ eq b, val
123
+
124
+ c = {}
125
+ val = null
126
+ val ?= c
127
+ val ?= true
128
+ eq c, val
129
+
130
+
131
+ # Destructuring Assignment
132
+
133
+ test "empty destructuring assignment", ->
134
+ {} = [] = undefined
135
+
136
+ test "chained destructuring assignments", ->
137
+ [a] = {0: b} = {'0': c} = [nonce={}]
138
+ eq nonce, a
139
+ eq nonce, b
140
+ eq nonce, c
141
+
142
+ test "variable swapping to verify caching of RHS values when appropriate", ->
143
+ a = nonceA = {}
144
+ b = nonceB = {}
145
+ c = nonceC = {}
146
+ [a, b, c] = [b, c, a]
147
+ eq nonceB, a
148
+ eq nonceC, b
149
+ eq nonceA, c
150
+ [a, b, c] = [b, c, a]
151
+ eq nonceC, a
152
+ eq nonceA, b
153
+ eq nonceB, c
154
+ fn = ->
155
+ [a, b, c] = [b, c, a]
156
+ arrayEq [nonceA,nonceB,nonceC], fn()
157
+ eq nonceA, a
158
+ eq nonceB, b
159
+ eq nonceC, c
160
+
161
+ test "#713", ->
162
+ nonces = [nonceA={},nonceB={}]
163
+ eq nonces, [a, b] = [c, d] = nonces
164
+ eq nonceA, a
165
+ eq nonceA, c
166
+ eq nonceB, b
167
+ eq nonceB, d
168
+
169
+ test "destructuring assignment with splats", ->
170
+ a = {}; b = {}; c = {}; d = {}; e = {}
171
+ [x,y...,z] = [a,b,c,d,e]
172
+ eq a, x
173
+ arrayEq [b,c,d], y
174
+ eq e, z
175
+
176
+ test "deep destructuring assignment with splats", ->
177
+ a={}; b={}; c={}; d={}; e={}; f={}; g={}; h={}; i={}
178
+ [u, [v, w..., x], y..., z] = [a, [b, c, d, e], f, g, h, i]
179
+ eq a, u
180
+ eq b, v
181
+ arrayEq [c,d], w
182
+ eq e, x
183
+ arrayEq [f,g,h], y
184
+ eq i, z
185
+
186
+ test "destructuring assignment with objects", ->
187
+ a={}; b={}; c={}
188
+ obj = {a,b,c}
189
+ {a:x, b:y, c:z} = obj
190
+ eq a, x
191
+ eq b, y
192
+ eq c, z
193
+
194
+ test "deep destructuring assignment with objects", ->
195
+ a={}; b={}; c={}; d={}
196
+ obj = {
197
+ a
198
+ b: {
199
+ 'c': {
200
+ d: [
201
+ b
202
+ {e: c, f: d}
203
+ ]
204
+ }
205
+ }
206
+ }
207
+ {a: w, 'b': {c: d: [x, {'f': z, e: y}]}} = obj
208
+ eq a, w
209
+ eq b, x
210
+ eq c, y
211
+ eq d, z
212
+
213
+ test "destructuring assignment with objects and splats", ->
214
+ a={}; b={}; c={}; d={}
215
+ obj = a: b: [a, b, c, d]
216
+ {a: b: [y, z...]} = obj
217
+ eq a, y
218
+ arrayEq [b,c,d], z
219
+
220
+ test "destructuring assignment against an expression", ->
221
+ a={}; b={}
222
+ [y, z] = if true then [a, b] else [b, a]
223
+ eq a, y
224
+ eq b, z
225
+
226
+ test "bracket insertion when necessary", ->
227
+ [a] = [0] ? [1]
228
+ eq a, 0
229
+
230
+ # for implicit destructuring assignment in comprehensions, see the comprehension tests
231
+
232
+ test "destructuring assignment with context (@) properties", ->
233
+ a={}; b={}; c={}; d={}; e={}
234
+ obj =
235
+ fn: () ->
236
+ local = [a, {b, c}, d, e]
237
+ [@a, {b: @b, c: @c}, @d, @e] = local
238
+ eq undefined, obj[key] for key in ['a','b','c','d','e']
239
+ obj.fn()
240
+ eq a, obj.a
241
+ eq b, obj.b
242
+ eq c, obj.c
243
+ eq d, obj.d
244
+ eq e, obj.e
245
+
246
+ test "#1024", ->
247
+ eq 2 * [] = 3 + 5, 16
248
+
249
+ test "#1005: invalid identifiers allowed on LHS of destructuring assignment", ->
250
+ disallowed = ['eval', 'arguments'].concat CoffeeScript.RESERVED
251
+ throws (-> CoffeeScript.compile "[#{disallowed.join ', '}] = x"), null, 'all disallowed'
252
+ throws (-> CoffeeScript.compile "[#{disallowed.join '..., '}...] = x"), null, 'all disallowed as splats'
253
+ t = tSplat = null
254
+ for v in disallowed when v isnt 'class' # `class` by itself is an expression
255
+ throws (-> CoffeeScript.compile t), null, t = "[#{v}] = x"
256
+ throws (-> CoffeeScript.compile tSplat), null, tSplat = "[#{v}...] = x"
257
+ doesNotThrow ->
258
+ for v in disallowed
259
+ CoffeeScript.compile "[a.#{v}] = x"
260
+ CoffeeScript.compile "[a.#{v}...] = x"
261
+ CoffeeScript.compile "[@#{v}] = x"
262
+ CoffeeScript.compile "[@#{v}...] = x"
263
+
264
+ test "#2055: destructuring assignment with `new`", ->
265
+ {length} = new Array
266
+ eq 0, length
267
+
268
+
269
+ # Existential Assignment
270
+
271
+ test "existential assignment", ->
272
+ nonce = {}
273
+ a = false
274
+ a ?= nonce
275
+ eq false, a
276
+ b = undefined
277
+ b ?= nonce
278
+ eq nonce, b
279
+ c = null
280
+ c ?= nonce
281
+ eq nonce, c
282
+
283
+ test "#1627: prohibit conditional assignment of undefined variables", ->
284
+ throws (-> CoffeeScript.compile "x ?= 10"), null, "prohibit (x ?= 10)"
285
+ throws (-> CoffeeScript.compile "x ||= 10"), null, "prohibit (x ||= 10)"
286
+ throws (-> CoffeeScript.compile "x or= 10"), null, "prohibit (x or= 10)"
287
+ throws (-> CoffeeScript.compile "do -> x ?= 10"), null, "prohibit (do -> x ?= 10)"
288
+ throws (-> CoffeeScript.compile "do -> x ||= 10"), null, "prohibit (do -> x ||= 10)"
289
+ throws (-> CoffeeScript.compile "do -> x or= 10"), null, "prohibit (do -> x or= 10)"
290
+ doesNotThrow (-> CoffeeScript.compile "x = null; x ?= 10"), "allow (x = null; x ?= 10)"
291
+ doesNotThrow (-> CoffeeScript.compile "x = null; x ||= 10"), "allow (x = null; x ||= 10)"
292
+ doesNotThrow (-> CoffeeScript.compile "x = null; x or= 10"), "allow (x = null; x or= 10)"
293
+ doesNotThrow (-> CoffeeScript.compile "x = null; do -> x ?= 10"), "allow (x = null; do -> x ?= 10)"
294
+ doesNotThrow (-> CoffeeScript.compile "x = null; do -> x ||= 10"), "allow (x = null; do -> x ||= 10)"
295
+ doesNotThrow (-> CoffeeScript.compile "x = null; do -> x or= 10"), "allow (x = null; do -> x or= 10)"
296
+
297
+ throws (-> CoffeeScript.compile "-> -> -> x ?= 10"), null, "prohibit (-> -> -> x ?= 10)"
298
+ doesNotThrow (-> CoffeeScript.compile "x = null; -> -> -> x ?= 10"), "allow (x = null; -> -> -> x ?= 10)"
299
+
300
+ test "more existential assignment", ->
301
+ global.temp ?= 0
302
+ eq global.temp, 0
303
+ global.temp or= 100
304
+ eq global.temp, 100
305
+ delete global.temp
306
+
307
+ test "#1348, #1216: existential assignment compilation", ->
308
+ nonce = {}
309
+ a = nonce
310
+ b = (a ?= 0)
311
+ eq nonce, b
312
+ #the first ?= compiles into a statement; the second ?= compiles to a ternary expression
313
+ eq a ?= b ?= 1, nonce
314
+
315
+ if a then a ?= 2 else a = 3
316
+ eq a, nonce
317
+
318
+ test "#1591, #1101: splatted expressions in destructuring assignment must be assignable", ->
319
+ nonce = {}
320
+ for nonref in ['', '""', '0', 'f()', '(->)'].concat CoffeeScript.RESERVED
321
+ eq nonce, (try CoffeeScript.compile "[#{nonref}...] = v" catch e then nonce)
322
+
323
+ test "#1643: splatted accesses in destructuring assignments should not be declared as variables", ->
324
+ nonce = {}
325
+ accesses = ['o.a', 'o["a"]', '(o.a)', '(o.a).a', '@o.a', 'C::a', 'C::', 'f().a', 'o?.a', 'o?.a.b', 'f?().a']
326
+ for access in accesses
327
+ for i,j in [1,2,3] #position can matter
328
+ code =
329
+ """
330
+ nonce = {}; nonce2 = {}; nonce3 = {};
331
+ @o = o = new (class C then a:{}); f = -> o
332
+ [#{new Array(i).join('x,')}#{access}...] = [#{new Array(i).join('0,')}nonce, nonce2, nonce3]
333
+ unless #{access}[0] is nonce and #{access}[1] is nonce2 and #{access}[2] is nonce3 then throw new Error('[...]')
334
+ """
335
+ eq nonce, unless (try CoffeeScript.run code, bare: true catch e then true) then nonce
336
+ # subpatterns like `[[a]...]` and `[{a}...]`
337
+ subpatterns = ['[sub, sub2, sub3]', '{0: sub, 1: sub2, 2: sub3}']
338
+ for subpattern in subpatterns
339
+ for i,j in [1,2,3]
340
+ code =
341
+ """
342
+ nonce = {}; nonce2 = {}; nonce3 = {};
343
+ [#{new Array(i).join('x,')}#{subpattern}...] = [#{new Array(i).join('0,')}nonce, nonce2, nonce3]
344
+ unless sub is nonce and sub2 is nonce2 and sub3 is nonce3 then throw new Error('[sub...]')
345
+ """
346
+ eq nonce, unless (try CoffeeScript.run code, bare: true catch e then true) then nonce
347
+
348
+ test "#1838: Regression with variable assignment", ->
349
+ name =
350
+ 'dave'
351
+
352
+ eq name, 'dave'
@@ -0,0 +1,21 @@
1
+ # Boolean Literals
2
+ # ----------------
3
+
4
+ # TODO: add method invocation tests: true.toString() is "true"
5
+
6
+ test "#764 Booleans should be indexable", ->
7
+ toString = Boolean::toString
8
+
9
+ eq toString, true['toString']
10
+ eq toString, false['toString']
11
+ eq toString, yes['toString']
12
+ eq toString, no['toString']
13
+ eq toString, on['toString']
14
+ eq toString, off['toString']
15
+
16
+ eq toString, true.toString
17
+ eq toString, false.toString
18
+ eq toString, yes.toString
19
+ eq toString, no.toString
20
+ eq toString, on.toString
21
+ eq toString, off.toString
@@ -0,0 +1,681 @@
1
+ # Classes
2
+ # -------
3
+
4
+ # * Class Definition
5
+ # * Class Instantiation
6
+ # * Inheritance and Super
7
+
8
+ test "classes with a four-level inheritance chain", ->
9
+
10
+ class Base
11
+ func: (string) ->
12
+ "zero/#{string}"
13
+
14
+ @static: (string) ->
15
+ "static/#{string}"
16
+
17
+ class FirstChild extends Base
18
+ func: (string) ->
19
+ super('one/') + string
20
+
21
+ SecondChild = class extends FirstChild
22
+ func: (string) ->
23
+ super('two/') + string
24
+
25
+ thirdCtor = ->
26
+ @array = [1, 2, 3]
27
+
28
+ class ThirdChild extends SecondChild
29
+ constructor: -> thirdCtor.call this
30
+
31
+ # Gratuitous comment for testing.
32
+ func: (string) ->
33
+ super('three/') + string
34
+
35
+ result = (new ThirdChild).func 'four'
36
+
37
+ ok result is 'zero/one/two/three/four'
38
+ ok Base.static('word') is 'static/word'
39
+
40
+ FirstChild::func = (string) ->
41
+ super('one/').length + string
42
+
43
+ result = (new ThirdChild).func 'four'
44
+
45
+ ok result is '9two/three/four'
46
+
47
+ ok (new ThirdChild).array.join(' ') is '1 2 3'
48
+
49
+
50
+ test "constructors with inheritance and super", ->
51
+
52
+ identity = (f) -> f
53
+
54
+ class TopClass
55
+ constructor: (arg) ->
56
+ @prop = 'top-' + arg
57
+
58
+ class SuperClass extends TopClass
59
+ constructor: (arg) ->
60
+ identity super 'super-' + arg
61
+
62
+ class SubClass extends SuperClass
63
+ constructor: ->
64
+ identity super 'sub'
65
+
66
+ ok (new SubClass).prop is 'top-super-sub'
67
+
68
+
69
+ test "Overriding the static property new doesn't clobber Function::new", ->
70
+
71
+ class OneClass
72
+ @new: 'new'
73
+ function: 'function'
74
+ constructor: (name) -> @name = name
75
+
76
+ class TwoClass extends OneClass
77
+ delete TwoClass.new
78
+
79
+ Function.prototype.new = -> new this arguments...
80
+
81
+ ok (TwoClass.new('three')).name is 'three'
82
+ ok (new OneClass).function is 'function'
83
+ ok OneClass.new is 'new'
84
+
85
+ delete Function.prototype.new
86
+
87
+
88
+ test "basic classes, again, but in the manual prototype style", ->
89
+
90
+ Base = ->
91
+ Base::func = (string) ->
92
+ 'zero/' + string
93
+ Base::['func-func'] = (string) ->
94
+ "dynamic-#{string}"
95
+
96
+ FirstChild = ->
97
+ SecondChild = ->
98
+ ThirdChild = ->
99
+ @array = [1, 2, 3]
100
+ this
101
+
102
+ ThirdChild extends SecondChild extends FirstChild extends Base
103
+
104
+ FirstChild::func = (string) ->
105
+ super('one/') + string
106
+
107
+ SecondChild::func = (string) ->
108
+ super('two/') + string
109
+
110
+ ThirdChild::func = (string) ->
111
+ super('three/') + string
112
+
113
+ result = (new ThirdChild).func 'four'
114
+
115
+ ok result is 'zero/one/two/three/four'
116
+
117
+ ok (new ThirdChild)['func-func']('thing') is 'dynamic-thing'
118
+
119
+
120
+ test "super with plain ol' functions as the original constructors", ->
121
+
122
+ TopClass = (arg) ->
123
+ @prop = 'top-' + arg
124
+ this
125
+
126
+ SuperClass = (arg) ->
127
+ super 'super-' + arg
128
+ this
129
+
130
+ SubClass = ->
131
+ super 'sub'
132
+ this
133
+
134
+ SuperClass extends TopClass
135
+ SubClass extends SuperClass
136
+
137
+ ok (new SubClass).prop is 'top-super-sub'
138
+
139
+
140
+ test "'@' referring to the current instance, and not being coerced into a call", ->
141
+
142
+ class ClassName
143
+ amI: ->
144
+ @ instanceof ClassName
145
+
146
+ obj = new ClassName
147
+ ok obj.amI()
148
+
149
+
150
+ test "super() calls in constructors of classes that are defined as object properties", ->
151
+
152
+ class Hive
153
+ constructor: (name) -> @name = name
154
+
155
+ class Hive.Bee extends Hive
156
+ constructor: (name) -> super
157
+
158
+ maya = new Hive.Bee 'Maya'
159
+ ok maya.name is 'Maya'
160
+
161
+
162
+ test "classes with JS-keyword properties", ->
163
+
164
+ class Class
165
+ class: 'class'
166
+ name: -> @class
167
+
168
+ instance = new Class
169
+ ok instance.class is 'class'
170
+ ok instance.name() is 'class'
171
+
172
+
173
+ test "Classes with methods that are pre-bound to the instance, or statically, to the class", ->
174
+
175
+ class Dog
176
+ constructor: (name) ->
177
+ @name = name
178
+
179
+ bark: =>
180
+ "#{@name} woofs!"
181
+
182
+ @static = =>
183
+ new this('Dog')
184
+
185
+ spark = new Dog('Spark')
186
+ fido = new Dog('Fido')
187
+ fido.bark = spark.bark
188
+
189
+ ok fido.bark() is 'Spark woofs!'
190
+
191
+ obj = func: Dog.static
192
+
193
+ ok obj.func().name is 'Dog'
194
+
195
+
196
+ test "a bound function in a bound function", ->
197
+
198
+ class Mini
199
+ num: 10
200
+ generate: =>
201
+ for i in [1..3]
202
+ =>
203
+ @num
204
+
205
+ m = new Mini
206
+ eq (func() for func in m.generate()).join(' '), '10 10 10'
207
+
208
+
209
+ test "contructor called with varargs", ->
210
+
211
+ class Connection
212
+ constructor: (one, two, three) ->
213
+ [@one, @two, @three] = [one, two, three]
214
+
215
+ out: ->
216
+ "#{@one}-#{@two}-#{@three}"
217
+
218
+ list = [3, 2, 1]
219
+ conn = new Connection list...
220
+ ok conn instanceof Connection
221
+ ok conn.out() is '3-2-1'
222
+
223
+
224
+ test "calling super and passing along all arguments", ->
225
+
226
+ class Parent
227
+ method: (args...) -> @args = args
228
+
229
+ class Child extends Parent
230
+ method: -> super
231
+
232
+ c = new Child
233
+ c.method 1, 2, 3, 4
234
+ ok c.args.join(' ') is '1 2 3 4'
235
+
236
+
237
+ test "classes wrapped in decorators", ->
238
+
239
+ func = (klass) ->
240
+ klass::prop = 'value'
241
+ klass
242
+
243
+ func class Test
244
+ prop2: 'value2'
245
+
246
+ ok (new Test).prop is 'value'
247
+ ok (new Test).prop2 is 'value2'
248
+
249
+
250
+ test "anonymous classes", ->
251
+
252
+ obj =
253
+ klass: class
254
+ method: -> 'value'
255
+
256
+ instance = new obj.klass
257
+ ok instance.method() is 'value'
258
+
259
+
260
+ test "Implicit objects as static properties", ->
261
+
262
+ class Static
263
+ @static =
264
+ one: 1
265
+ two: 2
266
+
267
+ ok Static.static.one is 1
268
+ ok Static.static.two is 2
269
+
270
+
271
+ test "nothing classes", ->
272
+
273
+ c = class
274
+ ok c instanceof Function
275
+
276
+
277
+ test "classes with static-level implicit objects", ->
278
+
279
+ class A
280
+ @static = one: 1
281
+ two: 2
282
+
283
+ class B
284
+ @static = one: 1,
285
+ two: 2
286
+
287
+ eq A.static.one, 1
288
+ eq A.static.two, undefined
289
+ eq (new A).two, 2
290
+
291
+ eq B.static.one, 1
292
+ eq B.static.two, 2
293
+ eq (new B).two, undefined
294
+
295
+
296
+ test "classes with value'd constructors", ->
297
+
298
+ counter = 0
299
+ classMaker = ->
300
+ inner = ++counter
301
+ ->
302
+ @value = inner
303
+
304
+ class One
305
+ constructor: classMaker()
306
+
307
+ class Two
308
+ constructor: classMaker()
309
+
310
+ eq (new One).value, 1
311
+ eq (new Two).value, 2
312
+ eq (new One).value, 1
313
+ eq (new Two).value, 2
314
+
315
+
316
+ test "exectuable class bodies", ->
317
+
318
+ class A
319
+ if true
320
+ b: 'b'
321
+ else
322
+ c: 'c'
323
+
324
+ a = new A
325
+
326
+ eq a.b, 'b'
327
+ eq a.c, undefined
328
+
329
+
330
+ test "mild metaprogramming", ->
331
+
332
+ class Base
333
+ @attr: (name) ->
334
+ @::[name] = (val) ->
335
+ if arguments.length > 0
336
+ @["_#{name}"] = val
337
+ else
338
+ @["_#{name}"]
339
+
340
+ class Robot extends Base
341
+ @attr 'power'
342
+ @attr 'speed'
343
+
344
+ robby = new Robot
345
+
346
+ ok robby.power() is undefined
347
+
348
+ robby.power 11
349
+ robby.speed Infinity
350
+
351
+ eq robby.power(), 11
352
+ eq robby.speed(), Infinity
353
+
354
+
355
+ test "namespaced classes do not reserve their function name in outside scope", ->
356
+
357
+ one = {}
358
+ two = {}
359
+
360
+ class one.Klass
361
+ @label = "one"
362
+
363
+ class two.Klass
364
+ @label = "two"
365
+
366
+ eq typeof Klass, 'undefined'
367
+ eq one.Klass.label, 'one'
368
+ eq two.Klass.label, 'two'
369
+
370
+
371
+ test "nested classes", ->
372
+
373
+ class Outer
374
+ constructor: ->
375
+ @label = 'outer'
376
+
377
+ class @Inner
378
+ constructor: ->
379
+ @label = 'inner'
380
+
381
+ eq (new Outer).label, 'outer'
382
+ eq (new Outer.Inner).label, 'inner'
383
+
384
+
385
+ test "variables in constructor bodies are correctly scoped", ->
386
+
387
+ class A
388
+ x = 1
389
+ constructor: ->
390
+ x = 10
391
+ y = 20
392
+ y = 2
393
+ captured: ->
394
+ {x, y}
395
+
396
+ a = new A
397
+ eq a.captured().x, 10
398
+ eq a.captured().y, 2
399
+
400
+
401
+ test "Issue #924: Static methods in nested classes", ->
402
+
403
+ class A
404
+ @B: class
405
+ @c = -> 5
406
+
407
+ eq A.B.c(), 5
408
+
409
+
410
+ test "`class extends this`", ->
411
+
412
+ class A
413
+ func: -> 'A'
414
+
415
+ B = null
416
+ makeClass = ->
417
+ B = class extends this
418
+ func: -> super + ' B'
419
+
420
+ makeClass.call A
421
+
422
+ eq (new B()).func(), 'A B'
423
+
424
+
425
+ test "ensure that constructors invoked with splats return a new object", ->
426
+
427
+ args = [1, 2, 3]
428
+ Type = (@args) ->
429
+ type = new Type args
430
+
431
+ ok type and type instanceof Type
432
+ ok type.args and type.args instanceof Array
433
+ ok v is args[i] for v, i in type.args
434
+
435
+ Type1 = (@a, @b, @c) ->
436
+ type1 = new Type1 args...
437
+
438
+ ok type1 instanceof Type1
439
+ eq type1.constructor, Type1
440
+ ok type1.a is args[0] and type1.b is args[1] and type1.c is args[2]
441
+
442
+ # Ensure that constructors invoked with splats cache the function.
443
+ called = 0
444
+ get = -> if called++ then false else class Type
445
+ new get() args...
446
+
447
+ test "`new` shouldn't add extra parens", ->
448
+
449
+ ok new Date().constructor is Date
450
+
451
+
452
+ test "`new` works against bare function", ->
453
+
454
+ eq Date, new ->
455
+ eq this, new => this
456
+ Date
457
+
458
+
459
+ test "#1182: a subclass should be able to set its constructor to an external function", ->
460
+ ctor = ->
461
+ @val = 1
462
+ class A
463
+ class B extends A
464
+ constructor: ctor
465
+ eq (new B).val, 1
466
+
467
+ test "#1182: external constructors continued", ->
468
+ ctor = ->
469
+ class A
470
+ class B extends A
471
+ method: ->
472
+ constructor: ctor
473
+ ok B::method
474
+
475
+ test "#1313: misplaced __extends", ->
476
+ nonce = {}
477
+ class A
478
+ class B extends A
479
+ prop: nonce
480
+ constructor: ->
481
+ eq nonce, B::prop
482
+
483
+ test "#1182: execution order needs to be considered as well", ->
484
+ counter = 0
485
+ makeFn = (n) -> eq n, ++counter; ->
486
+ class B extends (makeFn 1)
487
+ @B: makeFn 2
488
+ constructor: makeFn 3
489
+
490
+ test "#1182: external constructors with bound functions", ->
491
+ fn = ->
492
+ {one: 1}
493
+ this
494
+ class B
495
+ class A
496
+ constructor: fn
497
+ method: => this instanceof A
498
+ ok (new A).method.call(new B)
499
+
500
+ test "#1372: bound class methods with reserved names", ->
501
+ class C
502
+ delete: =>
503
+ ok C::delete
504
+
505
+ test "#1380: `super` with reserved names", ->
506
+ class C
507
+ do: -> super
508
+ ok C::do
509
+
510
+ class B
511
+ 0: -> super
512
+ ok B::[0]
513
+
514
+ test "#1464: bound class methods should keep context", ->
515
+ nonce = {}
516
+ nonce2 = {}
517
+ class C
518
+ constructor: (@id) ->
519
+ @boundStaticColon: => new this(nonce)
520
+ @boundStaticEqual= => new this(nonce2)
521
+ eq nonce, C.boundStaticColon().id
522
+ eq nonce2, C.boundStaticEqual().id
523
+
524
+ test "#1009: classes with reserved words as determined names", -> (->
525
+ eq 'function', typeof (class @for)
526
+ ok not /\beval\b/.test (class @eval).toString()
527
+ ok not /\barguments\b/.test (class @arguments).toString()
528
+ ).call {}
529
+
530
+ test "#1482: classes can extend expressions", ->
531
+ id = (x) -> x
532
+ nonce = {}
533
+ class A then nonce: nonce
534
+ class B extends id A
535
+ eq nonce, (new B).nonce
536
+
537
+ test "#1598: super works for static methods too", ->
538
+
539
+ class Parent
540
+ method: ->
541
+ 'NO'
542
+ @method: ->
543
+ 'yes'
544
+
545
+ class Child extends Parent
546
+ @method: ->
547
+ 'pass? ' + super
548
+
549
+ eq Child.method(), 'pass? yes'
550
+
551
+ test "#1842: Regression with bound functions within bound class methods", ->
552
+
553
+ class Store
554
+ @bound: =>
555
+ do =>
556
+ eq this, Store
557
+
558
+ Store.bound()
559
+
560
+ # And a fancier case:
561
+
562
+ class Store
563
+
564
+ eq this, Store
565
+
566
+ @bound: =>
567
+ do =>
568
+ eq this, Store
569
+
570
+ @unbound: ->
571
+ eq this, Store
572
+
573
+ instance: =>
574
+ ok this instanceof Store
575
+
576
+ Store.bound()
577
+ Store.unbound()
578
+ (new Store).instance()
579
+
580
+ test "#1876: Class @A extends A", ->
581
+ class A
582
+ class @A extends A
583
+
584
+ ok (new @A) instanceof A
585
+
586
+ test "#1813: Passing class definitions as expressions", ->
587
+ ident = (x) -> x
588
+
589
+ result = ident class A then x = 1
590
+
591
+ eq result, A
592
+
593
+ result = ident class B extends A
594
+ x = 1
595
+
596
+ eq result, B
597
+
598
+ test "#494: Named classes", ->
599
+
600
+ class A
601
+ eq A.name, 'A'
602
+
603
+ class A.B
604
+ eq A.B.name, 'B'
605
+
606
+ class A.B["C"]
607
+ ok A.B.C.name isnt 'C'
608
+
609
+ test "#1966: external constructors should produce their return value", ->
610
+ ctor = -> {}
611
+ class A then constructor: ctor
612
+ ok (new A) not instanceof A
613
+
614
+ test "#1980: regression with an inherited class with static function members", ->
615
+
616
+ class A
617
+
618
+ class B extends A
619
+ @static: => 'value'
620
+
621
+ eq B.static(), 'value'
622
+
623
+ test "#1534: class then 'use strict'", ->
624
+ # [14.1 Directive Prologues and the Use Strict Directive](http://es5.github.com/#x14.1)
625
+ nonce = {}
626
+ error = 'do -> ok this'
627
+ strictTest = "do ->'use strict';#{error}"
628
+ return unless (try CoffeeScript.run strictTest, bare: yes catch e then nonce) is nonce
629
+
630
+ throws -> CoffeeScript.run "class then 'use strict';#{error}", bare: yes
631
+ doesNotThrow -> CoffeeScript.run "class then #{error}", bare: yes
632
+ doesNotThrow -> CoffeeScript.run "class then #{error};'use strict'", bare: yes
633
+
634
+ # comments are ignored in the Directive Prologue
635
+ comments = ["""
636
+ class
637
+ ### comment ###
638
+ 'use strict'
639
+ #{error}""",
640
+ """
641
+ class
642
+ ### comment 1 ###
643
+ ### comment 2 ###
644
+ 'use strict'
645
+ #{error}""",
646
+ """
647
+ class
648
+ ### comment 1 ###
649
+ ### comment 2 ###
650
+ 'use strict'
651
+ #{error}
652
+ ### comment 3 ###"""
653
+ ]
654
+ throws (-> CoffeeScript.run comment, bare: yes) for comment in comments
655
+
656
+ # [ES5 §14.1](http://es5.github.com/#x14.1) allows for other directives
657
+ directives = ["""
658
+ class
659
+ 'directive 1'
660
+ 'use strict'
661
+ #{error}""",
662
+ """
663
+ class
664
+ 'use strict'
665
+ 'directive 2'
666
+ #{error}""",
667
+ """
668
+ class
669
+ ### comment 1 ###
670
+ 'directive 1'
671
+ 'use strict'
672
+ #{error}""",
673
+ """
674
+ class
675
+ ### comment 1 ###
676
+ 'directive 1'
677
+ ### comment 2 ###
678
+ 'use strict'
679
+ #{error}"""
680
+ ]
681
+ throws (-> CoffeeScript.run directive, bare: yes) for directive in directives