Compare commits
2 Commits
1.0.5
...
UseNullable
| Author | SHA1 | Date | |
|---|---|---|---|
| a96ce278d2 | |||
| a10c13626c |
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
@@ -66,12 +65,6 @@
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props'))" />
|
||||
</Target>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Net.Compilers" version="2.2.0" targetFramework="net452" developmentDependency="true" />
|
||||
<package id="xunit" version="2.1.0" targetFramework="net452" />
|
||||
<package id="xunit.abstractions" version="2.0.0" targetFramework="net452" />
|
||||
<package id="xunit.assert" version="2.1.0" targetFramework="net452" />
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace Xunit.Runner.Data
|
||||
{
|
||||
private readonly BinaryReader _reader;
|
||||
private bool _closed;
|
||||
private Exception _exception;
|
||||
private Exception? _exception;
|
||||
|
||||
public bool IsConnected => !_closed;
|
||||
|
||||
|
||||
@@ -48,11 +48,6 @@
|
||||
<Compile Include="TestDataKind.cs" />
|
||||
<Compile Include="TestResultData.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Net.Compilers">
|
||||
<Version>2.2.0</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Net.Compilers" version="2.2.0" targetFramework="net46" developmentDependency="true" />
|
||||
<package id="xunit.abstractions" version="2.0.0" targetFramework="net452" />
|
||||
<package id="xunit.runner.utility" version="2.1.0" targetFramework="net46" />
|
||||
</packages>
|
||||
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
@@ -77,12 +76,6 @@
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props'))" />
|
||||
</Target>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
||||
@@ -16,16 +16,14 @@ namespace Xunit.Runner.Wpf
|
||||
}
|
||||
}
|
||||
|
||||
public static CommandBindingCollection GetRegistration(UIElement element)
|
||||
public static CommandBindingCollection? GetRegistration(UIElement element)
|
||||
=> (element != null ? (CommandBindingCollection)element.GetValue(Registration) : null);
|
||||
|
||||
private static void OnRegistrationChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
UIElement element = sender as UIElement;
|
||||
if (element != null)
|
||||
if (sender is UIElement element)
|
||||
{
|
||||
CommandBindingCollection bindings = e.NewValue as CommandBindingCollection;
|
||||
if (bindings != null)
|
||||
if (e.NewValue is CommandBindingCollection bindings)
|
||||
{
|
||||
element.CommandBindings.AddRange(bindings);
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace Xunit.Runner.Wpf.Converters
|
||||
return image;
|
||||
}
|
||||
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
public object? Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
var state = (TestState)value;
|
||||
if (targetType == typeof(Brush))
|
||||
|
||||
@@ -283,7 +283,13 @@ namespace Xunit.Runner.Wpf
|
||||
|
||||
object IList.this[int index]
|
||||
{
|
||||
get { return this[index]; }
|
||||
get
|
||||
{
|
||||
// Can't figure out how to not get a warning here.
|
||||
#pragma warning disable CS8603
|
||||
return this[index];
|
||||
#pragma warning restore
|
||||
}
|
||||
set { throw new NotSupportedException(); }
|
||||
}
|
||||
|
||||
|
||||
@@ -55,13 +55,13 @@ namespace Xunit.Runner.Wpf.Impl
|
||||
/// <typeparam name="T"></typeparam>
|
||||
private sealed class BackgroundReader<T> where T : class
|
||||
{
|
||||
private readonly ConcurrentQueue<T> _queue;
|
||||
private readonly ConcurrentQueue<T?> _queue;
|
||||
private readonly ClientReader _reader;
|
||||
private readonly Func<ClientReader, T> _readValue;
|
||||
|
||||
internal ClientReader Reader => _reader;
|
||||
|
||||
internal BackgroundReader(ConcurrentQueue<T> queue, ClientReader reader, Func<ClientReader, T> readValue)
|
||||
internal BackgroundReader(ConcurrentQueue<T?> queue, ClientReader reader, Func<ClientReader, T> readValue)
|
||||
{
|
||||
_queue = queue;
|
||||
_reader = reader;
|
||||
@@ -111,7 +111,7 @@ namespace Xunit.Runner.Wpf.Impl
|
||||
private const int MaxResultPerTick = 1000;
|
||||
|
||||
private readonly Connection _connection;
|
||||
private readonly ConcurrentQueue<T> _queue;
|
||||
private readonly ConcurrentQueue<T?> _queue;
|
||||
private readonly DispatcherTimer _timer;
|
||||
private readonly Action<List<T>> _callback;
|
||||
private readonly int _maxPerTick;
|
||||
@@ -122,7 +122,7 @@ namespace Xunit.Runner.Wpf.Impl
|
||||
internal BackgroundProducer(
|
||||
Connection connection,
|
||||
Dispatcher dispatcher,
|
||||
ConcurrentQueue<T> queue,
|
||||
ConcurrentQueue<T?> queue,
|
||||
Action<List<T>> callback,
|
||||
int maxResultPerTick = MaxResultPerTick,
|
||||
TimeSpan? interval = null)
|
||||
@@ -144,8 +144,7 @@ namespace Xunit.Runner.Wpf.Impl
|
||||
var i = 0;
|
||||
var list = new List<T>();
|
||||
var isDone = false;
|
||||
T value;
|
||||
while (i < _maxPerTick && _queue.TryDequeue(out value))
|
||||
while (i < _maxPerTick && _queue.TryDequeue(out T? value))
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
|
||||
@@ -8,10 +8,10 @@ namespace Xunit.Runner.Wpf.Impl
|
||||
{
|
||||
private sealed class Connection : IDisposable
|
||||
{
|
||||
private NamedPipeClientStream _stream;
|
||||
private NamedPipeClientStream? _stream;
|
||||
private ClientReader _reader;
|
||||
|
||||
internal NamedPipeClientStream Stream => _stream;
|
||||
internal NamedPipeClientStream Stream => _stream ?? throw new ObjectDisposedException(nameof(Connection));
|
||||
|
||||
internal ClientReader Reader => _reader;
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ namespace Xunit.Runner.Wpf.Impl
|
||||
private async Task ProcessResultsCore<T>(Connection connection, Func<ClientReader, T> readValue, Action<List<T>> callback, CancellationToken cancellationToken)
|
||||
where T : class
|
||||
{
|
||||
var queue = new ConcurrentQueue<T>();
|
||||
var queue = new ConcurrentQueue<T?>();
|
||||
var backgroundReader = new BackgroundReader<T>(queue, new ClientReader(connection.Stream), readValue);
|
||||
var backgroundProducer = new BackgroundProducer<T>(connection, _dispatcher, queue, callback);
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Xunit.Runner.Wpf.Impl
|
||||
private readonly IDictionary<string, FileSystemWatcher> watchedAssemblies = new Dictionary<string, FileSystemWatcher>();
|
||||
private readonly Dispatcher dispatcher;
|
||||
private bool isEnabled = false;
|
||||
private ReloadDebouncer debouncer;
|
||||
private ReloadDebouncer? debouncer;
|
||||
|
||||
public TestAssemblyWatcher(Dispatcher dispatcher)
|
||||
{
|
||||
|
||||
@@ -11,12 +11,15 @@ namespace Xunit.Runner.Wpf
|
||||
{
|
||||
public static Window Instance { get; private set; }
|
||||
|
||||
// WPF generates fields that are marked as non-nullable, but not definitely initialized.
|
||||
#pragma warning disable CS8618
|
||||
public MainWindow()
|
||||
{
|
||||
Instance = this;
|
||||
|
||||
InitializeComponent();
|
||||
}
|
||||
#pragma warning restore
|
||||
|
||||
protected override void OnSourceInitialized(EventArgs e)
|
||||
{
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace Xunit.Runner.Wpf.Persistence
|
||||
|
||||
private static IsolatedStorageFile GetStorageFile() => IsolatedStorageFile.GetUserStoreForDomain();
|
||||
|
||||
public static XmlTextReader OpenXmlFile(string fileName)
|
||||
public static XmlTextReader? OpenXmlFile(string fileName)
|
||||
{
|
||||
var storage = GetStorageFile();
|
||||
if (!storage.FileExists(fileName))
|
||||
|
||||
@@ -5,9 +5,9 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
public class AssemblyAndConfigFile
|
||||
{
|
||||
public string AssemblyFileName { get; }
|
||||
public string ConfigFileName { get; }
|
||||
public string? ConfigFileName { get; }
|
||||
|
||||
public AssemblyAndConfigFile(string assemblyFileName, string configFileName)
|
||||
public AssemblyAndConfigFile(string assemblyFileName, string? configFileName)
|
||||
{
|
||||
this.AssemblyFileName = Path.GetFullPath(assemblyFileName);
|
||||
if (configFileName != null)
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
|
||||
private CancellationTokenSource filterCancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
private CancellationTokenSource cancellationTokenSource;
|
||||
private CancellationTokenSource? cancellationTokenSource;
|
||||
private bool isBusy;
|
||||
private SearchQuery searchQuery = new SearchQuery();
|
||||
private bool autoReloadAssemblies;
|
||||
@@ -54,7 +54,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
|
||||
public ObservableCollection<RecentAssemblyViewModel> RecentAssemblies { get; } = new ObservableCollection<RecentAssemblyViewModel>();
|
||||
|
||||
private ImmutableList<TestCaseViewModel> testsToRun;
|
||||
private ImmutableList<TestCaseViewModel>? testsToRun;
|
||||
|
||||
public ICommand ExitCommand { get; }
|
||||
public ICommand WindowLoadedCommand { get; }
|
||||
@@ -63,7 +63,6 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
public RelayCommand RunSelectedCommand { get; }
|
||||
public RelayCommand CancelCommand { get; }
|
||||
public ICommand TraitCheckedChangedCommand { get; }
|
||||
public ICommand TraitSelectionChangedCommand { get; }
|
||||
public ICommand TraitsClearCommand { get; }
|
||||
public ICommand AssemblyReloadCommand { get; }
|
||||
public ICommand AssemblyReloadAllCommand { get; }
|
||||
@@ -215,8 +214,8 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
get { return Assemblies.Where(x => x.IsSelected).ToList(); }
|
||||
}
|
||||
|
||||
private string testCasesCaption;
|
||||
public string TestCasesCaption
|
||||
private string? testCasesCaption;
|
||||
public string? TestCasesCaption
|
||||
{
|
||||
get { return testCasesCaption; }
|
||||
private set { Set(ref testCasesCaption, value); }
|
||||
@@ -234,8 +233,8 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
private TestCaseViewModel selectedTest;
|
||||
public TestCaseViewModel SelectedTestCase
|
||||
private TestCaseViewModel? selectedTest;
|
||||
public TestCaseViewModel? SelectedTestCase
|
||||
{
|
||||
get { return selectedTest; }
|
||||
|
||||
@@ -401,7 +400,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
var taskList = new List<Task>();
|
||||
foreach (var assembly in assemblies)
|
||||
{
|
||||
taskList.Add(this.testUtil.Discover(assembly.AssemblyFileName, this.OnTestsDiscovered, this.cancellationTokenSource.Token));
|
||||
taskList.Add(this.testUtil.Discover(assembly.AssemblyFileName, this.OnTestsDiscovered, CancellationToken));
|
||||
|
||||
var assemblyViewModel = new TestAssemblyViewModel(assembly);
|
||||
|
||||
@@ -427,6 +426,11 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
private CancellationToken CancellationToken
|
||||
=> cancellationTokenSource == null
|
||||
? CancellationToken.None
|
||||
: cancellationTokenSource.Token;
|
||||
|
||||
public bool ReloadAssemblies(IEnumerable<string> assemblies)
|
||||
{
|
||||
if (IsBusy)
|
||||
@@ -454,7 +458,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
var assemblyFileName = assemblyViewModel.FileName;
|
||||
RemoveAssemblyTestCases(assemblyFileName);
|
||||
|
||||
taskList.Add(this.testUtil.Discover(assemblyFileName, OnTestsDiscovered, cancellationTokenSource.Token));
|
||||
taskList.Add(this.testUtil.Discover(assemblyFileName, OnTestsDiscovered, CancellationToken));
|
||||
}
|
||||
|
||||
return taskList;
|
||||
@@ -549,7 +553,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
var assemblyFileName = enumerable.First();
|
||||
enumerable = enumerable.Skip(1);
|
||||
|
||||
var configFileName = (string)null;
|
||||
var configFileName = (string?)null;
|
||||
if (IsConfigFile(enumerable.FirstOrDefault()))
|
||||
{
|
||||
configFileName = enumerable.First();
|
||||
@@ -630,7 +634,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
Task task;
|
||||
if (runAll)
|
||||
{
|
||||
task = this.testUtil.RunAll(assemblyFileName, OnTestStateChange, this.cancellationTokenSource.Token);
|
||||
task = this.testUtil.RunAll(assemblyFileName, OnTestStateChange, CancellationToken);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -644,7 +648,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
task = this.testUtil.RunSpecific(assemblyFileName, builder.ToImmutable(), OnTestStateChange, this.cancellationTokenSource.Token);
|
||||
task = this.testUtil.RunSpecific(assemblyFileName, builder.ToImmutable(), OnTestStateChange, CancellationToken);
|
||||
}
|
||||
|
||||
testSessionList.Add(task);
|
||||
@@ -778,7 +782,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
private void OnExecuteCancel()
|
||||
{
|
||||
Debug.Assert(CanExecuteCancel());
|
||||
this.cancellationTokenSource.Cancel();
|
||||
cancellationTokenSource?.Cancel();
|
||||
}
|
||||
|
||||
private void OnExecuteTraitCheckedChanged(TraitViewModel trait)
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
{
|
||||
public partial class TraitViewModel : ViewModelBase
|
||||
{
|
||||
private readonly TraitViewModel _parent;
|
||||
private readonly TraitViewModel? _parent;
|
||||
private bool? _isChecked;
|
||||
private bool _isExpanded;
|
||||
private string _text;
|
||||
@@ -19,7 +19,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
||||
{
|
||||
}
|
||||
|
||||
private TraitViewModel(TraitViewModel parent, string text)
|
||||
private TraitViewModel(TraitViewModel? parent, string text)
|
||||
{
|
||||
this._parent = parent;
|
||||
this._isChecked = false;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="CommonServiceLocator" version="1.3" targetFramework="net452" />
|
||||
<package id="Microsoft.Net.Compilers" version="2.2.0" targetFramework="net46" developmentDependency="true" />
|
||||
<package id="MvvmLight" version="5.3.0.0" targetFramework="net46" />
|
||||
<package id="MvvmLightLibs" version="5.3.0.0" targetFramework="net46" />
|
||||
<package id="NuGet.CommandLine" version="2.8.3" targetFramework="net46" />
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" />
|
||||
<Import Project="..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.props" Condition="Exists('..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
@@ -216,7 +215,6 @@
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props'))" />
|
||||
</Target>
|
||||
<Import Project="..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.targets" Condition="Exists('..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.targets')" />
|
||||
</Project>
|
||||
Reference in New Issue
Block a user