]>
git.proxmox.com Git - pve-eslint.git/blob - eslint/tests/lib/rules/padded-blocks.js
2 * @fileoverview Tests for padded-blocks rule.
3 * @author Mathias Schreck <https://github.com/lo1tuma>
8 //------------------------------------------------------------------------------
10 //------------------------------------------------------------------------------
12 const rule
= require("../../../lib/rules/padded-blocks"),
13 { RuleTester
} = require("../../../lib/rule-tester");
15 //------------------------------------------------------------------------------
17 //------------------------------------------------------------------------------
19 const ruleTester
= new RuleTester();
21 ruleTester
.run("padded-blocks", rule
, {
25 "{\n\n//comment\na();\n\n}",
26 "{\n\na();\n//comment\n\n}",
27 "{\n\na()\n//comment\n\n}",
29 "{//comment\n\na();\n\n}",
30 "{ /* comment */\n\na();\n\n}",
31 "{ /* comment \n */\n\na();\n\n}",
32 "{ /* comment \n */ /* another comment \n */\n\na();\n\n}",
33 "{ /* comment \n */ /* another comment \n */\n\na();\n\n/* comment \n */ /* another comment \n */}",
35 "{\n\na();\n\n/* comment */ }",
36 { code
: "{\n\na();\n\n/* comment */ }", options
: ["always"] },
37 { code
: "{\n\na();\n\n/* comment */ }", options
: [{ blocks
: "always" }] },
40 { code
: "switch (a) {}", options
: [{ switches
: "always" }] },
41 { code
: "switch (a) {\n\ncase 0: foo();\ncase 1: bar();\n\n}", options
: ["always"] },
42 { code
: "switch (a) {\n\ncase 0: foo();\ncase 1: bar();\n\n}", options
: [{ switches
: "always" }] },
43 { code
: "switch (a) {\n\n//comment\ncase 0: foo();//comment\n\n}", options
: [{ switches
: "always" }] },
44 { code
: "switch (a) {//comment\n\ncase 0: foo();\ncase 1: bar();\n\n/* comment */}", options
: [{ switches
: "always" }] },
46 { code
: "class A{\n\nfoo(){}\n\n}", parserOptions
: { ecmaVersion
: 6 } },
47 { code
: "class A{\n\nfoo(){}\n\n}", options
: ["always"], parserOptions
: { ecmaVersion
: 6 } },
48 { code
: "class A{}", options
: [{ classes
: "always" }], parserOptions
: { ecmaVersion
: 6 } },
49 { code
: "class A{\n\n}", options
: [{ classes
: "always" }], parserOptions
: { ecmaVersion
: 6 } },
50 { code
: "class A{\n\nfoo(){}\n\n}", options
: [{ classes
: "always" }], parserOptions
: { ecmaVersion
: 6 } },
52 { code
: "{\na();\n}", options
: ["never"] },
53 { code
: "{\na();}", options
: ["never"] },
54 { code
: "{a();\n}", options
: ["never"] },
55 { code
: "{a();}", options
: ["never"] },
56 { code
: "{a();}", options
: ["always", { allowSingleLineBlocks
: true }] },
57 { code
: "{\n\na();\n\n}", options
: ["always", { allowSingleLineBlocks
: true }] },
58 { code
: "{//comment\na();}", options
: ["never"] },
59 { code
: "{\n//comment\na()\n}", options
: ["never"] },
60 { code
: "{a();//comment\n}", options
: ["never"] },
61 { code
: "{\na();\n//comment\n}", options
: ["never"] },
62 { code
: "{\na()\n//comment\n}", options
: ["never"] },
63 { code
: "{\na()\n//comment\nb()\n}", options
: ["never"] },
64 { code
: "function a() {\n/* comment */\nreturn;\n/* comment*/\n}", options
: ["never"] },
65 { code
: "{\n// comment\ndebugger;\n// comment\n}", options
: ["never"] },
66 { code
: "{\n\n// comment\nif (\n// comment\n a) {}\n\n }", options
: ["always"] },
67 { code
: "{\n// comment\nif (\n// comment\n a) {}\n }", options
: ["never"] },
68 { code
: "{\n// comment\nif (\n// comment\n a) {}\n }", options
: [{ blocks
: "never" }] },
70 { code
: "switch (a) {\ncase 0: foo();\n}", options
: ["never"] },
71 { code
: "switch (a) {\ncase 0: foo();\n}", options
: [{ switches
: "never" }] },
74 { code
: "class A{\nfoo(){}\n}", options
: ["never"], parserOptions
: { ecmaVersion
: 6 } },
75 { code
: "class A{\nfoo(){}\n}", options
: [{ classes
: "never" }], parserOptions
: { ecmaVersion
: 6 } },
77 { code
: "class A{\n\nfoo;\n\n}", parserOptions
: { ecmaVersion
: 2022 } },
78 { code
: "class A{\nfoo;\n}", options
: ["never"], parserOptions
: { ecmaVersion
: 2022 } },
80 // Ignore block statements if not configured
81 { code
: "{\na();\n}", options
: [{ switches
: "always" }] },
82 { code
: "{\n\na();\n\n}", options
: [{ switches
: "never" }] },
84 // Ignore switch statements if not configured
85 { code
: "switch (a) {\ncase 0: foo();\ncase 1: bar();\n}", options
: [{ blocks
: "always", classes
: "always" }] },
86 { code
: "switch (a) {\n\ncase 0: foo();\ncase 1: bar();\n\n}", options
: [{ blocks
: "never", classes
: "never" }] },
89 // Ignore class statements if not configured
90 { code
: "class A{\nfoo(){}\n}", options
: [{ blocks
: "always" }], parserOptions
: { ecmaVersion
: 6 } },
91 { code
: "class A{\n\nfoo(){}\n\n}", options
: [{ blocks
: "never" }], parserOptions
: { ecmaVersion
: 6 } },
93 // class static blocks
95 code
: "class C {\n\n static {\n\nfoo;\n\n} \n\n}",
97 parserOptions
: { ecmaVersion
: 2022 }
100 code
: "class C {\n\n static {// comment\n\nfoo;\n\n/* comment */} \n\n}",
102 parserOptions
: { ecmaVersion
: 2022 }
105 code
: "class C {\n\n static {\n\n// comment\nfoo;\n// comment\n\n} \n\n}",
107 parserOptions
: { ecmaVersion
: 2022 }
110 code
: "class C {\n\n static {\n\n// comment\n\nfoo;\n\n// comment\n\n} \n\n}",
112 parserOptions
: { ecmaVersion
: 2022 }
115 code
: "class C {\n\n static { foo; } \n\n}",
116 options
: ["always", { allowSingleLineBlocks
: true }],
117 parserOptions
: { ecmaVersion
: 2022 }
120 code
: "class C {\n\n static\n { foo; } \n\n}",
121 options
: ["always", { allowSingleLineBlocks
: true }],
122 parserOptions
: { ecmaVersion
: 2022 }
125 code
: "class C {\n\n static {} static {\n} static {\n\n} \n\n}", // empty blocks are ignored
127 parserOptions
: { ecmaVersion
: 2022 }
130 code
: "class C {\n\n static\n\n { foo; } \n\n}",
131 options
: ["always", { allowSingleLineBlocks
: true }],
132 parserOptions
: { ecmaVersion
: 2022 }
135 code
: "class C {\n static {\n\nfoo;\n\n} \n}",
136 options
: [{ blocks
: "always", classes
: "never" }], // "blocks" applies to static blocks
137 parserOptions
: { ecmaVersion
: 2022 }
140 code
: "class C {\n static {\nfoo;\n} \n}",
142 parserOptions
: { ecmaVersion
: 2022 }
145 code
: "class C {\n static {foo;} \n}",
147 parserOptions
: { ecmaVersion
: 2022 }
150 code
: "class C {\n static\n {\nfoo;\n} \n}",
152 parserOptions
: { ecmaVersion
: 2022 }
155 code
: "class C {\n static\n\n {\nfoo;\n} \n}",
157 parserOptions
: { ecmaVersion
: 2022 }
160 code
: "class C {\n static\n\n {foo;} \n}",
162 parserOptions
: { ecmaVersion
: 2022 }
165 code
: "class C {\n static {// comment\nfoo;\n/* comment */} \n}",
167 parserOptions
: { ecmaVersion
: 2022 }
170 code
: "class C {\n static {\n// comment\nfoo;\n// comment\n} \n}",
172 parserOptions
: { ecmaVersion
: 2022 }
175 code
: "class C {\n static {} static {\n} static {\n\n} \n}", // empty blocks are ignored
177 parserOptions
: { ecmaVersion
: 2022 }
180 code
: "class C {\n\n static {\nfoo;\n} \n\n}",
181 options
: [{ blocks
: "never", classes
: "always" }], // "blocks" applies to static blocks
182 parserOptions
: { ecmaVersion
: 2022 }
185 code
: "class C {\n\n static {\nfoo;\n} static {\n\nfoo;\n\n} \n\n}",
186 options
: [{ classes
: "always" }], // if there's no "blocks" in the object option, static blocks are ignored
187 parserOptions
: { ecmaVersion
: 2022 }
190 code
: "class C {\n static {\nfoo;\n} static {\n\nfoo;\n\n} \n}",
191 options
: [{ classes
: "never" }], // if there's no "blocks" in the object option, static blocks are ignored
192 parserOptions
: { ecmaVersion
: 2022 }
198 code
: "{\n//comment\na();\n\n}",
199 output
: "{\n\n//comment\na();\n\n}",
202 messageId
: "alwaysPadBlock",
211 code
: "{ //comment\na();\n\n}",
212 output
: "{ //comment\n\na();\n\n}",
215 messageId
: "alwaysPadBlock",
224 code
: "{\n\na();\n//comment\n}",
225 output
: "{\n\na();\n//comment\n\n}",
228 messageId
: "alwaysPadBlock",
237 code
: "{\n\na()\n//comment\n}",
238 output
: "{\n\na()\n//comment\n\n}",
241 messageId
: "alwaysPadBlock",
250 code
: "{\na();\n\n}",
251 output
: "{\n\na();\n\n}",
254 messageId
: "alwaysPadBlock",
263 code
: "{\n\na();\n}",
264 output
: "{\n\na();\n\n}",
267 messageId
: "alwaysPadBlock",
277 output
: "{\n\na();\n\n}",
280 messageId
: "alwaysPadBlock",
287 messageId
: "alwaysPadBlock",
296 code
: "{\r\na();\r\n}",
297 output
: "{\n\r\na();\r\n\n}",
300 messageId
: "alwaysPadBlock",
307 messageId
: "alwaysPadBlock",
317 output
: "{\n\na();\n}",
320 messageId
: "alwaysPadBlock",
327 messageId
: "alwaysPadBlock",
337 output
: "{\na();\n\n}",
340 messageId
: "alwaysPadBlock",
347 messageId
: "alwaysPadBlock",
357 output
: "{\na();\n\n}",
358 options
: [{ blocks
: "always" }],
361 messageId
: "alwaysPadBlock",
368 messageId
: "alwaysPadBlock",
377 code
: "switch (a) {\ncase 0: foo();\ncase 1: bar();\n}",
378 output
: "switch (a) {\n\ncase 0: foo();\ncase 1: bar();\n\n}",
382 messageId
: "alwaysPadBlock",
389 messageId
: "alwaysPadBlock",
398 code
: "switch (a) {\ncase 0: foo();\ncase 1: bar();\n}",
399 output
: "switch (a) {\n\ncase 0: foo();\ncase 1: bar();\n\n}",
400 options
: [{ switches
: "always" }],
403 messageId
: "alwaysPadBlock",
410 messageId
: "alwaysPadBlock",
419 code
: "switch (a) {\n//comment\ncase 0: foo();//comment\n}",
420 output
: "switch (a) {\n\n//comment\ncase 0: foo();//comment\n\n}",
421 options
: [{ switches
: "always" }],
424 messageId
: "alwaysPadBlock",
431 messageId
: "alwaysPadBlock",
440 code
: "class A {\nconstructor(){}\n}",
441 output
: "class A {\n\nconstructor(){}\n\n}",
443 parserOptions
: { ecmaVersion
: 6 },
446 messageId
: "alwaysPadBlock",
453 messageId
: "alwaysPadBlock",
462 code
: "class A {\nconstructor(){}\n}",
463 output
: "class A {\n\nconstructor(){}\n\n}",
464 options
: [{ classes
: "always" }],
465 parserOptions
: { ecmaVersion
: 6 },
468 messageId
: "alwaysPadBlock",
475 messageId
: "alwaysPadBlock",
485 output
: "{\na();\n}",
488 messageId
: "alwaysPadBlock",
495 messageId
: "alwaysPadBlock",
504 code
: "{\na()\n//comment\n\n}",
505 output
: "{\na()\n//comment\n}",
509 messageId
: "neverPadBlock",
518 code
: "{\n\na();\n\n}",
519 output
: "{\na();\n}",
523 messageId
: "neverPadBlock",
530 messageId
: "neverPadBlock",
539 code
: "{\r\n\r\na();\r\n\r\n}",
540 output
: "{\na();\n}",
544 messageId
: "neverPadBlock",
551 messageId
: "neverPadBlock",
560 code
: "{\n\n\n a();\n\n\n}",
561 output
: "{\n a();\n}",
565 messageId
: "neverPadBlock",
572 messageId
: "neverPadBlock",
581 code
: "{\n\na();\n}",
582 output
: "{\na();\n}",
586 messageId
: "neverPadBlock",
595 code
: "{\n\n\ta();\n}",
596 output
: "{\n\ta();\n}",
600 messageId
: "neverPadBlock",
609 code
: "{\na();\n\n}",
610 output
: "{\na();\n}",
614 messageId
: "neverPadBlock",
623 code
: " {\n a();\n\n }",
624 output
: " {\n a();\n }",
628 messageId
: "neverPadBlock",
637 code
: "{\n// comment\nif (\n// comment\n a) {}\n\n}",
638 output
: "{\n\n// comment\nif (\n// comment\n a) {}\n\n}",
642 messageId
: "alwaysPadBlock",
651 code
: "{\n\n// comment\nif (\n// comment\n a) {}\n}",
652 output
: "{\n// comment\nif (\n// comment\n a) {}\n}",
656 messageId
: "neverPadBlock",
665 code
: "{\n\n// comment\nif (\n// comment\n a) {}\n}",
666 output
: "{\n// comment\nif (\n// comment\n a) {}\n}",
667 options
: [{ blocks
: "never" }],
670 messageId
: "neverPadBlock",
679 code
: "switch (a) {\n\ncase 0: foo();\n\n}",
680 output
: "switch (a) {\ncase 0: foo();\n}",
684 messageId
: "neverPadBlock",
691 messageId
: "neverPadBlock",
700 code
: "switch (a) {\n\ncase 0: foo();\n}",
701 output
: "switch (a) {\ncase 0: foo();\n}",
702 options
: [{ switches
: "never" }],
705 messageId
: "neverPadBlock",
714 code
: "switch (a) {\ncase 0: foo();\n\n }",
715 output
: "switch (a) {\ncase 0: foo();\n }",
716 options
: [{ switches
: "never" }],
719 messageId
: "neverPadBlock",
728 code
: "class A {\n\nconstructor(){\n\nfoo();\n\n}\n\n}",
729 output
: "class A {\nconstructor(){\nfoo();\n}\n}",
731 parserOptions
: { ecmaVersion
: 6 },
734 messageId
: "neverPadBlock",
741 messageId
: "neverPadBlock",
748 messageId
: "neverPadBlock",
755 messageId
: "neverPadBlock",
764 code
: "class A {\n\nconstructor(){\n\nfoo();\n\n}\n\n}",
765 output
: "class A {\nconstructor(){\n\nfoo();\n\n}\n}",
766 options
: [{ classes
: "never" }],
767 parserOptions
: { ecmaVersion
: 6 },
770 messageId
: "neverPadBlock",
777 messageId
: "neverPadBlock",
786 code
: "class A {\n\nconstructor(){\n\nfoo();\n\n}\n\n}",
787 output
: "class A {\nconstructor(){\nfoo();\n}\n}",
788 options
: [{ blocks
: "never", classes
: "never" }],
789 parserOptions
: { ecmaVersion
: 6 },
792 messageId
: "neverPadBlock",
799 messageId
: "neverPadBlock",
806 messageId
: "neverPadBlock",
813 messageId
: "neverPadBlock",
822 code
: "function foo() { // a\n\n b;\n}",
823 output
: "function foo() { // a\n b;\n}",
825 errors
: [{ messageId
: "neverPadBlock" }]
828 code
: "function foo() { /* a\n */\n\n bar;\n}",
829 output
: "function foo() { /* a\n */\n bar;\n}",
831 errors
: [{ messageId
: "neverPadBlock" }]
834 code
: "function foo() {\n\n bar;\n/* a\n */}",
835 output
: "function foo() {\n\n bar;\n\n/* a\n */}",
837 errors
: [{ messageId
: "alwaysPadBlock" }]
840 code
: "function foo() { /* a\n */\n/* b\n */\n bar;\n}",
841 output
: "function foo() { /* a\n */\n\n/* b\n */\n bar;\n\n}",
843 errors
: [{ messageId
: "alwaysPadBlock" }, { messageId
: "alwaysPadBlock" }]
846 code
: "function foo() { /* a\n */ /* b\n */\n bar;\n}",
847 output
: "function foo() { /* a\n */ /* b\n */\n\n bar;\n\n}",
849 errors
: [{ messageId
: "alwaysPadBlock" }, { messageId
: "alwaysPadBlock" }]
852 code
: "function foo() { /* a\n */ /* b\n */\n bar;\n/* c\n *//* d\n */}",
853 output
: "function foo() { /* a\n */ /* b\n */\n\n bar;\n\n/* c\n *//* d\n */}",
855 errors
: [{ messageId
: "alwaysPadBlock" }, { messageId
: "alwaysPadBlock" }]
858 code
: "class A{\nfoo;\n}",
859 output
: "class A{\n\nfoo;\n\n}",
860 parserOptions
: { ecmaVersion
: 2022 },
861 errors
: [{ messageId
: "alwaysPadBlock" }, { messageId
: "alwaysPadBlock" }]
864 code
: "class A{\n\nfoo;\n\n}",
865 output
: "class A{\nfoo;\n}",
867 parserOptions
: { ecmaVersion
: 2022 },
868 errors
: [{ messageId
: "neverPadBlock" }, { messageId
: "neverPadBlock" }]
871 // class static blocks
873 code
: "class C {\n\n static {\nfoo;\n\n} \n\n}",
874 output
: "class C {\n\n static {\n\nfoo;\n\n} \n\n}",
876 parserOptions
: { ecmaVersion
: 2022 },
877 errors
: [{ messageId
: "alwaysPadBlock" }]
880 code
: "class C {\n\n static\n {\nfoo;\n\n} \n\n}",
881 output
: "class C {\n\n static\n {\n\nfoo;\n\n} \n\n}",
883 parserOptions
: { ecmaVersion
: 2022 },
884 errors
: [{ messageId
: "alwaysPadBlock" }]
887 code
: "class C {\n\n static\n\n {\nfoo;\n\n} \n\n}",
888 output
: "class C {\n\n static\n\n {\n\nfoo;\n\n} \n\n}",
890 parserOptions
: { ecmaVersion
: 2022 },
891 errors
: [{ messageId
: "alwaysPadBlock" }]
894 code
: "class C {\n\n static {\n\nfoo;\n} \n\n}",
895 output
: "class C {\n\n static {\n\nfoo;\n\n} \n\n}",
897 parserOptions
: { ecmaVersion
: 2022 },
898 errors
: [{ messageId
: "alwaysPadBlock" }]
901 code
: "class C {\n\n static {foo;} \n\n}",
902 output
: "class C {\n\n static {\nfoo;\n} \n\n}", // this is still not padded, the subsequent fix below will add another pair of `\n`.
904 parserOptions
: { ecmaVersion
: 2022 },
906 { messageId
: "alwaysPadBlock" },
907 { messageId
: "alwaysPadBlock" }
911 code
: "class C {\n\n static {\nfoo;\n} \n\n}",
912 output
: "class C {\n\n static {\n\nfoo;\n\n} \n\n}",
914 parserOptions
: { ecmaVersion
: 2022 },
916 { messageId
: "alwaysPadBlock" },
917 { messageId
: "alwaysPadBlock" }
921 code
: "class C {\n\n static {// comment\nfoo;\n/* comment */} \n\n}",
922 output
: "class C {\n\n static {// comment\n\nfoo;\n\n/* comment */} \n\n}",
924 parserOptions
: { ecmaVersion
: 2022 },
926 { messageId
: "alwaysPadBlock" },
927 { messageId
: "alwaysPadBlock" }
931 code
: "class C {\n\n static {\n// comment\nfoo;\n// comment\n} \n\n}",
932 output
: "class C {\n\n static {\n\n// comment\nfoo;\n// comment\n\n} \n\n}",
934 parserOptions
: { ecmaVersion
: 2022 },
936 { messageId
: "alwaysPadBlock" },
937 { messageId
: "alwaysPadBlock" }
941 code
: "class C {\n\n static {\n// comment\n\nfoo;\n\n// comment\n} \n\n}",
942 output
: "class C {\n\n static {\n\n// comment\n\nfoo;\n\n// comment\n\n} \n\n}",
944 parserOptions
: { ecmaVersion
: 2022 },
946 { messageId
: "alwaysPadBlock" },
947 { messageId
: "alwaysPadBlock" }
951 code
: "class C {\n static {\nfoo;\n} \n}",
952 output
: "class C {\n static {\n\nfoo;\n\n} \n}",
953 options
: [{ blocks
: "always", classes
: "never" }], // "blocks" applies to static blocks
954 parserOptions
: { ecmaVersion
: 2022 },
956 { messageId
: "alwaysPadBlock" },
957 { messageId
: "alwaysPadBlock" }
961 code
: "class C {\n static {\n\nfoo;\n} \n}",
962 output
: "class C {\n static {\nfoo;\n} \n}",
964 parserOptions
: { ecmaVersion
: 2022 },
965 errors
: [{ messageId
: "neverPadBlock" }]
968 code
: "class C {\n static\n {\n\nfoo;\n} \n}",
969 output
: "class C {\n static\n {\nfoo;\n} \n}",
971 parserOptions
: { ecmaVersion
: 2022 },
972 errors
: [{ messageId
: "neverPadBlock" }]
975 code
: "class C {\n static\n\n {\n\nfoo;\n} \n}",
976 output
: "class C {\n static\n\n {\nfoo;\n} \n}",
978 parserOptions
: { ecmaVersion
: 2022 },
979 errors
: [{ messageId
: "neverPadBlock" }]
982 code
: "class C {\n static {\nfoo;\n\n} \n}",
983 output
: "class C {\n static {\nfoo;\n} \n}",
985 parserOptions
: { ecmaVersion
: 2022 },
986 errors
: [{ messageId
: "neverPadBlock" }]
989 code
: "class C {\n static {\n\nfoo;\n\n} \n}",
990 output
: "class C {\n static {\nfoo;\n} \n}",
992 parserOptions
: { ecmaVersion
: 2022 },
994 { messageId
: "neverPadBlock" },
995 { messageId
: "neverPadBlock" }
999 code
: "class C {\n static {// comment\n\nfoo;\n\n/* comment */} \n}",
1000 output
: "class C {\n static {// comment\nfoo;\n/* comment */} \n}",
1002 parserOptions
: { ecmaVersion
: 2022 },
1004 { messageId
: "neverPadBlock" },
1005 { messageId
: "neverPadBlock" }
1009 code
: "class C {\n static {\n\n// comment\nfoo;\n// comment\n\n} \n}",
1010 output
: "class C {\n static {\n// comment\nfoo;\n// comment\n} \n}",
1012 parserOptions
: { ecmaVersion
: 2022 },
1014 { messageId
: "neverPadBlock" },
1015 { messageId
: "neverPadBlock" }
1019 code
: "class C {\n\n static {\n\nfoo;\n\n} \n\n}",
1020 output
: "class C {\n\n static {\nfoo;\n} \n\n}",
1021 options
: [{ blocks
: "never", classes
: "always" }], // "blocks" applies to static blocks
1022 parserOptions
: { ecmaVersion
: 2022 },
1024 { messageId
: "neverPadBlock" },
1025 { messageId
: "neverPadBlock" }