mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-14 05:14:54 +00:00
263 lines
7.1 KiB
TypeScript
263 lines
7.1 KiB
TypeScript
import { sleep } from '@blocksuite/global/utils';
|
|
import { expect } from '@playwright/test';
|
|
|
|
import {
|
|
addBasicRectShapeElement,
|
|
assertEdgelessTool,
|
|
edgelessCommonSetup as commonSetup,
|
|
setEdgelessTool,
|
|
} from '../utils/actions/edgeless.js';
|
|
import {
|
|
dragBetweenCoords,
|
|
selectAllByKeyboard,
|
|
} from '../utils/actions/index.js';
|
|
import {
|
|
assertEdgelessNonSelectedRect,
|
|
assertEdgelessSelectedRect,
|
|
} from '../utils/asserts.js';
|
|
import { test } from '../utils/playwright.js';
|
|
|
|
test.skip('lasso tool should deselect when dragging in an empty area', async ({
|
|
page,
|
|
}) => {
|
|
await commonSetup(page);
|
|
|
|
const start = { x: 100, y: 100 };
|
|
const end = { x: 200, y: 200 };
|
|
await addBasicRectShapeElement(page, start, end);
|
|
await assertEdgelessSelectedRect(page, [100, 100, 100, 100]);
|
|
|
|
await setEdgelessTool(page, 'lasso');
|
|
await assertEdgelessTool(page, 'lasso');
|
|
|
|
await dragBetweenCoords(page, { x: 10, y: 10 }, { x: 15, y: 15 });
|
|
|
|
await assertEdgelessNonSelectedRect(page);
|
|
});
|
|
|
|
test.skip('freehand lasso basic test', async ({ page }) => {
|
|
await commonSetup(page);
|
|
|
|
await addBasicRectShapeElement(page, { x: 100, y: 100 }, { x: 200, y: 200 });
|
|
await addBasicRectShapeElement(page, { x: 300, y: 300 }, { x: 400, y: 400 });
|
|
|
|
await page.mouse.click(10, 10); // deselect
|
|
|
|
await setEdgelessTool(page, 'lasso');
|
|
await assertEdgelessTool(page, 'lasso');
|
|
|
|
await assertEdgelessNonSelectedRect(page);
|
|
|
|
// simulate a basic lasso selection to select both the rects
|
|
const points: [number, number][] = [
|
|
[500, 100],
|
|
[500, 500],
|
|
[90, 500],
|
|
];
|
|
await page.mouse.move(90, 90);
|
|
await page.mouse.down();
|
|
for (const point of points) await page.mouse.move(...point);
|
|
await page.mouse.up();
|
|
|
|
await assertEdgelessSelectedRect(page, [100, 100, 200, 200]);
|
|
});
|
|
|
|
test.skip('freehand lasso add to selection', async ({ page }) => {
|
|
await commonSetup(page);
|
|
|
|
await addBasicRectShapeElement(page, { x: 100, y: 100 }, { x: 200, y: 200 });
|
|
await addBasicRectShapeElement(page, { x: 300, y: 300 }, { x: 400, y: 400 });
|
|
|
|
await page.mouse.click(10, 10); // deselect
|
|
|
|
await setEdgelessTool(page, 'lasso');
|
|
await assertEdgelessTool(page, 'lasso');
|
|
await assertEdgelessNonSelectedRect(page);
|
|
|
|
// some random selection covering the rectangle
|
|
let points: [number, number][] = [
|
|
[250, 90],
|
|
[250, 300],
|
|
[10, 300],
|
|
];
|
|
await page.mouse.move(90, 90);
|
|
await page.mouse.down();
|
|
for (const point of points) await page.mouse.move(...point);
|
|
await page.mouse.up();
|
|
|
|
await assertEdgelessSelectedRect(page, [100, 100, 100, 100]);
|
|
|
|
points = [
|
|
[400, 250],
|
|
[400, 450],
|
|
[250, 450],
|
|
];
|
|
|
|
await page.keyboard.down('Shift'); // addition selection
|
|
await page.mouse.move(250, 250);
|
|
await page.mouse.down();
|
|
for (const point of points) await page.mouse.move(...point);
|
|
await page.mouse.up();
|
|
|
|
await assertEdgelessSelectedRect(page, [100, 100, 200, 200]);
|
|
});
|
|
|
|
test.skip('freehand lasso subtract from selection', async ({ page }) => {
|
|
await commonSetup(page);
|
|
|
|
await addBasicRectShapeElement(page, { x: 100, y: 100 }, { x: 200, y: 200 });
|
|
await addBasicRectShapeElement(page, { x: 300, y: 300 }, { x: 400, y: 400 });
|
|
await setEdgelessTool(page, 'default');
|
|
|
|
await selectAllByKeyboard(page);
|
|
|
|
await setEdgelessTool(page, 'lasso');
|
|
|
|
const points: [number, number][] = [
|
|
[410, 290],
|
|
[410, 410],
|
|
[290, 410],
|
|
];
|
|
|
|
await page.keyboard.down('Alt');
|
|
|
|
await page.mouse.move(290, 290);
|
|
await page.mouse.down();
|
|
for (const point of points) await page.mouse.move(...point);
|
|
await page.mouse.up();
|
|
|
|
await assertEdgelessSelectedRect(page, [100, 100, 100, 100]); // only the first rectangle should be selected
|
|
});
|
|
|
|
test.skip('polygonal lasso basic test', async ({ page }) => {
|
|
await commonSetup(page);
|
|
await addBasicRectShapeElement(page, { x: 100, y: 100 }, { x: 200, y: 200 });
|
|
await addBasicRectShapeElement(page, { x: 300, y: 300 }, { x: 400, y: 400 });
|
|
await page.mouse.click(10, 10); // deselect
|
|
|
|
await assertEdgelessNonSelectedRect(page);
|
|
|
|
await setEdgelessTool(page, 'lasso');
|
|
await setEdgelessTool(page, 'lasso'); // switch to polygonal lasso
|
|
await sleep(100);
|
|
|
|
const points: [number, number][] = [
|
|
[90, 90],
|
|
[500, 90],
|
|
[500, 500],
|
|
[90, 500],
|
|
[90, 90],
|
|
];
|
|
|
|
for (const point of points) {
|
|
await page.mouse.click(...point);
|
|
}
|
|
|
|
await assertEdgelessSelectedRect(page, [100, 100, 200, 200]);
|
|
});
|
|
|
|
test.skip('polygonal lasso add to selection by holding Shift Key', async ({
|
|
page,
|
|
}) => {
|
|
await commonSetup(page);
|
|
|
|
await addBasicRectShapeElement(page, { x: 100, y: 100 }, { x: 200, y: 200 });
|
|
await addBasicRectShapeElement(page, { x: 300, y: 300 }, { x: 400, y: 400 });
|
|
|
|
await page.mouse.click(10, 10); // deselect
|
|
await assertEdgelessNonSelectedRect(page);
|
|
|
|
await setEdgelessTool(page, 'lasso');
|
|
await setEdgelessTool(page, 'lasso');
|
|
await sleep(100);
|
|
|
|
let points: [number, number][] = [
|
|
[90, 90],
|
|
[150, 90],
|
|
[150, 150],
|
|
[90, 150],
|
|
[90, 90],
|
|
];
|
|
|
|
// select the first rectangle
|
|
for (const point of points) await page.mouse.click(...point);
|
|
|
|
points = [
|
|
[290, 290],
|
|
[350, 290],
|
|
[350, 350],
|
|
[290, 350],
|
|
[290, 290],
|
|
];
|
|
|
|
await page.keyboard.down('Shift'); // add to selection
|
|
// selects the second rectangle
|
|
for (const point of points) await page.mouse.click(...point);
|
|
|
|
// by the end both of the rects should be selected
|
|
await assertEdgelessSelectedRect(page, [100, 100, 200, 200]);
|
|
});
|
|
|
|
test.skip('polygonal lasso subtract from selection by holding Alt', async ({
|
|
page,
|
|
}) => {
|
|
await commonSetup(page);
|
|
|
|
await addBasicRectShapeElement(page, { x: 100, y: 100 }, { x: 200, y: 200 });
|
|
await addBasicRectShapeElement(page, { x: 300, y: 300 }, { x: 400, y: 400 });
|
|
|
|
await selectAllByKeyboard(page);
|
|
|
|
const points: [number, number][] = [
|
|
[290, 290],
|
|
[350, 290],
|
|
[350, 350],
|
|
[290, 350],
|
|
[290, 290],
|
|
];
|
|
|
|
// switch to polygonal lasso tool
|
|
await setEdgelessTool(page, 'lasso');
|
|
await setEdgelessTool(page, 'lasso');
|
|
await sleep(100);
|
|
|
|
await page.keyboard.down('Alt'); // subtract from selection
|
|
for (const point of points) await page.mouse.click(...point);
|
|
|
|
// By the end the second rectangle must be deselected leaving the first rect selection
|
|
await assertEdgelessSelectedRect(page, [100, 100, 100, 100]);
|
|
});
|
|
|
|
test.skip('polygonal lasso should complete selection when clicking the last point', async ({
|
|
page,
|
|
}) => {
|
|
await commonSetup(page);
|
|
|
|
// switch to polygonal lasso
|
|
await setEdgelessTool(page, 'lasso');
|
|
await setEdgelessTool(page, 'lasso');
|
|
await sleep(100);
|
|
|
|
const lassoPoints: [number, number][] = [
|
|
[100, 100],
|
|
[200, 200],
|
|
[250, 150],
|
|
[100, 100],
|
|
];
|
|
|
|
for (const point of lassoPoints) await page.mouse.click(...point);
|
|
|
|
const isSelecting = await page.evaluate(() => {
|
|
const edgeless = document.querySelector('affine-edgeless-root');
|
|
if (!edgeless) throw new Error('Missing edgless root block');
|
|
|
|
const curController = edgeless.gfx.tool.currentTool$.peek();
|
|
if (curController?.toolName !== 'lasso')
|
|
throw new Error('expected lasso tool controller');
|
|
|
|
return (curController as any)['_isSelecting'];
|
|
});
|
|
|
|
expect(isSelecting).toBe(false);
|
|
});
|