using System; using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization; using UnityEngine; public class TestProgress : MonoBehaviour { [Serializable] // Dummy struct private struct SerializableStruct { public int r, g, b; public float x, y, z; } private struct NonSerializableStruct { public int r, g, b; public float x, y, z; } // Helper method, returns true if `Progress.Get(...)` throws a `KeyNotFoundException` private bool AddNonSerializableStruct() { Progress progress = new Progress(); NonSerializableStruct nss = new NonSerializableStruct(); try { progress.Add("key", nss); } catch (SerializationException) { return true; } return false; } // Helper method, returns true if `Progress.Get(...)` throws a `KeyNotFoundException` private bool AccessInvalidKey() { Progress progress = new Progress(); try { progress.Get("non-existing key"); } catch (KeyNotFoundException) { return true; } return false; } // Helper method, returns true if `Progress.Get(...)` throws a `InvalidCastException` private bool AccessInvalidType() { Progress progress = new Progress(); progress.Add("key", 123456789); try { progress.Get("key"); } catch (InvalidCastException) { return true; } return false; } void Start() { TestNewProgress(); TestProgressAddInvalidData(); TestProgressAddDuplicateKey(); TestProgressAddInt(); TestProgressAddDouble(); TestProgressAddString(); TestProgressAddSerializableStruct(); TestProgressAddNonSerializableStruct(); TestProgressGetInvalidKey(); TestProgressGetInvalidType(); TestProgressGetInt(); TestProgressGetDouble(); TestProgressGetString(); TestProgressGetStruct(); } public void TestNewProgress() { Progress progress = new Progress(); Debug.Assert(progress != null); } public void TestProgressAddInvalidData() { Progress progress = new Progress(); Debug.Assert(!progress.Add("key", null)); } public void TestProgressAddDuplicateKey() { Progress progress = new Progress(); progress.Add("key 1", 0); Debug.Assert(!progress.Add("key 1", 1)); } public void TestProgressAddInt() { Progress progress = new Progress(); Debug.Assert(progress.Add("key", 1)); } public void TestProgressAddDouble() { Progress progress = new Progress(); Debug.Assert(progress.Add("key", 1.0)); } public void TestProgressAddString() { Progress progress = new Progress(); Debug.Assert(progress.Add("key", "Hello World!")); } public void TestProgressAddSerializableStruct() { Progress progress = new Progress(); Debug.Assert(progress.Add("key", new SerializableStruct())); } public void TestProgressAddNonSerializableStruct() { Debug.Assert(AddNonSerializableStruct()); } public void TestProgressGetInvalidKey() { Debug.Assert(AccessInvalidKey()); } public void TestProgressGetInvalidType() { Debug.Assert(AccessInvalidType()); } public void TestProgressGetInt() { Progress progress = new Progress(); progress.Add("key", 1); Debug.Assert(progress.Get("key") == 1); } public void TestProgressGetDouble() { Progress progress = new Progress(); progress.Add("key", 1.0); Debug.Assert(progress.Get("key") == 1.0); } public void TestProgressGetString() { Progress progress = new Progress(); progress.Add("key", "Hello World!"); Debug.Assert(progress.Get("key") == "Hello World!"); } public void TestProgressGetStruct() { Progress progress = new Progress(); int R = 1, G = 10, B = 100; float X = 0.1f, Y = 0.01f, Z = 0.001f; SerializableStruct data = new SerializableStruct { r = R, g = G, b = B, x = X, y = Y, z = Z }; progress.Add("key", data); SerializableStruct result = progress.Get("key"); Debug.Assert(result.r == R); Debug.Assert(result.g == G); Debug.Assert(result.b == B); Debug.Assert(result.x == X); Debug.Assert(result.y == Y); Debug.Assert(result.z == Z); } }