using System; using UnityEngine; using UnityEngine.TestTools; #if pHUMANOID4 using NUnit.Framework; using Passer; using Passer.Humanoid; public class SocketTest : IPrebuildSetup { public static string testScene = "Sockets"; public void Setup() { Debug.Log("Setup SocketTest"); UnityEditor.SceneManagement.EditorSceneManager.OpenScene( "Assets/_TestCases/[Test]" + testScene + ".unity"); } #region Static Socket [Test] [Category("Socket")] public void StaticSocket_RigidbodyHandle() { // Rigidbody handles will get a fixed joint without attachedRigidbody try { GameObject socketObj = GameObject.Find("StaticSocket"); Socket socket = socketObj.GetComponent(); Assert.IsFalse(socket == null); GameObject handleObj = GameObject.Find("RigidbodyHandle"); Handle handle = handleObj.GetComponent(); Assert.IsFalse(handle == null); socket.transform.localPosition = Vector3.zero; handle.transform.localPosition = Vector3.zero; Transform socketParent = socket.transform.parent; Transform handleParent = handle.transform.parent; Vector3 socketPosition = socket.transform.position; Vector3 handlePosition = handle.transform.position; #region Attach socket.Attach(handle.transform, false); Joint joint = handle.GetComponent(); Assert.IsTrue(joint != null); Assert.AreEqual(socket.attachedTransform, handle.transform); Assert.AreNotEqual(handle.transform.parent, socket.transform); // Handle should be at socket position float distance = Vector3.Distance(socket.transform.position, handle.transform.position); Assert.Less(distance, 0.0001F); // Socket should not have moved distance = Vector3.Distance(socketPosition, socket.transform.position); Assert.Less(distance, 0.0001F); #endregion #region Release socket.Release(); Assert.IsTrue(socket.attachedTransform == null); Assert.AreNotEqual(handle.transform.parent, socket.transform); // Handle should still be at socket position distance = Vector3.Distance(socket.transform.position, handle.transform.position); Assert.Less(distance, 0.0001F); #endregion } catch (Exception e) { Debug.LogError("Test failed"); throw (e); } } [Test] [Category("Socket")] public void StaticSocket_StaticHandle() { // Static Handles cannot be attached to static sockets try { GameObject socketObj = GameObject.Find("StaticSocket"); Socket socket = socketObj.GetComponent(); Assert.IsTrue(socket != null); GameObject handleObj = GameObject.Find("StaticHandle"); Handle handle = handleObj.GetComponent(); Assert.IsTrue(handle != null); Transform socketParent = socket.transform.parent; Transform handleParent = handle.transform.parent; Vector3 socketPosition = socket.transform.position; Vector3 handlePosition = handle.transform.position; #region Attach socket.Attach(handle.transform, false); Assert.IsTrue(socket.attachedTransform == null); // Handle should not have moved float distance = Vector3.Distance(handle.transform.position, handlePosition); Assert.Less(distance, 0.0001F); // Socket should not have moved distance = Vector3.Distance(socket.transform.position, socketPosition); Assert.Less(distance, 0.0001F); #endregion #region Release socket.Release(); Assert.IsTrue(socket.attachedTransform == null); // Handle should not have moved Assert.Less(Vector3.Distance(handle.transform.position, handlePosition), 0.0001F); // Socket should not have moved Assert.Less(Vector3.Distance(socket.transform.position, socketPosition), 0.0001F); #endregion socket.transform.localPosition = Vector3.zero; handle.transform.localPosition = Vector3.zero; } catch (Exception e) { Debug.LogError("Test failed"); throw (e); } } [Test] [Category("Socket")] public void StaticSocket_KinematicHandle() { // Kinematic Handles should be parented to the socket try { GameObject socketObj = GameObject.Find("StaticSocket"); Socket socket = socketObj.GetComponent(); Assert.IsTrue(socket != null); GameObject handleObj = GameObject.Find("KinematicHandle"); Handle handle = handleObj.GetComponent(); Assert.IsTrue(handle != null); Transform socketParent = socket.transform.parent; Transform handleParent = handle.transform.parent; Vector3 socketPosition = socket.transform.position; Vector3 handlePosition = handle.transform.position; #region Attach socket.Attach(handle.transform, false); Assert.IsTrue(socket.attachedTransform != null); Assert.AreEqual(handle.transform.parent, socket.transform); // Handle should be at socket position Assert.Less(Vector3.Distance(socket.transform.position, handle.transform.position), 0.0001F); // Socket should not have moved Assert.Less(Vector3.Distance(socketPosition, socket.transform.position), 0.0001F); #endregion #region Release socket.Release(); Assert.IsTrue(socket.attachedTransform == null); Assert.AreEqual(handle.transform.parent, handleParent); // Handle should still be at socket position Assert.Less(Vector3.Distance(socket.transform.position, handle.transform.position), 0.0001F); #endregion socket.transform.localPosition = Vector3.zero; handle.transform.localPosition = Vector3.zero; } catch (Exception e) { Debug.LogError("Test failed"); throw (e); } } #endregion #region Rigidbody Socket [Test] [Category("Socket")] public void RigidbodySocket_RigidbodyHandle() { // Rigidbody Handles will be parented to Rigidbody Sockets try { GameObject socketObj = GameObject.Find("RigidbodySocket"); Socket socket = socketObj.GetComponent(); Assert.IsTrue(socket != null); GameObject handleObj = GameObject.Find("RigidbodyHandle"); Handle handle = handleObj.GetComponent(); Assert.IsTrue(handle != null); Transform socketParent = socket.transform.parent; Transform handleParent = handle.transform.parent; Vector3 socketPosition = socket.transform.position; Vector3 handlePosition = handle.transform.position; #region Attach socket.Attach(handle.transform, false); Assert.AreEqual(socket.attachedTransform, handle.transform); Assert.AreEqual(handle.transform.parent, socket.transform); // Handle should be at socket position float distance = Vector3.Distance(socket.transform.position, handle.transform.position); Assert.Less(distance, 0.0001F); // Socket should not have moved distance = Vector3.Distance(socketPosition, socket.transform.position); Assert.Less(distance, 0.0001F); #endregion #region Release socket.Release(); Assert.IsTrue(socket.attachedTransform == null); Assert.AreEqual(handle.transform.parent, handleParent); // Handle should be at socket position distance = Vector3.Distance(socket.transform.position, handle.transform.position); Assert.Less(distance, 0.0001F); #endregion socket.transform.localPosition = Vector3.zero; handle.transform.localPosition = Vector3.zero; } catch (Exception e) { Debug.LogError("Test failed"); throw (e); } } [Test] [Category("Socket")] public void RigidbodySocket_StaticHandle() { // Rigidbody sockets will get a fixed joint to a static handle try { GameObject socketObj = GameObject.Find("RigidbodySocket"); Socket socket = socketObj.GetComponent(); Assert.IsFalse(socket == null); GameObject handleObj = GameObject.Find("StaticHandle"); Handle handle = handleObj.GetComponent(); Assert.IsFalse(handle == null); Transform socketParent = socket.transform.parent; Transform handleParent = handle.transform.parent; Vector3 socketPosition = socket.transform.position; Vector3 handlePosition = handle.transform.position; #region Attach socket.Attach(handle.transform, false); Joint joint = socket.GetComponent(); Assert.IsTrue(joint != null); Assert.IsTrue(joint.connectedBody == null); Assert.AreEqual(socket.attachedTransform, handle.transform); Assert.AreNotEqual(handle.transform.parent, socket.transform); // Socket should be at handle position Assert.Less(Vector3.Distance(socket.transform.position, handle.transform.position), 0.0001F); // Handle should not have moved Assert.Less(Vector3.Distance(handle.transform.position, handlePosition), 0.0001F); #endregion #region Release socket.Release(); Assert.IsTrue(socket.attachedTransform == null); Assert.AreNotEqual(handle.transform.parent, socket.transform); joint = socket.GetComponent(); Assert.IsTrue(joint == null); // Socket should still be at handle position Assert.Less(Vector3.Distance(socket.transform.position, handle.transform.position), 0.0001F); #endregion socket.transform.localPosition = Vector3.zero; handle.transform.localPosition = Vector3.zero; } catch (Exception e) { Debug.LogError("Test failed"); throw (e); } } [Test] [Category("Socket")] public void RigidbodySocket_KinematicHandle() { // Rigidbody sockets will get parented to kinematic handles try { GameObject socketObj = GameObject.Find("RigidbodySocket"); Socket socket = socketObj.GetComponent(); Assert.IsFalse(socket == null); GameObject handleObj = GameObject.Find("KinematicHandle"); Handle handle = handleObj.GetComponent(); Assert.IsFalse(handle == null); Transform socketParent = socket.transform.parent; Transform handleParent = handle.transform.parent; Vector3 socketPosition = socket.transform.position; Vector3 handlePosition = handle.transform.position; #region Attach socket.Attach(handle.transform, false); Assert.AreEqual(socket.attachedTransform, handle.transform); Assert.AreEqual(socket.transform.parent, handle.transform); // Socket should be at handle position Assert.Less(Vector3.Distance(socket.transform.position, handle.transform.position), 0.0001F); // Handle should not have moved Assert.Less(Vector3.Distance(handle.transform.position, handlePosition), 0.0001F); #endregion #region Release socket.Release(); Assert.IsTrue(socket.attachedTransform == null, "Socket still is attached to transform"); Assert.AreEqual(socket.transform.parent, socketParent, "Socket is not restored to previous parent"); // Socket should be at handle position Assert.Less(Vector3.Distance(socket.transform.position, handle.transform.position), 0.0001F); #endregion socket.transform.localPosition = Vector3.zero; handle.transform.localPosition = Vector3.zero; } catch (Exception e) { Debug.LogError("Test failed"); throw (e); } } #endregion #region Kinematic Socket [Test] [Category("Socket")] public void KinematicSocket_RigidbodyHandle() { Setup(); // Rigidbody Handles will be parented to Kinematic Sockets try { GameObject socketObj = GameObject.Find("KinematicSocket"); Socket socket = socketObj.GetComponent(); Assert.IsTrue(socket != null); GameObject handleObj = GameObject.Find("RigidbodyHandle"); Handle handle = handleObj.GetComponent(); Assert.IsTrue(handle != null); Transform socketParent = socket.transform.parent; Transform handleParent = handle.transform.parent; Vector3 socketPosition = socket.transform.position; Vector3 handlePosition = handle.transform.position; #region Attach socket.Attach(handle.transform, false); Assert.AreEqual(socket.attachedTransform, handle.transform); Assert.AreEqual(handle.transform.parent, socket.transform); // Handle should be at socket position float distance = Vector3.Distance(socket.transform.position, handle.transform.position); Assert.Less(distance, 0.0001F); // Socket should not have moved distance = Vector3.Distance(socketPosition, socket.transform.position); Assert.Less(distance, 0.0001F); #endregion #region Release socket.Release(); Assert.IsTrue(socket.attachedTransform == null); Assert.AreEqual(handle.transform.parent, handleParent); // Handle should still be at socket position distance = Vector3.Distance(socket.transform.position, handle.transform.position); Assert.Less(distance, 0.0001F); #endregion socket.transform.localPosition = Vector3.zero; handle.transform.localPosition = Vector3.zero; } catch (Exception e) { Debug.LogError("Test failed"); throw (e); } } [Test] [Category("Socket")] public void KinematicSocket_StaticHandle() { Setup(); // Kinematic Sockets should be parented to a static handle try { GameObject socketObj = GameObject.Find("KinematicSocket"); Socket socket = socketObj.GetComponent(); Assert.IsTrue(socket != null); GameObject handleObj = GameObject.Find("StaticHandle"); Handle handle = handleObj.GetComponent(); Assert.IsTrue(handle != null); Transform socketParent = socket.transform.parent; Transform handleParent = handle.transform.parent; Vector3 socketPosition = socket.transform.position; Vector3 handlePosition = handle.transform.position; #region Attach socket.Attach(handle.transform, false); Assert.AreEqual(socket.attachedTransform, handle.transform); Assert.AreEqual(socket.transform.parent, handle.transform); // Handle should be at socket position Assert.Less(Vector3.Distance(socket.transform.position, handle.transform.position), 0.0001F); // Handle should not have moved Assert.Less(Vector3.Distance(handlePosition, handle.transform.position), 0.0001F); #endregion #region Release socket.Release(); Assert.IsTrue(socket.attachedTransform == null); Assert.AreEqual(socket.transform.parent, socketParent); #endregion socket.transform.localPosition = Vector3.zero; handle.transform.localPosition = Vector3.zero; } catch (Exception e) { Debug.LogError("Test failed"); throw (e); } } [Test] [Category("Socket")] public void KinematicSocket_KinematicHandle() { Setup(); // Kinematic Handles should be parented to a kinematic socket try { GameObject socketObj = GameObject.Find("KinematicSocket"); Socket socket = socketObj.GetComponent(); Assert.IsTrue(socket != null); GameObject handleObj = GameObject.Find("KinematicHandle"); Handle handle = handleObj.GetComponent(); Assert.IsTrue(handle != null); Transform socketParent = socket.transform.parent; Transform handleParent = handle.transform.parent; Vector3 socketPosition = socket.transform.position; Vector3 handlePosition = handle.transform.position; #region Attach socket.Attach(handle.transform, false); Assert.IsTrue(socket.attachedTransform != null); Assert.AreEqual(handle.transform.parent, socket.transform); // Handle should be at socket position Assert.Less(Vector3.Distance(socket.transform.position, handle.transform.position), 0.0001F); // Socket should not have moved Assert.Less(Vector3.Distance(socketPosition, socket.transform.position), 0.0001F); #endregion #region Release socket.Release(); Assert.IsTrue(socket.attachedTransform == null); Assert.AreEqual(handle.transform.parent, handleParent); #endregion socket.transform.localPosition = Vector3.zero; handle.transform.localPosition = Vector3.zero; } catch (Exception e) { Debug.LogError("Test failed"); throw (e); } } #endregion } #endif