Initial Commit

This commit is contained in:
Sebastian Cabrera 2021-08-02 05:44:37 -04:00
parent 53eb92e9af
commit 270ab7d11f
15341 changed files with 700234 additions and 0 deletions

View file

@ -0,0 +1,47 @@
using NUnit.Framework;
using NUnit.Framework.Interfaces;
namespace UnityEngine.TestTools.TestRunner.Callbacks
{
[AddComponentMenu("")]
internal class PlayModeRunnerCallback : MonoBehaviour, ITestRunnerListener
{
private TestResultRenderer m_ResultRenderer;
public void RunFinished(ITestResult testResults)
{
Application.logMessageReceivedThreaded -= LogRecieved;
if (Camera.main == null)
{
gameObject.AddComponent<Camera>();
}
m_ResultRenderer = new TestResultRenderer(testResults);
m_ResultRenderer.ShowResults();
}
public void TestFinished(ITestResult result)
{
}
public void OnGUI()
{
if (m_ResultRenderer != null)
m_ResultRenderer.Draw();
}
public void RunStarted(ITest testsToRun)
{
Application.logMessageReceivedThreaded += LogRecieved;
}
public void TestStarted(ITest test)
{
}
private void LogRecieved(string message, string stacktrace, LogType type)
{
if (TestContext.Out != null)
TestContext.Out.WriteLine(message);
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3cf5cb9e1ef590c48b1f919f2a7bd895
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,43 @@
using NUnit.Framework.Interfaces;
using UnityEngine.Networking.PlayerConnection;
using UnityEngine.TestRunner.TestLaunchers;
namespace UnityEngine.TestTools.TestRunner.Callbacks
{
internal class PlayerQuitHandler : MonoBehaviour, ITestRunnerListener
{
public void Start()
{
PlayerConnection.instance.Register(PlayerConnectionMessageIds.quitPlayerMessageId, ProcessPlayerQuiteMessage);
}
private void ProcessPlayerQuiteMessage(MessageEventArgs arg0)
{
//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();
}
public void RunStarted(ITest testsToRun)
{
}
public void RunFinished(ITestResult testResults)
{
}
public void TestStarted(ITest test)
{
}
public void TestFinished(ITestResult result)
{
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f8ed0b11850145c4995dd76170bb2500
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,132 @@
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()
{
StartCoroutine(SendDataRoutine());
}
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;
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 20793418366caf14293b29c55df5e9ec
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,97 @@
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework.Interfaces;
using NUnit.Framework.Internal;
namespace UnityEngine.TestTools.TestRunner.Callbacks
{
internal class TestResultRenderer
{
private static class Styles
{
public static readonly GUIStyle SucceedLabelStyle;
public static readonly GUIStyle FailedLabelStyle;
public static readonly GUIStyle FailedMessagesStyle;
static Styles()
{
SucceedLabelStyle = new GUIStyle("label");
SucceedLabelStyle.normal.textColor = Color.green;
SucceedLabelStyle.fontSize = 48;
FailedLabelStyle = new GUIStyle("label");
FailedLabelStyle.normal.textColor = Color.red;
FailedLabelStyle.fontSize = 32;
FailedMessagesStyle = new GUIStyle("label");
FailedMessagesStyle.wordWrap = false;
FailedMessagesStyle.richText = true;
}
}
private readonly List<ITestResult> m_FailedTestCollection;
private bool m_ShowResults;
private Vector2 m_ScrollPosition;
public TestResultRenderer(ITestResult testResults)
{
m_FailedTestCollection = new List<ITestResult>();
GetFailedTests(testResults);
}
private void GetFailedTests(ITestResult testResults)
{
if (testResults is TestCaseResult)
{
if (testResults.ResultState.Status == TestStatus.Failed)
m_FailedTestCollection.Add(testResults);
}
else if (testResults.HasChildren)
{
foreach (var testResultsChild in testResults.Children)
{
GetFailedTests(testResultsChild);
}
}
}
private const int k_MaxStringLength = 15000;
public void ShowResults()
{
m_ShowResults = true;
Cursor.visible = true;
}
public void Draw()
{
if (!m_ShowResults) return;
if (m_FailedTestCollection.Count == 0)
{
GUILayout.Label("All test(s) succeeded", Styles.SucceedLabelStyle, GUILayout.Width(600));
}
else
{
int count = m_FailedTestCollection.Count;
GUILayout.Label(count + " tests failed!", Styles.FailedLabelStyle);
m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition, GUILayout.ExpandWidth(true));
var text = "";
text += "<b><size=18>Code-based tests</size></b>\n";
text += string.Join("\n", m_FailedTestCollection
.Select(result => result.Name + " " + result.ResultState + "\n" + result.Message)
.ToArray());
if (text.Length > k_MaxStringLength)
text = text.Substring(0, k_MaxStringLength);
GUILayout.TextArea(text, Styles.FailedMessagesStyle);
GUILayout.EndScrollView();
}
if (GUILayout.Button("Close"))
Application.Quit();
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5ebb87899ca30b743bb4274bc00c02b4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,36 @@
using NUnit.Framework.Interfaces;
namespace UnityEngine.TestTools.TestRunner.Callbacks
{
internal class TestResultRendererCallback : MonoBehaviour, ITestRunnerListener
{
private TestResultRenderer m_ResultRenderer;
public void RunStarted(ITest testsToRun)
{
}
public void RunFinished(ITestResult testResults)
{
if (Camera.main == null)
{
gameObject.AddComponent<Camera>();
}
m_ResultRenderer = new TestResultRenderer(testResults);
m_ResultRenderer.ShowResults();
}
public void OnGUI()
{
if (m_ResultRenderer != null)
m_ResultRenderer.Draw();
}
public void TestStarted(ITest test)
{
}
public void TestFinished(ITestResult result)
{
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dfc336f10b83bd74eaded16a658275c7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: