pve-eslint/eslint/tests/lib/rules/semi-style.js
Thomas Lamprecht 609c276fc2 import 8.3.0 source
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2021-12-01 13:39:06 +01:00

666 lines
17 KiB
JavaScript

/**
* @fileoverview Tests for semi-style rule.
* @author Toru Nagashima
*/
"use strict";
//------------------------------------------------------------------------------
// Requirements
//------------------------------------------------------------------------------
const rule = require("../../../lib/rules/semi-style"),
{ RuleTester } = require("../../../lib/rule-tester");
//------------------------------------------------------------------------------
// Tests
//------------------------------------------------------------------------------
const ruleTester = new RuleTester();
ruleTester.run("semi-style", rule, {
valid: [
";",
";foo;bar;baz;",
"foo;\nbar;",
"for(a;b;c);",
"for(a;\nb;\nc);",
"for((a\n);\n(b\n);\n(c));",
"if(a)foo;\nbar",
{ code: ";", options: ["last"] },
{ code: ";foo;bar;baz;", options: ["last"] },
{ code: "foo;\nbar;", options: ["last"] },
{ code: "for(a;b;c);", options: ["last"] },
{ code: "for(a;\nb;\nc);", options: ["last"] },
{ code: "for((a\n);\n(b\n);\n(c));", options: ["last"] },
{ code: "class C { a; b; }", options: ["last"], parserOptions: { ecmaVersion: 2022 } },
{ code: "class C {\na;\nb;\n}", options: ["last"], parserOptions: { ecmaVersion: 2022 } },
{ code: "if(a)foo;\nbar", options: ["last"] },
{ code: ";", options: ["first"] },
{ code: ";foo;bar;baz;", options: ["first"] },
{ code: "foo\n;bar;", options: ["first"] },
{ code: "for(a;b;c);", options: ["first"] },
{ code: "for(a;\nb;\nc);", options: ["first"] },
{ code: "for((a\n);\n(b\n);\n(c));", options: ["first"] },
{ code: "class C { a ;b }", options: ["first"], parserOptions: { ecmaVersion: 2022 } },
{ code: "class C {\na\n;b\n}", options: ["first"], parserOptions: { ecmaVersion: 2022 } },
// edge cases
{
code: `
{
;
}
`,
options: ["first"]
},
{
code: `
while (a)
;
foo
`,
options: ["first"]
},
{
code: `
do
;
while (a)
`,
options: ["first"]
},
{
code: `
do
foo;
while (a)
`,
options: ["first"]
},
{
code: `
if (a)
foo;
else
bar
`,
options: ["first"]
},
{
code: `
if (a)
foo
;bar
`,
options: ["first"]
},
{
code: `
{
;
}
`,
options: ["last"]
},
{
code: `
switch (a) {
case 1:
;foo
}
`,
options: ["last"]
},
{
code: `
while (a)
;
foo
`,
options: ["last"]
},
{
code: `
do
;
while (a)
`,
options: ["last"]
},
// Class static blocks
{
code: `
class C {
static {}
}
`,
options: ["last"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo
}
}
`,
options: ["last"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo
bar
}
}
`,
options: ["last"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
;
}
}
`,
options: ["last"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo;
}
}
`,
options: ["last"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo;
bar;
}
}
`,
options: ["last"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo;
bar;
baz;
}
}
`,
options: ["last"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {}
}
`,
options: ["first"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo
}
}
`,
options: ["first"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo
bar
}
}
`,
options: ["first"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
;
}
}
`,
options: ["first"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
;foo
}
}
`,
options: ["first"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo;
}
}
`,
options: ["first"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo
;bar
}
}
`,
options: ["first"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo
;bar;
}
}
`,
options: ["first"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo
;bar
;baz
}
}
`,
options: ["first"],
parserOptions: { ecmaVersion: 2022 }
},
{
code: `
class C {
static {
foo
;bar
;baz;
}
}
`,
options: ["first"],
parserOptions: { ecmaVersion: 2022 }
}
],
invalid: [
{
code: "foo\n;bar",
output: "foo;\nbar",
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "if(a)foo\n;bar",
output: "if(a)foo;\nbar",
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "var foo\n;bar",
output: "var foo;\nbar",
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "foo\n;\nbar",
output: "foo;\nbar",
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "for(a\n;b;c)d",
output: "for(a;\nb;c)d",
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "for(a;b\n;c)d",
output: "for(a;b;\nc)d",
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "do;while(a)\n;b",
output: "do;while(a);\nb",
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "foo\n;bar",
output: "foo;\nbar",
options: ["last"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "if(a)foo\n;bar",
output: "if(a)foo;\nbar",
options: ["last"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "var foo\n;bar",
output: "var foo;\nbar",
options: ["last"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "foo\n;\nbar",
output: "foo;\nbar",
options: ["last"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "for(a\n;b;c)d",
output: "for(a;\nb;c)d",
options: ["last"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "for(a;b\n;c)d",
output: "for(a;b;\nc)d",
options: ["last"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "foo()\n;",
output: "foo();\n",
options: ["last"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "foo;\nbar",
output: "foo\n;bar",
options: ["first"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the beginning of the next line"
}
}]
},
{
code: "if(a)foo;\nbar",
output: "if(a)foo\n;bar",
options: ["first"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the beginning of the next line"
}
}]
},
{
code: "var foo;\nbar",
output: "var foo\n;bar",
options: ["first"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the beginning of the next line"
}
}]
},
{
code: "foo\n;\nbar",
output: "foo\n;bar",
options: ["first"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the beginning of the next line"
}
}]
},
{
code: "for(a\n;b;c)d",
output: "for(a;\nb;c)d",
options: ["first"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "for(a;b\n;c)d",
output: "for(a;b;\nc)d",
options: ["first"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "foo\n;/**/bar",
output: null,
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "foo\n/**/;bar",
output: null,
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "foo;\n/**/bar",
output: null,
options: ["first"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the beginning of the next line"
}
}]
},
{
code: "foo/**/;\nbar",
output: null,
options: ["first"],
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the beginning of the next line"
}
}]
},
// Class fields
{
code: "class C { foo\n;bar }",
output: "class C { foo;\nbar }",
options: ["last"],
parserOptions: { ecmaVersion: 2022 },
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "class C { foo;\nbar }",
output: "class C { foo\n;bar }",
options: ["first"],
parserOptions: { ecmaVersion: 2022 },
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the beginning of the next line"
}
}]
},
// Class static blocks
{
code: "class C { static { foo\n; } }",
output: "class C { static { foo;\n} }",
options: ["last"],
parserOptions: { ecmaVersion: 2022 },
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "class C { static { foo\n ;bar } }",
output: "class C { static { foo;\nbar } }",
options: ["last"],
parserOptions: { ecmaVersion: 2022 },
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "class C { static { foo;\nbar\n ; } }",
output: "class C { static { foo;\nbar;\n} }",
options: ["last"],
parserOptions: { ecmaVersion: 2022 },
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the end of the previous line"
}
}]
},
{
code: "class C { static { foo;\nbar } }",
output: "class C { static { foo\n;bar } }",
options: ["first"],
parserOptions: { ecmaVersion: 2022 },
errors: [{
messageId: "expectedSemiColon",
data: {
pos: "the beginning of the next line"
}
}]
}
]
});