enso/app/gui/integration-test/project-view/selectingNodes.spec.ts
Ilya Bogdanov ce1df4ebcd
Extend output port and remove selection halo (#11715)
Closes #11507

- Output port area extended twice
- Selection halo is removed (but most of the code is still there – I understood we don’t want to remove everything before testing)

https://github.com/user-attachments/assets/4c6d7837-362e-4309-aa9b-5c0679d600e9
2024-12-03 13:54:02 +00:00

89 lines
3.5 KiB
TypeScript

import { test } from '@playwright/test'
import assert from 'assert'
import * as actions from './actions'
import { expect } from './customExpect'
import * as locate from './locate'
test('Selecting nodes by click', async ({ page }) => {
await actions.goToGraph(page)
const node1 = locate.graphNodeByBinding(page, 'five')
const node2 = locate.graphNodeByBinding(page, 'final')
const selectionMenu = page.locator('.SelectionMenu')
await expect(node1).not.toBeSelected()
await expect(node2).not.toBeSelected()
await expect(selectionMenu).toBeHidden()
await locate.graphNodeIcon(node1).click()
await expect(node1).toBeSelected()
await expect(node2).not.toBeSelected()
await expect(selectionMenu).toBeHidden()
// Check that clicking an unselected node deselects replaces the previous selection.
await locate.graphNodeIcon(node2).click()
await expect(node1).not.toBeSelected()
await expect(node2).toBeSelected()
await expect(selectionMenu).toBeHidden()
await page.waitForTimeout(300) // Avoid double clicks
await locate.graphNodeIcon(node1).click({ modifiers: ['Shift'] })
await expect(node1).toBeSelected()
await expect(node2).toBeSelected()
await expect(selectionMenu).toBeVisible()
// Check that when two nodes are selected, clicking a selected node replaces the previous selection.
await locate.graphNodeIcon(node2).click()
await expect(node1).not.toBeSelected()
await expect(node2).toBeSelected()
await expect(selectionMenu).toBeHidden()
// Check that clicking the background deselects all nodes.
await locate.graphEditor(page).click({ position: { x: 600, y: 200 } })
await expect(node1).not.toBeSelected()
await expect(node2).not.toBeSelected()
await expect(selectionMenu).toBeHidden()
})
test('Selecting nodes by area drag', async ({ page }) => {
await actions.goToGraph(page)
const node1 = locate.graphNodeByBinding(page, 'five')
const node2 = locate.graphNodeByBinding(page, 'ten')
await expect(node1).not.toBeSelected()
await expect(node2).not.toBeSelected()
const node1BBox = await node1.boundingBox()
const node2BBox = await node2.boundingBox()
assert(node1BBox)
assert(node2BBox)
await page.mouse.move(node1BBox.x - 50, node1BBox.y - 50)
await page.mouse.down()
await page.mouse.move(node1BBox.x - 40, node1BBox.y - 40)
await page.mouse.move(node2BBox.x + node2BBox.width, node2BBox.y + node2BBox.height)
await expect(node1).toBeSelected()
await expect(node2).toBeSelected()
await page.mouse.up()
await expect(node1).toBeSelected()
await expect(node2).toBeSelected()
})
test('Moving selected nodes', async ({ page }) => {
await actions.goToGraph(page)
const movedNode = locate.graphNodeByBinding(page, 'final')
const notMovedNode = locate.graphNodeByBinding(page, 'sum')
await locate.graphNodeIcon(movedNode).click()
// Selection may affect bounding box: wait until it's actually selected.
await expect(movedNode).toBeSelected()
const initialBBox = await movedNode.boundingBox()
const initialNotMovedBBox = await notMovedNode.boundingBox()
assert(initialBBox)
assert(initialNotMovedBBox)
await page.keyboard.press('ArrowLeft', { delay: 500 })
const bbox = await movedNode.boundingBox()
const notMovedBBox = await notMovedNode.boundingBox()
assert(bbox)
assert(notMovedBBox)
await expect(bbox.x).not.toBeCloseTo(initialBBox.x)
await expect(bbox.y).toBeCloseTo(initialBBox.y)
await expect(notMovedBBox.x).toBeCloseTo(initialNotMovedBBox.x)
await expect(notMovedBBox.y).toBeCloseTo(initialNotMovedBBox.y)
})