Skip to content

Commit 1c858e0

Browse files
committed
cleanup readstringbuilding
1 parent aef6ac8 commit 1c858e0

File tree

13 files changed

+126
-140
lines changed

13 files changed

+126
-140
lines changed

docs/serializer-settings.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1423,7 +1423,7 @@ If the target is a stream or binary file:
14231423
[Fact]
14241424
public Task Stream()
14251425
{
1426-
return Verify(FileHelpers.OpenRead("sample.txt"));
1426+
return Verify(IoHelpers.OpenRead("sample.txt"));
14271427
}
14281428
```
14291429
<sup><a href='/src/Verify.Tests/Converters/JsonAppenderTests.cs#L72-L78' title='Snippet source file'>snippet source</a> | <a href='#snippet-jsonappenderstream' title='Start of snippet'>anchor</a></sup>

src/Verify.Tests/Converters/ExtensionConverterTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public static void TextSplitInit()
1212
[Fact]
1313
public Task TextSplit()
1414
{
15-
return Verify(FileHelpers.OpenRead("sample.split"))
15+
return Verify(IoHelpers.OpenRead("sample.split"))
1616
.UseExtension("txt");
1717
}
1818

src/Verify.Tests/Converters/FileAppenderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public Task Anon()
5656
[Fact]
5757
public Task Stream()
5858
{
59-
return Verify(FileHelpers.OpenRead("sample.txt"));
59+
return Verify(IoHelpers.OpenRead("sample.txt"));
6060
}
6161

6262
[Fact]

src/Verify.Tests/Converters/JsonAppenderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public Task Anon()
7373
[Fact]
7474
public Task Stream()
7575
{
76-
return Verify(FileHelpers.OpenRead("sample.txt"));
76+
return Verify(IoHelpers.OpenRead("sample.txt"));
7777
}
7878
#endregion
7979

src/Verify.Tests/Converters/TypeConverterTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public Task WithInfo()
162162
["name"] = nameof(WithInfo)
163163
}
164164
};
165-
var bitmap = new Bitmap(FileHelpers.OpenRead("sample.bmp"));
165+
var bitmap = new Bitmap(IoHelpers.OpenRead("sample.bmp"));
166166
return Verify(bitmap, settings);
167167
}
168168

@@ -196,7 +196,7 @@ public Task WithInfoShouldRespectSettings()
196196
}
197197
};
198198
settings.ModifySerialization(_ => _.IgnoreMember("Property"));
199-
var bitmap = new Bitmap(FileHelpers.OpenRead("sample.bmp"));
199+
var bitmap = new Bitmap(IoHelpers.OpenRead("sample.bmp"));
200200
return Verify(bitmap, settings);
201201
}
202202

@@ -225,7 +225,7 @@ public Task TypeConversion()
225225
["name"] = nameof(TypeConversion)
226226
}
227227
};
228-
var bitmap = new Bitmap(FileHelpers.OpenRead("sample.bmp"));
228+
var bitmap = new Bitmap(IoHelpers.OpenRead("sample.bmp"));
229229
return Verify(bitmap, settings);
230230
}
231231

src/Verify.Tests/FileHelperTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
[Fact]
44
public void ShouldNotLock()
55
{
6-
using (FileHelpers.OpenRead("sample.txt"))
6+
using (IoHelpers.OpenRead("sample.txt"))
77
{
88
Assert.False(FileEx.IsFileReadLocked("sample.txt"));
99
}

src/Verify/Compare/Comparer.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,21 @@
22
{
33
public static async Task<EqualityResult> Text(FilePair filePair, string receivedText, VerifySettings settings)
44
{
5-
FileHelpers.DeleteIfEmpty(filePair.VerifiedPath);
5+
IoHelpers.DeleteIfEmpty(filePair.VerifiedPath);
66
if (!File.Exists(filePair.VerifiedPath))
77
{
8-
await FileHelpers.WriteText(filePair.ReceivedPath, receivedText);
8+
await IoHelpers.WriteText(filePair.ReceivedPath, receivedText);
99
return new EqualityResult(Equality.New, null, receivedText, null);
1010
}
1111

12-
var verifiedBuilder = await FileHelpers.ReadStringBuilder(filePair.VerifiedPath);
13-
var verifiedText = verifiedBuilder.ToString();
12+
var verifiedText = await IoHelpers.ReadStringWithFixedLines(filePair.VerifiedPath);
1413
var result = await CompareStrings(filePair.Extension, receivedText, verifiedText, settings);
1514
if (result.IsEqual)
1615
{
1716
return new EqualityResult(Equality.Equal, null, receivedText, verifiedText);
1817
}
1918

20-
await FileHelpers.WriteText(filePair.ReceivedPath, receivedText);
19+
await IoHelpers.WriteText(filePair.ReceivedPath, receivedText);
2120
return new(Equality.NotEqual, result.Message, receivedText, verifiedText);
2221
}
2322

src/Verify/Compare/FileComparer.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ public static async Task<EqualityResult> DoCompare(VerifySettings settings, File
44
{
55
if (!File.Exists(file.VerifiedPath))
66
{
7-
await FileHelpers.WriteStream(file.ReceivedPath, receivedStream);
7+
await IoHelpers.WriteStream(file.ReceivedPath, receivedStream);
88
return new(Equality.New, null, null, null);
99
}
1010

1111
if (AllFiles.IsEmptyFile(file.VerifiedPath))
1212
{
13-
await FileHelpers.WriteStream(file.ReceivedPath, receivedStream);
13+
await IoHelpers.WriteStream(file.ReceivedPath, receivedStream);
1414
return new(Equality.NotEqual, null, null, null);
1515
}
1616

@@ -21,7 +21,7 @@ public static async Task<EqualityResult> DoCompare(VerifySettings settings, File
2121
}
2222

2323
if (receivedStream.CanSeek &&
24-
FileHelpers.Length(file.VerifiedPath) != receivedStream.Length)
24+
IoHelpers.Length(file.VerifiedPath) != receivedStream.Length)
2525
{
2626
return new(Equality.NotEqual, null,null,null);
2727
}
@@ -32,9 +32,9 @@ public static async Task<EqualityResult> DoCompare(VerifySettings settings, File
3232
static async Task<EqualityResult> InnerCompare(FilePair file, Stream receivedStream, Func<Stream, Stream, Task<CompareResult>> func)
3333
{
3434
#if NETSTANDARD2_0 || NETFRAMEWORK || NETCOREAPP2_2 || NETCOREAPP2_1
35-
using var verifiedStream = FileHelpers.OpenRead(file.VerifiedPath);
35+
using var verifiedStream = IoHelpers.OpenRead(file.VerifiedPath);
3636
#else
37-
await using var verifiedStream = FileHelpers.OpenRead(file.VerifiedPath);
37+
await using var verifiedStream = IoHelpers.OpenRead(file.VerifiedPath);
3838
#endif
3939

4040
if (receivedStream is FileStream fileStream)
@@ -59,7 +59,7 @@ async Task<EqualityResult> EqualityResult(Stream receivedStream, Stream verified
5959
}
6060

6161
receivedStream.Position = 0;
62-
await FileHelpers.WriteStream(file.ReceivedPath, receivedStream);
62+
await IoHelpers.WriteStream(file.ReceivedPath, receivedStream);
6363
return new(Equality.NotEqual, compareResult.Message, null, null);
6464
}
6565

src/Verify/FileHelpers.cs

Lines changed: 0 additions & 95 deletions
This file was deleted.

src/Verify/IoHelpers.cs

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
static class IoHelpers
2+
{
3+
static readonly UTF8Encoding Utf8 = new(true, true);
4+
5+
public static void DeleteIfEmpty(string path)
6+
{
7+
var info = new FileInfo(path);
8+
if (info.Exists && info.Length == 0)
9+
{
10+
info.Delete();
11+
}
12+
}
13+
14+
public static void MoveToStart(this Stream stream)
15+
{
16+
if (stream.CanSeek)
17+
{
18+
stream.Position = 0;
19+
}
20+
}
21+
22+
static FileStream OpenWrite(string path)
23+
{
24+
return new(path, FileMode.Create, FileAccess.Write, FileShare.Read, bufferSize: 4096, useAsync: true);
25+
}
26+
27+
public static FileStream OpenRead(string path)
28+
{
29+
return new(path, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true);
30+
}
31+
32+
public static long Length(string file)
33+
{
34+
return new FileInfo(file).Length;
35+
}
36+
37+
public static async Task<string> ReadString(this Stream stream)
38+
{
39+
stream.MoveToStart();
40+
using var reader = new StreamReader(stream);
41+
return await reader.ReadToEndAsync();
42+
}
43+
44+
static async Task<string> ReadStringWithFixedLines(this Stream stream)
45+
{
46+
var stringValue = await stream.ReadString();
47+
var builder = new StringBuilder(stringValue);
48+
builder.FixNewlines();
49+
return builder.ToString();
50+
}
51+
52+
#if NETSTANDARD2_1 || NET5_0_OR_GREATER
53+
54+
public static Task WriteText(string path, string text)
55+
{
56+
return File.WriteAllTextAsync(path, text, Utf8);
57+
}
58+
59+
public static async Task<string> ReadStringWithFixedLines(string path)
60+
{
61+
await using var stream = OpenRead(path);
62+
return await stream.ReadStringWithFixedLines();
63+
}
64+
65+
public static async Task WriteStream(string path, Stream stream)
66+
{
67+
if (stream is FileStream fileStream)
68+
{
69+
File.Copy(fileStream.Name, path);
70+
return;
71+
}
72+
73+
await using var targetStream = OpenWrite(path);
74+
await stream.CopyToAsync(targetStream);
75+
}
76+
77+
#else
78+
79+
public static async Task WriteText(string path, string text)
80+
{
81+
var encodedText = Utf8.GetBytes(text);
82+
83+
using var stream = OpenWrite(path);
84+
await stream.WriteAsync(encodedText, 0, encodedText.Length);
85+
}
86+
87+
public static async Task WriteStream(string path, Stream stream)
88+
{
89+
if (stream is FileStream fileStream)
90+
{
91+
File.Copy(fileStream.Name, path, true);
92+
return;
93+
}
94+
95+
using var targetStream = OpenWrite(path);
96+
await stream.CopyToAsync(targetStream);
97+
}
98+
99+
public static async Task<string> ReadStringWithFixedLines(string path)
100+
{
101+
using var stream = OpenRead(path);
102+
return await stream.ReadStringWithFixedLines();
103+
}
104+
105+
#endif
106+
}

0 commit comments

Comments
 (0)