aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/features/common-button.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'web_src/js/features/common-button.test.ts')
-rw-r--r--web_src/js/features/common-button.test.ts25
1 files changed, 25 insertions, 0 deletions
diff --git a/web_src/js/features/common-button.test.ts b/web_src/js/features/common-button.test.ts
new file mode 100644
index 0000000000..4ae1f74897
--- /dev/null
+++ b/web_src/js/features/common-button.test.ts
@@ -0,0 +1,25 @@
+import {assignElementProperty, type ElementWithAssignableProperties} from './common-button.ts';
+
+test('assignElementProperty', () => {
+ const elForm = document.createElement('form');
+ assignElementProperty(elForm, 'action', '/test-link');
+ expect(elForm.action).contains('/test-link'); // the DOM always returns absolute URL
+ expect(elForm.getAttribute('action')).eq('/test-link');
+ assignElementProperty(elForm, 'text-content', 'dummy');
+ expect(elForm.textContent).toBe('dummy');
+
+ // mock a form with its property "action" overwritten by an input element
+ const elFormWithAction = new class implements ElementWithAssignableProperties {
+ action = document.createElement('input'); // now "form.action" is not string, but an input element
+ _attrs: Record<string, string> = {};
+ setAttribute(name: string, value: string) { this._attrs[name] = value }
+ getAttribute(name: string): string | null { return this._attrs[name] }
+ }();
+ assignElementProperty(elFormWithAction, 'action', '/bar');
+ expect(elFormWithAction.getAttribute('action')).eq('/bar');
+
+ const elInput = document.createElement('input');
+ expect(elInput.readOnly).toBe(false);
+ assignElementProperty(elInput, 'read-only', 'true');
+ expect(elInput.readOnly).toBe(true);
+});