Display traits in tree view with check boxes

This commit is contained in:
Dustin Campbell
2015-12-04 14:30:45 -08:00
parent 8ceecdcf03
commit f1879e1a06
12 changed files with 296 additions and 156 deletions
+22 -14
View File
@@ -50,7 +50,7 @@ namespace xunit.runner.wpf.ViewModel
this.WindowLoadedCommand = new RelayCommand(OnExecuteWindowLoaded);
this.RunCommand = new RelayCommand(OnExecuteRun, CanExecuteRun);
this.CancelCommand = new RelayCommand(OnExecuteCancel, CanExecuteCancel);
this.TraitSelectionChangedCommand = new RelayCommand(OnExecuteTraitSelectionChanged);
this.TraitCheckedChangedCommand = new RelayCommand<TraitViewModel>(OnExecuteTraitCheckedChanged);
this.TraitsClearCommand = new RelayCommand(OnExecuteTraitsClear);
this.AssemblyReloadCommand = new RelayCommand(OnExecuteAssemblyReload, CanExecuteAssemblyReload);
this.AssemblyReloadAllCommand = new RelayCommand(OnExecuteAssemblyReloadAll);
@@ -113,6 +113,7 @@ namespace xunit.runner.wpf.ViewModel
public ICommand WindowLoadedCommand { get; }
public RelayCommand RunCommand { get; }
public RelayCommand CancelCommand { get; }
public ICommand TraitCheckedChangedCommand { get; }
public ICommand TraitSelectionChangedCommand { get; }
public ICommand TraitsClearCommand { get; }
public ICommand AssemblyReloadCommand { get; }
@@ -354,7 +355,7 @@ namespace xunit.runner.wpf.ViewModel
this.traitCollectionView.Collection.Clear();
foreach (var testCase in this.allTestCases)
{
this.traitCollectionView.Add(testCase.Traits);
this.traitCollectionView.AddRange(testCase.Traits);
}
}
@@ -476,18 +477,18 @@ namespace xunit.runner.wpf.ViewModel
}
}
private void OnTestDiscovered(List<TestCaseData> testCaseData)
private void OnTestDiscovered(List<TestCaseData> testCaseDataList)
{
var allTraits = new SortedDictionary<string, SortedSet<string>>();
foreach (var data in testCaseData)
foreach (var data in testCaseDataList)
{
AddTraits(allTraits, data);
}
this.allTestCases.AddRange(testCaseData.Select(d =>
new TestCaseViewModel(d.DisplayName, d.AssemblyPath, Convert(CreateSortedTraits(d)).ToImmutableArray())));
this.traitCollectionView.Add(Convert(allTraits));
this.allTestCases.AddRange(testCaseDataList.Select(d =>
new TestCaseViewModel(d.DisplayName, d.AssemblyPath, Convert(CreateSortedTraits(d)))));
this.traitCollectionView.AddRange(Convert(allTraits));
}
private SortedDictionary<string, SortedSet<string>> CreateSortedTraits(TestCaseData data)
@@ -499,7 +500,16 @@ namespace xunit.runner.wpf.ViewModel
private static IEnumerable<TraitViewModel> Convert(SortedDictionary<string, SortedSet<string>> allTraits)
{
return allTraits.SelectMany(pair => pair.Value.Select(value => new TraitViewModel(pair.Key, value)));
foreach (var trait in allTraits)
{
var name = trait.Key;
var values = trait.Value;
var viewModel = new TraitViewModel(name);
viewModel.AddValues(values);
yield return viewModel;
}
}
private static void AddTraits(SortedDictionary<string, SortedSet<string>> allTraits, TestCaseData data)
@@ -562,11 +572,9 @@ namespace xunit.runner.wpf.ViewModel
this.cancellationTokenSource.Cancel();
}
private void OnExecuteTraitSelectionChanged()
private void OnExecuteTraitCheckedChanged(TraitViewModel trait)
{
this.searchQuery.TraitSet = new HashSet<TraitViewModel>(
this.traitCollectionView.Collection.Where(x => x.IsSelected),
TraitViewModelComparer.Instance);
this.searchQuery.TraitSet = this.traitCollectionView.GetCheckedTraits();
FilterAfterDelay();
}
@@ -574,7 +582,7 @@ namespace xunit.runner.wpf.ViewModel
{
foreach (var cur in this.traitCollectionView.Collection)
{
cur.IsSelected = false;
cur.IsChecked = false;
}
}