haori 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.ja.md +157 -0
- package/README.md +158 -0
- package/dist/haori.cjs.js +13 -0
- package/dist/haori.cjs.js.map +1 -0
- package/dist/haori.es.js +2929 -0
- package/dist/haori.es.js.map +1 -0
- package/dist/haori.iife.js +13 -0
- package/dist/haori.iife.js.map +1 -0
- package/dist/index.d.ts +824 -0
- package/dist/src/core.d.ts +144 -0
- package/dist/src/core.d.ts.map +1 -0
- package/dist/src/core.js +605 -0
- package/dist/src/core.js.map +1 -0
- package/dist/src/dev.d.ts +35 -0
- package/dist/src/dev.d.ts.map +1 -0
- package/dist/src/dev.js +44 -0
- package/dist/src/dev.js.map +1 -0
- package/dist/src/env.d.ts +25 -0
- package/dist/src/env.d.ts.map +1 -0
- package/dist/src/env.js +64 -0
- package/dist/src/env.js.map +1 -0
- package/dist/src/event.d.ts +144 -0
- package/dist/src/event.d.ts.map +1 -0
- package/dist/src/event.js +221 -0
- package/dist/src/event.js.map +1 -0
- package/dist/src/event_dispatcher.d.ts +50 -0
- package/dist/src/event_dispatcher.d.ts.map +1 -0
- package/dist/src/event_dispatcher.js +99 -0
- package/dist/src/event_dispatcher.js.map +1 -0
- package/dist/src/expression.d.ts +39 -0
- package/dist/src/expression.d.ts.map +1 -0
- package/dist/src/expression.js +148 -0
- package/dist/src/expression.js.map +1 -0
- package/dist/src/form.d.ts +113 -0
- package/dist/src/form.d.ts.map +1 -0
- package/dist/src/form.js +361 -0
- package/dist/src/form.js.map +1 -0
- package/dist/src/fragment.d.ts +427 -0
- package/dist/src/fragment.d.ts.map +1 -0
- package/dist/src/fragment.js +1168 -0
- package/dist/src/fragment.js.map +1 -0
- package/dist/src/haori.d.ts +54 -0
- package/dist/src/haori.d.ts.map +1 -0
- package/dist/src/haori.js +120 -0
- package/dist/src/haori.js.map +1 -0
- package/dist/src/import.d.ts +19 -0
- package/dist/src/import.d.ts.map +1 -0
- package/dist/src/import.js +64 -0
- package/dist/src/import.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/log.d.ts +32 -0
- package/dist/src/log.d.ts.map +1 -0
- package/dist/src/log.js +43 -0
- package/dist/src/log.js.map +1 -0
- package/dist/src/observer.d.ts +17 -0
- package/dist/src/observer.d.ts.map +1 -0
- package/dist/src/observer.js +102 -0
- package/dist/src/observer.js.map +1 -0
- package/dist/src/procedure.d.ts +203 -0
- package/dist/src/procedure.d.ts.map +1 -0
- package/dist/src/procedure.js +1040 -0
- package/dist/src/procedure.js.map +1 -0
- package/dist/src/queue.d.ts +28 -0
- package/dist/src/queue.d.ts.map +1 -0
- package/dist/src/queue.js +150 -0
- package/dist/src/queue.js.map +1 -0
- package/dist/src/url.d.ts +14 -0
- package/dist/src/url.d.ts.map +1 -0
- package/dist/src/url.js +22 -0
- package/dist/src/url.js.map +1 -0
- package/dist/tests/click-attributes.test.d.ts +2 -0
- package/dist/tests/click-attributes.test.d.ts.map +1 -0
- package/dist/tests/click-attributes.test.js +95 -0
- package/dist/tests/click-attributes.test.js.map +1 -0
- package/dist/tests/core.test.d.ts +5 -0
- package/dist/tests/core.test.d.ts.map +1 -0
- package/dist/tests/core.test.js +158 -0
- package/dist/tests/core.test.js.map +1 -0
- package/dist/tests/data-each-browserlike.test.d.ts +2 -0
- package/dist/tests/data-each-browserlike.test.d.ts.map +1 -0
- package/dist/tests/data-each-browserlike.test.js +48 -0
- package/dist/tests/data-each-browserlike.test.js.map +1 -0
- package/dist/tests/data-each-fragment-debug.test.d.ts +2 -0
- package/dist/tests/data-each-fragment-debug.test.d.ts.map +1 -0
- package/dist/tests/data-each-fragment-debug.test.js +119 -0
- package/dist/tests/data-each-fragment-debug.test.js.map +1 -0
- package/dist/tests/data-each-table.test.d.ts +2 -0
- package/dist/tests/data-each-table.test.d.ts.map +1 -0
- package/dist/tests/data-each-table.test.js +63 -0
- package/dist/tests/data-each-table.test.js.map +1 -0
- package/dist/tests/dev.test.d.ts +2 -0
- package/dist/tests/dev.test.d.ts.map +1 -0
- package/dist/tests/dev.test.js +51 -0
- package/dist/tests/dev.test.js.map +1 -0
- package/dist/tests/each_arg.test.d.ts +2 -0
- package/dist/tests/each_arg.test.d.ts.map +1 -0
- package/dist/tests/each_arg.test.js +41 -0
- package/dist/tests/each_arg.test.js.map +1 -0
- package/dist/tests/env.test.d.ts +2 -0
- package/dist/tests/env.test.d.ts.map +1 -0
- package/dist/tests/env.test.js +96 -0
- package/dist/tests/env.test.js.map +1 -0
- package/dist/tests/event.test.d.ts +2 -0
- package/dist/tests/event.test.d.ts.map +1 -0
- package/dist/tests/event.test.js +287 -0
- package/dist/tests/event.test.js.map +1 -0
- package/dist/tests/expression.test.d.ts +2 -0
- package/dist/tests/expression.test.d.ts.map +1 -0
- package/dist/tests/expression.test.js +281 -0
- package/dist/tests/expression.test.js.map +1 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.d.ts +2 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.d.ts.map +1 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.js +133 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.js.map +1 -0
- package/dist/tests/form.test.d.ts +2 -0
- package/dist/tests/form.test.d.ts.map +1 -0
- package/dist/tests/form.test.js +607 -0
- package/dist/tests/form.test.js.map +1 -0
- package/dist/tests/fragment.test.d.ts +2 -0
- package/dist/tests/fragment.test.d.ts.map +1 -0
- package/dist/tests/fragment.test.js +164 -0
- package/dist/tests/fragment.test.js.map +1 -0
- package/dist/tests/import.test.d.ts +2 -0
- package/dist/tests/import.test.d.ts.map +1 -0
- package/dist/tests/import.test.js +148 -0
- package/dist/tests/import.test.js.map +1 -0
- package/dist/tests/log.test.d.ts +2 -0
- package/dist/tests/log.test.d.ts.map +1 -0
- package/dist/tests/log.test.js +58 -0
- package/dist/tests/log.test.js.map +1 -0
- package/dist/tests/procedure-action-operations.test.d.ts +2 -0
- package/dist/tests/procedure-action-operations.test.d.ts.map +1 -0
- package/dist/tests/procedure-action-operations.test.js +148 -0
- package/dist/tests/procedure-action-operations.test.js.map +1 -0
- package/dist/tests/procedure-fetch-options.test.d.ts +2 -0
- package/dist/tests/procedure-fetch-options.test.d.ts.map +1 -0
- package/dist/tests/procedure-fetch-options.test.js +131 -0
- package/dist/tests/procedure-fetch-options.test.js.map +1 -0
- package/dist/tests/procedure.test.d.ts +2 -0
- package/dist/tests/procedure.test.d.ts.map +1 -0
- package/dist/tests/procedure.test.js +136 -0
- package/dist/tests/procedure.test.js.map +1 -0
- package/dist/tests/procedure_events.test.d.ts +7 -0
- package/dist/tests/procedure_events.test.d.ts.map +1 -0
- package/dist/tests/procedure_events.test.js +96 -0
- package/dist/tests/procedure_events.test.js.map +1 -0
- package/dist/tests/reset_each.test.d.ts +2 -0
- package/dist/tests/reset_each.test.d.ts.map +1 -0
- package/dist/tests/reset_each.test.js +215 -0
- package/dist/tests/reset_each.test.js.map +1 -0
- package/dist/tests/row-move.test.d.ts +2 -0
- package/dist/tests/row-move.test.d.ts.map +1 -0
- package/dist/tests/row-move.test.js +197 -0
- package/dist/tests/row-move.test.js.map +1 -0
- package/dist/tests/row-operations.test.d.ts +2 -0
- package/dist/tests/row-operations.test.d.ts.map +1 -0
- package/dist/tests/row-operations.test.js +238 -0
- package/dist/tests/row-operations.test.js.map +1 -0
- package/dist/tests/url.test.d.ts +2 -0
- package/dist/tests/url.test.d.ts.map +1 -0
- package/dist/tests/url.test.js +150 -0
- package/dist/tests/url.test.js.map +1 -0
- package/dist/vite.config.d.ts +3 -0
- package/dist/vite.config.d.ts.map +1 -0
- package/dist/vite.config.js +28 -0
- package/dist/vite.config.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +19 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
/* @vitest-environment jsdom */
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Form機能(getValues, setValues, addErrorMessage)のテスト
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
6
|
+
import Core from '../src/core';
|
|
7
|
+
import Form from '../src/form';
|
|
8
|
+
import Fragment from '../src/fragment';
|
|
9
|
+
describe('Form', () => {
|
|
10
|
+
let container;
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
container = document.createElement('div');
|
|
13
|
+
document.body.appendChild(container);
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
document.body.removeChild(container);
|
|
17
|
+
});
|
|
18
|
+
describe('getValues', () => {
|
|
19
|
+
it('should get simple values', async () => {
|
|
20
|
+
container.innerHTML = `
|
|
21
|
+
<form>
|
|
22
|
+
<input type="text" name="name" value="田中太郎">
|
|
23
|
+
<input type="number" name="age" value="25">
|
|
24
|
+
<input type="email" name="email" value="tanaka@example.com">
|
|
25
|
+
</form>
|
|
26
|
+
`;
|
|
27
|
+
await Core.scan(container);
|
|
28
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
29
|
+
const form = container.querySelector('form');
|
|
30
|
+
const fragment = Fragment.get(form);
|
|
31
|
+
const values = Form.getValues(fragment);
|
|
32
|
+
expect(values.name).toBe('田中太郎');
|
|
33
|
+
expect(values.age).toBe('25');
|
|
34
|
+
expect(values.email).toBe('tanaka@example.com');
|
|
35
|
+
});
|
|
36
|
+
it('should get nested object values with data-form-object', async () => {
|
|
37
|
+
container.innerHTML = `
|
|
38
|
+
<form>
|
|
39
|
+
<input type="text" name="name" value="田中太郎">
|
|
40
|
+
<div data-form-object="address">
|
|
41
|
+
<input type="text" name="city" value="東京">
|
|
42
|
+
<input type="text" name="street" value="渋谷区1-1-1">
|
|
43
|
+
<input type="text" name="zip" value="150-0001">
|
|
44
|
+
</div>
|
|
45
|
+
</form>
|
|
46
|
+
`;
|
|
47
|
+
await Core.scan(container);
|
|
48
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
49
|
+
const form = container.querySelector('form');
|
|
50
|
+
const fragment = Fragment.get(form);
|
|
51
|
+
const values = Form.getValues(fragment);
|
|
52
|
+
expect(values.name).toBe('田中太郎');
|
|
53
|
+
expect(values.address).toEqual({
|
|
54
|
+
city: '東京',
|
|
55
|
+
street: '渋谷区1-1-1',
|
|
56
|
+
zip: '150-0001',
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
it('should get deeply nested object values', async () => {
|
|
60
|
+
container.innerHTML = `
|
|
61
|
+
<form>
|
|
62
|
+
<input type="text" name="name" value="会社A">
|
|
63
|
+
<div data-form-object="location">
|
|
64
|
+
<input type="text" name="country" value="日本">
|
|
65
|
+
<div data-form-object="address">
|
|
66
|
+
<input type="text" name="city" value="東京">
|
|
67
|
+
<input type="text" name="district" value="渋谷区">
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</form>
|
|
71
|
+
`;
|
|
72
|
+
await Core.scan(container);
|
|
73
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
74
|
+
const form = container.querySelector('form');
|
|
75
|
+
const fragment = Fragment.get(form);
|
|
76
|
+
const values = Form.getValues(fragment);
|
|
77
|
+
expect(values.name).toBe('会社A');
|
|
78
|
+
expect(values.location).toEqual({
|
|
79
|
+
country: '日本',
|
|
80
|
+
address: {
|
|
81
|
+
city: '東京',
|
|
82
|
+
district: '渋谷区',
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
it('should get array values with data-form-list on container', async () => {
|
|
87
|
+
// data-form-listは入力要素ではなくコンテナ要素に付ける
|
|
88
|
+
// 入力要素に直接付けた場合は配列にならない(最後の値のみ取得される)
|
|
89
|
+
container.innerHTML = `
|
|
90
|
+
<form>
|
|
91
|
+
<div data-form-list="tags">
|
|
92
|
+
<div><input type="text" name="value" value="タグ1"></div>
|
|
93
|
+
<div><input type="text" name="value" value="タグ2"></div>
|
|
94
|
+
<div><input type="text" name="value" value="タグ3"></div>
|
|
95
|
+
</div>
|
|
96
|
+
</form>
|
|
97
|
+
`;
|
|
98
|
+
await Core.scan(container);
|
|
99
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
100
|
+
const form = container.querySelector('form');
|
|
101
|
+
const fragment = Fragment.get(form);
|
|
102
|
+
const values = Form.getValues(fragment);
|
|
103
|
+
expect(values.tags).toEqual([
|
|
104
|
+
{ value: 'タグ1' },
|
|
105
|
+
{ value: 'タグ2' },
|
|
106
|
+
{ value: 'タグ3' },
|
|
107
|
+
]);
|
|
108
|
+
});
|
|
109
|
+
it('should get object array values with data-form-list on container', async () => {
|
|
110
|
+
container.innerHTML = `
|
|
111
|
+
<form>
|
|
112
|
+
<div data-form-list="items">
|
|
113
|
+
<div>
|
|
114
|
+
<input type="text" name="name" value="商品A">
|
|
115
|
+
<input type="number" name="price" value="100">
|
|
116
|
+
</div>
|
|
117
|
+
<div>
|
|
118
|
+
<input type="text" name="name" value="商品B">
|
|
119
|
+
<input type="number" name="price" value="200">
|
|
120
|
+
</div>
|
|
121
|
+
<div>
|
|
122
|
+
<input type="text" name="name" value="商品C">
|
|
123
|
+
<input type="number" name="price" value="300">
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
</form>
|
|
127
|
+
`;
|
|
128
|
+
await Core.scan(container);
|
|
129
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
130
|
+
const form = container.querySelector('form');
|
|
131
|
+
const fragment = Fragment.get(form);
|
|
132
|
+
const values = Form.getValues(fragment);
|
|
133
|
+
expect(values.items).toEqual([
|
|
134
|
+
{ name: '商品A', price: '100' },
|
|
135
|
+
{ name: '商品B', price: '200' },
|
|
136
|
+
{ name: '商品C', price: '300' },
|
|
137
|
+
]);
|
|
138
|
+
});
|
|
139
|
+
it('should get nested array with objects', async () => {
|
|
140
|
+
container.innerHTML = `
|
|
141
|
+
<form>
|
|
142
|
+
<input type="text" name="orderName" value="注文1">
|
|
143
|
+
<div data-form-list="products">
|
|
144
|
+
<div>
|
|
145
|
+
<input type="text" name="productName" value="商品X">
|
|
146
|
+
<input type="number" name="quantity" value="2">
|
|
147
|
+
<div data-form-object="details">
|
|
148
|
+
<input type="text" name="color" value="赤">
|
|
149
|
+
<input type="text" name="size" value="M">
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
<div>
|
|
153
|
+
<input type="text" name="productName" value="商品Y">
|
|
154
|
+
<input type="number" name="quantity" value="1">
|
|
155
|
+
<div data-form-object="details">
|
|
156
|
+
<input type="text" name="color" value="青">
|
|
157
|
+
<input type="text" name="size" value="L">
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</form>
|
|
162
|
+
`;
|
|
163
|
+
await Core.scan(container);
|
|
164
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
165
|
+
const form = container.querySelector('form');
|
|
166
|
+
const fragment = Fragment.get(form);
|
|
167
|
+
const values = Form.getValues(fragment);
|
|
168
|
+
expect(values.orderName).toBe('注文1');
|
|
169
|
+
expect(values.products).toEqual([
|
|
170
|
+
{
|
|
171
|
+
productName: '商品X',
|
|
172
|
+
quantity: '2',
|
|
173
|
+
details: { color: '赤', size: 'M' },
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
productName: '商品Y',
|
|
177
|
+
quantity: '1',
|
|
178
|
+
details: { color: '青', size: 'L' },
|
|
179
|
+
},
|
|
180
|
+
]);
|
|
181
|
+
});
|
|
182
|
+
it('should get complex nested structure with multiple arrays', async () => {
|
|
183
|
+
container.innerHTML = `
|
|
184
|
+
<form>
|
|
185
|
+
<input type="text" name="companyName" value="会社X">
|
|
186
|
+
<div data-form-list="departments">
|
|
187
|
+
<div>
|
|
188
|
+
<input type="text" name="deptName" value="営業部">
|
|
189
|
+
<div data-form-list="employees">
|
|
190
|
+
<div>
|
|
191
|
+
<input type="text" name="empName" value="田中">
|
|
192
|
+
<input type="text" name="role" value="部長">
|
|
193
|
+
</div>
|
|
194
|
+
<div>
|
|
195
|
+
<input type="text" name="empName" value="佐藤">
|
|
196
|
+
<input type="text" name="role" value="課長">
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
<div>
|
|
201
|
+
<input type="text" name="deptName" value="開発部">
|
|
202
|
+
<div data-form-list="employees">
|
|
203
|
+
<div>
|
|
204
|
+
<input type="text" name="empName" value="鈴木">
|
|
205
|
+
<input type="text" name="role" value="リーダー">
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
</div>
|
|
210
|
+
</form>
|
|
211
|
+
`;
|
|
212
|
+
await Core.scan(container);
|
|
213
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
214
|
+
const form = container.querySelector('form');
|
|
215
|
+
const fragment = Fragment.get(form);
|
|
216
|
+
const values = Form.getValues(fragment);
|
|
217
|
+
expect(values.companyName).toBe('会社X');
|
|
218
|
+
expect(values.departments).toEqual([
|
|
219
|
+
{
|
|
220
|
+
deptName: '営業部',
|
|
221
|
+
employees: [
|
|
222
|
+
{ empName: '田中', role: '部長' },
|
|
223
|
+
{ empName: '佐藤', role: '課長' },
|
|
224
|
+
],
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
deptName: '開発部',
|
|
228
|
+
employees: [{ empName: '鈴木', role: 'リーダー' }],
|
|
229
|
+
},
|
|
230
|
+
]);
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
describe('setValues', () => {
|
|
234
|
+
it('should set simple values', async () => {
|
|
235
|
+
container.innerHTML = `
|
|
236
|
+
<form>
|
|
237
|
+
<input type="text" name="name" value="">
|
|
238
|
+
<input type="number" name="age" value="">
|
|
239
|
+
<input type="email" name="email" value="">
|
|
240
|
+
</form>
|
|
241
|
+
`;
|
|
242
|
+
await Core.scan(container);
|
|
243
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
244
|
+
const form = container.querySelector('form');
|
|
245
|
+
const fragment = Fragment.get(form);
|
|
246
|
+
await Form.setValues(fragment, {
|
|
247
|
+
name: '山田花子',
|
|
248
|
+
age: 30,
|
|
249
|
+
email: 'yamada@example.com',
|
|
250
|
+
});
|
|
251
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
252
|
+
const nameInput = container.querySelector('input[name="name"]');
|
|
253
|
+
const ageInput = container.querySelector('input[name="age"]');
|
|
254
|
+
const emailInput = container.querySelector('input[name="email"]');
|
|
255
|
+
expect(nameInput.value).toBe('山田花子');
|
|
256
|
+
expect(ageInput.value).toBe('30');
|
|
257
|
+
expect(emailInput.value).toBe('yamada@example.com');
|
|
258
|
+
});
|
|
259
|
+
it('should set nested object values', async () => {
|
|
260
|
+
container.innerHTML = `
|
|
261
|
+
<form>
|
|
262
|
+
<input type="text" name="name" value="">
|
|
263
|
+
<div data-form-object="address">
|
|
264
|
+
<input type="text" name="city" value="">
|
|
265
|
+
<input type="text" name="street" value="">
|
|
266
|
+
</div>
|
|
267
|
+
</form>
|
|
268
|
+
`;
|
|
269
|
+
await Core.scan(container);
|
|
270
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
271
|
+
const form = container.querySelector('form');
|
|
272
|
+
const fragment = Fragment.get(form);
|
|
273
|
+
await Form.setValues(fragment, {
|
|
274
|
+
name: '鈴木一郎',
|
|
275
|
+
address: {
|
|
276
|
+
city: '大阪',
|
|
277
|
+
street: '北区2-2-2',
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
281
|
+
const nameInput = container.querySelector('input[name="name"]');
|
|
282
|
+
const cityInput = container.querySelector('input[name="city"]');
|
|
283
|
+
const streetInput = container.querySelector('input[name="street"]');
|
|
284
|
+
expect(nameInput.value).toBe('鈴木一郎');
|
|
285
|
+
expect(cityInput.value).toBe('大阪');
|
|
286
|
+
expect(streetInput.value).toBe('北区2-2-2');
|
|
287
|
+
});
|
|
288
|
+
it('should set deeply nested object values', async () => {
|
|
289
|
+
container.innerHTML = `
|
|
290
|
+
<form>
|
|
291
|
+
<div data-form-object="company">
|
|
292
|
+
<input type="text" name="name" value="">
|
|
293
|
+
<div data-form-object="location">
|
|
294
|
+
<input type="text" name="country" value="">
|
|
295
|
+
<div data-form-object="address">
|
|
296
|
+
<input type="text" name="city" value="">
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
</form>
|
|
301
|
+
`;
|
|
302
|
+
await Core.scan(container);
|
|
303
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
304
|
+
const form = container.querySelector('form');
|
|
305
|
+
const fragment = Fragment.get(form);
|
|
306
|
+
await Form.setValues(fragment, {
|
|
307
|
+
company: {
|
|
308
|
+
name: '株式会社テスト',
|
|
309
|
+
location: {
|
|
310
|
+
country: '日本',
|
|
311
|
+
address: {
|
|
312
|
+
city: '福岡',
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
},
|
|
316
|
+
});
|
|
317
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
318
|
+
const nameInput = container.querySelector('input[name="name"]');
|
|
319
|
+
const countryInput = container.querySelector('input[name="country"]');
|
|
320
|
+
const cityInput = container.querySelector('input[name="city"]');
|
|
321
|
+
expect(nameInput.value).toBe('株式会社テスト');
|
|
322
|
+
expect(countryInput.value).toBe('日本');
|
|
323
|
+
expect(cityInput.value).toBe('福岡');
|
|
324
|
+
});
|
|
325
|
+
it('should set object array values', async () => {
|
|
326
|
+
container.innerHTML = `
|
|
327
|
+
<form>
|
|
328
|
+
<div data-form-list="items">
|
|
329
|
+
<div>
|
|
330
|
+
<input type="text" name="name" value="">
|
|
331
|
+
<input type="number" name="price" value="">
|
|
332
|
+
</div>
|
|
333
|
+
<div>
|
|
334
|
+
<input type="text" name="name" value="">
|
|
335
|
+
<input type="number" name="price" value="">
|
|
336
|
+
</div>
|
|
337
|
+
</div>
|
|
338
|
+
</form>
|
|
339
|
+
`;
|
|
340
|
+
await Core.scan(container);
|
|
341
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
342
|
+
const form = container.querySelector('form');
|
|
343
|
+
const fragment = Fragment.get(form);
|
|
344
|
+
await Form.setValues(fragment, {
|
|
345
|
+
items: [
|
|
346
|
+
{ name: '新商品A', price: 500 },
|
|
347
|
+
{ name: '新商品B', price: 600 },
|
|
348
|
+
],
|
|
349
|
+
});
|
|
350
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
351
|
+
const nameInputs = container.querySelectorAll('input[name="name"]');
|
|
352
|
+
const priceInputs = container.querySelectorAll('input[name="price"]');
|
|
353
|
+
expect(nameInputs[0].value).toBe('新商品A');
|
|
354
|
+
expect(priceInputs[0].value).toBe('500');
|
|
355
|
+
expect(nameInputs[1].value).toBe('新商品B');
|
|
356
|
+
expect(priceInputs[1].value).toBe('600');
|
|
357
|
+
});
|
|
358
|
+
it('should set nested array with objects', async () => {
|
|
359
|
+
container.innerHTML = `
|
|
360
|
+
<form>
|
|
361
|
+
<div data-form-list="orders">
|
|
362
|
+
<div>
|
|
363
|
+
<input type="text" name="orderId" value="">
|
|
364
|
+
<div data-form-object="customer">
|
|
365
|
+
<input type="text" name="name" value="">
|
|
366
|
+
<input type="text" name="phone" value="">
|
|
367
|
+
</div>
|
|
368
|
+
</div>
|
|
369
|
+
</div>
|
|
370
|
+
</form>
|
|
371
|
+
`;
|
|
372
|
+
await Core.scan(container);
|
|
373
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
374
|
+
const form = container.querySelector('form');
|
|
375
|
+
const fragment = Fragment.get(form);
|
|
376
|
+
await Form.setValues(fragment, {
|
|
377
|
+
orders: [
|
|
378
|
+
{
|
|
379
|
+
orderId: 'ORD-001',
|
|
380
|
+
customer: {
|
|
381
|
+
name: '高橋',
|
|
382
|
+
phone: '090-1234-5678',
|
|
383
|
+
},
|
|
384
|
+
},
|
|
385
|
+
],
|
|
386
|
+
});
|
|
387
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
388
|
+
const orderIdInput = container.querySelector('input[name="orderId"]');
|
|
389
|
+
const nameInput = container.querySelector('input[name="name"]');
|
|
390
|
+
const phoneInput = container.querySelector('input[name="phone"]');
|
|
391
|
+
expect(orderIdInput.value).toBe('ORD-001');
|
|
392
|
+
expect(nameInput.value).toBe('高橋');
|
|
393
|
+
expect(phoneInput.value).toBe('090-1234-5678');
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
describe('addErrorMessage', () => {
|
|
397
|
+
it('should add error message to simple input', async () => {
|
|
398
|
+
container.innerHTML = `
|
|
399
|
+
<form>
|
|
400
|
+
<input type="text" name="name" value="">
|
|
401
|
+
<input type="email" name="email" value="">
|
|
402
|
+
</form>
|
|
403
|
+
`;
|
|
404
|
+
await Core.scan(container);
|
|
405
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
406
|
+
const form = container.querySelector('form');
|
|
407
|
+
const fragment = Fragment.get(form);
|
|
408
|
+
await Form.addErrorMessage(fragment, 'name', '名前は必須です');
|
|
409
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
410
|
+
const nameInput = container.querySelector('input[name="name"]');
|
|
411
|
+
const parentElement = nameInput.parentElement;
|
|
412
|
+
expect(parentElement.getAttribute('data-message')).toBe('名前は必須です');
|
|
413
|
+
});
|
|
414
|
+
it('should add error message to nested object field', async () => {
|
|
415
|
+
container.innerHTML = `
|
|
416
|
+
<form>
|
|
417
|
+
<div data-form-object="address">
|
|
418
|
+
<input type="text" name="city" value="">
|
|
419
|
+
<input type="text" name="street" value="">
|
|
420
|
+
</div>
|
|
421
|
+
</form>
|
|
422
|
+
`;
|
|
423
|
+
await Core.scan(container);
|
|
424
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
425
|
+
const form = container.querySelector('form');
|
|
426
|
+
const fragment = Fragment.get(form);
|
|
427
|
+
await Form.addErrorMessage(fragment, 'address.city', '市区町村は必須です');
|
|
428
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
429
|
+
const cityInput = container.querySelector('input[name="city"]');
|
|
430
|
+
const parentElement = cityInput.parentElement;
|
|
431
|
+
expect(parentElement.getAttribute('data-message')).toBe('市区町村は必須です');
|
|
432
|
+
});
|
|
433
|
+
it('should add error message to deeply nested field', async () => {
|
|
434
|
+
container.innerHTML = `
|
|
435
|
+
<form>
|
|
436
|
+
<div data-form-object="company">
|
|
437
|
+
<div data-form-object="location">
|
|
438
|
+
<input type="text" name="country" value="">
|
|
439
|
+
</div>
|
|
440
|
+
</div>
|
|
441
|
+
</form>
|
|
442
|
+
`;
|
|
443
|
+
await Core.scan(container);
|
|
444
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
445
|
+
const form = container.querySelector('form');
|
|
446
|
+
const fragment = Fragment.get(form);
|
|
447
|
+
await Form.addErrorMessage(fragment, 'company.location.country', '国名は必須です');
|
|
448
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
449
|
+
const countryInput = container.querySelector('input[name="country"]');
|
|
450
|
+
const parentElement = countryInput.parentElement;
|
|
451
|
+
expect(parentElement.getAttribute('data-message')).toBe('国名は必須です');
|
|
452
|
+
});
|
|
453
|
+
it('should add error message to array item field', async () => {
|
|
454
|
+
container.innerHTML = `
|
|
455
|
+
<form>
|
|
456
|
+
<div data-form-list="items">
|
|
457
|
+
<div data-row="0">
|
|
458
|
+
<input type="text" name="name" value="">
|
|
459
|
+
</div>
|
|
460
|
+
<div data-row="1">
|
|
461
|
+
<input type="text" name="name" value="">
|
|
462
|
+
</div>
|
|
463
|
+
<div data-row="2">
|
|
464
|
+
<input type="text" name="name" value="">
|
|
465
|
+
</div>
|
|
466
|
+
</div>
|
|
467
|
+
</form>
|
|
468
|
+
`;
|
|
469
|
+
await Core.scan(container);
|
|
470
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
471
|
+
const form = container.querySelector('form');
|
|
472
|
+
const fragment = Fragment.get(form);
|
|
473
|
+
// 2番目の配列要素にエラーを追加
|
|
474
|
+
await Form.addErrorMessage(fragment, 'items[1].name', '2番目の項目名は必須です');
|
|
475
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
476
|
+
const rows = container.querySelectorAll('[data-row]');
|
|
477
|
+
const secondRowInput = rows[1].querySelector('input[name="name"]');
|
|
478
|
+
const parentElement = secondRowInput.parentElement;
|
|
479
|
+
expect(parentElement.getAttribute('data-message')).toBe('2番目の項目名は必須です');
|
|
480
|
+
});
|
|
481
|
+
it('should add error message to nested field in array item', async () => {
|
|
482
|
+
container.innerHTML = `
|
|
483
|
+
<form>
|
|
484
|
+
<div data-form-list="orders">
|
|
485
|
+
<div data-row="0">
|
|
486
|
+
<div data-form-object="customer">
|
|
487
|
+
<input type="text" name="name" value="">
|
|
488
|
+
</div>
|
|
489
|
+
</div>
|
|
490
|
+
<div data-row="1">
|
|
491
|
+
<div data-form-object="customer">
|
|
492
|
+
<input type="text" name="name" value="">
|
|
493
|
+
</div>
|
|
494
|
+
</div>
|
|
495
|
+
</div>
|
|
496
|
+
</form>
|
|
497
|
+
`;
|
|
498
|
+
await Core.scan(container);
|
|
499
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
500
|
+
const form = container.querySelector('form');
|
|
501
|
+
const fragment = Fragment.get(form);
|
|
502
|
+
await Form.addErrorMessage(fragment, 'orders[1].customer.name', '顧客名は必須です');
|
|
503
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
504
|
+
const rows = container.querySelectorAll('[data-row]');
|
|
505
|
+
const secondRowInput = rows[1].querySelector('input[name="name"]');
|
|
506
|
+
const parentElement = secondRowInput.parentElement;
|
|
507
|
+
expect(parentElement.getAttribute('data-message')).toBe('顧客名は必須です');
|
|
508
|
+
});
|
|
509
|
+
it('should add error message to form when key not found', async () => {
|
|
510
|
+
container.innerHTML = `
|
|
511
|
+
<form>
|
|
512
|
+
<input type="text" name="name" value="">
|
|
513
|
+
</form>
|
|
514
|
+
`;
|
|
515
|
+
await Core.scan(container);
|
|
516
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
517
|
+
const form = container.querySelector('form');
|
|
518
|
+
const fragment = Fragment.get(form);
|
|
519
|
+
await Form.addErrorMessage(fragment, 'nonexistent', 'フォーム全体のエラー');
|
|
520
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
521
|
+
expect(form.getAttribute('data-message')).toBe('フォーム全体のエラー');
|
|
522
|
+
});
|
|
523
|
+
it('should clear messages with Form.clearMessages', async () => {
|
|
524
|
+
container.innerHTML = `
|
|
525
|
+
<form>
|
|
526
|
+
<input type="text" name="name" value="">
|
|
527
|
+
<div data-form-object="address">
|
|
528
|
+
<input type="text" name="city" value="">
|
|
529
|
+
</div>
|
|
530
|
+
</form>
|
|
531
|
+
`;
|
|
532
|
+
await Core.scan(container);
|
|
533
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
534
|
+
const form = container.querySelector('form');
|
|
535
|
+
const fragment = Fragment.get(form);
|
|
536
|
+
// エラーメッセージを追加
|
|
537
|
+
await Form.addErrorMessage(fragment, 'name', 'エラー1');
|
|
538
|
+
await Form.addErrorMessage(fragment, 'address.city', 'エラー2');
|
|
539
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
540
|
+
// メッセージをクリア
|
|
541
|
+
await Form.clearMessages(fragment);
|
|
542
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
543
|
+
const messagesAfter = container.querySelectorAll('[data-message]');
|
|
544
|
+
expect(messagesAfter.length).toBe(0);
|
|
545
|
+
});
|
|
546
|
+
});
|
|
547
|
+
describe('getValues and setValues roundtrip', () => {
|
|
548
|
+
it('should maintain data integrity with complex nested structure', async () => {
|
|
549
|
+
container.innerHTML = `
|
|
550
|
+
<form>
|
|
551
|
+
<input type="text" name="title" value="">
|
|
552
|
+
<div data-form-object="metadata">
|
|
553
|
+
<input type="text" name="author" value="">
|
|
554
|
+
<input type="text" name="version" value="">
|
|
555
|
+
</div>
|
|
556
|
+
<div data-form-list="sections">
|
|
557
|
+
<div>
|
|
558
|
+
<input type="text" name="heading" value="">
|
|
559
|
+
<div data-form-list="paragraphs">
|
|
560
|
+
<div>
|
|
561
|
+
<input type="text" name="text" value="">
|
|
562
|
+
</div>
|
|
563
|
+
<div>
|
|
564
|
+
<input type="text" name="text" value="">
|
|
565
|
+
</div>
|
|
566
|
+
</div>
|
|
567
|
+
</div>
|
|
568
|
+
<div>
|
|
569
|
+
<input type="text" name="heading" value="">
|
|
570
|
+
<div data-form-list="paragraphs">
|
|
571
|
+
<div>
|
|
572
|
+
<input type="text" name="text" value="">
|
|
573
|
+
</div>
|
|
574
|
+
</div>
|
|
575
|
+
</div>
|
|
576
|
+
</div>
|
|
577
|
+
</form>
|
|
578
|
+
`;
|
|
579
|
+
await Core.scan(container);
|
|
580
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
581
|
+
const form = container.querySelector('form');
|
|
582
|
+
const fragment = Fragment.get(form);
|
|
583
|
+
const originalData = {
|
|
584
|
+
title: 'ドキュメントタイトル',
|
|
585
|
+
metadata: {
|
|
586
|
+
author: '著者名',
|
|
587
|
+
version: '0.1.0',
|
|
588
|
+
},
|
|
589
|
+
sections: [
|
|
590
|
+
{
|
|
591
|
+
heading: 'セクション1',
|
|
592
|
+
paragraphs: [{ text: '段落1-1' }, { text: '段落1-2' }],
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
heading: 'セクション2',
|
|
596
|
+
paragraphs: [{ text: '段落2-1' }],
|
|
597
|
+
},
|
|
598
|
+
],
|
|
599
|
+
};
|
|
600
|
+
await Form.setValues(fragment, originalData);
|
|
601
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
602
|
+
const retrievedData = Form.getValues(fragment);
|
|
603
|
+
expect(retrievedData).toEqual(originalData);
|
|
604
|
+
});
|
|
605
|
+
});
|
|
606
|
+
});
|
|
607
|
+
//# sourceMappingURL=form.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.test.js","sourceRoot":"","sources":["../../tests/form.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fragment.test.d.ts","sourceRoot":"","sources":["../../tests/fragment.test.ts"],"names":[],"mappings":""}
|