/
playground.spec.ts
65 lines (53 loc) · 2.16 KB
/
playground.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import AxeBuilder from '@axe-core/playwright';
import type { Page } from '@playwright/test';
import { expect, test } from '@playwright/test';
test.describe('Playground', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/play');
});
test('Accessibility', async ({ page }) => {
await new AxeBuilder({ page }).analyze();
});
test('Usage', async ({ page }) => {
// 1. Type some valid code in the playground
await writeInEditor(page, 'let value: string[];');
// 2. Enable a lint rule
await page.getByRole('tab', { name: 'eslintrc' }).click();
await page.getByRole('button', { name: 'Visual Editor' }).click();
await page
.getByLabel(
'@typescript-eslint/array-type Require consistently using either `T[]` or `Array<T>` for arrays',
)
.check();
await page.getByRole('button', { name: 'Close' }).click();
// 3. Make sure it still says "All is ok!"
await expect(page.getByText('All is ok!')).toBeVisible();
// 4. Change the code to violate the lint rule
await page.getByRole('tab', { name: 'code' }).click();
await writeInEditor(page, 'let value: Array<string>;');
// 5. Make sure it now says the complaint
await expect(
page.getByText(
`Array type using 'Array<string>' is forbidden. Use 'string[]' instead. 1:12 - 1:25`,
),
).toBeVisible();
// 6. Press the 'fix' button to autofix that complaint
await page.getByRole('button', { name: 'fix' }).click();
// 7. Make sure the code is updated, and it says "All is ok!"
await expect(page.getByText('let value: string[];')).toBeVisible();
await expect(page.getByText('All is ok!')).toBeVisible();
});
});
async function writeInEditor(page: Page, text: string): Promise<void> {
const monacoEditor = page.locator('.monaco-editor').nth(0);
await monacoEditor.click();
// Select all existing text and delete it first...
await page.keyboard.down('Control');
await page.keyboard.down('A');
await page.keyboard.up('Control');
await page.keyboard.up('A');
await page.keyboard.down('Delete');
await page.keyboard.up('Delete');
// ...and then type in the text
await page.keyboard.type(text);
}