/// <summary> /// /// </summary> /// <param name="canExecute"></param> /// <param name="executed"></param> /// <param name="scheduler"></param> /// <returns></returns> public static ReactiveCommand Create(Func<object, bool> canExecute, Action<object> executed = null, IScheduler scheduler = null) { var ret = new ReactiveCommand(canExecute, scheduler); if (executed != null) { ret.Subscribe(executed); } return ret; }
public void CompletelyDefaultReactiveCommandShouldFire() { var sched = new TestScheduler(); var fixture = new ReactiveCommand(null, sched); Assert.IsTrue(fixture.CanExecute(null)); string result = null; fixture.Subscribe(x => result = x as string); fixture.Execute("Test"); sched.Run(); Assert.AreEqual("Test", result); fixture.Execute("Test2"); sched.Run(); Assert.AreEqual("Test2", result); }
public void ObservableExecuteFuncShouldBeObservableAndAct() { var executed_params = new List<object>(); var fixture = new ReactiveCommand(x => executed_params.Add(x)); var observed_params = new ReplaySubject<object>(); fixture.Subscribe(observed_params.OnNext, observed_params.OnError, observed_params.OnCompleted); var range = Enumerable.Range(0, 5); range.Run(x => fixture.Execute(x)); range.Zip(executed_params, (expected, actual) => new { expected, actual }) .Run(x => Assert.AreEqual(x.expected, x.actual)); range.ToObservable() .Zip(observed_params, (expected, actual) => new { expected, actual }) .Do(Console.WriteLine) .Subscribe(x => Assert.AreEqual(x.expected, x.actual)); }
public void ActionExceptionShouldntPermabreakCommands() { var input = new[] {1,2,3,4}; var fixture = new ReactiveCommand(x => { if (((int)x) == 2) throw new Exception("Die!"); }); var exception_list = new List<Exception>(); var out_list = new List<int>(); fixture.Subscribe(x => out_list.Add((int)x), ex => exception_list.Add(ex)); bool we_threw = false; foreach (int i in input) { try { fixture.Execute(i); } catch { we_threw = true; if (i != 2) throw; } } Assert.IsTrue(we_threw); input.Zip(out_list, (expected, actual) => new { expected, actual }) .Run(x => Assert.AreEqual(x.expected, x.actual)); // Now, make sure that the command isn't broken fixture.Execute(5); Console.WriteLine(String.Join(",", out_list)); Assert.AreEqual(5, out_list.Count); }