public void UpdatesSelectionInfo() { var shaGenerator = new PseudoShaGenerator(); var firstCommit = CommitMock.GenerateCommit(shaGenerator, null, 0); var secondCommit = CommitMock.GenerateCommit(shaGenerator, firstCommit.Yield(), 1); var diff = new DiffMock(null, (_1, _2, _3) => new TreeChangesMock(new List <TreeEntryChanges>())); var head = new BranchMock(true, false, null, secondCommit, "HEAD"); var compareOptions = new CompareOptions(); var compareOptionsObs = Observable.Return(compareOptions); var repo = new RepositoryMock(new CommitMock[] { firstCommit, secondCommit }, new BranchCollectionMock(head.Yield().ToList()), null, diff); using var oldCommit = new BehaviorSubject <Variant <Commit, DiffTargets>?>(null); using var newCommit = new BehaviorSubject <Variant <Commit, DiffTargets>?>(null); var repoObservable = Observable.Return(repo).Concat(Observable.Never <IRepositoryWrapper>()); var input = Observable .CombineLatest(oldCommit, newCommit, compareOptionsObs, repoObservable, (o, n, c, r) => new DiffViewModelInput(r, o, n, c)); using var vm = new DiffViewModel(new TestSchedulers(), input); var selectionInfo = new List <Variant <string, Unexpected, List <TreeEntryChanges>, Commit> >(); var resetEvent = new AutoResetEvent(false); using var _ = vm.SelectionInfo .Subscribe(info => { selectionInfo.Add(info); resetEvent.Set(); }); resetEvent.WaitOne(TimeSpan.FromSeconds(5)); newCommit.OnNext(DiffTargets.WorkingDirectory); resetEvent.WaitOne(TimeSpan.FromSeconds(5)); oldCommit.OnNext(secondCommit); resetEvent.WaitOne(TimeSpan.FromSeconds(5)); newCommit.OnNext(firstCommit); resetEvent.WaitOne(TimeSpan.FromSeconds(5)); oldCommit.OnNext(null); resetEvent.WaitOne(TimeSpan.FromSeconds(5)); Assert.AreEqual(5, selectionInfo.Count); Assert.AreEqual(0, selectionInfo[0].VariantIndex); Assert.AreEqual(2, selectionInfo[1].VariantIndex); Assert.AreEqual(0, selectionInfo[2].VariantIndex); Assert.AreEqual(0, selectionInfo[3].VariantIndex); Assert.AreEqual(3, selectionInfo[4].VariantIndex); Assert.AreEqual(firstCommit, selectionInfo[4].Fourth); }
public void CanCreateInstance() { var diff = new DiffMock(null, null); var oldCommit = Observable.Return((Variant <Commit, DiffTargets>?)null).Concat(Observable.Never <Variant <Commit, DiffTargets>?>()); var newCommit = Observable.Return((Variant <Commit, DiffTargets>?)null).Concat(Observable.Never <Variant <Commit, DiffTargets>?>()); var compareOptions = Observable.Return(new CompareOptions()).Concat(Observable.Never <CompareOptions>()); var repo = new RepositoryMock(new List <CommitMock>(), new BranchCollectionMock(new List <BranchMock>()), null, diff); var repoObservable = Observable.Return(repo).Concat(Observable.Never <IRepositoryWrapper>()); var input = Observable .CombineLatest(oldCommit, newCommit, compareOptions, repoObservable, (o, n, c, r) => new DiffViewModelInput(r, o, n, c)); var vm = new DiffViewModel(new TestSchedulers(), input); Variant <List <TreeEntryChanges>, Unexpected>?value = null; using var subscription = vm.TreeDiff.Subscribe(treeDiff => value = treeDiff); if (value is null) { throw new Exception("Value was not set."); } Assert.IsTrue(value.Is <Unexpected>()); Assert.AreEqual(DiffViewModel.NoCommitSelectedMessage, value.Get <Unexpected>().Message); }