diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
| commit | c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch) | |
| tree | ee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs | |
| download | Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2 Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip | |
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs')
| -rw-r--r-- | Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs new file mode 100644 index 0000000..1bfb63e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs @@ -0,0 +1,151 @@ +using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using NUnit.Framework.Interfaces;
+using UnityEngine.Networking.PlayerConnection;
+using UnityEngine.TestRunner.TestLaunchers;
+
+namespace UnityEngine.TestTools.TestRunner.Callbacks
+{
+ [AddComponentMenu("")]
+ internal class RemoteTestResultSender : MonoBehaviour, ITestRunnerListener
+ {
+ private class QueueData
+ {
+ public Guid id { get; set; }
+ public byte[] data { get; set; }
+ }
+
+ private const int k_aliveMessageFrequency = 120;
+ private float m_NextliveMessage = k_aliveMessageFrequency;
+ private readonly Queue<QueueData> m_SendQueue = new Queue<QueueData>();
+ private readonly object m_LockQueue = new object();
+ private readonly IRemoteTestResultDataFactory m_TestResultDataFactory = new RemoteTestResultDataFactory();
+
+ public void Start()
+ {
+ PlayerConnection.instance.Register(PlayerConnectionMessageIds.quitPlayerMessageId, EditorProccessedTheResult);
+ StartCoroutine(SendDataRoutine());
+ }
+
+ private void EditorProccessedTheResult(MessageEventArgs arg0)
+ {
+ if (arg0.data != null)
+ {
+ return;
+ }
+
+ //Some platforms don't quit, so we need to disconnect to make sure they will not connect to another editor instance automatically.
+ PlayerConnection.instance.DisconnectAll();
+
+ //XBOX has an error when quitting
+ if (Application.platform == RuntimePlatform.XboxOne)
+ {
+ return;
+ }
+ Application.Quit();
+ }
+
+ private byte[] SerializeObject(object objectToSerialize)
+ {
+ return Encoding.UTF8.GetBytes(JsonUtility.ToJson(objectToSerialize));
+ }
+
+ public void RunStarted(ITest testsToRun)
+ {
+ var data = SerializeObject(m_TestResultDataFactory.CreateFromTest(testsToRun));
+ lock (m_LockQueue)
+ {
+ m_SendQueue.Enqueue(new QueueData
+ {
+ id = PlayerConnectionMessageIds.runStartedMessageId,
+ data = data
+ });
+ }
+ }
+
+ public void RunFinished(ITestResult testResults)
+ {
+ var data = SerializeObject(m_TestResultDataFactory.CreateFromTestResult(testResults));
+ lock (m_LockQueue)
+ {
+ m_SendQueue.Enqueue(new QueueData { id = PlayerConnectionMessageIds.runFinishedMessageId, data = data, });
+ }
+ }
+
+ public void TestStarted(ITest test)
+ {
+ var data = SerializeObject(m_TestResultDataFactory.CreateFromTest(test));
+ lock (m_LockQueue)
+ {
+ m_SendQueue.Enqueue(new QueueData
+ {
+ id = PlayerConnectionMessageIds.testStartedMessageId,
+ data = data
+ });
+ }
+ }
+
+ public void TestFinished(ITestResult result)
+ {
+ var testRunnerResultForApi = m_TestResultDataFactory.CreateFromTestResult(result);
+ var resultData = SerializeObject(testRunnerResultForApi);
+ lock (m_LockQueue)
+ {
+ m_SendQueue.Enqueue(new QueueData
+ {
+ id = PlayerConnectionMessageIds.testFinishedMessageId,
+ data = resultData,
+ });
+ }
+ }
+
+ public IEnumerator SendDataRoutine()
+ {
+ while (!PlayerConnection.instance.isConnected)
+ {
+ yield return new WaitForSeconds(1);
+ }
+
+ while (true)
+ {
+ lock (m_LockQueue)
+ {
+ if (PlayerConnection.instance.isConnected && m_SendQueue.Count > 0)
+ {
+ ResetNextPlayerAliveMessageTime();
+ var queueData = m_SendQueue.Dequeue();
+ PlayerConnection.instance.Send(queueData.id, queueData.data);
+ yield return null;
+ }
+
+ //This is needed so we dont stall the player totally
+ if (!m_SendQueue.Any())
+ {
+ SendAliveMessageIfNeeded();
+ yield return new WaitForSeconds(0.02f);
+ }
+ }
+ }
+ }
+
+ private void SendAliveMessageIfNeeded()
+ {
+ if (Time.timeSinceLevelLoad < m_NextliveMessage)
+ {
+ return;
+ }
+
+ Debug.Log("Sending player alive message back to editor.");
+ ResetNextPlayerAliveMessageTime();
+ PlayerConnection.instance.Send(PlayerConnectionMessageIds.playerAliveHeartbeat, new byte[0]);
+ }
+
+ private void ResetNextPlayerAliveMessageTime()
+ {
+ m_NextliveMessage = Time.timeSinceLevelLoad + k_aliveMessageFrequency;
+ }
+ }
+}
|
