X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/ef2470117d8fccea2f5200bff27d6d1a04b855b7..04f3d4bb44d7ef30e705b53f3d15e3279ac0d230:/packages/js2-mode/tests/indent.el diff --git a/packages/js2-mode/tests/indent.el b/packages/js2-mode/tests/indent.el index affbd58a3..0fabe9563 100644 --- a/packages/js2-mode/tests/indent.el +++ b/packages/js2-mode/tests/indent.el @@ -1,6 +1,6 @@ ;;; tests/indent.el --- Some tests for js2-mode. -;; Copyright (C) 2009, 2011-2013 Free Software Foundation, Inc. +;; Copyright (C) 2009, 2011-2016 Free Software Foundation, Inc. ;; This file is part of GNU Emacs. @@ -22,23 +22,29 @@ (require 'ert) (require 'js2-mode) (require 'cl-lib) +(require 'js2-old-indent) -(defun js2-test-indent (content) +(defun js2-test-indent (content keep-indent) (let ((s (replace-regexp-in-string "^ *|" "" content))) (with-temp-buffer - (insert (replace-regexp-in-string "^ *" "" s)) - (js2-mode) + (insert + (if keep-indent + s + (replace-regexp-in-string "^ *" "" s))) + (js2-jsx-mode) + (js2-reparse) ; solely for js2-jsx-self-closing, for some reason (indent-region (point-min) (point-max)) (should (string= s (buffer-substring-no-properties (point-min) (point))))))) -(cl-defmacro js2-deftest-indent (name content &key bind) +(cl-defmacro js2-deftest-indent (name content &key bind keep-indent) `(ert-deftest ,(intern (format "js2-%s" name)) () - (let ,(append '((js2-basic-offset 2) + (let ,(append '(indent-tabs-mode + (js2-basic-offset 2) (js2-pretty-multiline-declarations t) (inhibit-point-motion-hooks t)) bind) - (js2-test-indent ,content)))) + (js2-test-indent ,content ,keep-indent)))) (put 'js2-deftest-indent 'lisp-indent-function 'defun) @@ -102,3 +108,180 @@ | default: 'donkey', | tee: 'ornery' |};") + +(js2-deftest-indent multiline-string-noop + "`multiline string + | contents + | are kept + | unchanged!`" + :keep-indent t) + +(js2-deftest-indent no-multiline-decl-first-arg-function-dynamic + "var foo = function() { + | return 7; + |};" + :bind ((js2-pretty-multiline-declarations 'dynamic))) + +(js2-deftest-indent multiline-decl-first-arg-function-indent-dynamic + "var foo = function() { + | return 7; + | }, + | bar = 8;" + :bind ((js2-pretty-multiline-declarations 'dynamic))) + +(js2-deftest-indent multiline-decl-first-arg-function-indent-dynamic-comment + "var foo = function() { + | return 7; + | }/* MUAHAHAHA, ah ha! */, + | bar = 8;" + :bind ((js2-pretty-multiline-declarations 'dynamic))) + +(js2-deftest-indent multiline-decl-first-arg-function-indent-dynamic-scan-error + "var foo = function() { + | return 7; + | , + | bar = 8;" + :bind ((js2-pretty-multiline-declarations 'dynamic))) + +(js2-deftest-indent indent-generator-method + "class A { + | * x() { + | return 1 + | * a(2); + | } + |}") + +(js2-deftest-indent indent-generator-computed-method + "class A { + | *[Symbol.iterator]() { + | yield 'Foo'; + | yield 'Bar'; + | } + |}") + +(js2-deftest-indent case-inside-switch + "switch(true) { + |case 'true': + | return 1; + |}") + +(js2-deftest-indent case-inside-switch-with-extra-indent + "switch(true) { + | case 'true': + | return 1; + |}" + :bind ((js2-indent-switch-body t))) + +(js2-deftest-indent case-inside-switch-with-extra-indent-curly-after-newline + "switch(true) + |{ + | case 'true': + | return 1; + |}" + :bind ((js2-indent-switch-body t))) + +(js2-deftest-indent continued-expression-vs-unary-minus + "var arr = [ + | -1, 2, + | -3, 4 + + | -5 + |];") + +(js2-deftest-indent spread-inside-array + "var z = [ + | ...iterableObj, + | 4, + | 5 + |]") + +(js2-deftest-indent jsx-one-line + "var foo =
;") + +(js2-deftest-indent jsx-children-parentheses + "return ( + |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |);") + +(js2-deftest-indent jsx-children-unclosed + "return ( + |
+ |
") + +(js2-deftest-indent jsx-argument + "React.render( + |
+ |
+ |
, + | { + | a: 1 + | }, + |
+ |
+ |
+ |);") + +(js2-deftest-indent jsx-leading-comment + "return ( + | // Sneaky! + |
+ |);") + +(js2-deftest-indent jsx-trailing-comment + "return ( + |
+ | // Sneaky! + |);") + +(js2-deftest-indent jsx-self-closing + ;; This ensures we know the bounds of a self-closing element + "React.render( + | , + | { + | a: 1 + | } + |);" + :bind ((sgml-attribute-offset 1))) ; Emacs 24.5 -> 25 compat + +(js2-deftest-indent jsx-embedded-js-content + "return ( + |
+ | {array.map(function () { + | return { + | a: 1 + | }; + | })} + |
+ |);") + +(js2-deftest-indent jsx-embedded-js-unclosed + "return ( + |
+ | {array.map(function () { + | return { + | a: 1") + +(js2-deftest-indent jsx-embedded-js-attribute + "return ( + |
+ |
+ |);")