mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-12 12:28:42 +00:00
111 lines
3.1 KiB
TypeScript
111 lines
3.1 KiB
TypeScript
import crypto from 'node:crypto';
|
|
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import process from 'node:process';
|
|
|
|
import { expect, type Page, test as baseTest } from '@playwright/test';
|
|
|
|
import {
|
|
enterPlaygroundRoom,
|
|
initEmptyParagraphState,
|
|
} from './actions/misc.js';
|
|
import { currentEditorIndex, scope } from './multiple-editor.js';
|
|
|
|
const istanbulTempDir = process.env.ISTANBUL_TEMP_DIR
|
|
? path.resolve(process.env.ISTANBUL_TEMP_DIR)
|
|
: path.join(process.cwd(), '.nyc_output');
|
|
|
|
function generateUUID() {
|
|
return crypto.randomUUID();
|
|
}
|
|
|
|
const enableCoverage = !!process.env.CI || !!process.env.COVERAGE;
|
|
export const scoped = (stringsArray: TemplateStringsArray) => {
|
|
return `${scope ?? ''}${stringsArray.join()}`;
|
|
};
|
|
export const test = baseTest.extend<{}>({
|
|
context: async ({ context }, use) => {
|
|
if (enableCoverage) {
|
|
await context.addInitScript(() =>
|
|
window.addEventListener('beforeunload', () =>
|
|
// @ts-expect-error
|
|
window.collectIstanbulCoverage(JSON.stringify(window.__coverage__))
|
|
)
|
|
);
|
|
|
|
await fs.promises.mkdir(istanbulTempDir, { recursive: true });
|
|
await context.exposeFunction(
|
|
'collectIstanbulCoverage',
|
|
(coverageJSON?: string) => {
|
|
if (coverageJSON)
|
|
fs.writeFileSync(
|
|
path.join(
|
|
istanbulTempDir,
|
|
`playwright_coverage_${generateUUID()}.json`
|
|
),
|
|
coverageJSON
|
|
);
|
|
}
|
|
);
|
|
}
|
|
await use(context);
|
|
if (enableCoverage) {
|
|
for (const page of context.pages()) {
|
|
await page.evaluate(() =>
|
|
// @ts-expect-error
|
|
window.collectIstanbulCoverage(JSON.stringify(window.__coverage__))
|
|
);
|
|
}
|
|
}
|
|
},
|
|
});
|
|
if (scope) {
|
|
test.beforeEach(async ({ browser }, testInfo) => {
|
|
if (scope && !testInfo.title.startsWith(scope)) {
|
|
testInfo.fn = () => {
|
|
testInfo.skip();
|
|
};
|
|
testInfo.skip();
|
|
await browser.close();
|
|
}
|
|
});
|
|
|
|
let page: Page;
|
|
|
|
test.beforeAll(async ({ browser }) => {
|
|
page = await browser.newPage();
|
|
});
|
|
|
|
// eslint-disable-next-line no-empty-pattern
|
|
test.afterAll(async ({}, testInfo) => {
|
|
if (!scope || !testInfo.title.startsWith(scope)) {
|
|
return;
|
|
}
|
|
const focusInSecondEditor = await page.evaluate(
|
|
([currentEditorIndex]) => {
|
|
const editor = document.querySelectorAll('affine-editor-container')[
|
|
currentEditorIndex
|
|
];
|
|
const selection = getSelection();
|
|
if (!selection || selection.rangeCount === 0) {
|
|
return true;
|
|
}
|
|
// once the range exists, it must be in the corresponding editor
|
|
return editor.contains(selection.getRangeAt(0).startContainer);
|
|
},
|
|
[currentEditorIndex]
|
|
);
|
|
expect(focusInSecondEditor).toBe(true);
|
|
});
|
|
|
|
test('ensure enable two editor', async ({ page }) => {
|
|
await enterPlaygroundRoom(page);
|
|
await initEmptyParagraphState(page);
|
|
const count = await page.evaluate(() => {
|
|
return document.querySelectorAll('affine-editor-container').length;
|
|
});
|
|
|
|
expect(count).toBe(2);
|
|
});
|
|
}
|