guard-mthaml 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +34 -0
- data/lib/guard/mthaml.rb +140 -0
- data/lib/guard/mthaml/compiler/MtHaml.php +255 -0
- data/lib/guard/mthaml/templates/Guardfile +12 -0
- data/lib/guard/mthaml/version.rb +5 -0
- data/vendor/autoload.php +7 -0
- data/vendor/coffeescript/coffeescript/LICENSE +22 -0
- data/vendor/coffeescript/coffeescript/README.md +96 -0
- data/vendor/coffeescript/coffeescript/composer.json +23 -0
- data/vendor/coffeescript/coffeescript/grammar.y +309 -0
- data/vendor/coffeescript/coffeescript/make.php +115 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/Compiler.php +76 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/Error.php +15 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/Helpers.php +116 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/Init.php +96 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/Lexer.php +1356 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/Nodes.php +105 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/Parser.php +3326 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/Rewriter.php +552 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/Scope.php +196 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/SyntaxError.php +9 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/Value.php +20 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Access.php +31 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Arr.php +69 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Assign.php +353 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Base.php +288 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Block.php +294 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Call.php +283 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Class.php +282 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Closure.php +49 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Code.php +203 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Comment.php +39 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Existence.php +42 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Extends.php +26 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/For.php +250 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/If.php +161 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/In.php +99 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Index.php +27 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Literal.php +96 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Obj.php +126 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Op.php +292 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Param.php +119 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Parens.php +45 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Range.php +225 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Return.php +56 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Slice.php +47 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Splat.php +100 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Switch.php +121 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Throw.php +37 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Try.php +79 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/Value.php +210 -0
- data/vendor/coffeescript/coffeescript/src/CoffeeScript/yy/While.php +112 -0
- data/vendor/coffeescript/coffeescript/tests/cases/arrays.coffee +77 -0
- data/vendor/coffeescript/coffeescript/tests/cases/assignment.coffee +352 -0
- data/vendor/coffeescript/coffeescript/tests/cases/booleans.coffee +21 -0
- data/vendor/coffeescript/coffeescript/tests/cases/classes.coffee +681 -0
- data/vendor/coffeescript/coffeescript/tests/cases/comments.coffee +207 -0
- data/vendor/coffeescript/coffeescript/tests/cases/compilation.coffee +72 -0
- data/vendor/coffeescript/coffeescript/tests/cases/comprehensions.coffee +501 -0
- data/vendor/coffeescript/coffeescript/tests/cases/control_flow.coffee +430 -0
- data/vendor/coffeescript/coffeescript/tests/cases/eval.coffee +29 -0
- data/vendor/coffeescript/coffeescript/tests/cases/exception_handling.coffee +102 -0
- data/vendor/coffeescript/coffeescript/tests/cases/formatting.coffee +146 -0
- data/vendor/coffeescript/coffeescript/tests/cases/function_invocation.coffee +552 -0
- data/vendor/coffeescript/coffeescript/tests/cases/functions.coffee +188 -0
- data/vendor/coffeescript/coffeescript/tests/cases/helpers.coffee +96 -0
- data/vendor/coffeescript/coffeescript/tests/cases/importing.coffee +18 -0
- data/vendor/coffeescript/coffeescript/tests/cases/interpolation.coffee +138 -0
- data/vendor/coffeescript/coffeescript/tests/cases/javascript_literals.coffee +10 -0
- data/vendor/coffeescript/coffeescript/tests/cases/numbers.coffee +76 -0
- data/vendor/coffeescript/coffeescript/tests/cases/objects.coffee +271 -0
- data/vendor/coffeescript/coffeescript/tests/cases/operators.coffee +277 -0
- data/vendor/coffeescript/coffeescript/tests/cases/option_parser.coffee +43 -0
- data/vendor/coffeescript/coffeescript/tests/cases/ranges.coffee +88 -0
- data/vendor/coffeescript/coffeescript/tests/cases/regexps.coffee +63 -0
- data/vendor/coffeescript/coffeescript/tests/cases/scope.coffee +43 -0
- data/vendor/coffeescript/coffeescript/tests/cases/slicing_and_splicing.coffee +143 -0
- data/vendor/coffeescript/coffeescript/tests/cases/soaks.coffee +134 -0
- data/vendor/coffeescript/coffeescript/tests/cases/strict.coffee +155 -0
- data/vendor/coffeescript/coffeescript/tests/cases/strings.coffee +107 -0
- data/vendor/coffeescript/coffeescript/tests/css/style.css +43 -0
- data/vendor/coffeescript/coffeescript/tests/index.php +119 -0
- data/vendor/coffeescript/coffeescript/tests/js/lib/coffeescript_1.1.1.js +8 -0
- data/vendor/coffeescript/coffeescript/tests/js/lib/coffeescript_1.2.0.js +8 -0
- data/vendor/coffeescript/coffeescript/tests/js/lib/coffeescript_1.3.0.js +8 -0
- data/vendor/coffeescript/coffeescript/tests/js/lib/coffeescript_1.3.1.js +8 -0
- data/vendor/coffeescript/coffeescript/tests/js/lib/diff.js +276 -0
- data/vendor/coffeescript/coffeescript/tests/js/main.js +123 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/LICENSE.txt +10 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/Lempar.php +948 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Action.php +257 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/ActionTable.php +299 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Config.php +574 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Data.php +1857 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Parser.php +851 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/PropagationLink.php +126 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Rule.php +144 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/State.php +283 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/Symbol.php +288 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/PHP/ParserGenerator/cli.php +5 -0
- data/vendor/coffeescript/coffeescript/vendor/ParserGenerator/ParserGenerator.php +811 -0
- data/vendor/composer/ClassLoader.php +383 -0
- data/vendor/composer/autoload_classmap.php +9 -0
- data/vendor/composer/autoload_namespaces.php +12 -0
- data/vendor/composer/autoload_psr4.php +10 -0
- data/vendor/composer/autoload_real.php +50 -0
- data/vendor/composer/installed.json +166 -0
- data/vendor/michelf/php-markdown/License.md +36 -0
- data/vendor/michelf/php-markdown/Michelf/Markdown.inc.php +10 -0
- data/vendor/michelf/php-markdown/Michelf/Markdown.php +3117 -0
- data/vendor/michelf/php-markdown/Michelf/MarkdownExtra.inc.php +11 -0
- data/vendor/michelf/php-markdown/Michelf/MarkdownExtra.php +38 -0
- data/vendor/michelf/php-markdown/Michelf/MarkdownInterface.inc.php +9 -0
- data/vendor/michelf/php-markdown/Michelf/MarkdownInterface.php +37 -0
- data/vendor/michelf/php-markdown/Readme.md +305 -0
- data/vendor/michelf/php-markdown/Readme.php +31 -0
- data/vendor/michelf/php-markdown/composer.json +31 -0
- data/vendor/mthaml/mthaml/CHANGELOG +48 -0
- data/vendor/mthaml/mthaml/LICENSE +44 -0
- data/vendor/mthaml/mthaml/README.markdown +262 -0
- data/vendor/mthaml/mthaml/composer.json +45 -0
- data/vendor/mthaml/mthaml/docs/Makefile +153 -0
- data/vendor/mthaml/mthaml/docs/_static/mthaml.css +30 -0
- data/vendor/mthaml/mthaml/docs/_theme/mthaml/theme.conf +4 -0
- data/vendor/mthaml/mthaml/docs/conf.py +242 -0
- data/vendor/mthaml/mthaml/docs/index.rst +18 -0
- data/vendor/mthaml/mthaml/docs/twig-syntax.rst +274 -0
- data/vendor/mthaml/mthaml/examples/README.md +5 -0
- data/vendor/mthaml/mthaml/examples/autoload.php +8 -0
- data/vendor/mthaml/mthaml/examples/example-php.haml +5 -0
- data/vendor/mthaml/mthaml/examples/example-php.php +37 -0
- data/vendor/mthaml/mthaml/examples/example-twig-noext.twig +11 -0
- data/vendor/mthaml/mthaml/examples/example-twig.haml +9 -0
- data/vendor/mthaml/mthaml/examples/example-twig.php +60 -0
- data/vendor/mthaml/mthaml/examples/example.twig.haml +8 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Autoloader.php +22 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Environment.php +178 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Escaping.php +33 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Exception.php +9 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Exception/SyntaxErrorException.php +9 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/AbstractFilter.php +43 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Cdata.php +16 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/CoffeeScript.php +33 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Css.php +26 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Escaped.php +22 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/FilterInterface.php +15 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Javascript.php +26 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Less.php +27 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Less/LeafoLess.php +20 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Less/OyejorgeLess.php +23 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Markdown.php +58 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Markdown/CebeMarkdown.php +22 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Markdown/Ciconia.php +21 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Markdown/MichelfMarkdown.php +21 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Markdown/Parsedown.php +21 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Php.php +37 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Plain.php +24 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Preserve.php +19 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Scss.php +37 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Filter/Twig.php +47 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Indentation/Indentation.php +96 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Indentation/IndentationException.php +9 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Indentation/IndentationInterface.php +50 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Indentation/Undefined.php +41 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/Comment.php +71 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/Doctype.php +96 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/EscapableAbstract.php +19 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/Filter.php +51 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/Insert.php +42 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/InterpolatedString.php +73 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/NestAbstract.php +117 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/NestInterface.php +10 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/NodeAbstract.php +77 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/ObjectRefClass.php +42 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/ObjectRefId.php +42 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/Root.php +35 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/Run.php +71 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/Statement.php +45 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/Tag.php +90 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/TagAttribute.php +62 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/TagAttributeInterpolation.php +24 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/TagAttributeList.php +24 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Node/Text.php +37 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/Autoclose.php +25 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/Escaping.php +105 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/MergeAttrs.php +110 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/Midblock.php +37 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/NodeVisitorAbstract.php +226 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/NodeVisitorInterface.php +97 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/PhpRenderer.php +288 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/Printer.php +265 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/RendererAbstract.php +581 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/NodeVisitor/TwigRenderer.php +252 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Parser.php +862 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Parser/Buffer.php +147 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Runtime.php +218 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Runtime/AttributeInterpolation.php +16 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Runtime/AttributeList.php +16 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Support/Php/Executor.php +157 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Support/Twig/Extension.php +47 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Support/Twig/Lexer.php +48 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Support/Twig/Loader.php +81 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Target/Php.php +23 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Target/TargetAbstract.php +87 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Target/TargetInterface.php +12 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/Target/Twig.php +23 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/TreeBuilder.php +100 -0
- data/vendor/mthaml/mthaml/lib/MtHaml/TreeBuilderException.php +9 -0
- data/vendor/mthaml/mthaml/phpunit.xml +25 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/EnvironmentTest.php +59 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/HamlSpecTest.php +83 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/IndentationTest.php +140 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/Node/DoctypeTest.php +51 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/Node/NodeTest.php +110 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/NodeVisitor/PhpRendererTest.php +113 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/NodeVisitor/TwigRendererTest.php +68 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/NodeVisitorsTest.php +44 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/Parser/BufferTest.php +77 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/ParserTest.php +47 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/RuntimeTest.php +356 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/Support/Php/ExecutorTest.php +83 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/Support/Twig/LoaderTest.php +65 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/TestCase.php +49 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/TestCaseTest.php +50 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/Support/Php/Executor.001.haml +1 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/attr_list_php.test +20 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/attr_list_twig.test +12 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/boolean_attr_php.test +16 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/boolean_attr_twig.test +16 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/bug28_php.test +15 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/bug28_twig.test +15 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/bug42.test +13 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/bug8_twig.test +10 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/coffeescript_filter.test +31 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/comments.test +26 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/cond_cmt.test +25 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype.test +18 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype_html4.test +20 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype_invalid.test +12 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype_invalid_xhtml.test +12 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype_php.test +18 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/doctype_xhtml.test +30 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/filters.test +51 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/insert_non_echo_php.test +11 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/insert_non_echo_twig.test +11 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/interpolation_in_html_attrs_php.test +31 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/interpolation_in_html_attrs_twig.test +31 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/less_filter_leafo.test +33 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/less_filter_oyejorge.test +49 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/markdown_filter_cebemarkdown.test +35 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/markdown_filter_ciconia.test +36 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/markdown_filter_michelf.test +34 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/markdown_filter_parsedown.test +31 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/markdown_optimization_filter_michelf.test +23 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/mergeattrs.test +18 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/nuke_inner_whitespace.test +77 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/nuke_outer_whitespace.test +122 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/object_ref_php.test +14 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/object_ref_twig.test +14 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/php.test +109 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/php_autoescaping.test +22 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/php_autoescaping_once.test +25 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/php_blocks.test +29 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/php_filters.test +42 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/scss_filter.test +32 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/strip_inline_comments_php.test +22 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/test.test +24 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/trailing_semicolon_php.test +14 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/try_catch_php.test +17 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/twig.test +112 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/twig_blocks.test +29 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/twig_filters.test +37 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/twig_whitespace.test +32 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/environment/whitespace.test +63 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/autoclose.test +30 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/escaping.test +52 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/escaping_attr_once.test +52 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/escaping_html_false.test +52 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/mergeattrs.test +26 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/midblock.test +54 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/nodevisitors/midblock_002.test +32 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/attr_list.test +14 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/attrs.test +42 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/attrs_002.test +35 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/attrs_003.test +30 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/attrs_html_linebreak.test +17 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/blocks.test +27 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/blocks_002.test +15 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/boolean_attr.test +19 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/bug28.test +15 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/bug8.test +11 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/cond_cmt.test +23 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/doctype.test +11 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/double_equal.test +7 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/empty_line_after_multiline.test +10 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_001.test +8 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_002.test +8 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_003.test +8 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_004.test +6 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_005.test +5 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_006.test +7 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_007.test +7 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_008.test +7 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_009.test +5 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_010.test +5 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_013.test +5 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_016.test +7 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_017.test +8 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_018.test +6 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_019.test +6 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/errors_020.test +5 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters.test +20 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters_002.test +19 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters_003.test +13 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters_004.test +21 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters_005.test +22 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/filters_006.test +23 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/insertflags.test +17 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/interpolation.test +36 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/interpolation_in_html_attrs.test +17 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/multiline.test +18 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/multiline_code.test +59 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/multiple_attr_kinds.test +47 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/non_rendered_comment.test +31 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ns.test +11 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/object_ref.test +22 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/object_ref_error1.test +5 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/object_ref_error2.test +5 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/quotes_in_haml.test +10 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ruby19_attrs.test +11 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ruby_attrs_comma.test +23 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ruby_attrs_comma_errors_001.test +5 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ruby_attrs_comma_errors_002.test +5 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/ruby_attrs_comma_errors_003.test +5 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/standard.test +114 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/parser/tagflags.test +39 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/runtime/php_filters.test +28 -0
- data/vendor/mthaml/mthaml/test/MtHaml/Tests/fixtures/runtime/twig_filters.test +31 -0
- data/vendor/mthaml/mthaml/test/bootstrap.php +3 -0
- metadata +398 -0
@@ -0,0 +1,207 @@
|
|
1
|
+
# Comments
|
2
|
+
# --------
|
3
|
+
|
4
|
+
# * Single-Line Comments
|
5
|
+
# * Block Comments
|
6
|
+
|
7
|
+
# Note: awkward spacing seen in some tests is likely intentional.
|
8
|
+
|
9
|
+
test "comments in objects", ->
|
10
|
+
obj1 = {
|
11
|
+
# comment
|
12
|
+
# comment
|
13
|
+
# comment
|
14
|
+
one: 1
|
15
|
+
# comment
|
16
|
+
two: 2
|
17
|
+
# comment
|
18
|
+
}
|
19
|
+
|
20
|
+
ok Object::hasOwnProperty.call(obj1,'one')
|
21
|
+
eq obj1.one, 1
|
22
|
+
ok Object::hasOwnProperty.call(obj1,'two')
|
23
|
+
eq obj1.two, 2
|
24
|
+
|
25
|
+
test "comments in YAML-style objects", ->
|
26
|
+
obj2 =
|
27
|
+
# comment
|
28
|
+
# comment
|
29
|
+
# comment
|
30
|
+
three: 3
|
31
|
+
# comment
|
32
|
+
four: 4
|
33
|
+
# comment
|
34
|
+
|
35
|
+
ok Object::hasOwnProperty.call(obj2,'three')
|
36
|
+
eq obj2.three, 3
|
37
|
+
ok Object::hasOwnProperty.call(obj2,'four')
|
38
|
+
eq obj2.four, 4
|
39
|
+
|
40
|
+
test "comments following operators that continue lines", ->
|
41
|
+
sum =
|
42
|
+
1 +
|
43
|
+
1 + # comment
|
44
|
+
1
|
45
|
+
eq 3, sum
|
46
|
+
|
47
|
+
test "comments in functions", ->
|
48
|
+
fn = ->
|
49
|
+
# comment
|
50
|
+
false
|
51
|
+
false # comment
|
52
|
+
false
|
53
|
+
# comment
|
54
|
+
|
55
|
+
# comment
|
56
|
+
true
|
57
|
+
|
58
|
+
ok fn()
|
59
|
+
|
60
|
+
fn2 = -> #comment
|
61
|
+
fn()
|
62
|
+
# comment
|
63
|
+
|
64
|
+
ok fn2()
|
65
|
+
|
66
|
+
test "trailing comment before an outdent", ->
|
67
|
+
nonce = {}
|
68
|
+
fn3 = ->
|
69
|
+
if true
|
70
|
+
undefined # comment
|
71
|
+
nonce
|
72
|
+
|
73
|
+
eq nonce, fn3()
|
74
|
+
|
75
|
+
test "comments in a switch", ->
|
76
|
+
nonce = {}
|
77
|
+
result = switch nonce #comment
|
78
|
+
# comment
|
79
|
+
when false then undefined
|
80
|
+
# comment
|
81
|
+
when null #comment
|
82
|
+
undefined
|
83
|
+
else nonce # comment
|
84
|
+
|
85
|
+
eq nonce, result
|
86
|
+
|
87
|
+
test "comment with conditional statements", ->
|
88
|
+
nonce = {}
|
89
|
+
result = if false # comment
|
90
|
+
undefined
|
91
|
+
#comment
|
92
|
+
else # comment
|
93
|
+
nonce
|
94
|
+
# comment
|
95
|
+
eq nonce, result
|
96
|
+
|
97
|
+
test "spaced comments with conditional statements", ->
|
98
|
+
nonce = {}
|
99
|
+
result = if false
|
100
|
+
undefined
|
101
|
+
|
102
|
+
# comment
|
103
|
+
else if false
|
104
|
+
undefined
|
105
|
+
|
106
|
+
# comment
|
107
|
+
else
|
108
|
+
nonce
|
109
|
+
|
110
|
+
eq nonce, result
|
111
|
+
|
112
|
+
|
113
|
+
# Block Comments
|
114
|
+
|
115
|
+
###
|
116
|
+
This is a here-comment.
|
117
|
+
Kind of like a heredoc.
|
118
|
+
###
|
119
|
+
|
120
|
+
test "block comments in objects", ->
|
121
|
+
a = {}
|
122
|
+
b = {}
|
123
|
+
obj = {
|
124
|
+
a: a
|
125
|
+
###
|
126
|
+
comment
|
127
|
+
###
|
128
|
+
b: b
|
129
|
+
}
|
130
|
+
|
131
|
+
eq a, obj.a
|
132
|
+
eq b, obj.b
|
133
|
+
|
134
|
+
test "block comments in YAML-style", ->
|
135
|
+
a = {}
|
136
|
+
b = {}
|
137
|
+
obj =
|
138
|
+
a: a
|
139
|
+
###
|
140
|
+
comment
|
141
|
+
###
|
142
|
+
b: b
|
143
|
+
|
144
|
+
eq a, obj.a
|
145
|
+
eq b, obj.b
|
146
|
+
|
147
|
+
|
148
|
+
test "block comments in functions", ->
|
149
|
+
nonce = {}
|
150
|
+
|
151
|
+
fn1 = ->
|
152
|
+
true
|
153
|
+
###
|
154
|
+
false
|
155
|
+
###
|
156
|
+
|
157
|
+
ok fn1()
|
158
|
+
|
159
|
+
fn2 = ->
|
160
|
+
###
|
161
|
+
block comment
|
162
|
+
###
|
163
|
+
nonce
|
164
|
+
|
165
|
+
eq nonce, fn2()
|
166
|
+
|
167
|
+
fn3 = ->
|
168
|
+
nonce
|
169
|
+
###
|
170
|
+
block comment
|
171
|
+
###
|
172
|
+
|
173
|
+
eq nonce, fn3()
|
174
|
+
|
175
|
+
fn4 = ->
|
176
|
+
one = ->
|
177
|
+
###
|
178
|
+
block comment
|
179
|
+
###
|
180
|
+
two = ->
|
181
|
+
three = ->
|
182
|
+
nonce
|
183
|
+
|
184
|
+
eq nonce, fn4()()()()
|
185
|
+
|
186
|
+
test "block comments inside class bodies", ->
|
187
|
+
class A
|
188
|
+
a: ->
|
189
|
+
|
190
|
+
###
|
191
|
+
Comment
|
192
|
+
###
|
193
|
+
b: ->
|
194
|
+
|
195
|
+
ok A.prototype.b instanceof Function
|
196
|
+
|
197
|
+
class B
|
198
|
+
###
|
199
|
+
Comment
|
200
|
+
###
|
201
|
+
a: ->
|
202
|
+
b: ->
|
203
|
+
|
204
|
+
ok B.prototype.a instanceof Function
|
205
|
+
|
206
|
+
test "#2037: herecomments shouldn't imply line terminators", ->
|
207
|
+
do (-> ### ###; fail)
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Compilation
|
2
|
+
# -----------
|
3
|
+
|
4
|
+
# helper to assert that a string should fail compilation
|
5
|
+
cantCompile = (code) ->
|
6
|
+
throws -> CoffeeScript.compile code
|
7
|
+
|
8
|
+
|
9
|
+
test "ensure that carriage returns don't break compilation on Windows", ->
|
10
|
+
doesNotThrow -> CoffeeScript.compile 'one\r\ntwo', bare: on
|
11
|
+
|
12
|
+
test "--bare", ->
|
13
|
+
eq -1, CoffeeScript.compile('x = y', bare: on).indexOf 'function'
|
14
|
+
ok 'passed' is CoffeeScript.eval '"passed"', bare: on, filename: 'test'
|
15
|
+
|
16
|
+
test "header (#1778)", ->
|
17
|
+
header = "// Generated by CoffeeScript #{CoffeeScript.VERSION}\n"
|
18
|
+
eq 0, CoffeeScript.compile('x = y', header: on).indexOf header
|
19
|
+
|
20
|
+
test "header is disabled by default", ->
|
21
|
+
header = "// Generated by CoffeeScript #{CoffeeScript.VERSION}\n"
|
22
|
+
eq -1, CoffeeScript.compile('x = y').indexOf header
|
23
|
+
|
24
|
+
test "multiple generated references", ->
|
25
|
+
a = {b: []}
|
26
|
+
a.b[true] = -> this == a.b
|
27
|
+
c = 0
|
28
|
+
d = []
|
29
|
+
ok a.b[0<++c<2] d...
|
30
|
+
|
31
|
+
test "splat on a line by itself is invalid", ->
|
32
|
+
cantCompile "x 'a'\n...\n"
|
33
|
+
|
34
|
+
test "Issue 750", ->
|
35
|
+
|
36
|
+
cantCompile 'f(->'
|
37
|
+
|
38
|
+
cantCompile 'a = (break)'
|
39
|
+
|
40
|
+
cantCompile 'a = (return 5 for item in list)'
|
41
|
+
|
42
|
+
cantCompile 'a = (return 5 while condition)'
|
43
|
+
|
44
|
+
cantCompile 'a = for x in y\n return 5'
|
45
|
+
|
46
|
+
test "Issue #986: Unicode identifiers", ->
|
47
|
+
λ = 5
|
48
|
+
eq λ, 5
|
49
|
+
|
50
|
+
test "don't accidentally stringify keywords", ->
|
51
|
+
ok (-> this == 'this')() is false
|
52
|
+
|
53
|
+
test "#1026", ->
|
54
|
+
cantCompile '''
|
55
|
+
if a
|
56
|
+
b
|
57
|
+
else
|
58
|
+
c
|
59
|
+
else
|
60
|
+
d
|
61
|
+
'''
|
62
|
+
|
63
|
+
test "#1050", ->
|
64
|
+
cantCompile "### */ ###"
|
65
|
+
|
66
|
+
test "#1106: __proto__ compilation", ->
|
67
|
+
object = eq
|
68
|
+
@["__proto__"] = true
|
69
|
+
ok __proto__
|
70
|
+
|
71
|
+
test "reference named hasOwnProperty", ->
|
72
|
+
CoffeeScript.compile 'hasOwnProperty = 0; a = 1'
|
@@ -0,0 +1,501 @@
|
|
1
|
+
# Comprehensions
|
2
|
+
# --------------
|
3
|
+
|
4
|
+
# * Array Comprehensions
|
5
|
+
# * Range Comprehensions
|
6
|
+
# * Object Comprehensions
|
7
|
+
# * Implicit Destructuring Assignment
|
8
|
+
# * Comprehensions with Nonstandard Step
|
9
|
+
|
10
|
+
# TODO: refactor comprehension tests
|
11
|
+
|
12
|
+
test "Basic array comprehensions.", ->
|
13
|
+
|
14
|
+
nums = (n * n for n in [1, 2, 3] when n & 1)
|
15
|
+
results = (n * 2 for n in nums)
|
16
|
+
|
17
|
+
ok results.join(',') is '2,18'
|
18
|
+
|
19
|
+
|
20
|
+
test "Basic object comprehensions.", ->
|
21
|
+
|
22
|
+
obj = {one: 1, two: 2, three: 3}
|
23
|
+
names = (prop + '!' for prop of obj)
|
24
|
+
odds = (prop + '!' for prop, value of obj when value & 1)
|
25
|
+
|
26
|
+
ok names.join(' ') is "one! two! three!"
|
27
|
+
ok odds.join(' ') is "one! three!"
|
28
|
+
|
29
|
+
|
30
|
+
test "Basic range comprehensions.", ->
|
31
|
+
|
32
|
+
nums = (i * 3 for i in [1..3])
|
33
|
+
|
34
|
+
negs = (x for x in [-20..-5*2])
|
35
|
+
negs = negs[0..2]
|
36
|
+
|
37
|
+
result = nums.concat(negs).join(', ')
|
38
|
+
|
39
|
+
ok result is '3, 6, 9, -20, -19, -18'
|
40
|
+
|
41
|
+
|
42
|
+
test "With range comprehensions, you can loop in steps.", ->
|
43
|
+
|
44
|
+
results = (x for x in [0...15] by 5)
|
45
|
+
ok results.join(' ') is '0 5 10'
|
46
|
+
|
47
|
+
results = (x for x in [0..100] by 10)
|
48
|
+
ok results.join(' ') is '0 10 20 30 40 50 60 70 80 90 100'
|
49
|
+
|
50
|
+
|
51
|
+
test "And can loop downwards, with a negative step.", ->
|
52
|
+
|
53
|
+
results = (x for x in [5..1])
|
54
|
+
|
55
|
+
ok results.join(' ') is '5 4 3 2 1'
|
56
|
+
ok results.join(' ') is [(10-5)..(-2+3)].join(' ')
|
57
|
+
|
58
|
+
results = (x for x in [10..1])
|
59
|
+
ok results.join(' ') is [10..1].join(' ')
|
60
|
+
|
61
|
+
results = (x for x in [10...0] by -2)
|
62
|
+
ok results.join(' ') is [10, 8, 6, 4, 2].join(' ')
|
63
|
+
|
64
|
+
|
65
|
+
test "Range comprehension gymnastics.", ->
|
66
|
+
|
67
|
+
eq "#{i for i in [5..1]}", '5,4,3,2,1'
|
68
|
+
eq "#{i for i in [5..-5] by -5}", '5,0,-5'
|
69
|
+
|
70
|
+
a = 6
|
71
|
+
b = 0
|
72
|
+
c = -2
|
73
|
+
|
74
|
+
eq "#{i for i in [a..b]}", '6,5,4,3,2,1,0'
|
75
|
+
eq "#{i for i in [a..b] by c}", '6,4,2,0'
|
76
|
+
|
77
|
+
|
78
|
+
test "Multiline array comprehension with filter.", ->
|
79
|
+
|
80
|
+
evens = for num in [1, 2, 3, 4, 5, 6] when not (num & 1)
|
81
|
+
num *= -1
|
82
|
+
num -= 2
|
83
|
+
num * -1
|
84
|
+
eq evens + '', '4,6,8'
|
85
|
+
|
86
|
+
|
87
|
+
test "The in operator still works, standalone.", ->
|
88
|
+
|
89
|
+
ok 2 of evens
|
90
|
+
|
91
|
+
|
92
|
+
test "all isn't reserved.", ->
|
93
|
+
|
94
|
+
all = 1
|
95
|
+
|
96
|
+
|
97
|
+
test "Ensure that the closure wrapper preserves local variables.", ->
|
98
|
+
|
99
|
+
obj = {}
|
100
|
+
|
101
|
+
for method in ['one', 'two', 'three'] then do (method) ->
|
102
|
+
obj[method] = ->
|
103
|
+
"I'm " + method
|
104
|
+
|
105
|
+
ok obj.one() is "I'm one"
|
106
|
+
ok obj.two() is "I'm two"
|
107
|
+
ok obj.three() is "I'm three"
|
108
|
+
|
109
|
+
|
110
|
+
test "Index values at the end of a loop.", ->
|
111
|
+
|
112
|
+
i = 0
|
113
|
+
for i in [1..3]
|
114
|
+
-> 'func'
|
115
|
+
break if false
|
116
|
+
ok i is 4
|
117
|
+
|
118
|
+
|
119
|
+
test "Ensure that local variables are closed over for range comprehensions.", ->
|
120
|
+
|
121
|
+
funcs = for i in [1..3]
|
122
|
+
do (i) ->
|
123
|
+
-> -i
|
124
|
+
|
125
|
+
eq (func() for func in funcs).join(' '), '-1 -2 -3'
|
126
|
+
ok i is 4
|
127
|
+
|
128
|
+
|
129
|
+
test "Even when referenced in the filter.", ->
|
130
|
+
|
131
|
+
list = ['one', 'two', 'three']
|
132
|
+
|
133
|
+
methods = for num, i in list when num isnt 'two' and i isnt 1
|
134
|
+
do (num, i) ->
|
135
|
+
-> num + ' ' + i
|
136
|
+
|
137
|
+
ok methods.length is 2
|
138
|
+
ok methods[0]() is 'one 0'
|
139
|
+
ok methods[1]() is 'three 2'
|
140
|
+
|
141
|
+
|
142
|
+
test "Even a convoluted one.", ->
|
143
|
+
|
144
|
+
funcs = []
|
145
|
+
|
146
|
+
for i in [1..3]
|
147
|
+
do (i) ->
|
148
|
+
x = i * 2
|
149
|
+
((z)->
|
150
|
+
funcs.push -> z + ' ' + i
|
151
|
+
)(x)
|
152
|
+
|
153
|
+
ok (func() for func in funcs).join(', ') is '2 1, 4 2, 6 3'
|
154
|
+
|
155
|
+
funcs = []
|
156
|
+
|
157
|
+
results = for i in [1..3]
|
158
|
+
do (i) ->
|
159
|
+
z = (x * 3 for x in [1..i])
|
160
|
+
((a, b, c) -> [a, b, c].join(' ')).apply this, z
|
161
|
+
|
162
|
+
ok results.join(', ') is '3 , 3 6 , 3 6 9'
|
163
|
+
|
164
|
+
|
165
|
+
test "Naked ranges are expanded into arrays.", ->
|
166
|
+
|
167
|
+
array = [0..10]
|
168
|
+
ok(num % 2 is 0 for num in array by 2)
|
169
|
+
|
170
|
+
|
171
|
+
test "Nested shared scopes.", ->
|
172
|
+
|
173
|
+
foo = ->
|
174
|
+
for i in [0..7]
|
175
|
+
do (i) ->
|
176
|
+
for j in [0..7]
|
177
|
+
do (j) ->
|
178
|
+
-> i + j
|
179
|
+
|
180
|
+
eq foo()[3][4](), 7
|
181
|
+
|
182
|
+
|
183
|
+
test "Scoped loop pattern matching.", ->
|
184
|
+
|
185
|
+
a = [[0], [1]]
|
186
|
+
funcs = []
|
187
|
+
|
188
|
+
for [v] in a
|
189
|
+
do (v) ->
|
190
|
+
funcs.push -> v
|
191
|
+
|
192
|
+
eq funcs[0](), 0
|
193
|
+
eq funcs[1](), 1
|
194
|
+
|
195
|
+
|
196
|
+
test "Nested comprehensions.", ->
|
197
|
+
|
198
|
+
multiLiner =
|
199
|
+
for x in [3..5]
|
200
|
+
for y in [3..5]
|
201
|
+
[x, y]
|
202
|
+
|
203
|
+
singleLiner =
|
204
|
+
(([x, y] for y in [3..5]) for x in [3..5])
|
205
|
+
|
206
|
+
ok multiLiner.length is singleLiner.length
|
207
|
+
ok 5 is multiLiner[2][2][1]
|
208
|
+
ok 5 is singleLiner[2][2][1]
|
209
|
+
|
210
|
+
|
211
|
+
test "Comprehensions within parentheses.", ->
|
212
|
+
|
213
|
+
result = null
|
214
|
+
store = (obj) -> result = obj
|
215
|
+
store (x * 2 for x in [3, 2, 1])
|
216
|
+
|
217
|
+
ok result.join(' ') is '6 4 2'
|
218
|
+
|
219
|
+
|
220
|
+
test "Closure-wrapped comprehensions that refer to the 'arguments' object.", ->
|
221
|
+
|
222
|
+
expr = ->
|
223
|
+
result = (item * item for item in arguments)
|
224
|
+
|
225
|
+
ok expr(2, 4, 8).join(' ') is '4 16 64'
|
226
|
+
|
227
|
+
|
228
|
+
test "Fast object comprehensions over all properties, including prototypal ones.", ->
|
229
|
+
|
230
|
+
class Cat
|
231
|
+
constructor: -> @name = 'Whiskers'
|
232
|
+
breed: 'tabby'
|
233
|
+
hair: 'cream'
|
234
|
+
|
235
|
+
whiskers = new Cat
|
236
|
+
own = (value for own key, value of whiskers)
|
237
|
+
all = (value for key, value of whiskers)
|
238
|
+
|
239
|
+
ok own.join(' ') is 'Whiskers'
|
240
|
+
ok all.sort().join(' ') is 'Whiskers cream tabby'
|
241
|
+
|
242
|
+
|
243
|
+
test "Optimized range comprehensions.", ->
|
244
|
+
|
245
|
+
exxes = ('x' for [0...10])
|
246
|
+
ok exxes.join(' ') is 'x x x x x x x x x x'
|
247
|
+
|
248
|
+
|
249
|
+
test "Comprehensions safely redeclare parameters if they're not present in closest scope.", ->
|
250
|
+
|
251
|
+
rule = (x) -> x
|
252
|
+
|
253
|
+
learn = ->
|
254
|
+
rule for rule in [1, 2, 3]
|
255
|
+
|
256
|
+
ok learn().join(' ') is '1 2 3'
|
257
|
+
|
258
|
+
ok rule(101) is 101
|
259
|
+
|
260
|
+
f = -> [-> ok no, 'should cache source']
|
261
|
+
ok yes for k of [f] = f()
|
262
|
+
|
263
|
+
|
264
|
+
test "Lenient on pure statements not trying to reach out of the closure", ->
|
265
|
+
|
266
|
+
val = for i in [1]
|
267
|
+
for j in [] then break
|
268
|
+
i
|
269
|
+
ok val[0] is i
|
270
|
+
|
271
|
+
|
272
|
+
test "Comprehensions only wrap their last line in a closure, allowing other lines
|
273
|
+
to have pure expressions in them.", ->
|
274
|
+
|
275
|
+
func = -> for i in [1]
|
276
|
+
break if i is 2
|
277
|
+
j for j in [1]
|
278
|
+
|
279
|
+
ok func()[0][0] is 1
|
280
|
+
|
281
|
+
i = 6
|
282
|
+
odds = while i--
|
283
|
+
continue unless i & 1
|
284
|
+
i
|
285
|
+
|
286
|
+
ok odds.join(', ') is '5, 3, 1'
|
287
|
+
|
288
|
+
|
289
|
+
test "Issue #897: Ensure that plucked function variables aren't leaked.", ->
|
290
|
+
|
291
|
+
facets = {}
|
292
|
+
list = ['one', 'two']
|
293
|
+
|
294
|
+
(->
|
295
|
+
for entity in list
|
296
|
+
facets[entity] = -> entity
|
297
|
+
)()
|
298
|
+
|
299
|
+
eq typeof entity, 'undefined'
|
300
|
+
eq facets['two'](), 'two'
|
301
|
+
|
302
|
+
|
303
|
+
test "Issue #905. Soaks as the for loop subject.", ->
|
304
|
+
|
305
|
+
a = {b: {c: [1, 2, 3]}}
|
306
|
+
for d in a.b?.c
|
307
|
+
e = d
|
308
|
+
|
309
|
+
eq e, 3
|
310
|
+
|
311
|
+
|
312
|
+
test "Issue #948. Capturing loop variables.", ->
|
313
|
+
|
314
|
+
funcs = []
|
315
|
+
list = ->
|
316
|
+
[1, 2, 3]
|
317
|
+
|
318
|
+
for y in list()
|
319
|
+
do (y) ->
|
320
|
+
z = y
|
321
|
+
funcs.push -> "y is #{y} and z is #{z}"
|
322
|
+
|
323
|
+
eq funcs[1](), "y is 2 and z is 2"
|
324
|
+
|
325
|
+
|
326
|
+
test "Cancel the comprehension if there's a jump inside the loop.", ->
|
327
|
+
|
328
|
+
result = try
|
329
|
+
for i in [0...10]
|
330
|
+
continue if i < 5
|
331
|
+
i
|
332
|
+
|
333
|
+
eq result, 10
|
334
|
+
|
335
|
+
|
336
|
+
test "Comprehensions over break.", ->
|
337
|
+
|
338
|
+
arrayEq (break for [1..10]), []
|
339
|
+
|
340
|
+
|
341
|
+
test "Comprehensions over continue.", ->
|
342
|
+
|
343
|
+
arrayEq (continue for [1..10]), []
|
344
|
+
|
345
|
+
|
346
|
+
test "Comprehensions over function literals.", ->
|
347
|
+
|
348
|
+
a = 0
|
349
|
+
for f in [-> a = 1]
|
350
|
+
do (f) ->
|
351
|
+
do f
|
352
|
+
|
353
|
+
eq a, 1
|
354
|
+
|
355
|
+
|
356
|
+
test "Comprehensions that mention arguments.", ->
|
357
|
+
|
358
|
+
list = [arguments: 10]
|
359
|
+
args = for f in list
|
360
|
+
do (f) ->
|
361
|
+
f.arguments
|
362
|
+
eq args[0], 10
|
363
|
+
|
364
|
+
|
365
|
+
test "expression conversion under explicit returns", ->
|
366
|
+
nonce = {}
|
367
|
+
fn = ->
|
368
|
+
return (nonce for x in [1,2,3])
|
369
|
+
arrayEq [nonce,nonce,nonce], fn()
|
370
|
+
fn = ->
|
371
|
+
return [nonce for x in [1,2,3]][0]
|
372
|
+
arrayEq [nonce,nonce,nonce], fn()
|
373
|
+
fn = ->
|
374
|
+
return [(nonce for x in [1..3])][0]
|
375
|
+
arrayEq [nonce,nonce,nonce], fn()
|
376
|
+
|
377
|
+
|
378
|
+
test "implicit destructuring assignment in object of objects", ->
|
379
|
+
a={}; b={}; c={}
|
380
|
+
obj = {
|
381
|
+
a: { d: a },
|
382
|
+
b: { d: b }
|
383
|
+
c: { d: c }
|
384
|
+
}
|
385
|
+
result = ([y,z] for y, { d: z } of obj)
|
386
|
+
arrayEq [['a',a],['b',b],['c',c]], result
|
387
|
+
|
388
|
+
|
389
|
+
test "implicit destructuring assignment in array of objects", ->
|
390
|
+
a={}; b={}; c={}; d={}; e={}; f={}
|
391
|
+
arr = [
|
392
|
+
{ a: a, b: { c: b } },
|
393
|
+
{ a: c, b: { c: d } },
|
394
|
+
{ a: e, b: { c: f } }
|
395
|
+
]
|
396
|
+
result = ([y,z] for { a: y, b: { c: z } } in arr)
|
397
|
+
arrayEq [[a,b],[c,d],[e,f]], result
|
398
|
+
|
399
|
+
|
400
|
+
test "implicit destructuring assignment in array of arrays", ->
|
401
|
+
a={}; b={}; c={}; d={}; e={}; f={}
|
402
|
+
arr = [[a, [b]], [c, [d]], [e, [f]]]
|
403
|
+
result = ([y,z] for [y, [z]] in arr)
|
404
|
+
arrayEq [[a,b],[c,d],[e,f]], result
|
405
|
+
|
406
|
+
test "issue #1124: don't assign a variable in two scopes", ->
|
407
|
+
lista = [1, 2, 3, 4, 5]
|
408
|
+
listb = (_i + 1 for _i in lista)
|
409
|
+
arrayEq [2, 3, 4, 5, 6], listb
|
410
|
+
|
411
|
+
test "#1326: `by` value is uncached", ->
|
412
|
+
a = [0,1,2]
|
413
|
+
fi = gi = hi = 0
|
414
|
+
f = -> ++fi
|
415
|
+
g = -> ++gi
|
416
|
+
h = -> ++hi
|
417
|
+
|
418
|
+
forCompile = []
|
419
|
+
rangeCompileSimple = []
|
420
|
+
|
421
|
+
#exercises For.compile
|
422
|
+
for v,i in a by f() then forCompile.push i
|
423
|
+
|
424
|
+
#exercises Range.compileSimple
|
425
|
+
rangeCompileSimple = (i for i in [0..2] by g())
|
426
|
+
|
427
|
+
arrayEq a, forCompile
|
428
|
+
arrayEq a, rangeCompileSimple
|
429
|
+
#exercises Range.compile
|
430
|
+
eq "#{i for i in [0..2] by h()}", '0,1,2'
|
431
|
+
|
432
|
+
test "#1669: break/continue should skip the result only for that branch", ->
|
433
|
+
ns = for n in [0..99]
|
434
|
+
if n > 9
|
435
|
+
break
|
436
|
+
else if n & 1
|
437
|
+
continue
|
438
|
+
else
|
439
|
+
n
|
440
|
+
eq "#{ns}", '0,2,4,6,8'
|
441
|
+
|
442
|
+
# `else undefined` is implied.
|
443
|
+
ns = for n in [1..9]
|
444
|
+
if n % 2
|
445
|
+
continue unless n % 5
|
446
|
+
n
|
447
|
+
eq "#{ns}", "1,,3,,,7,,9"
|
448
|
+
|
449
|
+
# Ditto.
|
450
|
+
ns = for n in [1..9]
|
451
|
+
switch
|
452
|
+
when n % 2
|
453
|
+
continue unless n % 5
|
454
|
+
n
|
455
|
+
eq "#{ns}", "1,,3,,,7,,9"
|
456
|
+
|
457
|
+
test "#1850: inner `for` should not be expression-ized if `return`ing", ->
|
458
|
+
eq '3,4,5', do ->
|
459
|
+
for a in [1..9] then \
|
460
|
+
for b in [1..9]
|
461
|
+
c = Math.sqrt a*a + b*b
|
462
|
+
return String [a, b, c] unless c % 1
|
463
|
+
|
464
|
+
test "#1910: loop index should be mutable within a loop iteration and immutable between loop iterations", ->
|
465
|
+
n = 1
|
466
|
+
iterations = 0
|
467
|
+
arr = [0..n]
|
468
|
+
for v, k in arr
|
469
|
+
++iterations
|
470
|
+
v = k = 5
|
471
|
+
eq 5, k
|
472
|
+
eq 2, k
|
473
|
+
eq 2, iterations
|
474
|
+
|
475
|
+
iterations = 0
|
476
|
+
for v in [0..n]
|
477
|
+
++iterations
|
478
|
+
eq 2, k
|
479
|
+
eq 2, iterations
|
480
|
+
|
481
|
+
arr = ([v, v + 1] for v in [0..5])
|
482
|
+
iterations = 0
|
483
|
+
for own [v0, v1], k in arr when v0
|
484
|
+
k += 3
|
485
|
+
++iterations
|
486
|
+
eq 6, k
|
487
|
+
eq 5, iterations
|
488
|
+
|
489
|
+
test "#2007: Return object literal from comprehension", ->
|
490
|
+
y = for x in [1, 2]
|
491
|
+
foo: "foo" + x
|
492
|
+
eq 2, y.length
|
493
|
+
eq "foo1", y[0].foo
|
494
|
+
eq "foo2", y[1].foo
|
495
|
+
|
496
|
+
x = 2
|
497
|
+
y = while x
|
498
|
+
x: --x
|
499
|
+
eq 2, y.length
|
500
|
+
eq 1, y[0].x
|
501
|
+
eq 0, y[1].x
|