public async Task WatcherRaisesTheChangedEventOnStart() { using var watcher = new BindingsWatcher(_gif, _gof); var evs = new EventCollector <BindingPreset>(h => watcher.Changed += h, h => watcher.Changed -= h, nameof(WatcherRaisesTheChangedEventOnStart)); var binds = await evs.WaitAsync(() => { watcher.Start(); watcher.Stop(); }).ConfigureAwait(false); Assert.Null(binds.PresetName); // "Custom" and "Custom2" get merged to null. Assert.Equal(new Version(3, 0), binds.Version); Assert.Equal("es-ES", binds.KeyboardLayout); var k = binds.Bindings["Supercruise"].Primary; Assert.Equal("Keyboard", k.Device); Assert.Equal("Key_H", k.Key); Assert.Equal(2, k.Modifiers.Count); var modifiers = k.Modifiers.OrderBy(x => x.Key).ToList(); Assert.Equal("Keyboard", modifiers[0].Device); Assert.Equal("Key_LeftAlt", modifiers[0].Key); Assert.Equal("Keyboard", modifiers[1].Device); Assert.Equal("Key_LeftShift", modifiers[1].Key); }
internal GameStateWatcher(string gameInstallFolder, string gameOptionsFolder, string journalFolder, INativeMethods nativeMethods) { var gif = new GameInstallFolder(gameInstallFolder); var gof = new GameOptionsFolder(gameOptionsFolder); var jf = new JournalFolder(journalFolder); _journalWatcher = new JournalWatcher(jf); _journalWatcher.Started += JournalWatcher_Started; _journalWatcher.EntryAdded += JournalWatcher_EntryAdded; _statusWatcher = new StatusWatcher(jf); _statusWatcher.Changed += StatusWatcher_Changed; _bindingsWatcher = new BindingsWatcher(gif, gof); _bindingsWatcher.Changed += BindingsWatcher_Changed; _graphicsConfig = new GraphicsConfigWatcher(gif, gof); _graphicsConfig.Changed += GraphicsConfig_Changed; _modifierKeysWatcher = new ModifierKeysWatcher(nativeMethods); _modifierKeysWatcher.Changed += ModifierKeysWatcher_Changed; _gameProcessWatcher = new GameProcessWatcher(gif, nativeMethods); _gameProcessWatcher.Changed += GameProcessWatcher_Changed; _gameState = new GameState(); }
public void WatcherDoesNotThrowWhenDisposingTwice() { var watcher = new BindingsWatcher(_gif, _gof); #pragma warning disable IDISP016, IDISP017 watcher.Dispose(); watcher.Dispose(); #pragma warning restore IDISP016, IDISP017 }
public void StartAndStopAreNotReentrant() { using var watcher = new BindingsWatcher(_gif, _gof); bool IsRunning() => watcher.GetPrivateField <bool>("_running"); Assert.False(IsRunning()); watcher.Start(); Assert.True(IsRunning()); watcher.Start(); Assert.True(IsRunning()); watcher.Stop(); Assert.False(IsRunning()); watcher.Stop(); Assert.False(IsRunning()); }
public async Task WatchesForChangesInTheBidingsFiles() { using var dirMain = new TestFolder(_gif.FullName); using var dirOpts = new TestFolder(_gof.FullName); using var watcher = new BindingsWatcher(new GameInstallFolder(dirMain.Name), new GameOptionsFolder(dirOpts.Name)); watcher.Start(); var evs = new EventCollector <BindingPreset>(h => watcher.Changed += h, h => watcher.Changed -= h, nameof(WatchesForChangesInTheBidingsFiles)); var bindsCustom = dirOpts.ReadText(_customFile); var binds = await evs.WaitAsync(() => dirOpts.WriteText(_customFile, string.Empty), 100).ConfigureAwait(false); Assert.Null(binds); binds = await evs.WaitAsync(() => dirOpts.WriteText(_customFile, bindsCustom)).ConfigureAwait(false); Assert.NotNull(binds); binds = await evs.WaitAsync(() => dirOpts.WriteText(_startPresetFile, "Keyboard")).ConfigureAwait(false); Assert.NotNull(binds); }
public void WatcherThrowsWhenTheGameOptionsFolderIsNotAValidOptionsFolder() { var ex = Assert.Throws <ArgumentException>(() => { using var x = new BindingsWatcher(_gif, new GameOptionsFolder(@"TestFiles")); }); Assert.Contains("' is not a valid Elite:Dangerous game options folder.", ex.Message, StringComparison.Ordinal); }