summaryrefslogtreecommitdiff
path: root/test/lisp
diff options
context:
space:
mode:
authorLele Gaifax <lele@metapensiero.it>2016-04-06 10:38:23 +0200
committerJorgen Schaefer <contact@jorgenschaefer.de>2016-04-06 10:51:09 +0200
commit1f6b0bc1512de08fd542df0234476788038c8c82 (patch)
tree520ca1eabf4f5438466d771d872aa7d70f6578b0 /test/lisp
parentbd2b14f20726e0f210a62edc610fac4c5bc45760 (diff)
downloademacs-1f6b0bc1512de08fd542df0234476788038c8c82.tar.gz
Add new keywords of Python 3.5
Python 3.5, released in mid September 2015, introduced a few new keywords to better support asynchronous code, "async" and "await" in particular. See https://www.python.org/dev/peps/pep-0492/ for details. (Bug#21783) * lisp/progmodes/python.el (python-rx-constituents): Add async def/for/with as block-start and async def as defun. * lisp/progmodes/python.el (python-font-lock-keywords): Add async def/for/with as keyword. * test/automated/python-tests.el (python-indent-after-async-block-1, python-indent-after-async-block-2, python-indent-after-async-block-3, python-nav-beginning-of-defun-3): New tests to test indentation and navigation for the async keyword.
Diffstat (limited to 'test/lisp')
-rw-r--r--test/lisp/progmodes/python-tests.el56
1 files changed, 56 insertions, 0 deletions
diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el
index ec93c01059c..54ed92212b8 100644
--- a/test/lisp/progmodes/python-tests.el
+++ b/test/lisp/progmodes/python-tests.el
@@ -614,6 +614,42 @@ something
(should (eq (car (python-indent-context)) :after-line))
(should (= (python-indent-calculate-indentation) 0))))
+(ert-deftest python-indent-after-async-block-1 ()
+ "Test PEP492 async def."
+ (python-tests-with-temp-buffer
+ "
+async def foo(a, b, c=True):
+"
+ (should (eq (car (python-indent-context)) :no-indent))
+ (should (= (python-indent-calculate-indentation) 0))
+ (goto-char (point-max))
+ (should (eq (car (python-indent-context)) :after-block-start))
+ (should (= (python-indent-calculate-indentation) 4))))
+
+(ert-deftest python-indent-after-async-block-2 ()
+ "Test PEP492 async with."
+ (python-tests-with-temp-buffer
+ "
+async with foo(a) as mgr:
+"
+ (should (eq (car (python-indent-context)) :no-indent))
+ (should (= (python-indent-calculate-indentation) 0))
+ (goto-char (point-max))
+ (should (eq (car (python-indent-context)) :after-block-start))
+ (should (= (python-indent-calculate-indentation) 4))))
+
+(ert-deftest python-indent-after-async-block-3 ()
+ "Test PEP492 async for."
+ (python-tests-with-temp-buffer
+ "
+async for a in sequencer():
+"
+ (should (eq (car (python-indent-context)) :no-indent))
+ (should (= (python-indent-calculate-indentation) 0))
+ (goto-char (point-max))
+ (should (eq (car (python-indent-context)) :after-block-start))
+ (should (= (python-indent-calculate-indentation) 4))))
+
(ert-deftest python-indent-after-backslash-1 ()
"The most common case."
(python-tests-with-temp-buffer
@@ -1493,6 +1529,26 @@ class C(object):
(beginning-of-line)
(point))))))
+(ert-deftest python-nav-beginning-of-defun-3 ()
+ (python-tests-with-temp-buffer
+ "
+class C(object):
+
+ async def m(self):
+ return await self.c()
+
+ async def c(self):
+ pass
+"
+ (python-tests-look-at "self.c()")
+ (should (= (save-excursion
+ (python-nav-beginning-of-defun)
+ (point))
+ (save-excursion
+ (python-tests-look-at "async def m" -1)
+ (beginning-of-line)
+ (point))))))
+
(ert-deftest python-nav-end-of-defun-1 ()
(python-tests-with-temp-buffer
"