1package webkit
2
3import (
4 "testing"
5
6 "github.com/bnema/puregotk/v4/webkit"
7 "github.com/stretchr/testify/assert"
8)
9
10// TestAccentDetectionScriptInjectionMode verifies that the accent detection
11// script is configured for all-frames injection (not top-frame only).
12// This ensures the script runs in iframes as well as the top-level document.
13func TestAccentDetectionScriptInjectionMode(t *testing.T) {
14 assert.Equal(t,
15 webkit.UserContentInjectAllFramesValue,
16 accentDetectionInjectionMode,
17 "accent detection script must inject into all frames, not just the top frame",
18 )
19}
20
21func TestAccentDetectionScriptTracksLastFocusedEditableElement(t *testing.T) {
22 assert.Contains(t,
23 accentDetectionScript,
24 "window.__dumber_lastEditableEl = e.target",
25 "accent detection script must track the last focused editable element",
26 )
27 assert.Contains(t,
28 accentDetectionScript,
29 "document.addEventListener('focusin'",
30 "accent detection script must register a focusin listener",
31 )
32}
33
34func TestExplicitCopyScriptCapturesClipboardOperations(t *testing.T) {
35 script := buildExplicitCopyScript()
36
37 assert.Contains(t, script, "explicit_text_copy")
38 assert.Contains(t, script, "document.addEventListener('copy'")
39 assert.Contains(t, script, "document.addEventListener('cut'")
40 assert.Contains(t, script, "document.execCommand")
41 assert.Contains(t, script, "navigator.clipboard.writeText")
42 assert.Contains(t, script, "navigator.userActivation")
43 assert.Contains(t, script, "var userActivated = hasUserActivation()")
44 assert.Contains(t, script, "if (userActivated)")
45 assert.Contains(t, script, "try {")
46 assert.Contains(t, script, "finally {")
47 assert.Contains(t, script, "pendingCommand === command")
48}
49
50func TestExplicitCopyScriptReadsInputAndTextareaSelectionFirst(t *testing.T) {
51 script := buildExplicitCopyScript()
52
53 assert.Contains(t, script, "document.activeElement")
54 assert.Contains(t, script, "selectionStart")
55 assert.Contains(t, script, "selectionEnd")
56 assert.Contains(t, script, "INPUT")
57 assert.Contains(t, script, "TEXTAREA")
58 assert.Contains(t, script, "type || '').toLowerCase()")
59 assert.Contains(t, script, "case 'password':")
60}