/* eslint-disable notice/notice */ import { test, expect } from '@playwright/test'; import fs from 'fs'; test.beforeEach(async ({ page }) => { await page.goto('https://demo.playwright.dev/svgomg'); }); test('verify menu items', async ({ page }) => { await expect(page.locator('.menu li')).toHaveText([ 'Open SVG', 'Paste markup', 'Demo', 'Contribute' ]); }); test.describe('demo tests', () => { test.beforeEach(async ({ page }) => { await page.locator('.menu-item >> text=Demo').click(); }); test('verify default global settings', async ({ page }) => { const menuItems = page.locator('.settings-scroller .global .setting-item-toggle'); await expect(menuItems).toHaveText([ 'Show original', 'Compare gzipped', 'Prettify markup', 'Multipass', ]); const toggle = page.locator('.setting-item-toggle'); await expect(toggle.locator('text=Show original')).not.toBeChecked(); await expect(toggle.locator('text=Compare gzipped')).toBeChecked(); await expect(toggle.locator('text=Prettify markup')).not.toBeChecked(); await expect(toggle.locator('text=Multipass')).not.toBeChecked(); }); test('verify default features', async ({ page }) => { const enabledOptions = [ 'Clean up attribute whitespace', 'Clean up IDs', 'Collapse useless groups', 'Convert non-eccentric to ', 'Inline styles', ]; const disabledOptions = [ 'Prefer viewBox to width/height', 'Remove raster images', 'Remove script elements', 'Remove style elements', ]; for (const option of enabledOptions) { const locator = page.locator(`.setting-item-toggle >> text=${option}`); await expect(locator).toBeChecked(); } for (const option of disabledOptions) { const locator = page.locator(`.setting-item-toggle >> text=${option}`); await expect(locator).not.toBeChecked(); } }); test('reset settings', async ({ page }) => { const showOriginalSetting = page.locator('.setting-item-toggle >> text=Show original'); await showOriginalSetting.click(); await expect(showOriginalSetting).toBeChecked(); await page.locator('button >> text=Reset all').click(); await expect(showOriginalSetting).not.toBeChecked(); }); test('download result', async ({ page }) => { const downloadButton = page.locator('a[title=Download]'); await expect(downloadButton).toHaveAttribute('href', /blob/); const [download] = await Promise.all([ page.waitForEvent('download'), downloadButton.click() ]); expect(download.suggestedFilename()).toBe('car-lite.svg'); const result = fs.readFileSync(await download.path(), 'utf-8'); expect(result).toContain(' { // Start waiting for the file chooser, then click the button. const [fileChooser] = await Promise.all([ page.waitForEvent('filechooser'), page.click('text=Open SVG'), ]); // Set file to the chooser. await fileChooser.setFiles({ name: 'file.svg', mimeType: 'image/svg+xml', buffer: Buffer.from(``) }); // Verify provided svg was rendered. const markup = await page.frameLocator('.svg-frame').locator('svg').evaluate(svg => svg.outerHTML); expect(markup).toMatch(//); });