using SpdUp.Core; namespace SpdUp.Tests; /// /// Tests for RelayCommand and RelayCommand<T>. /// public class RelayCommandTests { [Fact] public void Execute_InvokesAction() { bool executed = false; var cmd = new RelayCommand(() => executed = true); cmd.Execute(null); Assert.True(executed); } [Fact] public void Execute_WithParameter_InvokesParameterizedAction() { object? received = null; var cmd = new RelayCommand(p => received = p); cmd.Execute("test"); Assert.Equal("test", received); } [Fact] public void CanExecute_DefaultsToTrue() { var cmd = new RelayCommand(() => { }); Assert.True(cmd.CanExecute(null)); } [Fact] public void CanExecute_RespectsCanExecuteFunc() { var cmd = new RelayCommand(() => { }, () => false); Assert.False(cmd.CanExecute(null)); } [Fact] public void CanExecute_ParameterizedPredicate() { var cmd = new RelayCommand(_ => { }, p => p is "go"); Assert.True(cmd.CanExecute("go")); Assert.False(cmd.CanExecute("stop")); Assert.False(cmd.CanExecute(null)); } [Fact] public void Constructor_ThrowsOnNullAction() { Assert.Throws(() => new RelayCommand((Action)null!)); } // ── Generic RelayCommand ────────────────────────────── [Fact] public void Generic_Execute_InvokesWithTypedParameter() { string? received = null; var cmd = new RelayCommand(s => received = s); cmd.Execute("hello"); Assert.Equal("hello", received); } [Fact] public void Generic_CanExecute_DefaultsToTrue() { var cmd = new RelayCommand(_ => { }); Assert.True(cmd.CanExecute(42)); } [Fact] public void Generic_CanExecute_RespectsFunc() { var cmd = new RelayCommand(_ => { }, n => n > 0); Assert.True(cmd.CanExecute(5)); Assert.False(cmd.CanExecute(-1)); } [Fact] public void Generic_Constructor_ThrowsOnNullAction() { Assert.Throws(() => new RelayCommand(null!)); } }