Skip to content

Commit 8e01cdb

Browse files
committed
[Core.Tests] Modernize code
1 parent 6e2a30d commit 8e01cdb

18 files changed

Lines changed: 1548 additions & 1616 deletions

sources/core/Stride.Core.Tests/IO/DatabaseFileProviderTests.cs

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,40 @@
33
using Stride.Core.IO;
44
using Xunit;
55

6-
namespace Stride.Core.Tests.IO
6+
namespace Stride.Core.Tests.IO;
7+
8+
public class DatabaseFileProviderTests
79
{
8-
public class DatabaseFileProviderTests
10+
[Theory]
11+
[InlineData("Root/A", "Root", "A", VirtualSearchOption.TopDirectoryOnly)]
12+
[InlineData("Root/A", "Root", "A", VirtualSearchOption.AllDirectories)]
13+
[InlineData("Root/A", "Root/", "A", VirtualSearchOption.AllDirectories)]
14+
[InlineData("Root/A", "Root", "*", VirtualSearchOption.TopDirectoryOnly)]
15+
[InlineData("Root/A", "Root", "*", VirtualSearchOption.AllDirectories)]
16+
[InlineData("Root/A", "Root/", "*", VirtualSearchOption.AllDirectories)]
17+
[InlineData("Root/Dir/A", "Root", "A", VirtualSearchOption.AllDirectories)]
18+
[InlineData("Root/Dir/A", "Root", "*", VirtualSearchOption.AllDirectories)]
19+
[InlineData("Root/A", "Root", "?", VirtualSearchOption.AllDirectories)]
20+
[InlineData("Root/Abc", "Root", "A?c", VirtualSearchOption.AllDirectories)]
21+
[InlineData("Root/Abbc", "Root", "A*c", VirtualSearchOption.AllDirectories)]
22+
[InlineData("Root/Abbc", "Root", "A*", VirtualSearchOption.AllDirectories)]
23+
public void ListFilesRegex_Matches(string url, string pathPrefix, string fileNamePattern, VirtualSearchOption options)
924
{
10-
[Theory]
11-
[InlineData("Root/A", "Root", "A", VirtualSearchOption.TopDirectoryOnly)]
12-
[InlineData("Root/A", "Root", "A", VirtualSearchOption.AllDirectories)]
13-
[InlineData("Root/A", "Root/", "A", VirtualSearchOption.AllDirectories)]
14-
[InlineData("Root/A", "Root", "*", VirtualSearchOption.TopDirectoryOnly)]
15-
[InlineData("Root/A", "Root", "*", VirtualSearchOption.AllDirectories)]
16-
[InlineData("Root/A", "Root/", "*", VirtualSearchOption.AllDirectories)]
17-
[InlineData("Root/Dir/A", "Root", "A", VirtualSearchOption.AllDirectories)]
18-
[InlineData("Root/Dir/A", "Root", "*", VirtualSearchOption.AllDirectories)]
19-
[InlineData("Root/A", "Root", "?", VirtualSearchOption.AllDirectories)]
20-
[InlineData("Root/Abc", "Root", "A?c", VirtualSearchOption.AllDirectories)]
21-
[InlineData("Root/Abbc", "Root", "A*c", VirtualSearchOption.AllDirectories)]
22-
[InlineData("Root/Abbc", "Root", "A*", VirtualSearchOption.AllDirectories)]
23-
public void ListFilesRegex_Matches(string url, string pathPrefix, string fileNamePattern, VirtualSearchOption options)
24-
{
25-
var regex = DatabaseFileProvider.CreateRegexForFileSearch(pathPrefix, fileNamePattern, options);
26-
Assert.Matches(regex, url);
27-
}
25+
var regex = DatabaseFileProvider.CreateRegexForFileSearch(pathPrefix, fileNamePattern, options);
26+
Assert.Matches(regex, url);
27+
}
2828

29-
[Theory]
30-
[InlineData("Root/A", "Root", "B", VirtualSearchOption.TopDirectoryOnly)]
31-
[InlineData("Root/A", "Root", "B", VirtualSearchOption.AllDirectories)]
32-
[InlineData("Root/Dir/A", "Root", "B", VirtualSearchOption.AllDirectories)]
33-
[InlineData("Root/Dir/A", "Root", "*", VirtualSearchOption.TopDirectoryOnly)]
34-
[InlineData("Root/Abbc", "Root", "A?c", VirtualSearchOption.AllDirectories)]
35-
// if path starts with / it won't match because URLs in DatabaseFileProvider don't have a preceding /
36-
[InlineData("Root/A", "/Root", "A", VirtualSearchOption.AllDirectories)]
37-
public void ListFilesRegex_DoesNotMatch(string url, string pathPrefix, string fileNamePattern, VirtualSearchOption options)
38-
{
39-
var regex = DatabaseFileProvider.CreateRegexForFileSearch(pathPrefix, fileNamePattern, options);
40-
Assert.DoesNotMatch(regex, url);
41-
}
29+
[Theory]
30+
[InlineData("Root/A", "Root", "B", VirtualSearchOption.TopDirectoryOnly)]
31+
[InlineData("Root/A", "Root", "B", VirtualSearchOption.AllDirectories)]
32+
[InlineData("Root/Dir/A", "Root", "B", VirtualSearchOption.AllDirectories)]
33+
[InlineData("Root/Dir/A", "Root", "*", VirtualSearchOption.TopDirectoryOnly)]
34+
[InlineData("Root/Abbc", "Root", "A?c", VirtualSearchOption.AllDirectories)]
35+
// if path starts with / it won't match because URLs in DatabaseFileProvider don't have a preceding /
36+
[InlineData("Root/A", "/Root", "A", VirtualSearchOption.AllDirectories)]
37+
public void ListFilesRegex_DoesNotMatch(string url, string pathPrefix, string fileNamePattern, VirtualSearchOption options)
38+
{
39+
var regex = DatabaseFileProvider.CreateRegexForFileSearch(pathPrefix, fileNamePattern, options);
40+
Assert.DoesNotMatch(regex, url);
4241
}
4342
}
Lines changed: 73 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,98 @@
11
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
22
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
3-
using System;
4-
using System.Collections.Generic;
5-
using System.IO;
6-
using System.Threading;
73

8-
namespace Stride.Core.IO
4+
using Stride.Core.IO;
5+
6+
namespace Stride.Core.Tests;
7+
8+
public class MemoryFileProvider : VirtualFileProviderBase
99
{
10-
public class MemoryFileProvider : VirtualFileProviderBase
10+
private readonly Dictionary<string, FileInfo> files = [];
11+
12+
public MemoryFileProvider(string rootPath) : base(rootPath)
1113
{
12-
private Dictionary<string, FileInfo> files = new Dictionary<string, FileInfo>();
14+
}
1315

14-
public MemoryFileProvider(string rootPath) : base(rootPath)
15-
{
16-
}
16+
public override Stream OpenStream(string url, VirtualFileMode mode, VirtualFileAccess access, VirtualFileShare share = VirtualFileShare.Read, StreamFlags streamFlags = StreamFlags.None)
17+
{
18+
if (share != VirtualFileShare.Read)
19+
throw new NotImplementedException();
1720

18-
public override Stream OpenStream(string url, VirtualFileMode mode, VirtualFileAccess access, VirtualFileShare share = VirtualFileShare.Read, StreamFlags streamFlags = StreamFlags.None)
21+
lock (files)
1922
{
20-
if (share != VirtualFileShare.Read)
21-
throw new NotImplementedException();
23+
var exists = files.TryGetValue(url, out var fileInfo);
24+
var write = access != VirtualFileAccess.Read;
2225

23-
lock (files)
26+
switch (mode)
2427
{
25-
FileInfo fileInfo;
26-
bool exists = files.TryGetValue(url, out fileInfo);
27-
bool write = access != VirtualFileAccess.Read;
28-
29-
switch (mode)
30-
{
31-
case VirtualFileMode.CreateNew:
32-
if (exists)
33-
throw new IOException("File already exists.");
34-
files.Add(url, fileInfo = new FileInfo());
35-
return new MemoryFileStream(this, fileInfo, write);
36-
case VirtualFileMode.Create:
37-
files.Remove(url);
38-
files.Add(url, fileInfo = new FileInfo());
39-
return new MemoryFileStream(this, fileInfo, write);
40-
case VirtualFileMode.Truncate:
41-
if (!exists)
42-
throw new IOException("File doesn't exists.");
43-
files.Remove(url);
44-
return new MemoryStream();
45-
case VirtualFileMode.Open:
46-
if (!exists)
47-
throw new FileNotFoundException();
48-
if (write)
49-
throw new NotImplementedException();
50-
return new MemoryFileStream(this, fileInfo, false, fileInfo.Data);
51-
case VirtualFileMode.OpenOrCreate:
28+
case VirtualFileMode.CreateNew:
29+
if (exists)
30+
throw new IOException("File already exists.");
31+
files.Add(url, fileInfo = new FileInfo());
32+
return new MemoryFileStream(this, fileInfo, write);
33+
case VirtualFileMode.Create:
34+
files.Remove(url);
35+
files.Add(url, fileInfo = new FileInfo());
36+
return new MemoryFileStream(this, fileInfo, write);
37+
case VirtualFileMode.Truncate:
38+
if (!exists)
39+
throw new IOException("File doesn't exists.");
40+
files.Remove(url);
41+
return new MemoryStream();
42+
case VirtualFileMode.Open:
43+
if (!exists)
44+
throw new FileNotFoundException();
45+
if (write)
5246
throw new NotImplementedException();
53-
}
47+
return new MemoryFileStream(this, fileInfo!, false, fileInfo!.Data);
48+
case VirtualFileMode.OpenOrCreate:
49+
throw new NotImplementedException();
5450
}
55-
56-
return null;
5751
}
5852

59-
private class FileInfo
53+
return null;
54+
}
55+
56+
private class FileInfo
57+
{
58+
public byte[] Data;
59+
public int Streams;
60+
}
61+
62+
private class MemoryFileStream : MemoryStream
63+
{
64+
private readonly MemoryFileProvider provider;
65+
private readonly FileInfo fileInfo;
66+
67+
public MemoryFileStream(MemoryFileProvider provider, FileInfo fileInfo, bool write)
6068
{
61-
public byte[] Data;
62-
public int Streams;
69+
this.provider = provider;
70+
this.fileInfo = fileInfo;
71+
Initialize(fileInfo, write);
6372
}
6473

65-
private class MemoryFileStream : MemoryStream
74+
public MemoryFileStream(MemoryFileProvider provider, FileInfo fileInfo, bool write, byte[] data)
75+
: base(data)
6676
{
67-
private readonly MemoryFileProvider provider;
68-
private readonly FileInfo fileInfo;
69-
70-
public MemoryFileStream(MemoryFileProvider provider, FileInfo fileInfo, bool write)
71-
{
72-
this.provider = provider;
73-
this.fileInfo = fileInfo;
74-
Initialize(fileInfo, write);
75-
}
76-
77-
public MemoryFileStream(MemoryFileProvider provider, FileInfo fileInfo, bool write, byte[] data)
78-
: base(data)
79-
{
80-
this.provider = provider;
81-
this.fileInfo = fileInfo;
82-
Initialize(fileInfo, write);
83-
}
77+
this.provider = provider;
78+
this.fileInfo = fileInfo;
79+
Initialize(fileInfo, write);
80+
}
8481

85-
private static void Initialize(FileInfo fileInfo, bool write)
86-
{
87-
if (Interlocked.Increment(ref fileInfo.Streams) > 1 && write)
88-
throw new InvalidOperationException();
89-
}
82+
private static void Initialize(FileInfo fileInfo, bool write)
83+
{
84+
if (Interlocked.Increment(ref fileInfo.Streams) > 1 && write)
85+
throw new InvalidOperationException();
86+
}
9087

91-
protected override void Dispose(bool disposing)
88+
protected override void Dispose(bool disposing)
89+
{
90+
lock (provider.files)
9291
{
93-
lock (provider.files)
94-
{
95-
fileInfo.Data = ToArray();
96-
Interlocked.Decrement(ref fileInfo.Streams);
97-
}
98-
base.Dispose(disposing);
92+
fileInfo.Data = ToArray();
93+
Interlocked.Decrement(ref fileInfo.Streams);
9994
}
95+
base.Dispose(disposing);
10096
}
10197
}
10298
}

sources/core/Stride.Core.Tests/NonParallelCollectionDefinition.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
33
using Xunit;
44

5-
namespace Stride.Core.Tests
6-
{
7-
[CollectionDefinition("Non-Parallel Collection", DisableParallelization = true)]
8-
public class NonParallelCollectionDefinition { }
9-
}
5+
namespace Stride.Core.Tests;
6+
7+
[CollectionDefinition("Non-Parallel Collection", DisableParallelization = true)]
8+
public class NonParallelCollectionDefinition;
Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
using Stride.Core.Storage;
22
using Xunit;
33

4-
namespace Stride.Core.Tests
4+
namespace Stride.Core.Tests;
5+
6+
public class ObjectIdTests
57
{
6-
public class ObjectIdTests
8+
[Fact]
9+
public void ToString_ThenTryParse_GivesTheSameResult()
710
{
8-
[Fact]
9-
public void ToString_ThenTryParse_GivesTheSameResult()
10-
{
11-
var id = ObjectId.New();
12-
var str = id.ToString();
13-
Assert.True(ObjectId.TryParse(str, out var parsed));
14-
Assert.Equal(id, parsed);
15-
}
11+
var id = ObjectId.New();
12+
var str = id.ToString();
13+
Assert.True(ObjectId.TryParse(str, out var parsed));
14+
Assert.Equal(id, parsed);
1615
}
1716
}

sources/core/Stride.Core.Tests/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
22
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
3-
using System.Reflection;
3+
44
using System.Runtime.InteropServices;
55

66
// General Information about an assembly is controlled through the following

sources/core/Stride.Core.Tests/Stride.Core.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
<PropertyGroup>
44
<TargetFramework>net8.0</TargetFramework>
55
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<LangVersion>latest</LangVersion>
8+
<Nullable>enable</Nullable>
69
<StrideAssemblyProcessor>true</StrideAssemblyProcessor>
710
<StrideAssemblyProcessorOptions>--auto-module-initializer --serialization</StrideAssemblyProcessorOptions>
811
<StrideBuildTags>Windows;Android;iOS</StrideBuildTags>

0 commit comments

Comments
 (0)