public void Test_Invoke_ParamModeAuto2() { // Mode=Auto, プロパティ設定なし時 // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(true); // パラメータ用データ var argParam = new object(); var propParam = new object(); // テスト対象の準備 var target = new InvokeCommandAction(); target.CommandParameterMode = InvokeCommandAction.CommandParameterModeKind.Auto; target.Command = cmdMock.Object; //target.CommandParameter = propParam; // プロパティ設定なし // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを呼び出すためにトリガ実行 trigger.Invoke(argParam); // 呼び出し結果の検証 cmdMock.Verify(c => c.Execute(argParam), Times.Once()); cmdMock.Verify(c => c.Execute(propParam), Times.Never()); }
public void Test_AutoEnable_Restore_by_ClearCommand() { // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(false); // リンク先要素 var element = new UIElement(); element.IsEnabled.Should().Be(true); // 初期状態を一応確認 // テスト対象の準備 var target = new InvokeCommandAction(); target.AutoEnable = true; // テスト対象のアクションを呼び出すためのトリガ作成 var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // コマンド設定 target.Command = cmdMock.Object; // コマンド実行可能状態変更が反映されて状態適用されるはず element.IsEnabled.Should().Be(false); // コマンドクリア target.Command = null; // 元の有効状態に戻ること element.IsEnabled.Should().Be(true); }
public void Test_Invoke_NoCommand() { // 呼び出しコマンドが設定されていないとき // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(true); // パラメータ用データ var argParam = new object(); var propParam = new object(); // テスト対象の準備 (Command未設定) var target = new InvokeCommandAction(); target.CommandParameterMode = InvokeCommandAction.CommandParameterModeKind.Auto; target.CommandParameter = propParam; // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを呼び出すためにトリガ実行 new Action(() => trigger.Invoke(argParam)).Should().NotThrow(); }
public void Test_Invoke_Multiple() { // テスト用データモック var propMock = new Mock <IDisposable>(); var argMock = new Mock <IDisposable>(); // テスト対象の準備 var target = new ObjectDisposeAction(); target.Object = propMock.Object; target.DisposeParameter = true; // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを2回実行させる trigger.Invoke(argMock.Object); trigger.Invoke(argMock.Object); // 呼び出し結果の検証 propMock.Verify(c => c.Dispose(), Times.Exactly(2)); argMock.Verify(c => c.Dispose(), Times.Exactly(2)); }
public void Test_Invoke_without_Param() { // テスト用データモック var propMock = new Mock <IDisposable>(); var argMock = new Mock <IDisposable>(); // テスト対象の準備 var target = new ObjectDisposeAction(); target.Object = propMock.Object; target.DisposeParameter = false; // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを呼び出すためにトリガ実行 trigger.Invoke(argMock.Object); // 呼び出し結果の検証 propMock.Verify(c => c.Dispose(), Times.Once()); argMock.Verify(c => c.Dispose(), Times.Never()); }
public void Test_Invoke_DisposeError() { // テスト用データモック var propMock = new Mock <IDisposable>(); var argMock = new Mock <IDisposable>(); propMock.Setup(m => m.Dispose()).Throws(new Exception()); argMock.Setup(m => m.Dispose()).Throws(new Exception()); // テスト対象の準備 var target = new ObjectDisposeAction(); target.Object = propMock.Object; target.DisposeParameter = true; // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを呼び出すためにトリガ実行 new Action(() => trigger.Invoke(argMock.Object)).Should().NotThrow(); }
public void Test_AutoEnable_Disable_to_Enable() { // AutoEnable=Disable -> Enable -> Disable // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(false); // リンク先要素 var element = new UIElement(); element.IsEnabled.Should().Be(true); // 初期状態を一応確認 // テスト対象の準備 var target = new InvokeCommandAction(); target.AutoEnable = false; // テスト対象のアクションを呼び出すためのトリガ作成&アタッチ var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // コマンド設定 target.Command = cmdMock.Object; // コマンド実行可能状態変更(→true)して、変化無いことを確認 cmdMock.Setup_CanExecute(true); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(true); // 初期状態から変化無いこと // コマンド実行可能状態変更(→false)して、変化無いことを確認 cmdMock.Setup_CanExecute(false); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(true); // 初期状態から変化無いこと // リンク無効なので呼び出されないことの検証 cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.Never()); // リンク有効化。状態反映される確認 target.AutoEnable = true; element.IsEnabled.Should().Be(false); // コマンド状態にリンク cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.Once()); // 有効状態での状態変化のリンク cmdMock.Setup_CanExecute(true); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(true); // リンクして変化すること cmdMock.Setup_CanExecute(false); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(false); // リンクして変化すること }
public void Test_AutoEnable_Enable_SwitchCommand() { // AutoEnable=Enable -> Attach Element -> Set Command -> Switch Command // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(false); // リンク先要素 var element = new UIElement(); element.IsEnabled.Should().Be(true); // 初期状態を一応確認 // テスト対象の準備 var target = new InvokeCommandAction(); target.AutoEnable = true; // テスト対象のアクションを呼び出すためのトリガ作成 var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // コマンド設定 target.Command = cmdMock.Object; using (var elementMon = element.Monitor()) { // 同じ状態の別コマンドのモック var otherCcmd1Mock = new TestCommand(); otherCcmd1Mock.Setup_CanExecute(false); // コマンド差し替え target.Command = otherCcmd1Mock.Object; // 状態は維持されるし、一時的な変化も生じていないこと element.IsEnabled.Should().Be(false); elementMon.Should().NotRaise(nameof(element.IsEnabledChanged)); // 別状態の別コマンドのモック var otherCmd2Mock = new TestCommand(); otherCmd2Mock.Setup_CanExecute(true); // コマンド差し替え target.Command = otherCmd2Mock.Object; // 差し替え後の状態を反映していること element.IsEnabled.Should().Be(true); elementMon.Should().Raise(nameof(element.IsEnabledChanged)); } }
public void Test_AutoEnable_Enable_AttachElem_SetCommand() { // AutoEnable=Enable -> Attach Element -> Set Command // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(true); // リンク先要素 var element = new UIElement(); element.IsEnabled.Should().Be(true); // 初期状態を一応確認 // テスト対象の準備 var target = new InvokeCommandAction(); target.AutoEnable = true; // テスト対象のアクションを呼び出すためのトリガ作成 var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // コマンド設定 target.Command = cmdMock.Object; // リンク有効なのでアタッチ時点で呼び出しがあるはず cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.AtLeastOnce()); // コマンド実行可能状態変更(→false)して、連携することを確認 cmdMock.Invocations.Clear(); cmdMock.Setup_CanExecute(false); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(false); // リンク有効なので呼び出しがあるはず cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.AtLeastOnce()); // コマンド実行可能状態変更(→false)して、連携することを確認 cmdMock.Invocations.Clear(); cmdMock.Setup_CanExecute(true); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(true); // リンク有効なので呼び出しがあるはず cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.AtLeastOnce()); }
public void Test_ParameterConverter_ModeAuto2() { // Mode=Auto, プロパティ設定あり時 // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(true); // コンバータのモック var convMock = new TestValueConverter(); convMock.Setup_Convert((value, t, param, c) => "test"); // パラメータ用データ var argParam = new object(); var propParam = new object(); // テスト対象の準備 var target = new InvokeCommandAction(); target.Command = cmdMock.Object; target.CommandParameterMode = InvokeCommandAction.CommandParameterModeKind.Auto; //target.CommandParameter = propParam; // プロパティ設定なし target.ParameterConverter = convMock.Object; // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを呼び出すためにトリガ実行 trigger.Invoke(argParam); // 呼び出し結果の検証 cmdMock.Verify(c => c.Execute(argParam), Times.Never()); cmdMock.Verify(c => c.Execute(propParam), Times.Never()); cmdMock.Verify(c => c.Execute("test"), Times.Once()); convMock.Verify(c => c.Convert(argParam, It.IsAny <Type>(), null, It.IsAny <CultureInfo>()), Times.Once()); }
public void Test_AutoEnable_Disable_SetCommand_AttachElem() { // AutoEnable=Disable -> Set Command -> Attach Element // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(false); // リンク先要素 var element = new UIElement(); element.IsEnabled.Should().Be(true); // 初期状態を一応確認 // テスト対象の準備 var target = new InvokeCommandAction(); target.AutoEnable = false; // コマンド設定 target.Command = cmdMock.Object; // テスト対象のアクションを呼び出すためのトリガ作成 var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // コマンド実行可能状態変更(→true)して、変化無いことを確認 cmdMock.Setup_CanExecute(true); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(true); // 変化無いこと // コマンド実行可能状態変更(→false)して、変化無いことを確認 cmdMock.Setup_CanExecute(false); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(true); // 変化無いこと // リンク無効なので呼び出されないことの検証 cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.Never()); }
public void Test_Invoke_ParamBinding_Property() { // Mode=Auto // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(true); // テスト対象の準備 var target = new InvokeCommandAction(); target.CommandParameterMode = InvokeCommandAction.CommandParameterModeKind.Property; target.Command = cmdMock.Object; // バインドソース var argParam = new object(); var propParam = new ReactivePropertySlim <object>(new object()); // バインド var binding = new Binding(); binding.Mode = BindingMode.OneWay; binding.Source = propParam; binding.Path = new PropertyPath(nameof(propParam.Value)); BindingOperations.SetBinding(target, InvokeCommandAction.CommandParameterProperty, binding); // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを呼び出すためにトリガ実行 trigger.Invoke(argParam); // 呼び出し結果の検証 cmdMock.Verify(c => c.Execute(argParam), Times.Never()); cmdMock.Verify(c => c.Execute(propParam.Value), Times.Once()); }
public void Test_ParameterConverter_Error() { // Mode=Auto, プロパティ設定あり時 // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(true); // コンバータのモック var convMock = new TestValueConverter(); convMock.Setup_Convert_Throws(new Exception()); // パラメータ用データ var argParam = new object(); var propParam = new object(); // テスト対象の準備 var target = new InvokeCommandAction(); target.Command = cmdMock.Object; target.CommandParameterMode = InvokeCommandAction.CommandParameterModeKind.Auto; target.ParameterConverter = convMock.Object; // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを呼び出すためにトリガ実行 trigger.Invoke(argParam); // 呼び出し結果の検証 cmdMock.Verify(c => c.Execute(null), Times.Once()); }