Initial Commit
This commit is contained in:
parent
53eb92e9af
commit
270ab7d11f
15341 changed files with 700234 additions and 0 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3cf5cb9e1ef590c48b1f919f2a7bd895
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f8ed0b11850145c4995dd76170bb2500
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 20793418366caf14293b29c55df5e9ec
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5ebb87899ca30b743bb4274bc00c02b4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: dfc336f10b83bd74eaded16a658275c7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Loading…
Add table
Add a link
Reference in a new issue