@elliemae/ssf-host 2.23.4 → 2.24.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/dist/cjs/callchain-host.html +262 -0
- package/dist/cjs/callchain-intermediate.html +92 -0
- package/dist/cjs/e2e-host.html +603 -0
- package/dist/cjs/e2e-index.html +234 -0
- package/dist/cjs/host.js +100 -43
- package/dist/cjs/index.html +304 -151
- package/dist/cjs/popup-focus-host.html +318 -0
- package/dist/cjs/utils.js +14 -1
- package/dist/cjs/v2-host-v1-guest.html +3 -0
- package/dist/esm/callchain-host.html +262 -0
- package/dist/esm/callchain-intermediate.html +92 -0
- package/dist/esm/e2e-host.html +603 -0
- package/dist/esm/e2e-index.html +234 -0
- package/dist/esm/host.js +101 -44
- package/dist/esm/index.html +304 -151
- package/dist/esm/popup-focus-host.html +318 -0
- package/dist/esm/utils.js +14 -1
- package/dist/esm/v2-host-v1-guest.html +3 -0
- package/dist/public/callchain-host.html +34 -0
- package/dist/public/callchain-host.js +3 -0
- package/dist/public/callchain-host.js.br +0 -0
- package/dist/public/callchain-host.js.gz +0 -0
- package/dist/public/callchain-host.js.map +1 -0
- package/dist/public/callchain-intermediate.html +1 -0
- package/dist/public/e2e-host.html +5 -0
- package/dist/public/e2e-host.js +8 -0
- package/dist/public/e2e-host.js.br +0 -0
- package/dist/public/e2e-host.js.gz +0 -0
- package/dist/public/e2e-host.js.map +1 -0
- package/dist/public/e2e-index.html +1 -0
- package/dist/public/index.html +1 -1
- package/dist/public/init.js +1 -1
- package/dist/public/init.js.br +0 -0
- package/dist/public/init.js.gz +0 -0
- package/dist/public/init.js.map +1 -1
- package/dist/public/js/emuiSsfHost.071827d0d7e775690fbb.js +3 -0
- package/dist/public/js/emuiSsfHost.071827d0d7e775690fbb.js.br +0 -0
- package/dist/public/js/emuiSsfHost.071827d0d7e775690fbb.js.gz +0 -0
- package/dist/public/js/emuiSsfHost.071827d0d7e775690fbb.js.map +1 -0
- package/dist/public/loan-object.js +1 -1
- package/dist/public/loan-object.js.br +0 -0
- package/dist/public/loan-object.js.gz +0 -0
- package/dist/public/loan-object.js.map +1 -1
- package/dist/public/popup-focus-host.html +1 -0
- package/dist/public/popup-focus-host.js +6 -0
- package/dist/public/popup-focus-host.js.br +0 -0
- package/dist/public/popup-focus-host.js.gz +0 -0
- package/dist/public/popup-focus-host.js.map +1 -0
- package/dist/public/v1-guest-v2-host.html +1 -1
- package/dist/public/v2-host-v1-guest.html +1 -1
- package/dist/types/lib/host.d.ts +1 -0
- package/dist/types/lib/ihost.d.ts +15 -0
- package/dist/types/lib/tests/timingDedup.test.d.ts +1 -0
- package/dist/types/lib/utils.d.ts +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/umd/callchain-host.html +34 -0
- package/dist/umd/callchain-host.js +3 -0
- package/dist/umd/callchain-host.js.br +0 -0
- package/dist/umd/callchain-host.js.gz +0 -0
- package/dist/umd/callchain-host.js.map +1 -0
- package/dist/umd/callchain-intermediate.html +1 -0
- package/dist/umd/e2e-host.html +5 -0
- package/dist/umd/e2e-host.js +8 -0
- package/dist/umd/e2e-host.js.br +0 -0
- package/dist/umd/e2e-host.js.gz +0 -0
- package/dist/umd/e2e-host.js.map +1 -0
- package/dist/umd/e2e-index.html +1 -0
- package/dist/umd/index.html +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.br +0 -0
- package/dist/umd/index.js.gz +0 -0
- package/dist/umd/index.js.map +1 -1
- package/dist/umd/init.js +1 -1
- package/dist/umd/init.js.br +0 -0
- package/dist/umd/init.js.gz +0 -0
- package/dist/umd/init.js.map +1 -1
- package/dist/umd/loan-object.js +1 -1
- package/dist/umd/loan-object.js.br +0 -0
- package/dist/umd/loan-object.js.gz +0 -0
- package/dist/umd/loan-object.js.map +1 -1
- package/dist/umd/popup-focus-host.html +1 -0
- package/dist/umd/popup-focus-host.js +6 -0
- package/dist/umd/popup-focus-host.js.br +0 -0
- package/dist/umd/popup-focus-host.js.gz +0 -0
- package/dist/umd/popup-focus-host.js.map +1 -0
- package/dist/umd/v2-host-v1-guest.html +1 -1
- package/package.json +5 -5
- package/dist/public/js/emuiSsfHost.a4526c5eda64df08190f.js +0 -3
- package/dist/public/js/emuiSsfHost.a4526c5eda64df08190f.js.br +0 -0
- package/dist/public/js/emuiSsfHost.a4526c5eda64df08190f.js.gz +0 -0
- package/dist/public/js/emuiSsfHost.a4526c5eda64df08190f.js.map +0 -1
|
@@ -0,0 +1,603 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>SSF E2E — Comprehensive Host Test</title>
|
|
7
|
+
<script src="https://cdn.tailwindcss.com?plugins=forms"></script>
|
|
8
|
+
<script src="https://cdn.mortgagetech.q1.ice.com/pui-diagnostics@3"></script>
|
|
9
|
+
</head>
|
|
10
|
+
<body class="bg-gray-50 text-sm">
|
|
11
|
+
<header
|
|
12
|
+
class="bg-indigo-700 text-white px-4 py-3 flex items-center justify-between"
|
|
13
|
+
>
|
|
14
|
+
<h1 class="text-lg font-semibold">Comprehensive E2E Host Test</h1>
|
|
15
|
+
<a
|
|
16
|
+
href="./e2e-index.html"
|
|
17
|
+
class="text-indigo-200 hover:text-white text-sm"
|
|
18
|
+
>← Test Suite</a
|
|
19
|
+
>
|
|
20
|
+
</header>
|
|
21
|
+
|
|
22
|
+
<main class="mx-auto max-w-7xl px-4 py-3">
|
|
23
|
+
<!-- Instructions -->
|
|
24
|
+
<div class="grid grid-cols-2 gap-3 mb-3">
|
|
25
|
+
<div class="bg-blue-50 border border-blue-200 rounded-md p-3">
|
|
26
|
+
<h2 class="text-sm font-bold text-blue-900 mb-1">
|
|
27
|
+
How to Use This Page
|
|
28
|
+
</h2>
|
|
29
|
+
<ol class="text-xs text-blue-800 space-y-1 list-decimal list-inside">
|
|
30
|
+
<li>
|
|
31
|
+
Start the host dev server (port 4000) and guest dev server (port
|
|
32
|
+
4001).
|
|
33
|
+
</li>
|
|
34
|
+
<li>
|
|
35
|
+
Buttons in <strong>Column 1</strong> (left) execute host-side
|
|
36
|
+
actions.
|
|
37
|
+
</li>
|
|
38
|
+
<li>
|
|
39
|
+
<strong>Column 2</strong> (center) shows embedded guest iframes —
|
|
40
|
+
interact with them to invoke methods, subscribe to events, etc.
|
|
41
|
+
</li>
|
|
42
|
+
<li>
|
|
43
|
+
<strong>Column 3</strong> (right) shows live results: Event Log,
|
|
44
|
+
callContext, dispatch results, and the guest list.
|
|
45
|
+
</li>
|
|
46
|
+
<li>
|
|
47
|
+
Work through the buttons <strong>top to bottom</strong> for the
|
|
48
|
+
recommended flow. Each button is labelled with a test case ID
|
|
49
|
+
(TC-xxx).
|
|
50
|
+
</li>
|
|
51
|
+
</ol>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="bg-amber-50 border border-amber-200 rounded-md p-3">
|
|
54
|
+
<h2 class="text-sm font-bold text-amber-900 mb-1">
|
|
55
|
+
Recommended Flow
|
|
56
|
+
</h2>
|
|
57
|
+
<ol class="text-xs text-amber-800 space-y-1 list-decimal list-inside">
|
|
58
|
+
<li>
|
|
59
|
+
<strong>Load guests</strong>: TC-LOAD-01 (embed) → TC-LOAD-02
|
|
60
|
+
(popup) → TC-LOAD-04 (with params). Check Event Log for "loaded"
|
|
61
|
+
messages.
|
|
62
|
+
</li>
|
|
63
|
+
<li>
|
|
64
|
+
<strong>Scripting objects</strong>: TC-SO-01 (add Inventory). In
|
|
65
|
+
the guest iframe, call <code>getObject("Inventory")</code> and
|
|
66
|
+
invoke <code>getStock()</code>. Check return value and
|
|
67
|
+
callContext.
|
|
68
|
+
</li>
|
|
69
|
+
<li>
|
|
70
|
+
<strong>Events</strong>: In the guest, subscribe to
|
|
71
|
+
<code>Loan.onPreSave</code>. Then click TC-EVT-01 on the host.
|
|
72
|
+
Guest should receive the event.
|
|
73
|
+
</li>
|
|
74
|
+
<li>
|
|
75
|
+
<strong>Lifecycle</strong>: TC-LIFE-01 (unload), TC-LIFE-03 (close
|
|
76
|
+
host). Verify guests are removed and host is destroyed.
|
|
77
|
+
</li>
|
|
78
|
+
</ol>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<div class="grid grid-cols-3 gap-3">
|
|
83
|
+
<!-- Column 1: Host Controls -->
|
|
84
|
+
<div class="space-y-3">
|
|
85
|
+
<!-- Section: Guest Loading -->
|
|
86
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
87
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
88
|
+
Guest Loading
|
|
89
|
+
</h2>
|
|
90
|
+
<div class="space-y-2">
|
|
91
|
+
<button
|
|
92
|
+
data-testid="btn-load-embed"
|
|
93
|
+
id="btnLoadEmbed"
|
|
94
|
+
class="w-full rounded bg-indigo-600 px-3 py-1.5 text-xs text-white hover:bg-indigo-700"
|
|
95
|
+
>
|
|
96
|
+
TC-LOAD-01: Load Embedded Guest
|
|
97
|
+
</button>
|
|
98
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
99
|
+
Expected: guest iframe appears in center column, log shows
|
|
100
|
+
"loaded"
|
|
101
|
+
</p>
|
|
102
|
+
<button
|
|
103
|
+
data-testid="btn-load-popup"
|
|
104
|
+
id="btnLoadPopup"
|
|
105
|
+
class="w-full rounded bg-indigo-600 px-3 py-1.5 text-xs text-white hover:bg-indigo-700"
|
|
106
|
+
>
|
|
107
|
+
TC-LOAD-02: Load Popup Guest
|
|
108
|
+
</button>
|
|
109
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
110
|
+
Expected: new browser popup window opens
|
|
111
|
+
</p>
|
|
112
|
+
<button
|
|
113
|
+
data-testid="btn-load-multiple"
|
|
114
|
+
id="btnLoadMultiple"
|
|
115
|
+
class="w-full rounded bg-indigo-600 px-3 py-1.5 text-xs text-white hover:bg-indigo-700"
|
|
116
|
+
>
|
|
117
|
+
TC-LOAD-03: loadGuests (3 instances)
|
|
118
|
+
</button>
|
|
119
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
120
|
+
Expected: 3 guest iframes load, "List all guests" shows 3+
|
|
121
|
+
entries
|
|
122
|
+
</p>
|
|
123
|
+
<button
|
|
124
|
+
data-testid="btn-load-with-params"
|
|
125
|
+
id="btnLoadWithParams"
|
|
126
|
+
class="w-full rounded bg-indigo-600 px-3 py-1.5 text-xs text-white hover:bg-indigo-700"
|
|
127
|
+
>
|
|
128
|
+
TC-LOAD-04: Load with searchParams
|
|
129
|
+
</button>
|
|
130
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
131
|
+
Expected: guest shows URL params in its "Params:" line
|
|
132
|
+
</p>
|
|
133
|
+
<button
|
|
134
|
+
data-testid="btn-load-with-metadata"
|
|
135
|
+
id="btnLoadWithMetadata"
|
|
136
|
+
class="w-full rounded bg-indigo-600 px-3 py-1.5 text-xs text-white hover:bg-indigo-700"
|
|
137
|
+
>
|
|
138
|
+
TC-META-01: Load with metadata
|
|
139
|
+
</button>
|
|
140
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
141
|
+
Expected: when guest invokes a method, callContext.callChain
|
|
142
|
+
shows metadata
|
|
143
|
+
</p>
|
|
144
|
+
<button
|
|
145
|
+
data-testid="btn-load-bad-url"
|
|
146
|
+
id="btnLoadBadUrl"
|
|
147
|
+
class="w-full rounded bg-red-600 px-3 py-1.5 text-xs text-white hover:bg-red-700"
|
|
148
|
+
>
|
|
149
|
+
TC-LOAD-05: Load invalid URL (onError)
|
|
150
|
+
</button>
|
|
151
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
152
|
+
Expected: log shows "ERROR" or onError callback fires
|
|
153
|
+
</p>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<!-- Section: Scripting Object Management -->
|
|
158
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
159
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
160
|
+
Scripting Object Management
|
|
161
|
+
</h2>
|
|
162
|
+
<div class="space-y-2">
|
|
163
|
+
<button
|
|
164
|
+
data-testid="btn-add-so"
|
|
165
|
+
id="btnAddSO"
|
|
166
|
+
class="w-full rounded bg-green-600 px-3 py-1.5 text-xs text-white hover:bg-green-700"
|
|
167
|
+
>
|
|
168
|
+
TC-SO-01: Add "Inventory" Object
|
|
169
|
+
</button>
|
|
170
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
171
|
+
Expected: guest can now <code>getObject("Inventory")</code> and
|
|
172
|
+
invoke its methods
|
|
173
|
+
</p>
|
|
174
|
+
<button
|
|
175
|
+
data-testid="btn-add-guest-so"
|
|
176
|
+
id="btnAddGuestSO"
|
|
177
|
+
class="w-full rounded bg-green-600 px-3 py-1.5 text-xs text-white hover:bg-green-700"
|
|
178
|
+
>
|
|
179
|
+
TC-SO-04: Add Guest-Scoped Object
|
|
180
|
+
</button>
|
|
181
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
182
|
+
Expected: only the target guest can access this object, others
|
|
183
|
+
get "not available"
|
|
184
|
+
</p>
|
|
185
|
+
<button
|
|
186
|
+
data-testid="btn-remove-so"
|
|
187
|
+
id="btnRemoveSO"
|
|
188
|
+
class="w-full rounded bg-yellow-600 px-3 py-1.5 text-xs text-white hover:bg-yellow-700"
|
|
189
|
+
>
|
|
190
|
+
TC-SO-02: Remove "Inventory" Object
|
|
191
|
+
</button>
|
|
192
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
193
|
+
Expected: guest's <code>getObject("Inventory")</code> now fails
|
|
194
|
+
</p>
|
|
195
|
+
<button
|
|
196
|
+
data-testid="btn-remove-all-so"
|
|
197
|
+
id="btnRemoveAllSO"
|
|
198
|
+
class="w-full rounded bg-yellow-600 px-3 py-1.5 text-xs text-white hover:bg-yellow-700"
|
|
199
|
+
>
|
|
200
|
+
TC-SO-02b: Remove All Objects
|
|
201
|
+
</button>
|
|
202
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
203
|
+
Expected: all getObject calls fail until objects are re-added
|
|
204
|
+
</p>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
|
|
208
|
+
<!-- Section: Event Dispatching -->
|
|
209
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
210
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
211
|
+
Event Dispatching
|
|
212
|
+
</h2>
|
|
213
|
+
<div class="space-y-2">
|
|
214
|
+
<button
|
|
215
|
+
data-testid="btn-dispatch-all"
|
|
216
|
+
id="btnDispatchAll"
|
|
217
|
+
class="w-full rounded bg-purple-600 px-3 py-1.5 text-xs text-white hover:bg-purple-700"
|
|
218
|
+
>
|
|
219
|
+
TC-EVT-01: Dispatch onPreSave to all
|
|
220
|
+
</button>
|
|
221
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
222
|
+
Expected: all guests subscribed to onPreSave receive the event
|
|
223
|
+
</p>
|
|
224
|
+
<button
|
|
225
|
+
data-testid="btn-dispatch-targeted"
|
|
226
|
+
id="btnDispatchTargeted"
|
|
227
|
+
class="w-full rounded bg-purple-600 px-3 py-1.5 text-xs text-white hover:bg-purple-700"
|
|
228
|
+
>
|
|
229
|
+
TC-EVT-02: Dispatch to specific guest
|
|
230
|
+
</button>
|
|
231
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
232
|
+
Expected: only the targeted guest receives the event
|
|
233
|
+
</p>
|
|
234
|
+
<button
|
|
235
|
+
data-testid="btn-dispatch-feedback"
|
|
236
|
+
id="btnDispatchFeedback"
|
|
237
|
+
class="w-full rounded bg-purple-600 px-3 py-1.5 text-xs text-white hover:bg-purple-700"
|
|
238
|
+
>
|
|
239
|
+
TC-EVT-03: Dispatch with timeout (feedback)
|
|
240
|
+
</button>
|
|
241
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
242
|
+
Expected: Dispatch Results shows the guest's feedback return
|
|
243
|
+
value
|
|
244
|
+
</p>
|
|
245
|
+
<button
|
|
246
|
+
data-testid="btn-dispatch-amount"
|
|
247
|
+
id="btnDispatchAmount"
|
|
248
|
+
class="w-full rounded bg-purple-600 px-3 py-1.5 text-xs text-white hover:bg-purple-700"
|
|
249
|
+
>
|
|
250
|
+
TC-EVT-04: Dispatch onAmountChanged (criteria)
|
|
251
|
+
</button>
|
|
252
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
253
|
+
Expected: only guests subscribed with matching criteria receive
|
|
254
|
+
it
|
|
255
|
+
</p>
|
|
256
|
+
</div>
|
|
257
|
+
</div>
|
|
258
|
+
|
|
259
|
+
<!-- Section: Guest Lifecycle -->
|
|
260
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
261
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
262
|
+
Guest Lifecycle
|
|
263
|
+
</h2>
|
|
264
|
+
<div class="space-y-2">
|
|
265
|
+
<button
|
|
266
|
+
data-testid="btn-unload-guest"
|
|
267
|
+
id="btnUnloadGuest"
|
|
268
|
+
class="w-full rounded bg-orange-600 px-3 py-1.5 text-xs text-white hover:bg-orange-700"
|
|
269
|
+
>
|
|
270
|
+
TC-LIFE-01: Unload first embedded guest
|
|
271
|
+
</button>
|
|
272
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
273
|
+
Expected: guest iframe removed, "List all guests" count
|
|
274
|
+
decreases
|
|
275
|
+
</p>
|
|
276
|
+
<button
|
|
277
|
+
data-testid="btn-register-close"
|
|
278
|
+
id="btnRegisterClose"
|
|
279
|
+
class="w-full rounded bg-orange-600 px-3 py-1.5 text-xs text-white hover:bg-orange-700"
|
|
280
|
+
>
|
|
281
|
+
TC-LIFE-02: Register onGuestClose
|
|
282
|
+
</button>
|
|
283
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
284
|
+
Expected: log shows callback registered; fires when guest calls
|
|
285
|
+
close()
|
|
286
|
+
</p>
|
|
287
|
+
<button
|
|
288
|
+
data-testid="btn-list-guests"
|
|
289
|
+
id="btnListGuests"
|
|
290
|
+
class="w-full rounded bg-gray-600 px-3 py-1.5 text-xs text-white hover:bg-gray-700"
|
|
291
|
+
>
|
|
292
|
+
List all guests
|
|
293
|
+
</button>
|
|
294
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
295
|
+
Expected: Guest List panel shows all currently loaded guests
|
|
296
|
+
</p>
|
|
297
|
+
<button
|
|
298
|
+
data-testid="btn-set-loglevel"
|
|
299
|
+
id="btnSetLogLevel"
|
|
300
|
+
class="w-full rounded bg-gray-600 px-3 py-1.5 text-xs text-white hover:bg-gray-700"
|
|
301
|
+
>
|
|
302
|
+
Set Log Level (Debug)
|
|
303
|
+
</button>
|
|
304
|
+
<button
|
|
305
|
+
data-testid="btn-close-host"
|
|
306
|
+
id="btnCloseHost"
|
|
307
|
+
class="w-full rounded bg-red-700 px-3 py-1.5 text-xs text-white hover:bg-red-800"
|
|
308
|
+
>
|
|
309
|
+
TC-LIFE-03: Close host
|
|
310
|
+
</button>
|
|
311
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
312
|
+
Expected: all guests unloaded, host destroyed, further actions
|
|
313
|
+
fail
|
|
314
|
+
</p>
|
|
315
|
+
</div>
|
|
316
|
+
</div>
|
|
317
|
+
|
|
318
|
+
<!-- Section: Sandbox Configuration -->
|
|
319
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
320
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
321
|
+
Sandbox Configuration
|
|
322
|
+
</h2>
|
|
323
|
+
<div class="space-y-2">
|
|
324
|
+
<button
|
|
325
|
+
data-testid="btn-sandbox-default"
|
|
326
|
+
id="btnSandboxDefault"
|
|
327
|
+
class="w-full rounded bg-teal-600 px-3 py-1.5 text-xs text-white hover:bg-teal-700"
|
|
328
|
+
>
|
|
329
|
+
TC-SB-01: Default sandbox
|
|
330
|
+
</button>
|
|
331
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
332
|
+
Expected: iframe has standard sandbox attributes
|
|
333
|
+
</p>
|
|
334
|
+
<button
|
|
335
|
+
data-testid="btn-sandbox-custom"
|
|
336
|
+
id="btnSandboxCustom"
|
|
337
|
+
class="w-full rounded bg-teal-600 px-3 py-1.5 text-xs text-white hover:bg-teal-700"
|
|
338
|
+
>
|
|
339
|
+
TC-SB-02: Custom sandbox values
|
|
340
|
+
</button>
|
|
341
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
342
|
+
Expected: iframe sandbox attribute reflects custom permissions
|
|
343
|
+
</p>
|
|
344
|
+
<button
|
|
345
|
+
data-testid="btn-sandbox-disabled"
|
|
346
|
+
id="btnSandboxDisabled"
|
|
347
|
+
class="w-full rounded bg-teal-600 px-3 py-1.5 text-xs text-white hover:bg-teal-700"
|
|
348
|
+
>
|
|
349
|
+
TC-SB-03: Sandbox disabled
|
|
350
|
+
</button>
|
|
351
|
+
<p class="text-[10px] text-gray-400 -mt-1">
|
|
352
|
+
Expected: iframe has no sandbox attribute (full permissions)
|
|
353
|
+
</p>
|
|
354
|
+
</div>
|
|
355
|
+
</div>
|
|
356
|
+
</div>
|
|
357
|
+
|
|
358
|
+
<!-- Column 2: Guest Containers -->
|
|
359
|
+
<div class="space-y-3">
|
|
360
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
361
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
362
|
+
Embedded Guests
|
|
363
|
+
</h2>
|
|
364
|
+
<div
|
|
365
|
+
data-testid="embed-container"
|
|
366
|
+
id="embedContainer"
|
|
367
|
+
class="border-2 border-dashed border-indigo-300 rounded min-h-[300px] space-y-2"
|
|
368
|
+
></div>
|
|
369
|
+
</div>
|
|
370
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
371
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
372
|
+
Sandbox Test Container
|
|
373
|
+
</h2>
|
|
374
|
+
<div
|
|
375
|
+
data-testid="sandbox-container"
|
|
376
|
+
id="sandboxContainer"
|
|
377
|
+
class="border-2 border-dashed border-teal-300 rounded min-h-[150px] space-y-2"
|
|
378
|
+
></div>
|
|
379
|
+
</div>
|
|
380
|
+
</div>
|
|
381
|
+
|
|
382
|
+
<!-- Column 3: Results -->
|
|
383
|
+
<div class="space-y-3">
|
|
384
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
385
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
386
|
+
Event Log
|
|
387
|
+
</h2>
|
|
388
|
+
<div
|
|
389
|
+
data-testid="event-log"
|
|
390
|
+
id="eventLog"
|
|
391
|
+
class="text-xs bg-gray-100 rounded p-2 min-h-[200px] max-h-[350px] overflow-y-auto font-mono"
|
|
392
|
+
></div>
|
|
393
|
+
<button
|
|
394
|
+
data-testid="btn-clear-log"
|
|
395
|
+
id="btnClearLog"
|
|
396
|
+
class="mt-1 text-xs text-gray-400 hover:text-gray-600"
|
|
397
|
+
>
|
|
398
|
+
Clear
|
|
399
|
+
</button>
|
|
400
|
+
</div>
|
|
401
|
+
|
|
402
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
403
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
404
|
+
callContext (last invocation)
|
|
405
|
+
</h2>
|
|
406
|
+
<div data-testid="callcontext-panel">
|
|
407
|
+
<h3 class="text-xs text-gray-500">callContext.guest</h3>
|
|
408
|
+
<pre
|
|
409
|
+
data-testid="callcontext-guest"
|
|
410
|
+
id="callContextGuest"
|
|
411
|
+
class="text-xs bg-gray-100 rounded p-1 mb-1 whitespace-pre-wrap min-h-[30px]"
|
|
412
|
+
>
|
|
413
|
+
—</pre
|
|
414
|
+
>
|
|
415
|
+
<h3 class="text-xs text-gray-500">callContext.callChain</h3>
|
|
416
|
+
<pre
|
|
417
|
+
data-testid="callcontext-chain"
|
|
418
|
+
id="callContextChain"
|
|
419
|
+
class="text-xs bg-gray-100 rounded p-1 mb-1 whitespace-pre-wrap min-h-[30px]"
|
|
420
|
+
>
|
|
421
|
+
—</pre
|
|
422
|
+
>
|
|
423
|
+
</div>
|
|
424
|
+
</div>
|
|
425
|
+
|
|
426
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
427
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
428
|
+
Dispatch Results
|
|
429
|
+
</h2>
|
|
430
|
+
<pre
|
|
431
|
+
data-testid="dispatch-result"
|
|
432
|
+
id="dispatchResult"
|
|
433
|
+
class="text-xs bg-gray-100 rounded p-2 min-h-[60px] whitespace-pre-wrap"
|
|
434
|
+
>
|
|
435
|
+
—</pre
|
|
436
|
+
>
|
|
437
|
+
</div>
|
|
438
|
+
|
|
439
|
+
<div class="bg-white rounded-lg shadow p-3">
|
|
440
|
+
<h2 class="font-semibold text-gray-700 mb-2 border-b pb-1">
|
|
441
|
+
Guest List
|
|
442
|
+
</h2>
|
|
443
|
+
<pre
|
|
444
|
+
data-testid="guest-list"
|
|
445
|
+
id="guestList"
|
|
446
|
+
class="text-xs bg-gray-100 rounded p-2 min-h-[60px] whitespace-pre-wrap"
|
|
447
|
+
>
|
|
448
|
+
—</pre
|
|
449
|
+
>
|
|
450
|
+
</div>
|
|
451
|
+
</div>
|
|
452
|
+
</div>
|
|
453
|
+
|
|
454
|
+
<!-- Verification Checklist -->
|
|
455
|
+
<div class="bg-gray-100 border border-gray-300 rounded-md p-3 mt-4">
|
|
456
|
+
<h2 class="text-sm font-bold text-gray-800 mb-2">
|
|
457
|
+
Verification Checklist
|
|
458
|
+
</h2>
|
|
459
|
+
<div class="grid grid-cols-3 gap-2 text-xs">
|
|
460
|
+
<div>
|
|
461
|
+
<p class="font-semibold text-gray-600 mb-1">Guest Loading</p>
|
|
462
|
+
<label class="flex items-start gap-1"
|
|
463
|
+
><input type="checkbox" class="mt-0.5" />
|
|
464
|
+
<span
|
|
465
|
+
><strong>TC-LOAD-01:</strong> Embedded guest loads in
|
|
466
|
+
iframe</span
|
|
467
|
+
></label
|
|
468
|
+
>
|
|
469
|
+
<label class="flex items-start gap-1"
|
|
470
|
+
><input type="checkbox" class="mt-0.5" />
|
|
471
|
+
<span
|
|
472
|
+
><strong>TC-LOAD-02:</strong> Popup guest opens in new
|
|
473
|
+
window</span
|
|
474
|
+
></label
|
|
475
|
+
>
|
|
476
|
+
<label class="flex items-start gap-1"
|
|
477
|
+
><input type="checkbox" class="mt-0.5" />
|
|
478
|
+
<span
|
|
479
|
+
><strong>TC-LOAD-03:</strong> loadGuests loads 3 guests at
|
|
480
|
+
once</span
|
|
481
|
+
></label
|
|
482
|
+
>
|
|
483
|
+
<label class="flex items-start gap-1"
|
|
484
|
+
><input type="checkbox" class="mt-0.5" />
|
|
485
|
+
<span
|
|
486
|
+
><strong>TC-LOAD-04:</strong> searchParams visible in
|
|
487
|
+
guest</span
|
|
488
|
+
></label
|
|
489
|
+
>
|
|
490
|
+
<label class="flex items-start gap-1"
|
|
491
|
+
><input type="checkbox" class="mt-0.5" />
|
|
492
|
+
<span
|
|
493
|
+
><strong>TC-LOAD-05:</strong> Bad URL triggers onError</span
|
|
494
|
+
></label
|
|
495
|
+
>
|
|
496
|
+
<label class="flex items-start gap-1"
|
|
497
|
+
><input type="checkbox" class="mt-0.5" />
|
|
498
|
+
<span
|
|
499
|
+
><strong>TC-META-01:</strong> Metadata appears in
|
|
500
|
+
callChain</span
|
|
501
|
+
></label
|
|
502
|
+
>
|
|
503
|
+
</div>
|
|
504
|
+
<div>
|
|
505
|
+
<p class="font-semibold text-gray-600 mb-1">
|
|
506
|
+
Scripting Objects & Events
|
|
507
|
+
</p>
|
|
508
|
+
<label class="flex items-start gap-1"
|
|
509
|
+
><input type="checkbox" class="mt-0.5" />
|
|
510
|
+
<span
|
|
511
|
+
><strong>TC-SO-01:</strong> Guest can getObject after add</span
|
|
512
|
+
></label
|
|
513
|
+
>
|
|
514
|
+
<label class="flex items-start gap-1"
|
|
515
|
+
><input type="checkbox" class="mt-0.5" />
|
|
516
|
+
<span
|
|
517
|
+
><strong>TC-SO-02:</strong> Guest can't getObject after
|
|
518
|
+
remove</span
|
|
519
|
+
></label
|
|
520
|
+
>
|
|
521
|
+
<label class="flex items-start gap-1"
|
|
522
|
+
><input type="checkbox" class="mt-0.5" />
|
|
523
|
+
<span
|
|
524
|
+
><strong>TC-SO-04:</strong> Scoped object only visible to one
|
|
525
|
+
guest</span
|
|
526
|
+
></label
|
|
527
|
+
>
|
|
528
|
+
<label class="flex items-start gap-1"
|
|
529
|
+
><input type="checkbox" class="mt-0.5" />
|
|
530
|
+
<span
|
|
531
|
+
><strong>TC-EVT-01:</strong> All subscribed guests receive
|
|
532
|
+
event</span
|
|
533
|
+
></label
|
|
534
|
+
>
|
|
535
|
+
<label class="flex items-start gap-1"
|
|
536
|
+
><input type="checkbox" class="mt-0.5" />
|
|
537
|
+
<span
|
|
538
|
+
><strong>TC-EVT-02:</strong> Only targeted guest receives
|
|
539
|
+
event</span
|
|
540
|
+
></label
|
|
541
|
+
>
|
|
542
|
+
<label class="flex items-start gap-1"
|
|
543
|
+
><input type="checkbox" class="mt-0.5" />
|
|
544
|
+
<span
|
|
545
|
+
><strong>TC-EVT-03:</strong> Feedback return value in Dispatch
|
|
546
|
+
Results</span
|
|
547
|
+
></label
|
|
548
|
+
>
|
|
549
|
+
<label class="flex items-start gap-1"
|
|
550
|
+
><input type="checkbox" class="mt-0.5" />
|
|
551
|
+
<span
|
|
552
|
+
><strong>TC-EVT-04:</strong> Criteria filtering works</span
|
|
553
|
+
></label
|
|
554
|
+
>
|
|
555
|
+
</div>
|
|
556
|
+
<div>
|
|
557
|
+
<p class="font-semibold text-gray-600 mb-1">Lifecycle & Sandbox</p>
|
|
558
|
+
<label class="flex items-start gap-1"
|
|
559
|
+
><input type="checkbox" class="mt-0.5" />
|
|
560
|
+
<span
|
|
561
|
+
><strong>TC-LIFE-01:</strong> Unload removes guest iframe</span
|
|
562
|
+
></label
|
|
563
|
+
>
|
|
564
|
+
<label class="flex items-start gap-1"
|
|
565
|
+
><input type="checkbox" class="mt-0.5" />
|
|
566
|
+
<span
|
|
567
|
+
><strong>TC-LIFE-02:</strong> onGuestClose fires on guest
|
|
568
|
+
disconnect</span
|
|
569
|
+
></label
|
|
570
|
+
>
|
|
571
|
+
<label class="flex items-start gap-1"
|
|
572
|
+
><input type="checkbox" class="mt-0.5" />
|
|
573
|
+
<span
|
|
574
|
+
><strong>TC-LIFE-03:</strong> Close host destroys all
|
|
575
|
+
guests</span
|
|
576
|
+
></label
|
|
577
|
+
>
|
|
578
|
+
<label class="flex items-start gap-1"
|
|
579
|
+
><input type="checkbox" class="mt-0.5" />
|
|
580
|
+
<span
|
|
581
|
+
><strong>TC-SB-01:</strong> Default sandbox attrs present</span
|
|
582
|
+
></label
|
|
583
|
+
>
|
|
584
|
+
<label class="flex items-start gap-1"
|
|
585
|
+
><input type="checkbox" class="mt-0.5" />
|
|
586
|
+
<span
|
|
587
|
+
><strong>TC-SB-02:</strong> Custom sandbox attrs applied</span
|
|
588
|
+
></label
|
|
589
|
+
>
|
|
590
|
+
<label class="flex items-start gap-1"
|
|
591
|
+
><input type="checkbox" class="mt-0.5" />
|
|
592
|
+
<span
|
|
593
|
+
><strong>TC-SB-03:</strong> No sandbox attr when disabled</span
|
|
594
|
+
></label
|
|
595
|
+
>
|
|
596
|
+
</div>
|
|
597
|
+
</div>
|
|
598
|
+
</div>
|
|
599
|
+
</main>
|
|
600
|
+
|
|
601
|
+
<script src="./e2e-host.js" type="module"></script>
|
|
602
|
+
</body>
|
|
603
|
+
</html>
|