Skip to content
This repository has been archived by the owner on Apr 8, 2024. It is now read-only.

Commit

Permalink
fix(core-progress-test): use setContent
Browse files Browse the repository at this point in the history
  • Loading branch information
klizter committed Aug 18, 2023
1 parent 2607594 commit bb7e9f0
Show file tree
Hide file tree
Showing 2 changed files with 165 additions and 103 deletions.
18 changes: 0 additions & 18 deletions packages/core-progress/core-progress.spec.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,5 @@
<script src="core-progress.min.js"></script>
</head>
<body>
<label>
Linear Progress
<span class="my-track">
<core-progress data-testid="linear-progress-bar"></core-progress>
</span>
</label>
<label>
Radial Progress
<span style="display: block; width: 40px">
<core-progress class="my-radial" data-testid="radial-progress-bar" type="radial"></core-progress>
</span>
</label>
<span data-testid="change-event-result"></span>
<script>
document.querySelector("core-progress[data-testid='linear-progress-bar']").addEventListener('change', event => {
document.querySelector("span[data-testid='change-event-result']").textContent = 'triggered'
})
</script>
</body>
</html>
250 changes: 165 additions & 85 deletions packages/core-progress/core-progress.spec.ts
Original file line number Diff line number Diff line change
@@ -1,91 +1,171 @@
import { test, expect } from '@playwright/test';
import { test, expect, Locator } from '@playwright/test';

test('sets up correctly', async ({ page }) => {
await page.goto('./core-progress/core-progress.spec.html')
const lienarProgress = page.getByText('Linear Progress').locator('core-progress')
await expect(lienarProgress).toBeAttached()
await expect(lienarProgress).toHaveAttribute('role', 'img')
await expect(lienarProgress).toHaveAttribute('type', 'linear')
await expect(lienarProgress).toHaveAttribute('aria-label', '0%')
})

test('updates linear progress label correctly', async ({ page }) => {
await page.goto('./core-progress/core-progress.spec.html')
const linearProgress = page.getByText('Linear Progress').locator('core-progress')
await expect(linearProgress).toBeAttached()
await expect(linearProgress).toHaveAttribute('aria-label', '0%')

// Update to 50% and assert
await linearProgress.evaluate(node => node.setAttribute('value', '.5'))
await expect(linearProgress).toHaveAttribute('aria-label', '50%')

// Update to 100% and assert
await linearProgress.evaluate(node => node.setAttribute('value', '1'))
await expect(linearProgress).toHaveAttribute('aria-label', '100%')
})

test('updates radial progress label correctly', async ({ page }) => {
await page.goto('./core-progress/core-progress.spec.html')
const radialProgress = await page.getByText('Radial Progress').locator('core-progress')
await expect(radialProgress).toBeAttached()
await expect(radialProgress).toHaveAttribute('aria-label', '0%')

// Update to 50% and assert
await radialProgress.evaluate(node => node.setAttribute('value', '.5'))
await expect(radialProgress).toHaveAttribute('aria-label', '50%')

// Update to 100% and assert
await radialProgress.evaluate(node => node.setAttribute('value', '1'))
await expect(radialProgress).toHaveAttribute('aria-label', '100%')
})
test.describe('core-progress', () => {
let coreProgress: Locator

test('updates label from indeterminate value', async ({ page }) => {
await page.goto('./core-progress/core-progress.spec.html')

const lienarProgress = page.getByText('Linear Progress').locator('core-progress')
await lienarProgress.evaluate(node => node.setAttribute("value", "Loading..."))
await expect(lienarProgress).toHaveAttribute('aria-label', 'Loading...')

const radialProgress = page.getByText('Radial Progress').locator('core-progress')
await radialProgress.evaluate(node => node.setAttribute("value", "Loading..."))
await expect(radialProgress).toHaveAttribute('aria-label', 'Loading...')
})

test('calculates percentage relative to max', async ({ page }) => {
await page.goto('./core-progress/core-progress.spec.html')

const lienarProgress = page.getByText('Linear Progress').locator('core-progress')
test.beforeEach(async ({ page }) => {
await page.goto('./core-progress/core-progress.spec.html')
coreProgress = page.getByTestId('core-progress')
})

await lienarProgress.evaluate(node => node.setAttribute('value', '0.5'))
await expect(lienarProgress).toHaveAttribute('aria-label', '50%')

await lienarProgress.evaluate(node => node.setAttribute('max', '10'))
await expect(lienarProgress).toHaveAttribute('aria-label', '5%')

await lienarProgress.evaluate(node => node.setAttribute('max', '100'))
await expect(lienarProgress).toHaveAttribute('aria-label', '1%')
})

test('does not trigger change event on max', async ({ page }) => {
await page.goto('./core-progress/core-progress.spec.html')
const lienarProgress = page.getByText('Linear Progress').locator('core-progress')
const changedElement = page.getByTestId('change-event-result')
await lienarProgress.evaluate(node => node.setAttribute('max', '10'))
await expect(changedElement).toBeEmpty()
test('sets up correctly', async ({ page }) => {
await page.setContent(`
<label>
Linear Progress
<span class="my-track">
<core-progress data-testid="core-progress"></core-progress>
</span>
</label>
`)
await expect(coreProgress).toBeAttached()
await expect(coreProgress).toHaveAttribute('role', 'img')
await expect(coreProgress).toHaveAttribute('type', 'linear')
await expect(coreProgress).toHaveAttribute('aria-label', '0%')
})

test('updates linear progress label correctly', async ({ page }) => {
await page.setContent(`
<label>
Linear Progress
<span class="my-track">
<core-progress data-testid="core-progress"></core-progress>
</span>
</label>
`)
await expect(coreProgress).toBeAttached()
await expect(coreProgress).toHaveAttribute('aria-label', '0%')

// Update to 50% and assert
await coreProgress.evaluate(node => node.setAttribute('value', '.5'))
await expect(coreProgress).toHaveAttribute('aria-label', '50%')

// Update to 100% and assert
await coreProgress.evaluate(node => node.setAttribute('value', '1'))
await expect(coreProgress).toHaveAttribute('aria-label', '100%')
})

test('updates radial progress label correctly', async ({ page }) => {
await page.setContent(`
<label>
Radial Progress
<span style="display: block; width: 40px">
<core-progress class="my-radial" data-testid="core-progress" type="radial"></core-progress>
</span>
</label>
`)
await expect(coreProgress).toBeAttached()
await expect(coreProgress).toHaveAttribute('aria-label', '0%')

// Update to 50% and assert
await coreProgress.evaluate(node => node.setAttribute('value', '.5'))
await expect(coreProgress).toHaveAttribute('aria-label', '50%')

// Update to 100% and assert
await coreProgress.evaluate(node => node.setAttribute('value', '1'))
await expect(coreProgress).toHaveAttribute('aria-label', '100%')
})

test('updates label from indeterminate value', async ({ page }) => {

await page.setContent(`
<label>
Linear Progress
<span class="my-track">
<core-progress data-testid="core-progress"></core-progress>
</span>
</label>
`)
await coreProgress.evaluate(node => node.setAttribute("value", "Loading..."))
await expect(coreProgress).toHaveAttribute('aria-label', 'Loading...')

await page.setContent(`
<label>
Radial Progress
<span style="display: block; width: 40px">
<core-progress class="my-radial" data-testid="core-progress" type="radial"></core-progress>
</span>
</label>
`)
await coreProgress.evaluate(node => node.setAttribute("value", "Loading..."))
await expect(coreProgress).toHaveAttribute('aria-label', 'Loading...')
})

test('calculates percentage relative to max', async ({ page }) => {

await page.setContent(`
<label>
Linear Progress
<span class="my-track">
<core-progress data-testid="core-progress"></core-progress>
</span>
</label>
`)

await coreProgress.evaluate(node => node.setAttribute('value', '0.5'))
await expect(coreProgress).toHaveAttribute('aria-label', '50%')

await coreProgress.evaluate(node => node.setAttribute('max', '10'))
await expect(coreProgress).toHaveAttribute('aria-label', '5%')

await coreProgress.evaluate(node => node.setAttribute('max', '100'))
await expect(coreProgress).toHaveAttribute('aria-label', '1%')
})

test.describe('change event', () => {
let numChangeEvents
test.beforeEach(async ({ page }) => {
numChangeEvents = 0
page.exposeFunction('captureChangeEvent', () => numChangeEvents += 1)
})

test('does not trigger change event on max', async ({ page }) => {
await page.setContent(`
<label>
Linear Progress
<span class="my-track">
<core-progress id="core-progress" data-testid="core-progress"></core-progress>
</span>
</label>
`)
await page.addScriptTag({ content: `
document.getElementById("core-progress").addEventListener('change', window.captureChangeEvent)
`})
await coreProgress.evaluate(node => node.setAttribute('max', '10'))
expect(numChangeEvents).toBe(0)
})

test('triggers change event on value', async ({ page }) => {
await page.setContent(`
<label>
Linear Progress
<span class="my-track">
<core-progress id="core-progress" data-testid="core-progress"></core-progress>
</span>
</label>
`)
await page.addScriptTag({ content: `
document.getElementById("core-progress").addEventListener('change', window.captureChangeEvent)
`})
await coreProgress.evaluate(node => node.setAttribute('value', '.5'))
expect(numChangeEvents).toBe(1)
})

test('triggers change event on indeterminate value', async ({ page }) => {
await page.setContent(`
<label>
Linear Progress
<span class="my-track">
<core-progress id="core-progress" data-testid="core-progress"></core-progress>
</span>
</label>
`)
await page.addScriptTag({ content: `
document.getElementById("core-progress").addEventListener('change', window.captureChangeEvent)
`})
await coreProgress.evaluate(node => node.setAttribute('value', 'Loading...'))
expect(numChangeEvents).toBe(1)
})
})
})

test('triggers change event on value', async ({ page }) => {
await page.goto('./core-progress/core-progress.spec.html')
const lienarProgress = page.getByText('Linear Progress').locator('core-progress')
const changedElement = page.getByTestId('change-event-result')
await lienarProgress.evaluate(node => node.setAttribute('value', '.5'))
await expect(changedElement).not.toBeEmpty()
})

test('triggers change event on indeterminate value', async ({ page }) => {
await page.goto('./core-progress/core-progress.spec.html')
const lienarProgress = page.getByText('Linear Progress').locator('core-progress')
const changedElement = page.getByTestId('change-event-result')
await lienarProgress.evaluate(node => node.setAttribute('value', 'Loading...'))
await expect(changedElement).not.toBeEmpty()
})

0 comments on commit bb7e9f0

Please sign in to comment.