Add ability to update snapshots (#4)

This commit is contained in:
Patrick Stevens
2025-06-16 11:53:26 +01:00
committed by GitHub
parent 39370d5235
commit 9d20d18954
18 changed files with 727 additions and 34 deletions

View File

@@ -0,0 +1,22 @@
namespace WoofWare.Expect.Test
open System
open System.IO
open System.Reflection
[<RequireQualifiedAccess>]
module Assembly =
let getEmbeddedResource (assembly : Assembly) (name : string) : string =
let names = assembly.GetManifestResourceNames ()
let names =
names |> Seq.filter (fun s -> s.EndsWith (name, StringComparison.Ordinal))
use s =
names
|> Seq.exactlyOne
|> assembly.GetManifestResourceStream
|> fun s -> new StreamReader (s)
s.ReadToEnd ()

View File

@@ -1,6 +1,5 @@
namespace WoofWare.Expect.Test
namespace WoofWare.Expect.Test
open System
open WoofWare.Expect
open NUnit.Framework
@@ -9,7 +8,7 @@ module SimpleTest =
[<Test>]
let ``JSON is resilient to whitespace changes`` () =
expect {
snapshotJson "123 "
snapshotJson " 123 "
return 123
}
@@ -17,7 +16,7 @@ module SimpleTest =
let ``Example of a failing test`` () =
expect {
snapshot
"snapshot mismatch! snapshot at filepath.fs:99 (Example of a failing test) was:
@"snapshot mismatch! snapshot at filepath.fs:99 (Example of a failing test) was:
- 123
@@ -39,6 +38,6 @@ actual was:
[<Test>]
let ``Basic example`` () =
expect {
snapshot "123"
snapshot @"123"
return 123
}

View File

@@ -0,0 +1,10 @@
namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot @"test ""quotes"" here"
return 123
}

View File

@@ -0,0 +1,14 @@
namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot
"test
with
newlines"
return 123
}

View File

@@ -0,0 +1,13 @@
namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot (* comment *)
"""test
"""
return 123
}

View File

@@ -0,0 +1,10 @@
namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot """test"""
return 123
}

View File

@@ -0,0 +1,213 @@
namespace WoofWare.Expect.Test
open WoofWare.Expect
open NUnit.Framework
[<TestFixture>]
module TestSnapshotFinding =
type Dummy = class end
[<Test>]
let ``Triple-quote, one line, one-line replacement`` () =
let source =
Assembly.getEmbeddedResource typeof<Dummy>.Assembly "TripleQuoteOneLine.fs"
|> _.Split('\n')
expect {
snapshot
@"namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot @""replacement""
return 123
}
"
return SnapshotUpdate.updateSnapshotAtLine source 8 "replacement" |> String.concat "\n"
}
[<Test>]
let ``Triple-quote, one line, multi-line replacement`` () =
let source =
Assembly.getEmbeddedResource typeof<Dummy>.Assembly "TripleQuoteOneLine.fs"
|> _.Split('\n')
expect {
snapshot
@"namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot @""replacement
more""
return 123
}
"
return
SnapshotUpdate.updateSnapshotAtLine source 8 "replacement\nmore"
|> String.concat "\n"
}
[<Test>]
let ``At-string, one line, one-line replacement`` () =
let source =
Assembly.getEmbeddedResource typeof<Dummy>.Assembly "AtStringOneLine.fs"
|> _.Split('\n')
expect {
snapshot
@"namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot @""replacement""
return 123
}
"
return SnapshotUpdate.updateSnapshotAtLine source 8 "replacement" |> String.concat "\n"
}
[<Test>]
let ``At-string, one line, multi-line replacement`` () =
let source =
Assembly.getEmbeddedResource typeof<Dummy>.Assembly "AtStringOneLine.fs"
|> _.Split('\n')
expect {
snapshot
@"namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot @""replacement
more""
return 123
}
"
return
SnapshotUpdate.updateSnapshotAtLine source 8 "replacement\nmore"
|> String.concat "\n"
}
[<Test>]
let ``Triple-quote, intervening comment, one-line replacement`` () =
let source =
Assembly.getEmbeddedResource typeof<Dummy>.Assembly "TripleQuoteInterveningComment.fs"
|> _.Split('\n')
expect {
snapshot
@"namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot (* comment *)
@""replacement""
return 123
}
"
return SnapshotUpdate.updateSnapshotAtLine source 8 "replacement" |> String.concat "\n"
}
[<Test>]
let ``Triple-quote, intervening comment, multi-line replacement`` () =
let source =
Assembly.getEmbeddedResource typeof<Dummy>.Assembly "TripleQuoteInterveningComment.fs"
|> _.Split('\n')
expect {
snapshot
@"namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot (* comment *)
@""replacement
more""
return 123
}
"
return
SnapshotUpdate.updateSnapshotAtLine source 8 "replacement\nmore"
|> String.concat "\n"
}
[<Test>]
let ``Single-quote, many lines, one-line replacement`` () =
let source =
Assembly.getEmbeddedResource typeof<Dummy>.Assembly "SingleQuoteManyLine.fs"
|> _.Split('\n')
expect {
snapshot
@"namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot
@""replacement""
return 123
}
"
return SnapshotUpdate.updateSnapshotAtLine source 8 "replacement" |> String.concat "\n"
}
[<Test>]
let ``Single-quote, many lines, multi-line replacement`` () =
let source =
Assembly.getEmbeddedResource typeof<Dummy>.Assembly "SingleQuoteManyLine.fs"
|> _.Split('\n')
expect {
snapshot
@"namespace BigExample
open WoofWare.Expect
module MyModule =
let foo () =
expect {
snapshot
@""replacement
more""
return 123
}
"
return
SnapshotUpdate.updateSnapshotAtLine source 8 "replacement\nmore"
|> String.concat "\n"
}

View File

@@ -7,12 +7,19 @@
</PropertyGroup>
<ItemGroup>
<Compile Include="SimpleTest.fs" />
<Compile Include="TestSurface.fs" />
<Compile Include="Assembly.fs" />
<Compile Include="SimpleTest.fs" />
<Compile Include="TestSnapshotFinding.fs" />
<Compile Include="TestSurface.fs" />
<EmbeddedResource Include="SyntaxCases\AtStringOneLine.fs" />
<EmbeddedResource Include="SyntaxCases\SingleQuoteManyLine.fs" />
<EmbeddedResource Include="SyntaxCases\TripleQuoteInterveningComment.fs" />
<EmbeddedResource Include="SyntaxCases\TripleQuoteOneLine.fs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="ApiSurface" Version="4.1.20" />
<PackageReference Include="FsUnit" Version="7.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1"/>
<PackageReference Include="NUnit" Version="4.3.2"/>
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0"/>