Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit a7dcbee

Browse files
authored
Merge branch 'master' into fixes/1435-comment-no-diff-lines
2 parents 532c04c + 3b3ee04 commit a7dcbee

File tree

2 files changed

+59
-20
lines changed

2 files changed

+59
-20
lines changed

src/GitHub.App/ViewModels/GitHubPane/NavigationViewModel.cs

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ public class NavigationViewModel : ViewModelBase, INavigationViewModel
2525
public NavigationViewModel()
2626
{
2727
history = new ReactiveList<IPanePageViewModel>();
28-
history.BeforeItemsAdded.Subscribe(BeforeItemAdded);
29-
history.CollectionChanged += CollectionChanged;
28+
history.Changing.Subscribe(CollectionChanging);
29+
history.Changed.Subscribe(CollectionChanged);
3030

3131
var pos = this.WhenAnyValue(
3232
x => x.Index,
@@ -107,7 +107,7 @@ public bool Forward()
107107
public void Clear()
108108
{
109109
Index = -1;
110-
history.RemoveRange(0, history.Count);
110+
history.Clear();
111111
}
112112

113113
public int RemoveAll(IPanePageViewModel page)
@@ -139,27 +139,34 @@ void ItemRemoved(int removedIndex, IPanePageViewModel page)
139139
}
140140
}
141141

142-
void CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
142+
void CollectionChanging(NotifyCollectionChangedEventArgs e)
143143
{
144-
using (DelayChangeNotifications())
144+
if (e.Action == NotifyCollectionChangedAction.Add)
145145
{
146-
switch (e.Action)
146+
foreach (IPanePageViewModel page in e.NewItems)
147147
{
148-
case NotifyCollectionChangedAction.Add:
149-
break;
150-
151-
case NotifyCollectionChangedAction.Remove:
152-
for (var i = 0; i < e.OldItems.Count; ++i)
153-
{
154-
ItemRemoved(e.OldStartingIndex + i, (IPanePageViewModel)e.OldItems[i]);
155-
}
156-
break;
157-
158-
case NotifyCollectionChangedAction.Reset:
159-
throw new NotSupportedException();
148+
BeforeItemAdded(page);
149+
}
150+
}
151+
else if (e.Action == NotifyCollectionChangedAction.Reset)
152+
{
153+
foreach (var page in history)
154+
{
155+
page.Dispose();
156+
}
157+
}
158+
}
160159

161-
default:
162-
throw new NotImplementedException();
160+
void CollectionChanged(NotifyCollectionChangedEventArgs e)
161+
{
162+
using (DelayChangeNotifications())
163+
{
164+
if (e.Action == NotifyCollectionChangedAction.Remove)
165+
{
166+
for (var i = 0; i < e.OldItems.Count; ++i)
167+
{
168+
ItemRemoved(e.OldStartingIndex + i, (IPanePageViewModel)e.OldItems[i]);
169+
}
163170
}
164171
}
165172
}

test/UnitTests/GitHub.App/ViewModels/GitHubPane/NavigationViewModelTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
24
using System.Reactive;
35
using System.Reactive.Linq;
46
using System.Reactive.Subjects;
@@ -309,6 +311,36 @@ public void CallsDeactivatedAndThenDisposedOnPages()
309311
first.Dispose();
310312
});
311313
}
314+
315+
[Test]
316+
public void DoesntThrowWhenHistoryHasMoreThan10Items()
317+
{
318+
var target = new NavigationViewModel();
319+
var pages = new List<IPanePageViewModel>();
320+
321+
for (var i = 0; i < 11; ++i)
322+
{
323+
var page = CreatePage();
324+
pages.Add(page);
325+
target.NavigateTo(page);
326+
}
327+
328+
foreach (var page in pages)
329+
{
330+
page.ClearReceivedCalls();
331+
}
332+
333+
target.Clear();
334+
335+
pages.Last().Received().Deactivated();
336+
pages.Last().Received().Dispose();
337+
338+
foreach (var page in pages.Take(pages.Count - 1))
339+
{
340+
page.DidNotReceive().Deactivated();
341+
page.Received().Dispose();
342+
}
343+
}
312344
}
313345

314346
public class TheRemoveMethod

0 commit comments

Comments
 (0)