(t *testing.T)
| 121 | } |
| 122 | |
| 123 | func TestDynamicKeyMapReloading(t *testing.T) { |
| 124 | if runtime.GOOS == "windows" { |
| 125 | t.Skip("Skipping on Windows: GetSurgeDir uses %APPDATA% and does not honor XDG_CONFIG_HOME") |
| 126 | } |
| 127 | |
| 128 | tmpDir, err := os.MkdirTemp("", "surge-tui-keymap-test") |
| 129 | if err != nil { |
| 130 | t.Fatalf("Failed to create temp dir: %v", err) |
| 131 | } |
| 132 | defer func() { |
| 133 | _ = os.RemoveAll(tmpDir) |
| 134 | }() |
| 135 | |
| 136 | // Override configuration directory |
| 137 | t.Setenv("XDG_CONFIG_HOME", tmpDir) |
| 138 | |
| 139 | err = config.EnsureDirs() |
| 140 | if err != nil { |
| 141 | t.Fatalf("Failed to ensure directories: %v", err) |
| 142 | } |
| 143 | |
| 144 | // 1. Initialize keymap and verify default state |
| 145 | km, err := config.LoadKeyMap() |
| 146 | if err != nil { |
| 147 | t.Fatalf("Failed to load keymap: %v", err) |
| 148 | } |
| 149 | |
| 150 | m := RootModel{ |
| 151 | keys: km, |
| 152 | lastKeyMapModTime: time.Now().Add(-10 * time.Second), // Ensure modTime is older |
| 153 | lastConfigCheckTime: time.Now().Add(-2 * time.Second), // Ensure check triggers |
| 154 | } |
| 155 | |
| 156 | if len(m.keys.Dashboard.ToggleHelp.Keys()) != 1 || m.keys.Dashboard.ToggleHelp.Keys()[0] != "h" { |
| 157 | t.Errorf("Expected default ToggleHelp key 'h', got %v", m.keys.Dashboard.ToggleHelp.Keys()) |
| 158 | } |
| 159 | |
| 160 | // 2. Simulate user editing keymap.json on disk |
| 161 | customKeyMap := config.DefaultKeyMap() |
| 162 | customKeyMap.Dashboard.ToggleHelp = key.NewBinding( |
| 163 | key.WithKeys("ctrl+x"), |
| 164 | key.WithHelp("ctrl+x", "keybindings"), |
| 165 | ) |
| 166 | |
| 167 | // Save custom keymap to temp directory |
| 168 | err = config.SaveKeyMap(customKeyMap) |
| 169 | if err != nil { |
| 170 | t.Fatalf("Failed to save custom keymap: %v", err) |
| 171 | } |
| 172 | |
| 173 | // Update modTime on disk to simulate fresh write in the past |
| 174 | keymapPath := config.GetKeyMapConfigPath() |
| 175 | now := time.Now() |
| 176 | err = os.Chtimes(keymapPath, now, now) |
| 177 | if err != nil { |
| 178 | t.Fatalf("Failed to set file times: %v", err) |
| 179 | } |
| 180 |
nothing calls this directly
no test coverage detected