// Tests
//------------------------------------------------------------------------------
-// pending https://github.com/eslint/espree/issues/304, the type should be "Keyword"
-const errors = [{ messageId: "redundantUseOfAwait", type: "Identifier" }];
+/**
+ * Creates the list of errors that should be found by this rule
+ * @param {Object} options Options for creating errors
+ * @param {string} options.suggestionOutput The suggested output
+ * @returns {Array} the list of errors
+ */
+function createErrorList({ suggestionOutput: output } = {}) {
+
+ // pending https://github.com/eslint/espree/issues/304, the type should be "Keyword"
+ return [{
+ messageId: "redundantUseOfAwait",
+ type: "Identifier",
+ suggestions: output ? [{
+ messageId: "removeAwait", output
+ }] : []
+ }];
+}
+
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2017 } });
invalid: [
{
code: "\nasync function foo() {\n\treturn await bar();\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn bar();\n}\n" })
+ },
+ {
+ code: "\nasync function foo() {\n\treturn await(bar());\n}\n",
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (bar());\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (a, await bar());\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (a, bar());\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (a, b, await bar());\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (a, b, bar());\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (a && await bar());\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (a && bar());\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (a && b && await bar());\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (a && b && bar());\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (a || await bar());\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (a || bar());\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (a, b, (c, d, await bar()));\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (a, b, (c, d, bar()));\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (a, b, (c && await bar()));\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (a, b, (c && bar()));\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (await baz(), b, await bar());\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (await baz(), b, bar());\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (baz() ? await bar() : b);\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (baz() ? bar() : b);\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (baz() ? a : await bar());\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (baz() ? a : bar());\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (baz() ? (a, await bar()) : b);\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (baz() ? (a, bar()) : b);\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (baz() ? a : (b, await bar()));\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (baz() ? a : (b, bar()));\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (baz() ? (a && await bar()) : b);\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (baz() ? (a && bar()) : b);\n}\n" })
},
{
code: "\nasync function foo() {\n\treturn (baz() ? a : (b && await bar()));\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\n\treturn (baz() ? a : (b && bar()));\n}\n" })
},
{
code: "\nasync () => { return await bar(); }\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync () => { return bar(); }\n" })
},
{
code: "\nasync () => await bar()\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync () => bar()\n" })
},
{
code: "\nasync () => (a, b, await bar())\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync () => (a, b, bar())\n" })
},
{
code: "\nasync () => (a && await bar())\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync () => (a && bar())\n" })
},
{
code: "\nasync () => (baz() ? await bar() : b)\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync () => (baz() ? bar() : b)\n" })
},
{
code: "\nasync () => (baz() ? a : (b, await bar()))\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync () => (baz() ? a : (b, bar()))\n" })
},
{
code: "\nasync () => (baz() ? a : (b && await bar()))\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync () => (baz() ? a : (b && bar()))\n" })
},
{
code: "\nasync function foo() {\nif (a) {\n\t\tif (b) {\n\t\t\treturn await bar();\n\t\t}\n\t}\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync function foo() {\nif (a) {\n\t\tif (b) {\n\t\t\treturn bar();\n\t\t}\n\t}\n}\n" })
},
{
code: "\nasync () => {\nif (a) {\n\t\tif (b) {\n\t\t\treturn await bar();\n\t\t}\n\t}\n}\n",
- errors
+ errors: createErrorList({ suggestionOutput: "\nasync () => {\nif (a) {\n\t\tif (b) {\n\t\t\treturn bar();\n\t\t}\n\t}\n}\n" })
},
{
code: `
}
}
`,
- errors
+ errors: createErrorList({
+ suggestionOutput: `
+ async function foo() {
+ try {}
+ finally {
+ return bar();
+ }
+ }
+ `
+ })
},
{
code: `
}
}
`,
- errors
+ errors: createErrorList({
+ suggestionOutput: `
+ async function foo() {
+ try {}
+ catch (e) {
+ return bar();
+ }
+ }
+ `
+ })
},
{
code: `
}
} catch (e) {}
`,
- errors
+ errors: createErrorList({
+ suggestionOutput: `
+ try {
+ async function foo() {
+ return bar();
+ }
+ } catch (e) {}
+ `
+ })
},
{
code: `
async () => await bar();
} catch (e) {}
`,
- errors
+ errors: createErrorList({
+ suggestionOutput: `
+ try {
+ async () => bar();
+ } catch (e) {}
+ `
+ })
},
{
code: `
}
}
`,
- errors
+ errors: createErrorList({
+ suggestionOutput: `
+ async function foo() {
+ try {}
+ catch (e) {
+ try {}
+ catch (e) {
+ return bar();
+ }
+ }
+ }
+ `
+ })
+ },
+ {
+ code: `
+ async function foo() {
+ return await new Promise(resolve => {
+ resolve(5);
+ });
+ }
+ `,
+ errors: createErrorList({
+ suggestionOutput: `
+ async function foo() {
+ return new Promise(resolve => {
+ resolve(5);
+ });
+ }
+ `
+ })
+ },
+ {
+ code: `
+ async () => {
+ return await (
+ foo()
+ )
+ };
+ `,
+ errors: createErrorList({
+ suggestionOutput: `
+ async () => {
+ return (
+ foo()
+ )
+ };
+ `
+ })
+ },
+ {
+ code: `
+ async function foo() {
+ return await // Test
+ 5;
+ }
+ `,
+ errors: createErrorList()
}
]
});