-
-
Notifications
You must be signed in to change notification settings - Fork 70
/
Copy pathTestRegistrar.cs
52 lines (39 loc) · 1.45 KB
/
TestRegistrar.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System.Reflection;
using TUnit.Core;
using TUnit.Core.Extensions;
using TUnit.Engine.Hooks;
namespace TUnit.Engine;
internal class TestRegistrar(InstanceTracker instanceTracker, AssemblyHookOrchestrator assemblyHookOrchestrator, ClassHookOrchestrator classHookOrchestrator)
{
internal async ValueTask RegisterInstance(DiscoveredTest discoveredTest, Func<Exception, ValueTask> onFailureToInitialize)
{
try
{
var testContext = discoveredTest.TestContext;
testContext.IsRegistered = true;
var testRegisteredEventsObjects = testContext.GetTestRegisteredEventsObjects();
var classType = testContext.TestDetails.TestClass.Type;
RegisterTestContext(classType, testContext);
foreach (var testRegisteredEventsObject in testRegisteredEventsObjects)
{
await testRegisteredEventsObject.OnTestRegistered(new TestRegisteredContext(discoveredTest));
}
}
catch (Exception e)
{
await onFailureToInitialize(e);
}
}
private void RegisterTestContext(Type type, TestContext testContext)
{
instanceTracker.Register(type);
var classHookContext = classHookOrchestrator.GetContext(type);
classHookContext.Tests.Add(testContext);
RegisterTestContext(type.Assembly, classHookContext);
}
private void RegisterTestContext(Assembly assembly, ClassHookContext classHookContext)
{
var assemblyHookContext = assemblyHookOrchestrator.GetContext(assembly);
assemblyHookContext.TestClasses.Add(classHookContext);
}
}