1package webkit
2
3import (
4 "context"
5 "testing"
6
7 "github.com/bnema/dumber/internal/application/port"
8 "github.com/bnema/dumber/internal/domain/entity"
9 "github.com/stretchr/testify/require"
10)
11
12func TestEngine_UpdateSettings_AcceptsTypedSettingsPayload(t *testing.T) {
13 e := &Engine{settings: NewSettingsManager(context.Background(), entity.EngineSettingsPayload{})}
14
15 err := e.UpdateSettings(context.Background(), entity.EngineSettingsUpdate{
16 Settings: entity.EngineSettingsPayload{
17 DefaultUIScale: 1.25,
18 WebContent: entity.EngineWebContentSettingsPayload{
19 SansFont: "Inter",
20 EnableDevTools: true,
21 CaptureConsole: true,
22 DrawCompositingIndicators: true,
23 HardwareDecoding: entity.EngineHardwareDecodingDisable,
24 },
25 },
26 })
27 require.NoError(t, err)
28 require.Equal(t, "Inter", e.settings.current().WebContent.SansFont)
29 require.True(t, e.settings.current().WebContent.EnableDevTools)
30 require.True(t, e.settings.current().WebContent.CaptureConsole)
31 require.True(t, e.settings.current().WebContent.DrawCompositingIndicators)
32 require.Equal(t, entity.EngineHardwareDecodingDisable, e.settings.current().WebContent.HardwareDecoding)
33}
34
35func TestEngine_UpdateSettings_NilSettings(t *testing.T) {
36 // settings is nil — should not panic, just be a no-op.
37 e := &Engine{}
38 err := e.UpdateSettings(context.Background(), entity.EngineSettingsUpdate{})
39 require.NoError(t, err)
40}
41
42func TestEngine_RegisterHandlers_NilRouter(t *testing.T) {
43 e := &Engine{}
44 err := e.RegisterHandlers(context.Background(), port.HandlerDependencies{})
45 require.Error(t, err)
46 require.Contains(t, err.Error(), "message router not initialized")
47}
48
49func TestEngine_RegisterAccentHandlers_NilRouter(t *testing.T) {
50 e := &Engine{}
51 err := e.RegisterAccentHandlers(context.Background(), nil)
52 require.Error(t, err)
53 require.Contains(t, err.Error(), "message router not initialized")
54}
55
56func TestEngine_ConfigureDownloads_NilContext(t *testing.T) {
57 e := &Engine{}
58 err := e.ConfigureDownloads(context.Background(), "/tmp", nil, nil)
59 require.Error(t, err)
60 require.Contains(t, err.Error(), "webkit context not initialized")
61}
62
63func TestNewDownloadHandler_NilPreparer_NoPanic(t *testing.T) {
64 // After removing the panic, NewDownloadHandler with nil preparer should
65 // not panic. The caller (ConfigureDownloads) is responsible for validation.
66 require.NotPanics(t, func() {
67 _ = NewDownloadHandler("/tmp", nil, nil)
68 })
69}
70
71func TestEngine_Close_NilPool(t *testing.T) {
72 e := &Engine{}
73 err := e.Close()
74 require.NoError(t, err)
75}
76
77func TestEngineConfigureContentInjectorAutoCopyGetterReadsCurrentPayload(t *testing.T) {
78 settings := NewSettingsManager(context.Background(), entity.EngineSettingsPayload{})
79 injector := NewContentInjector(nil)
80
81 engineConfigureContentInjectorRuntimeSettings(injector, settings)
82
83 require.NotNil(t, injector.autoCopyConfigGetter)
84 require.False(t, injector.autoCopyConfigGetter())
85
86 settings.UpdateFromPayload(context.Background(), entity.EngineSettingsPayload{
87 WebContent: entity.EngineWebContentSettingsPayload{
88 AutoCopyOnSelection: true,
89 },
90 })
91
92 require.True(t, injector.autoCopyConfigGetter())
93}