From 45500acd3e5015c738bd93a3676e9625634e00f3 Mon Sep 17 00:00:00 2001 From: christophe-g Date: Fri, 24 May 2024 12:03:11 +0200 Subject: [PATCH 1/5] chore: add @playwright/test This is to allow run playwright webkit on linux Mint --- package-lock.json | 69 +++++++++++++++++++++++++++++++++++++++++++++-- package.json | 1 + 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3670a13..cc92e87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@lit-labs/testing": "^0.2.1", "@open-wc/testing": "^3.1.7", "@open-wc/testing-helpers": "^1.7.1", + "@playwright/test": "^1.45.0-alpha-2024-05-24", "@rollup/plugin-node-resolve": "^7.1.3", "@rollup/plugin-typescript": "^6.0.0", "@types/mocha": "^10.0.1", @@ -569,6 +570,48 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/@playwright/test": { + "version": "1.45.0-alpha-2024-05-24", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.0-alpha-2024-05-24.tgz", + "integrity": "sha512-LD9HjyrlPhp4FEE4sRfEk/4/wZc8TKKjxIaUcDQswsg7ukb69fn+VI4GJxl1CFoTh5j39f0D/xjqsrUbCsg0WA==", + "dependencies": { + "playwright": "1.45.0-alpha-2024-05-24" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@playwright/test/node_modules/playwright": { + "version": "1.45.0-alpha-2024-05-24", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0-alpha-2024-05-24.tgz", + "integrity": "sha512-NZFbnl5w0dQoYjAzJXS5YTL7HC25xmPnMWLGi6jUKv/AZUyuFOi6YNdxL392bCMAQrDnubzI5klJrIQa/6Zn1w==", + "dependencies": { + "playwright-core": "1.45.0-alpha-2024-05-24" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/@playwright/test/node_modules/playwright-core": { + "version": "1.45.0-alpha-2024-05-24", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0-alpha-2024-05-24.tgz", + "integrity": "sha512-E2BAfn9BOvhBTl9SH5f2aiHHx5/b/PZo6WpqIwvOMwPZheUISb+9T86V33mQrTOPYBzQmjmGu5GfhJFZICoGjw==", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@rollup/plugin-node-resolve": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", @@ -3414,7 +3457,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -8381,6 +8423,30 @@ } } }, + "@playwright/test": { + "version": "1.45.0-alpha-2024-05-24", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.0-alpha-2024-05-24.tgz", + "integrity": "sha512-LD9HjyrlPhp4FEE4sRfEk/4/wZc8TKKjxIaUcDQswsg7ukb69fn+VI4GJxl1CFoTh5j39f0D/xjqsrUbCsg0WA==", + "requires": { + "playwright": "1.45.0-alpha-2024-05-24" + }, + "dependencies": { + "playwright": { + "version": "1.45.0-alpha-2024-05-24", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0-alpha-2024-05-24.tgz", + "integrity": "sha512-NZFbnl5w0dQoYjAzJXS5YTL7HC25xmPnMWLGi6jUKv/AZUyuFOi6YNdxL392bCMAQrDnubzI5klJrIQa/6Zn1w==", + "requires": { + "fsevents": "2.3.2", + "playwright-core": "1.45.0-alpha-2024-05-24" + } + }, + "playwright-core": { + "version": "1.45.0-alpha-2024-05-24", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0-alpha-2024-05-24.tgz", + "integrity": "sha512-E2BAfn9BOvhBTl9SH5f2aiHHx5/b/PZo6WpqIwvOMwPZheUISb+9T86V33mQrTOPYBzQmjmGu5GfhJFZICoGjw==" + } + } + }, "@rollup/plugin-node-resolve": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", @@ -10654,7 +10720,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { diff --git a/package.json b/package.json index f4028ef..6880ea9 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "devDependencies": { "@lit-labs/testing": "^0.2.1", "@open-wc/testing": "^3.1.7", + "@playwright/test": "^1.45.0-alpha-2024-05-24", "@open-wc/testing-helpers": "^1.7.1", "@rollup/plugin-node-resolve": "^7.1.3", "@rollup/plugin-typescript": "^6.0.0", From 112f17a452cc731970640a73a2be8f81e13805ed Mon Sep 17 00:00:00 2001 From: christophe-g Date: Fri, 24 May 2024 12:26:02 +0200 Subject: [PATCH 2/5] chore: add @material/web This is to test scenario like https://github.com/material-components/material-web/discussions/5626#discussioncomment-9540173 --- package-lock.json | 125 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 3 +- 2 files changed, 120 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index cc92e87..8929030 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "devDependencies": { "@lit-labs/testing": "^0.2.1", + "@material/web": "^1.5.0", "@open-wc/testing": "^3.1.7", "@open-wc/testing-helpers": "^1.7.1", "@playwright/test": "^1.45.0-alpha-2024-05-24", @@ -327,9 +328,9 @@ } }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.0.tgz", - "integrity": "sha512-92uQ5ARf7UXYrzaFcAX3T2rTvaS9Z1//ukV+DqjACM4c8s0ZBQd7ayJU5Dh2AFLD/Ayuyz4uMmxQec8q3U4Ong==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", + "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==", "dev": true }, "node_modules/@lit-labs/ssr/node_modules/@types/node": { @@ -409,6 +410,56 @@ "@lit-labs/ssr-dom-shim": "^1.0.0" } }, + "node_modules/@material/web": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@material/web/-/web-1.5.0.tgz", + "integrity": "sha512-aM2TVCU8Ozh3QS5cckRalmWkNCKK3Y6uhB3skIozP6jIqYX1PDhme/URrHGcWk44k2qqmR7R+X8GEBAu8N/NCQ==", + "dev": true, + "dependencies": { + "lit": "^2.7.4 || ^3.0.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@material/web/node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "node_modules/@material/web/node_modules/lit": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.3.tgz", + "integrity": "sha512-l4slfspEsnCcHVRTvaP7YnkTZEZggNFywLEIhQaGhYDczG+tu/vlgm/KaWIEjIp+ZyV20r2JnZctMb8LeLCG7Q==", + "dev": true, + "dependencies": { + "@lit/reactive-element": "^2.0.4", + "lit-element": "^4.0.4", + "lit-html": "^3.1.2" + } + }, + "node_modules/@material/web/node_modules/lit-element": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.5.tgz", + "integrity": "sha512-iTWskWZEtn9SyEf4aBG6rKT8GABZMrTWop1+jopsEOgEcugcXJGKuX5bEbkq9qfzY+XB4MAgCaSPwnNpdsNQ3Q==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.1.2" + } + }, + "node_modules/@material/web/node_modules/lit-html": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.3.tgz", + "integrity": "sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/@mdn/browser-compat-data": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz", @@ -574,6 +625,7 @@ "version": "1.45.0-alpha-2024-05-24", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.0-alpha-2024-05-24.tgz", "integrity": "sha512-LD9HjyrlPhp4FEE4sRfEk/4/wZc8TKKjxIaUcDQswsg7ukb69fn+VI4GJxl1CFoTh5j39f0D/xjqsrUbCsg0WA==", + "dev": true, "dependencies": { "playwright": "1.45.0-alpha-2024-05-24" }, @@ -588,6 +640,7 @@ "version": "1.45.0-alpha-2024-05-24", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0-alpha-2024-05-24.tgz", "integrity": "sha512-NZFbnl5w0dQoYjAzJXS5YTL7HC25xmPnMWLGi6jUKv/AZUyuFOi6YNdxL392bCMAQrDnubzI5klJrIQa/6Zn1w==", + "dev": true, "dependencies": { "playwright-core": "1.45.0-alpha-2024-05-24" }, @@ -605,6 +658,7 @@ "version": "1.45.0-alpha-2024-05-24", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0-alpha-2024-05-24.tgz", "integrity": "sha512-E2BAfn9BOvhBTl9SH5f2aiHHx5/b/PZo6WpqIwvOMwPZheUISb+9T86V33mQrTOPYBzQmjmGu5GfhJFZICoGjw==", + "dev": true, "bin": { "playwright-core": "cli.js" }, @@ -3457,6 +3511,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -8241,9 +8296,9 @@ } }, "@lit-labs/ssr-dom-shim": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.0.tgz", - "integrity": "sha512-92uQ5ARf7UXYrzaFcAX3T2rTvaS9Z1//ukV+DqjACM4c8s0ZBQd7ayJU5Dh2AFLD/Ayuyz4uMmxQec8q3U4Ong==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", + "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==", "dev": true }, "@lit-labs/testing": { @@ -8268,6 +8323,58 @@ "@lit-labs/ssr-dom-shim": "^1.0.0" } }, + "@material/web": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@material/web/-/web-1.5.0.tgz", + "integrity": "sha512-aM2TVCU8Ozh3QS5cckRalmWkNCKK3Y6uhB3skIozP6jIqYX1PDhme/URrHGcWk44k2qqmR7R+X8GEBAu8N/NCQ==", + "dev": true, + "requires": { + "lit": "^2.7.4 || ^3.0.0", + "tslib": "^2.4.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "lit": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.3.tgz", + "integrity": "sha512-l4slfspEsnCcHVRTvaP7YnkTZEZggNFywLEIhQaGhYDczG+tu/vlgm/KaWIEjIp+ZyV20r2JnZctMb8LeLCG7Q==", + "dev": true, + "requires": { + "@lit/reactive-element": "^2.0.4", + "lit-element": "^4.0.4", + "lit-html": "^3.1.2" + } + }, + "lit-element": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.5.tgz", + "integrity": "sha512-iTWskWZEtn9SyEf4aBG6rKT8GABZMrTWop1+jopsEOgEcugcXJGKuX5bEbkq9qfzY+XB4MAgCaSPwnNpdsNQ3Q==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.1.2" + } + }, + "lit-html": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.3.tgz", + "integrity": "sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==", + "dev": true, + "requires": { + "@types/trusted-types": "^2.0.2" + } + } + } + }, "@mdn/browser-compat-data": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz", @@ -8427,6 +8534,7 @@ "version": "1.45.0-alpha-2024-05-24", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.0-alpha-2024-05-24.tgz", "integrity": "sha512-LD9HjyrlPhp4FEE4sRfEk/4/wZc8TKKjxIaUcDQswsg7ukb69fn+VI4GJxl1CFoTh5j39f0D/xjqsrUbCsg0WA==", + "dev": true, "requires": { "playwright": "1.45.0-alpha-2024-05-24" }, @@ -8435,6 +8543,7 @@ "version": "1.45.0-alpha-2024-05-24", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0-alpha-2024-05-24.tgz", "integrity": "sha512-NZFbnl5w0dQoYjAzJXS5YTL7HC25xmPnMWLGi6jUKv/AZUyuFOi6YNdxL392bCMAQrDnubzI5klJrIQa/6Zn1w==", + "dev": true, "requires": { "fsevents": "2.3.2", "playwright-core": "1.45.0-alpha-2024-05-24" @@ -8443,7 +8552,8 @@ "playwright-core": { "version": "1.45.0-alpha-2024-05-24", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0-alpha-2024-05-24.tgz", - "integrity": "sha512-E2BAfn9BOvhBTl9SH5f2aiHHx5/b/PZo6WpqIwvOMwPZheUISb+9T86V33mQrTOPYBzQmjmGu5GfhJFZICoGjw==" + "integrity": "sha512-E2BAfn9BOvhBTl9SH5f2aiHHx5/b/PZo6WpqIwvOMwPZheUISb+9T86V33mQrTOPYBzQmjmGu5GfhJFZICoGjw==", + "dev": true } } }, @@ -10720,6 +10830,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, "function-bind": { diff --git a/package.json b/package.json index 6880ea9..cf79b7f 100644 --- a/package.json +++ b/package.json @@ -45,9 +45,10 @@ "homepage": "https://github.com/calebdwilliams/element-internals-polyfill#readme", "devDependencies": { "@lit-labs/testing": "^0.2.1", + "@material/web": "^1.5.0", "@open-wc/testing": "^3.1.7", - "@playwright/test": "^1.45.0-alpha-2024-05-24", "@open-wc/testing-helpers": "^1.7.1", + "@playwright/test": "^1.45.0-alpha-2024-05-24", "@rollup/plugin-node-resolve": "^7.1.3", "@rollup/plugin-typescript": "^6.0.0", "@types/mocha": "^10.0.1", From 98d46001ec379f11921bd5878ab12107d9ad13d2 Mon Sep 17 00:00:00 2001 From: christophe-g Date: Fri, 24 May 2024 12:27:09 +0200 Subject: [PATCH 3/5] test: add regression test for md-radio --- test/FormElements.test.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/test/FormElements.test.ts b/test/FormElements.test.ts index cb388b9..c3c07f9 100644 --- a/test/FormElements.test.ts +++ b/test/FormElements.test.ts @@ -1,4 +1,6 @@ import { expect, fixture, html } from '@open-wc/testing'; +import '@material/web/radio/radio.js' +import { MdRadio } from '@material/web/radio/radio.js'; import '../dist/index.js'; class TestInput extends HTMLElement { @@ -21,28 +23,32 @@ async function createForm(): Promise { + `); } it('must contains the custom elements associated to the current form, in the correct order', async () => { const form = await createForm(); - expect(form.elements).to.have.length(5); + expect(form.elements).to.have.length(6); expect(form.elements[0]).to.be.an.instanceof(HTMLInputElement); expect(form.elements[1]).to.be.an.instanceof(TestInput); expect(form.elements[2]).to.be.an.instanceof(TestInput); expect(form.elements[3]).to.be.an.instanceof(TestInput); - expect(form.elements[4]).to.be.an.instanceof(HTMLButtonElement); + expect(form.elements[4]).to.be.an.instanceof(MdRadio); + expect(form.elements[5]).to.be.an.instanceof(HTMLButtonElement); expect(form.elements[0].id).to.equal('foo'); expect(form.elements[1].id).to.equal('ti1'); expect(form.elements[2].id).to.equal('ti2'); expect(form.elements[3].id).to.equal('ti3'); + expect(form.elements[4].id).to.equal('r1'); expect(form.elements.namedItem('foo')).to.be.an.instanceof(HTMLInputElement); expect(form.elements.namedItem('first')).to.be.an.instanceof(TestInput); expect(form.elements.namedItem('avoid-me')).to.be.null; expect(form.elements.namedItem('second')).to.be.an.instanceof(TestInput); expect(form.elements.namedItem('third')).to.be.an.instanceof(TestInput); + expect(form.elements.namedItem('radio')).to.be.an.instanceof(MdRadio); }); From 1261b4e7a9350f45832e26d08d4b84552c8bc24b Mon Sep 17 00:00:00 2001 From: christophe-g Date: Sat, 2 Mar 2024 15:55:46 +0100 Subject: [PATCH 4/5] fix: prevent false positive isValid when some `valid` keys are undefined --- src/ValidityState.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ValidityState.ts b/src/ValidityState.ts index d9683b1..75cab1a 100644 --- a/src/ValidityState.ts +++ b/src/ValidityState.ts @@ -62,7 +62,7 @@ export const reconcileValidity = (validityObject: ValidityState, newState: Parti export const isValid = (validityState: Partial): boolean => { let valid = true; for (let key in validityState) { - if (key !== 'valid' && validityState[key] !== false) { + if (key !== 'valid' && (validityState[key] !== false && validityState[key] !== undefined)) { valid = false; } } From 18145e152e0749aca9d684ff73839e5cb2e459cc Mon Sep 17 00:00:00 2001 From: christophe-g Date: Fri, 24 May 2024 19:55:23 +0200 Subject: [PATCH 5/5] fix: simpler logic --- src/ValidityState.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ValidityState.ts b/src/ValidityState.ts index 75cab1a..ebcb144 100644 --- a/src/ValidityState.ts +++ b/src/ValidityState.ts @@ -62,7 +62,7 @@ export const reconcileValidity = (validityObject: ValidityState, newState: Parti export const isValid = (validityState: Partial): boolean => { let valid = true; for (let key in validityState) { - if (key !== 'valid' && (validityState[key] !== false && validityState[key] !== undefined)) { + if (key !== 'valid' && (validityState[key] === true)) { valid = false; } }