A game about forced loneliness, made by TACStudios
1using System;
2using System.Collections.Generic;
3using UnityEditor.TestTools.TestRunner.Api;
4using UnityEngine;
5
6namespace Microsoft.Unity.VisualStudio.Editor.Testing
7{
8 internal class TestRunnerCallbacks : ICallbacks
9 {
10 private string Serialize<TContainer, TSource, TAdaptor>(
11 TSource source,
12 Func<TSource, int, TAdaptor> createAdaptor,
13 Func<TSource, IEnumerable<TSource>> children,
14 Func<TAdaptor[], TContainer> container)
15 {
16 var adaptors = new List<TAdaptor>();
17
18 void AddAdaptor(TSource item, int parentIndex)
19 {
20 var index = adaptors.Count;
21 adaptors.Add(createAdaptor(item, parentIndex));
22 foreach (var child in children(item))
23 AddAdaptor(child, index);
24 }
25
26 AddAdaptor(source, -1);
27
28 return JsonUtility.ToJson(container(adaptors.ToArray()));
29 }
30
31 private string Serialize(ITestAdaptor testAdaptor)
32 {
33 return Serialize(
34 testAdaptor,
35 (a, parentIndex) => new TestAdaptor(a, parentIndex),
36 (a) => a.Children,
37 (r) => new TestAdaptorContainer { TestAdaptors = r });
38 }
39
40 private string Serialize(ITestResultAdaptor testResultAdaptor)
41 {
42 return Serialize(
43 testResultAdaptor,
44 (a, parentIndex) => new TestResultAdaptor(a, parentIndex),
45 (a) => a.Children,
46 (r) => new TestResultAdaptorContainer { TestResultAdaptors = r });
47 }
48
49 public void RunFinished(ITestResultAdaptor testResultAdaptor)
50 {
51 VisualStudioIntegration.BroadcastMessage(Messaging.MessageType.RunFinished, Serialize(testResultAdaptor));
52 }
53
54 public void RunStarted(ITestAdaptor testAdaptor)
55 {
56 VisualStudioIntegration.BroadcastMessage(Messaging.MessageType.RunStarted, Serialize(testAdaptor));
57 }
58
59 public void TestFinished(ITestResultAdaptor testResultAdaptor)
60 {
61 VisualStudioIntegration.BroadcastMessage(Messaging.MessageType.TestFinished, Serialize(testResultAdaptor));
62 }
63
64 public void TestStarted(ITestAdaptor testAdaptor)
65 {
66 VisualStudioIntegration.BroadcastMessage(Messaging.MessageType.TestStarted, Serialize(testAdaptor));
67 }
68
69 private static string TestModeName(TestMode testMode)
70 {
71 switch (testMode)
72 {
73 case TestMode.EditMode: return "EditMode";
74 case TestMode.PlayMode: return "PlayMode";
75 }
76
77 throw new ArgumentOutOfRangeException();
78 }
79
80
81 internal void TestListRetrieved(TestMode testMode, ITestAdaptor testAdaptor)
82 {
83 // TestListRetrieved format:
84 // TestMode:Json
85
86 var value = TestModeName(testMode) + ":" + Serialize(testAdaptor);
87 VisualStudioIntegration.BroadcastMessage(Messaging.MessageType.TestListRetrieved, value);
88 }
89 }
90}