1package config
2
3import (
4 "testing"
5
6 "github.com/spf13/viper"
7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
9)
10
11func TestModeLegendDefaultsThroughLoader(t *testing.T) {
12 mgr := &Manager{viper: viper.New()}
13 mgr.setDefaults()
14 cfg, err := mgr.unmarshalConfig()
15 require.NoError(t, err)
16 assert.Equal(t, "delay", cfg.Workspace.Styling.ModeLegend)
17 assert.Equal(t, 500, cfg.Workspace.Styling.ModeLegendDelayMs)
18 assert.True(t, cfg.Workspace.Styling.ModeLegendAnimations)
19 assert.True(t, cfg.Workspace.Styling.ModeLegendLinger)
20 assert.False(t, cfg.Workspace.Styling.ModeLegendCollapsed)
21 assert.Equal(t, "#F7768E", cfg.Workspace.Styling.VimModeColor)
22}
23
24func TestSetEngineDefaults(t *testing.T) {
25 mgr := &Manager{viper: viper.New()}
26 mgr.setDefaults()
27
28 // Universal engine fields
29 assert.Equal(t, EngineTypeCEF, mgr.viper.GetString("engine.type"))
30 assert.Equal(t, "default", mgr.viper.GetString("engine.profile"))
31 assert.Equal(t, "always", mgr.viper.GetString("engine.cookie_policy"))
32 assert.Equal(t, 4, mgr.viper.GetInt("engine.pool_prewarm_count"))
33 assert.Equal(t, 256, mgr.viper.GetInt("engine.zoom_cache_size"))
34 assert.InDelta(t, defaultCEFScrollMultiplier, mgr.viper.GetFloat64("engine.cef.input.scroll_wheel_multiplier"), 0.001)
35 assert.InDelta(t, defaultCEFScrollPreciseMultiplier, mgr.viper.GetFloat64("engine.cef.input.scroll_precise_multiplier"), 0.001)
36 assert.InDelta(t, defaultCEFScrollMultiplier, mgr.viper.GetFloat64("engine.cef.input.scroll_horizontal_multiplier"), 0.001)
37 assert.InDelta(t, defaultCEFScrollMultiplier, mgr.viper.GetFloat64("engine.cef.input.scroll_vertical_multiplier"), 0.001)
38 assert.Equal(t, defaultCEFScrollMaxDelta, mgr.viper.GetInt("engine.cef.input.scroll_max_delta"))
39 assert.Equal(t, defaultCEFScrollTouchpadInertia, mgr.viper.GetBool("engine.cef.input.scroll_touchpad_inertia"))
40 assert.Equal(t, defaultCEFScrollWheelSmoothing, mgr.viper.GetBool("engine.cef.input.scroll_wheel_smoothing"))
41 assert.True(t, mgr.viper.GetBool("engine.cef.input.scroll_touchpad_inertia"))
42 assert.True(t, mgr.viper.GetBool("engine.cef.input.scroll_wheel_smoothing"))
43 assert.Equal(t, defaultCEFTouchpadNavigation, mgr.viper.GetBool("engine.cef.input.touchpad_navigation_enabled"))
44 assert.InDelta(t, defaultCEFTouchpadNavigationDelta, mgr.viper.GetFloat64("engine.cef.input.touchpad_navigation_min_delta"), 0.001)
45 assert.InDelta(t, defaultCEFTouchpadNavigationRatio, mgr.viper.GetFloat64("engine.cef.input.touchpad_navigation_max_vertical_ratio"), 0.001)
46
47 // WebKit-specific engine fields
48 assert.True(t, mgr.viper.GetBool("engine.webkit.itp_enabled"))
49 assert.Equal(t, "auto", mgr.viper.GetString("engine.webkit.gsk_renderer"))
50 assert.Equal(t, "auto", mgr.viper.GetString("engine.webkit.gl_rendering_mode"))
51 assert.False(t, mgr.viper.GetBool("engine.webkit.disable_dmabuf_renderer"))
52
53 // Old sections should NOT be registered as defaults
54 assert.Empty(t, mgr.viper.GetString("privacy.cookie_policy"))
55 assert.Empty(t, mgr.viper.GetString("rendering.mode"))
56 assert.Empty(t, mgr.viper.GetString("performance.profile"))
57 assert.Empty(t, mgr.viper.GetString("runtime.prefix"))
58}
59
60func TestScrollInertiaOptions_ExplicitFalseSurvivesUnmarshal(t *testing.T) {
61 mgr := &Manager{viper: viper.New()}
62 mgr.setDefaults()
63 mgr.viper.Set("engine.cef.input.scroll_touchpad_inertia", false)
64 mgr.viper.Set("engine.cef.input.scroll_wheel_smoothing", false)
65
66 cfg, err := mgr.unmarshalConfig()
67 require.NoError(t, err)
68 assert.False(t, cfg.Engine.CEF.Input.ScrollTouchpadInertia)
69 assert.False(t, cfg.Engine.CEF.Input.ScrollWheelSmoothing)
70}
71
72func TestScrollInertiaOptions_DefaultTrueThroughUnmarshal(t *testing.T) {
73 mgr := &Manager{viper: viper.New()}
74 mgr.setDefaults()
75
76 cfg, err := mgr.unmarshalConfig()
77 require.NoError(t, err)
78 assert.True(t, cfg.Engine.CEF.Input.ScrollTouchpadInertia)
79 assert.True(t, cfg.Engine.CEF.Input.ScrollWheelSmoothing)
80}
81
82func TestNormalizeExternalLinks(t *testing.T) {
83 cfg := DefaultConfig()
84 cfg.Workspace.ExternalLinks.Behavior = "invalid"
85 cfg.Workspace.ExternalLinks.Placement = "invalid"
86
87 normalizeConfig(cfg)
88
89 assert.Equal(t, ExternalLinkBehaviorWindowed, cfg.Workspace.ExternalLinks.Behavior)
90 assert.Equal(t, ExternalLinkPlacementRight, cfg.Workspace.ExternalLinks.Placement)
91}
92
93func TestNormalizeConfig_EngineCookiePolicy(t *testing.T) {
94 cfg := DefaultConfig()
95 cfg.Engine.CookiePolicy = CookiePolicy("INVALID")
96
97 normalizeConfig(cfg)
98
99 assert.Equal(t, CookiePolicyAlways, cfg.Engine.CookiePolicy)
100}