icon.e2e.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { expect } from "@playwright/test";
  2. import { test } from "../../../utils/test/playwright/index";
  3. test.describe('icon: basic', () => {
  4. test('should not have visual regressions', async ({ page }) => {
  5. await page.goto(`/`);
  6. // Wait for all SVGs to be lazily loaded before taking screenshots
  7. await page.waitForLoadState('networkidle');
  8. await expect(page).toHaveScreenshot(`icon-diff.png`, { fullPage: true });
  9. });
  10. test('some icons should flip when rtl', async ({ page }) => {
  11. await page.goto(`/`);
  12. const autoflip = page.locator('.auto-flip-chevrons [name=chevron-forward] .icon-inner');
  13. const unflip = page.locator('.un-flip-chevrons [name=chevron-forward] .icon-inner');
  14. await expect(autoflip).not.toHaveCSS('transform', /matrix\(-1/);
  15. await expect(unflip).not.toHaveCSS('transform', /matrix\(-1/);
  16. await page.evaluate(() => {
  17. document.dir = 'rtl';
  18. });
  19. await expect(autoflip).toHaveCSS('transform', /matrix\(-1/);
  20. await expect(unflip).not.toHaveCSS('transform', /matrix\(-1/);
  21. // Wait for all SVGs to be lazily loaded before taking screenshots
  22. await page.waitForLoadState('networkidle');
  23. const rtlTests = page.locator('#rtl-tests');
  24. await expect(rtlTests).toHaveScreenshot(`icon-rtl-diff.png`);
  25. });
  26. test('arrows should flip if dir changes on the element', async ({ page }) => {
  27. await page.goto(`/`);
  28. const autoflip = page.locator('.auto-flip-chevrons [name=chevron-forward] .icon-inner');
  29. const unflip = page.locator('.un-flip-chevrons [name=chevron-forward] .icon-inner');
  30. await expect(autoflip).not.toHaveCSS('transform', /matrix\(-1/);
  31. await expect(unflip).not.toHaveCSS('transform', /matrix\(-1/);
  32. const autoflipEl = await page.$('.auto-flip-chevrons [name=chevron-forward]');
  33. const unflipEl = await page.$('.un-flip-chevrons [name=chevron-forward]');
  34. await autoflipEl.evaluate((node) => node.setAttribute('dir', 'rtl'));
  35. await unflipEl.evaluate((node) => node.setAttribute('dir', 'rtl'));
  36. await expect(autoflip).toHaveCSS('transform', /matrix\(-1/);
  37. await expect(unflip).not.toHaveCSS('transform', /matrix\(-1/);
  38. });
  39. test('icon should reassess flipping when name changes', async ({ page }) => {
  40. await page.goto(`/`);
  41. await page.evaluate(() => {
  42. document.dir = 'rtl';
  43. });
  44. const iconLoc = page.locator('.auto-flip-chevrons ion-icon:nth-child(2)');
  45. await expect(iconLoc).toHaveAttribute('name', 'chevron-forward');
  46. await expect(iconLoc).toHaveClass(/flip-rtl/);
  47. const iconEl = await page.$('.auto-flip-chevrons ion-icon:nth-child(2)');
  48. await iconEl.evaluate((node) => node.setAttribute('name', 'brush'));
  49. await expect(iconLoc).toHaveAttribute('name', 'brush');
  50. await expect(iconLoc).not.toHaveClass(/flip-rtl/);
  51. });
  52. });