Skip to content

Commit

Permalink
Mstest attachments (#1186)
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonCropp authored Apr 11, 2024
1 parent 5e17124 commit 177cb0e
Show file tree
Hide file tree
Showing 10 changed files with 160 additions and 6 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ src/Verify.Tests/Tests.TextNegative.verified.tmp
*nCrunchTemp*
*.cache
src/Verify.Tests/NewLineTests.StringWithDifferingNewline.verified.txt
src/Verify.MSTest.Tests/Tests.AutoVerifyHasAttachment.verified.txt
2 changes: 1 addition & 1 deletion docs/explicit-targets.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public Task WithTargets() =>
name: "targetName")
]);
```
<sup><a href='/src/Verify.MSTest.Tests/Tests.cs#L42-L59' title='Snippet source file'>snippet source</a> | <a href='#snippet-ExplicitTargetsMsTest' title='Start of snippet'>anchor</a></sup>
<sup><a href='/src/Verify.MSTest.Tests/Tests.cs#L128-L145' title='Snippet source file'>snippet source</a> | <a href='#snippet-ExplicitTargetsMsTest' title='Start of snippet'>anchor</a></sup>
<!-- endSnippet -->


Expand Down
2 changes: 1 addition & 1 deletion docs/naming.md
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,7 @@ DerivePathInfo(
typeName: type.Name,
methodName: method.Name));
```
<sup><a href='/src/Verify.MSTest.Tests/Tests.cs#L10-L18' title='Snippet source file'>snippet source</a> | <a href='#snippet-DerivePathInfoMSTest' title='Start of snippet'>anchor</a></sup>
<sup><a href='/src/Verify.MSTest.Tests/Tests.cs#L9-L17' title='Snippet source file'>snippet source</a> | <a href='#snippet-DerivePathInfoMSTest' title='Start of snippet'>anchor</a></sup>
<!-- endSnippet -->


Expand Down
2 changes: 1 addition & 1 deletion src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project>
<PropertyGroup>
<NoWarn>CS1591;CS0649;xUnit1026;xUnit1013;CS1573;VerifyTestsProjectDir;VerifySetParameters</NoWarn>
<Version>24.0.0</Version>
<Version>24.0.0-beta.1</Version>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>preview</LangVersion>
<AssemblyVersion>1.0.0</AssemblyVersion>
Expand Down
30 changes: 30 additions & 0 deletions src/Verify.MSTest.Tests/ReceivedFileRequiredTestMethodAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
sealed class ResultFilesCallback :
TestMethodAttribute
{
public static Action<List<string>>? Callback;

public override TestResult[] Execute(ITestMethod testMethod)
{
try
{
var results = base.Execute(testMethod);

if (Callback == null)
{
throw new("Expected Callback");
}

Callback(
results
.Where(_ => _.ResultFiles != null)
.SelectMany(_ => _.ResultFiles!)
.ToList());

return results;
}
finally
{
Callback = null;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Foo
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Foo
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Value0
88 changes: 87 additions & 1 deletion src/Verify.MSTest.Tests/Tests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
// ReSharper disable UnusedParameter.Local

[TestClass]
public class Tests :
VerifyBase
Expand Down Expand Up @@ -39,6 +38,93 @@ public Task UseTextForParameters(string arg) =>
public Task StringTarget() =>
Verify(new Target("txt", "Value"));

[ResultFilesCallback]
[TestMethod]
public async Task ChangeHasAttachment()
{
ResultFilesCallback.Callback = list =>
{
Assert.AreEqual(1, list.Count);
var file = Path.GetFileName(list[0]);
Assert.AreEqual($"Tests.ChangeHasAttachment.{Namer.TargetFrameworkNameAndVersion}.received.txt", file);
};
var settings = new VerifySettings();
settings.DisableDiff();
await Assert.ThrowsExceptionAsync<VerifyException>(
() => Verify("Bar", settings));
}
[ResultFilesCallback]
[TestMethod]
public async Task AutoVerifyHasAttachment()
{
var path = CurrentFile.Relative("Tests.AutoVerifyHasAttachment.verified.txt");
var fullPath = Path.GetFullPath(path);
File.Delete(fullPath);
File.WriteAllText(fullPath,"Foo");
ResultFilesCallback.Callback = list =>
{
Assert.AreEqual(1, list.Count);
var file = Path.GetFileName(list[0]);
Assert.AreEqual("Tests.AutoVerifyHasAttachment.verified.txt", file);
};
var settings = new VerifySettings();
settings.DisableDiff();
settings.AutoVerify();
await Verify("Bar", settings);
}

[ResultFilesCallback]
[TestMethod]
public async Task NewHasAttachment()
{
ResultFilesCallback.Callback = list =>
{
Assert.AreEqual(1, list.Count);
var file = Path.GetFileName(list[0]);
Assert.AreEqual($"Tests.NewHasAttachment.{Namer.TargetFrameworkNameAndVersion}.received.txt", file);
};
var settings = new VerifySettings();
settings.DisableDiff();
await Assert.ThrowsExceptionAsync<VerifyException>(
() => Verify("Bar", settings));
}

[ResultFilesCallback]
[TestMethod]
public async Task MultipleChangedHasAttachment()
{
ResultFilesCallback.Callback = list =>
{
Assert.AreEqual(2, list.Count);
var file0 = Path.GetFileName(list[0]);
var file1 = Path.GetFileName(list[1]);
Assert.AreEqual($"Tests.MultipleChangedHasAttachment.{Namer.TargetFrameworkNameAndVersion}#00.received.txt", file0);
Assert.AreEqual($"Tests.MultipleChangedHasAttachment.{Namer.TargetFrameworkNameAndVersion}#01.received.txt", file1);
};
var settings = new VerifySettings();
settings.DisableDiff();
await Assert.ThrowsExceptionAsync<VerifyException>(
() => Verify("Bar", [new Target("txt", "Value")], settings));
}

[ResultFilesCallback]
[TestMethod]
public async Task MultipleNewHasAttachment()
{
ResultFilesCallback.Callback = list =>
{
Assert.AreEqual(2, list.Count);
var file0 = Path.GetFileName(list[0]);
var file1 = Path.GetFileName(list[1]);
Assert.AreEqual($"Tests.MultipleNewHasAttachment.{Namer.TargetFrameworkNameAndVersion}#00.received.txt", file0);
Assert.AreEqual($"Tests.MultipleNewHasAttachment.{Namer.TargetFrameworkNameAndVersion}#01.received.txt", file1);
};
var settings = new VerifySettings();
settings.DisableDiff();
await Assert.ThrowsExceptionAsync<VerifyException>(
() => Verify("Bar",[new Target("txt", "Value")], settings));
}

#region ExplicitTargetsMsTest

[TestMethod]
Expand Down
38 changes: 36 additions & 2 deletions src/Verify.MSTest/VerifyBase.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,40 @@
namespace VerifyMSTest;

[TestClass]
public abstract partial class VerifyBase
public abstract partial class VerifyBase :
IDisposable
{
public TestContext TestContext { get; set; } = null!;
static Task AddFile(FilePair path, bool autoVerify)
{
var context = currentTestContext.Value;
if (context != null)
{
var fileName = autoVerify ? path.VerifiedPath : path.ReceivedPath;
context.AddResultFile(fileName);
}

return Task.CompletedTask;
}

static VerifyBase()
{
VerifierSettings.OnFirstVerify((pair, _, autoVerify) => AddFile(pair, autoVerify));
VerifierSettings.OnVerifyMismatch((pair, _, autoVerify) => AddFile(pair, autoVerify));
}

TestContext testContext = null!;

public TestContext TestContext
{
get => testContext;
set
{
testContext = value;
currentTestContext.Value = value;
}
}

static AsyncLocal<TestContext?> currentTestContext = new();

InnerVerifier BuildVerifier(VerifySettings settings, string sourceFile, bool useUniqueDirectory)
{
Expand Down Expand Up @@ -97,4 +128,7 @@ SettingsTask Verify(
return await verify(verifier);
});
}

public void Dispose() =>
currentTestContext.Value = null;
}

0 comments on commit 177cb0e

Please sign in to comment.