mirror of https://github.com/01-edu/public.git
4 changed files with 142 additions and 19 deletions
@ -0,0 +1,123 @@ |
|||||||
|
export const tests = [] |
||||||
|
|
||||||
|
export const setup = async ({ page }) => { |
||||||
|
return { |
||||||
|
getCirclesPos: async () => |
||||||
|
await page.$$eval('.circle', (nodes) => { |
||||||
|
const circleRadius = 25 |
||||||
|
const formatPos = (pos) => Number(pos.replace('px', '')) + circleRadius |
||||||
|
return nodes.map((node) => [ |
||||||
|
formatPos(node.style.left), |
||||||
|
formatPos(node.style.top), |
||||||
|
]) |
||||||
|
}), |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
tests.push(async ({ page, viewport, eq, getCirclesPos }) => { |
||||||
|
// check that a circle is created on click at the mouse position
|
||||||
|
const { width, height } = await page.evaluate(() => ({ |
||||||
|
width: document.documentElement.clientWidth, |
||||||
|
height: document.documentElement.clientHeight, |
||||||
|
})) |
||||||
|
|
||||||
|
const clicks = [...Array(10).keys()].map((e) => [ |
||||||
|
random(width), |
||||||
|
random(height), |
||||||
|
]) |
||||||
|
|
||||||
|
for (const [i, click] of clicks.entries()) { |
||||||
|
const [posX, posY] = click |
||||||
|
await page.mouse.click(posX, posY) |
||||||
|
const currentCircle = (await getCirclesPos())[i] |
||||||
|
eq(currentCircle, click) |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
tests.push(async ({ page, eq, getCirclesPos }) => { |
||||||
|
// check that the last created circle moves along the mouse
|
||||||
|
let move = 0 |
||||||
|
while (move < 100) { |
||||||
|
move += 1 |
||||||
|
const x = move |
||||||
|
const y = move * 2 |
||||||
|
await page.mouse.move(x, y) |
||||||
|
const circles = await getCirclesPos() |
||||||
|
const currentCirclePos = circles[circles.length - 1] |
||||||
|
eq(currentCirclePos, [x, y]) |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
tests.push(async ({ page, eq, getCirclesPos }) => { |
||||||
|
// check that a circle is trapped and purple when inside the box
|
||||||
|
const box = await page.$eval('.box', (box) => ({ |
||||||
|
top: box.getBoundingClientRect().top, |
||||||
|
right: box.getBoundingClientRect().right, |
||||||
|
left: box.getBoundingClientRect().left, |
||||||
|
bottom: box.getBoundingClientRect().bottom, |
||||||
|
})) |
||||||
|
|
||||||
|
await page.mouse.click(200, 200) |
||||||
|
|
||||||
|
let move = 200 |
||||||
|
let hasEntered = false |
||||||
|
|
||||||
|
while (move < 500) { |
||||||
|
const x = move + 50 |
||||||
|
const y = move |
||||||
|
await page.mouse.move(x, y) |
||||||
|
|
||||||
|
const circles = await getCirclesPos() |
||||||
|
const currentCircle = circles[circles.length - 1] |
||||||
|
|
||||||
|
const circleRadius = 25 |
||||||
|
|
||||||
|
const bg = await page.$$eval( |
||||||
|
'.circle', |
||||||
|
(nodes) => nodes[nodes.length - 1].style.background, |
||||||
|
) |
||||||
|
|
||||||
|
const insideX = x > box.left + circleRadius && x < box.right - circleRadius |
||||||
|
const insideY = y > box.top + circleRadius && y < box.bottom - circleRadius |
||||||
|
const isInside = insideX && insideY |
||||||
|
|
||||||
|
// check that the background is set to the right color
|
||||||
|
if (isInside) { |
||||||
|
hasEntered = true |
||||||
|
eq(bg, 'var(--purple)') |
||||||
|
} else { |
||||||
|
eq(bg, hasEntered ? 'var(--purple)' : 'white') |
||||||
|
} |
||||||
|
|
||||||
|
// check that the mouse is trapped inside the box
|
||||||
|
if (hasEntered) { |
||||||
|
if (insideY) { |
||||||
|
eq(currentCircle[1], y) |
||||||
|
} else { |
||||||
|
const maxY = |
||||||
|
currentCircle[1] === box.top + circleRadius + 1 || |
||||||
|
currentCircle[1] === box.bottom - circleRadius - 1 |
||||||
|
eq(maxY, true) |
||||||
|
} |
||||||
|
if (insideX) { |
||||||
|
eq(currentCircle[0], x) |
||||||
|
} else { |
||||||
|
const maxX = |
||||||
|
currentCircle[0] === box.left + circleRadius + 1 || |
||||||
|
currentCircle[0] === box.right - circleRadius - 1 |
||||||
|
eq(maxX, true) |
||||||
|
} |
||||||
|
} |
||||||
|
move++ |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
const random = (min, max) => { |
||||||
|
if (!max) { |
||||||
|
max = min |
||||||
|
min = 0 |
||||||
|
} |
||||||
|
min = Math.ceil(min) |
||||||
|
max = Math.floor(max) |
||||||
|
return Math.floor(Math.random() * (max - min + 1)) + min |
||||||
|
} |
Loading…
Reference in new issue