emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/phps-mode ad4e825 20/62: Added some new lex analyzer te


From: Christian Johansson
Subject: [elpa] externals/phps-mode ad4e825 20/62: Added some new lex analyzer tests for PHP 8.0 tokens
Date: Tue, 20 Apr 2021 10:56:16 -0400 (EDT)

branch: externals/phps-mode
commit ad4e825ec0499fabab75824833b9aa83e072a83c
Author: Christian Johansson <christian@mediastrategi.se>
Commit: Christian Johansson <christian@mediastrategi.se>

    Added some new lex analyzer tests for PHP 8.0 tokens
---
 test/phps-mode-test-lexer.el | 71 +++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 64 insertions(+), 7 deletions(-)

diff --git a/test/phps-mode-test-lexer.el b/test/phps-mode-test-lexer.el
index 076632a..20e4545 100644
--- a/test/phps-mode-test-lexer.el
+++ b/test/phps-mode-test-lexer.el
@@ -226,15 +226,72 @@
      phps-mode-lex-analyzer--tokens
      '((T_OPEN_TAG 1 . 7) (T_COMMENT 7 . 22) (T_DOC_COMMENT 23 . 44)))))
 
-  ;; (phps-mode-test--with-buffer
-  ;;  "<?php ??= $var EXIT die function return yield from yield try catch 
finally throw if elseif endif else while endwhile do for endfor foreach 
endforeach declare enddeclare instanceof as switch endswitch case default break 
continue goto echo print class interface trait extends implements :: \\ ... ?? 
new clone var (int) (integer) (real) (double) (float) (string) (binary) (array) 
(object) (boolean) (bool) (unset) eval include include_once require 
require_once namespace use insteadof gl [...]
-  ;;  "All PHP tokens after each other"
-  ;;  (message "Tokens: %s" phps-mode-lex-analyzer--tokens)
-  ;;  (should (equal phps-mode-lex-analyzer--tokens
-  ;;                 '((T_OPEN_TAG 1 . 7) (T_COALESCE_EQUAL 7 . 10) 
(T_VARIABLE 11 . 15) (T_EXIT 16 . 20) (T_DIE 21 . 24) (T_FUNCTION 25 . 33) 
(T_RETURN 34 . 40) (T_YIELD_FROM 41 . 52) (T_YIELD 52 . 57) (T_TRY 58 . 61) 
(T_CATCH 62 . 67) (T_FINALLY 68 . 75) (T_THROW 76 . 81) (T_IF 82 . 84) 
(T_ELSEIF 85 . 91) (T_ENDIF 92 . 97) (T_ELSE 98 . 102) (T_WHILE 103 . 108) 
(T_ENDWHILE 109 . 117) (T_DO 118 . 120) (T_FOR 121 . 124) (T_ENDFOR 125 . 131) 
(T_FOREACH 132 . 139) (T_ENDFOREACH 140 . 150) ( [...]
+  ;; https://www.php.net/releases/8.0/en.php
+  (phps-mode-test--with-buffer
+   "<?php\nhtmlspecialchars($string, double_encode: false);"
+   "PHP 8.0 Named arguments"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_STRING 7 . 23) ("(" 23 . 24) (T_VARIABLE 24 . 31) 
("," 31 . 32) (T_STRING 33 . 46) (":" 46 . 47) (T_STRING 48 . 53) (")" 53 . 54) 
(";" 54 . 55)))))
+
+  (phps-mode-test--with-buffer
+   "<?php\nclass PostsController\n{\n    #[Route(\"/api/posts/{id}\", methods: 
[\"GET\"])]\n    public function get($id) { /* ... */ }\n}"
+   "PHP 8.0 Attributes"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_CLASS 7 . 12) (T_STRING 13 . 28) ("{" 29 . 30) 
(T_ATTRIBUTE 35 . 37) (T_STRING 37 . 42) ("(" 42 . 43) 
(T_CONSTANT_ENCAPSED_STRING 43 . 60) ("," 60 . 61) (T_STRING 62 . 69) (":" 69 . 
70) ("[" 71 . 72) (T_CONSTANT_ENCAPSED_STRING 72 . 77) ("]" 77 . 78) (")" 78 . 
79) ("]" 79 . 80) (T_PUBLIC 85 . 91) (T_FUNCTION 92 . 100) (T_STRING 101 . 104) 
("(" 104 . 105) (T_VARIABLE 105 . 108) (")" 108 . 109) ("{" 110 . 111) 
(T_COMMENT 112 . 121) ("}" 122 . 123) ("}" 124 . 125)))))
+  
+  (phps-mode-test--with-buffer
+   "<?php\nclass Point {\n  public function __construct(\n    public float $x 
= 0.0,\n    public float $y = 0.0,\n    public float $z = 0.0,\n  ) {}\n}"
+   "PHP 8.0 Constructor property promotion"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_CLASS 7 . 12) (T_STRING 13 . 18) ("{" 19 . 20) 
(T_PUBLIC 23 . 29) (T_FUNCTION 30 . 38) (T_STRING 39 . 50) ("(" 50 . 51) 
(T_PUBLIC 56 . 62) (T_STRING 63 . 68) (T_VARIABLE 69 . 71) ("=" 72 . 73) 
(T_DNUMBER 74 . 77) ("," 77 . 78) (T_PUBLIC 83 . 89) (T_STRING 90 . 95) 
(T_VARIABLE 96 . 98) ("=" 99 . 100) (T_DNUMBER 101 . 104) ("," 104 . 105) 
(T_PUBLIC 110 . 116) (T_STRING 117 . 122) (T_VARIABLE 123 . 125) ("=" 126 . 
127) (T_DNUMBER 128 . 131) ("," 131 . 132) (")"  [...]
+
+  (phps-mode-test--with-buffer
+   "<?php\nclass Number {\n  public function __construct(\n    private 
int|float $number\n  ) {}\n}\n\nnew Number('NaN'); // TypeError"
+   "PHP 8.0 Union types"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_CLASS 7 . 12) (T_STRING 13 . 19) ("{" 20 . 21) 
(T_PUBLIC 24 . 30) (T_FUNCTION 31 . 39) (T_STRING 40 . 51) ("(" 51 . 52) 
(T_PRIVATE 57 . 64) (T_STRING 65 . 68) ("|" 68 . 69) (T_STRING 69 . 74) 
(T_VARIABLE 75 . 82) (")" 85 . 86) ("{" 87 . 88) ("}" 88 . 89) ("}" 90 . 91) 
(T_NEW 93 . 96) (T_STRING 97 . 103) ("(" 103 . 104) (T_CONSTANT_ENCAPSED_STRING 
104 . 109) (")" 109 . 110) (";" 110 . 111) (T_COMMENT 112 . 124)))))
 
-  ;; TODO Add PHP 8 new tokens here
+  (phps-mode-test--with-buffer
+   "<?php\necho match (8.0) {\n  '8.0' => \"Oh no!\",\n  8.0 => \"This is what 
I expected\",\n};\n//> This is what I expected"
+   "PHP 8.0 Match expression"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_ECHO 7 . 11) (T_STRING 12 . 17) ("(" 18 . 19) 
(T_DNUMBER 19 . 22) (")" 22 . 23) ("{" 24 . 25) (T_CONSTANT_ENCAPSED_STRING 28 
. 33) (T_DOUBLE_ARROW 34 . 36) (T_CONSTANT_ENCAPSED_STRING 37 . 45) ("," 45 . 
46) (T_DNUMBER 49 . 52) (T_DOUBLE_ARROW 53 . 55) (T_CONSTANT_ENCAPSED_STRING 56 
. 81) ("," 81 . 82) ("}" 83 . 84) (";" 84 . 85) (T_COMMENT 86 . 113)))))
+
+  (phps-mode-test--with-buffer
+   "<?php\n\n$country = $session?->user?->getAddress()?->country;\n"
+   "PHP 8.0 Nullsafe operator"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_VARIABLE 8 . 16) ("=" 17 . 18) (T_VARIABLE 19 . 
27) (T_NULLSAFE_OBJECT_OPERATOR 27 . 30) (T_STRING 30 . 34) 
(T_NULLSAFE_OBJECT_OPERATOR 34 . 37) (T_STRING 37 . 47) ("(" 47 . 48) (")" 48 . 
49) (T_NULLSAFE_OBJECT_OPERATOR 49 . 52) (T_STRING 52 . 59) (";" 59 . 60)))))
+
+  (phps-mode-test--with-buffer
+   "<?php\n\n0 == 'foobar' // false\n"
+   "PHP 8.0 Saner string to number comparisons"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_LNUMBER 8 . 9) (T_IS_EQUAL 10 . 12) 
(T_CONSTANT_ENCAPSED_STRING 13 . 21) (T_COMMENT 22 . 30)))))
+
+  (phps-mode-test--with-buffer
+   "<?php\n\nstrlen([]); // TypeError: strlen(): Argument #1 ($str) must be of 
type string, array given\n\narray_chunk([], -1); // ValueError: array_chunk(): 
Argument #2 ($length) must be greater than 0\n"
+   "PHP 8.0 Consistent type errors for internal functions"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_STRING 8 . 14) ("(" 14 . 15) ("[" 15 . 16) ("]" 
16 . 17) (")" 17 . 18) (";" 18 . 19) (T_COMMENT 20 . 98) (T_STRING 100 . 111) 
("(" 111 . 112) ("[" 112 . 113) ("]" 113 . 114) ("," 114 . 115) ("-" 116 . 117) 
(T_LNUMBER 117 . 118) (")" 118 . 119) (";" 119 . 120) (T_COMMENT 121 . 195)))))
 
+  ;; TODO Add more PHP 8 examples here
 
   )
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]