diff --git a/xunit.runner.wpf/MainWindow.xaml b/xunit.runner.wpf/MainWindow.xaml
index 67fd2e6..50eb805 100644
--- a/xunit.runner.wpf/MainWindow.xaml
+++ b/xunit.runner.wpf/MainWindow.xaml
@@ -128,23 +128,39 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xunit.runner.wpf/ViewModel/MainViewModel.cs b/xunit.runner.wpf/ViewModel/MainViewModel.cs
index a7b7636..33bb37e 100644
--- a/xunit.runner.wpf/ViewModel/MainViewModel.cs
+++ b/xunit.runner.wpf/ViewModel/MainViewModel.cs
@@ -62,13 +62,34 @@ namespace xunit.runner.wpf.ViewModel
private set { Set(ref methodsCaption, value); }
}
- private int testsCompleted = -1;
+ private int testsCompleted = 0;
public int TestsCompleted
{
get { return testsCompleted; }
set { Set(ref testsCompleted, value); }
}
+ private int testsPassed = 0;
+ public int TestsPassed
+ {
+ get { return testsPassed; }
+ set { Set(ref testsPassed, value); }
+ }
+
+ private int testsFailed = 0;
+ public int TestsFailed
+ {
+ get { return testsFailed; }
+ set { Set(ref testsFailed, value); }
+ }
+
+ private int testsSkipped = 0;
+ public int TestsSkipped
+ {
+ get { return testsSkipped; }
+ set { Set(ref testsSkipped, value); }
+ }
+
private int maximumProgress = int.MaxValue;
public int MaximumProgress
{
@@ -323,6 +344,19 @@ namespace xunit.runner.wpf.ViewModel
private void TestRunVisitor_TestFinished(object sender, TestStateEventArgs e)
{
TestsCompleted++;
+ switch (e.State)
+ {
+ case TestState.Passed:
+ TestsPassed++;
+ break;
+ case TestState.Failed:
+ TestsFailed++;
+ break;
+ case TestState.Skipped:
+ TestsSkipped++;
+ break;
+ }
+
if (e.State > CurrentRunState)
{
CurrentRunState = e.State;
@@ -335,6 +369,35 @@ namespace xunit.runner.wpf.ViewModel
{
this.IsCancelRequested = true;
}
+
+ public bool IsPassedFilterChecked
+ {
+ get { return ResultFilter == TestState.Passed; }
+ set { UpdateFilter(value, TestState.Passed); }
+ }
+
+ public bool IsFailedFilterChecked
+ {
+ get { return ResultFilter == TestState.Failed; }
+ set { UpdateFilter(value, TestState.Failed); }
+ }
+
+ public bool IsSkippedFilterChecked
+ {
+ get { return ResultFilter == TestState.Skipped; }
+ set { UpdateFilter(value, TestState.Skipped); }
+ }
+
+ private void UpdateFilter(bool value, TestState newState)
+ {
+ if (value && ResultFilter != newState)
+ {
+ ResultFilter = newState;
+ RaisePropertyChanged(nameof(IsPassedFilterChecked));
+ RaisePropertyChanged(nameof(IsFailedFilterChecked));
+ RaisePropertyChanged(nameof(IsSkippedFilterChecked));
+ }
+ }
}
///