123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 |
- using UnityEngine;
- using System;
- using System.IO;
- using NUnit.Framework;
- using UnityEditor;
- using UnityEditor.SettingsManagement;
- using UnityEngine.TestTools;
- namespace UnityEngine.SettingsManagement.EditorTests
- {
- class SettingsTests : IPrebuildSetup, IPostBuildCleanup
- {
- const string k_PackageName = "com.unity.settings-manager";
- const string k_SettingsFile = "SettingsTests";
- static Settings s_Settings;
- static string projectSettingsPath
- {
- get { return PackageSettingsRepository.GetSettingsPath(k_PackageName, k_SettingsFile); }
- }
- static Settings settings
- {
- get
- {
- if (s_Settings == null)
- s_Settings = new Settings(k_PackageName);
- return s_Settings;
- }
- }
- public void Setup()
- {
- }
- public void Cleanup()
- {
- foreach (var v in s_AllPreferences)
- v.Delete();
- if (File.Exists(projectSettingsPath))
- File.Delete(projectSettingsPath);
- }
- [Serializable]
- struct DummyStruct : IEquatable<DummyStruct>
- {
- public string stringValue;
- public int intValue;
- public DummyStruct(string s, int i)
- {
- stringValue = s;
- intValue = i;
- }
- public static DummyStruct defaultValue
- {
- get { return new DummyStruct("I'm a string!", 42); }
- }
- public bool Equals(DummyStruct other)
- {
- return string.Equals(stringValue, other.stringValue) && intValue == other.intValue;
- }
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- return false;
- return obj is DummyStruct && Equals((DummyStruct)obj);
- }
- public override int GetHashCode()
- {
- unchecked
- {
- return ((stringValue != null ? stringValue.GetHashCode() : 0) * 397) ^ intValue;
- }
- }
- public static bool operator ==(DummyStruct left, DummyStruct right)
- {
- return left.Equals(right);
- }
- public static bool operator !=(DummyStruct left, DummyStruct right)
- {
- return !left.Equals(right);
- }
- public override string ToString()
- {
- return stringValue + " " + intValue;
- }
- }
- [Serializable]
- class DummyClass : IEquatable<DummyClass>
- {
- public string stringValue;
- public int intValue;
- public DummyClass(string s, int i)
- {
- stringValue = s;
- intValue = i;
- }
- public static DummyClass defaultValue
- {
- get { return new DummyClass("I'm a string!", 42); }
- }
- public bool Equals(DummyClass other)
- {
- return string.Equals(stringValue, other.stringValue) && intValue == other.intValue;
- }
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- return false;
- return obj is DummyClass && Equals((DummyClass)obj);
- }
- public override int GetHashCode()
- {
- unchecked
- {
- return ((stringValue != null ? stringValue.GetHashCode() : 0) * 397) ^ intValue;
- }
- }
- public static bool operator ==(DummyClass left, DummyClass right)
- {
- return left.Equals(right);
- }
- public static bool operator !=(DummyClass left, DummyClass right)
- {
- return !left.Equals(right);
- }
- public override string ToString()
- {
- return stringValue + " " + intValue;
- }
- }
- static UserSetting<bool> s_StaticBoolUser = new UserSetting<bool>(settings, "tests.user.static.bool", true, SettingsScope.User);
- static UserSetting<bool> s_StaticBoolProject = new UserSetting<bool>(settings, "tests.project.static.bool", true, SettingsScope.Project);
- static UserSetting<string> s_StaticStringUser = new UserSetting<string>(settings, "tests.user.static.string", "Hello, world!", SettingsScope.User);
- static UserSetting<string> s_StaticStringProject = new UserSetting<string>(settings, "tests.project.static.string", "Goodbye, world!", SettingsScope.Project);
- static UserSetting<DummyStruct> s_StaticStructUser = new UserSetting<DummyStruct>(settings, "tests.user.static.struct", DummyStruct.defaultValue, SettingsScope.User);
- static UserSetting<DummyStruct> s_StaticStructProject = new UserSetting<DummyStruct>(settings, "tests.project.static.struct", DummyStruct.defaultValue, SettingsScope.Project);
- static UserSetting<DummyClass> s_StaticClassUser = new UserSetting<DummyClass>(settings, "tests.user.static.class", DummyClass.defaultValue, SettingsScope.User);
- static UserSetting<DummyClass> s_StaticClassProject = new UserSetting<DummyClass>(settings, "tests.project.static.class", DummyClass.defaultValue, SettingsScope.Project);
- static IUserSetting[] s_AllPreferences = new IUserSetting[]
- {
- s_StaticBoolUser,
- s_StaticBoolProject,
- s_StaticStringUser,
- s_StaticStringProject,
- s_StaticStructUser,
- s_StaticStructProject,
- s_StaticClassUser,
- s_StaticClassProject
- };
- [Test]
- public static void DefaultsAreCorrect()
- {
- try
- {
- foreach (var pref in s_AllPreferences)
- pref.Reset();
- Assert.IsTrue((bool)s_StaticBoolUser, s_StaticBoolUser.ToString());
- Assert.IsTrue((bool)s_StaticBoolProject, s_StaticBoolProject.ToString());
- Assert.AreEqual("Hello, world!", (string)s_StaticStringUser, s_StaticStringUser.ToString());
- Assert.AreEqual("Goodbye, world!", (string)s_StaticStringProject, s_StaticStringProject.ToString());
- Assert.AreEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructUser, s_StaticStructUser.ToString());
- Assert.AreEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructProject, s_StaticStructProject.ToString());
- Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassUser, s_StaticClassUser.ToString());
- Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassProject, s_StaticClassProject.ToString());
- }
- catch (Exception e)
- {
- Debug.LogError(e.ToString());
- }
- }
- [Test]
- public static void SetValue()
- {
- try
- {
- // BOOl
- s_StaticBoolUser.value = false;
- s_StaticBoolProject.value = false;
- Assert.IsFalse((bool)s_StaticBoolUser);
- Assert.IsFalse((bool)s_StaticBoolProject);
- // STRING
- s_StaticStringUser.value = "Some more text";
- s_StaticStringProject.value = "Some text here";
- Assert.AreEqual("Some more text", (string)s_StaticStringUser);
- Assert.AreEqual("Some text here", (string)s_StaticStringProject);
- // STRUCT
- var userStruct = new DummyStruct("Changed text", 23);
- var projectStruct = new DummyStruct("Slightly different text", -9825);
- s_StaticStructUser.SetValue(userStruct);
- s_StaticStructProject.SetValue(projectStruct);
- Assert.AreEqual(userStruct, (DummyStruct)s_StaticStructUser);
- Assert.AreEqual(projectStruct, (DummyStruct)s_StaticStructProject);
- // CLASS
- var userClass = new DummyClass("Changed text", 23);
- var projectClass = new DummyClass("Slightly different text", -9825);
- s_StaticClassUser.SetValue(userClass);
- s_StaticClassProject.SetValue(projectClass);
- Assert.AreEqual(userClass, (DummyClass)s_StaticClassUser);
- Assert.AreEqual(projectClass, (DummyClass)s_StaticClassProject);
- }
- catch (Exception e)
- {
- Debug.LogError(e.ToString());
- }
- }
- [Test]
- public static void SetAndReset()
- {
- try
- {
- // BOOL
- s_StaticBoolUser.value = false;
- s_StaticBoolProject.value = false;
- // STRING
- s_StaticStringUser.value = "Some more text";
- s_StaticStringProject.value = "Some text here";
- // STRUCT
- s_StaticStructUser.SetValue(new DummyStruct("Changed text", 23));
- s_StaticStructProject.SetValue(new DummyStruct("Slightly different text", -9825));
- // CLASS
- s_StaticClassUser.SetValue(new DummyClass("Changed text", 23));
- s_StaticClassProject.SetValue(new DummyClass("Slightly different text", -9825));
- Assert.IsFalse((bool)s_StaticBoolUser);
- Assert.IsFalse((bool)s_StaticBoolProject);
- Assert.AreNotEqual("Hello, world!", (string)s_StaticStringUser);
- Assert.AreNotEqual("Goodbye, world!", (string)s_StaticStringProject);
- Assert.AreNotEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructUser);
- Assert.AreNotEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructProject);
- Assert.AreNotEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassUser);
- Assert.AreNotEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassProject);
- foreach (var pref in s_AllPreferences)
- pref.Reset();
- Assert.IsTrue((bool)s_StaticBoolUser);
- Assert.IsTrue((bool)s_StaticBoolProject);
- Assert.AreEqual("Hello, world!", (string)s_StaticStringUser);
- Assert.AreEqual("Goodbye, world!", (string)s_StaticStringProject);
- Assert.AreEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructUser);
- Assert.AreEqual(DummyStruct.defaultValue, (DummyStruct)s_StaticStructProject);
- Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassUser);
- Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassProject);
- }
- catch (Exception e)
- {
- Debug.LogError(e.ToString());
- }
- }
- [Test]
- public static void SerializeAndLoad()
- {
- try
- {
- foreach (var pref in s_AllPreferences)
- pref.Reset();
- settings.Save();
- var instance = new Settings(k_PackageName);
- Assert.AreEqual((bool)s_StaticBoolUser, instance.Get<bool>(s_StaticBoolUser.key, s_StaticBoolUser.scope));
- Assert.AreEqual((bool)s_StaticBoolProject, instance.Get<bool>(s_StaticBoolProject.key, s_StaticBoolProject.scope));
- Assert.AreEqual((string)s_StaticStringUser, instance.Get<string>(s_StaticStringUser.key, s_StaticStringUser.scope));
- Assert.AreEqual((string)s_StaticStringProject, instance.Get<string>(s_StaticStringProject.key, s_StaticStringProject.scope));
- Assert.AreEqual((DummyStruct)s_StaticStructUser, instance.Get<DummyStruct>(s_StaticStructUser.key, s_StaticStructUser.scope));
- Assert.AreEqual((DummyStruct)s_StaticStructProject, instance.Get<DummyStruct>(s_StaticStructProject.key, s_StaticStructProject.scope));
- Assert.AreEqual((DummyClass)s_StaticClassUser, instance.Get<DummyClass>(s_StaticClassUser.key, s_StaticClassUser.scope));
- Assert.AreEqual((DummyClass)s_StaticClassProject, instance.Get<DummyClass>(s_StaticClassProject.key, s_StaticClassProject.scope));
- }
- catch (Exception e)
- {
- Debug.LogError(e.ToString());
- }
- }
- [Test]
- public static void DeleteKeys()
- {
- try
- {
- foreach (var pref in s_AllPreferences)
- pref.Delete();
- settings.Save();
- var instance = new Settings(k_PackageName);
- Assert.IsFalse(instance.ContainsKey<bool>("tests.user.static.bool", SettingsScope.User), "tests.user.static.bool");
- Assert.IsFalse(instance.ContainsKey<bool>("tests.project.static.bool", SettingsScope.Project), "tests.project.static.bool");
- Assert.IsFalse(instance.ContainsKey<string>("tests.user.static.string", SettingsScope.User), "tests.user.static.string");
- Assert.IsFalse(instance.ContainsKey<string>("tests.project.static.string", SettingsScope.Project), "tests.project.static.string");
- Assert.IsFalse(instance.ContainsKey<DummyStruct>("tests.user.static.struct", SettingsScope.User), "tests.user.static.struct");
- Assert.IsFalse(instance.ContainsKey<DummyStruct>("tests.project.static.struct", SettingsScope.Project), "tests.project.static.struct");
- Assert.IsFalse(instance.ContainsKey<DummyClass>("tests.user.static.class", SettingsScope.User), "tests.user.static.class");
- Assert.IsFalse(instance.ContainsKey<DummyClass>("tests.project.static.class", SettingsScope.Project), "tests.project.static.class");
- }
- catch (Exception e)
- {
- Debug.LogError(e.ToString());
- }
- }
- [Test]
- public static void KeysExistInSettingsInstance()
- {
- try
- {
- foreach (var pref in s_AllPreferences)
- pref.Reset();
- settings.Save();
- Assert.IsTrue(settings.ContainsKey<bool>("tests.user.static.bool", SettingsScope.User), "tests.user.static.bool");
- Assert.IsTrue(settings.ContainsKey<bool>("tests.project.static.bool", SettingsScope.Project), "tests.project.static.bool");
- Assert.IsTrue(settings.ContainsKey<string>("tests.user.static.string", SettingsScope.User), "tests.user.static.string");
- Assert.IsTrue(settings.ContainsKey<string>("tests.project.static.string", SettingsScope.Project), "tests.project.static.string");
- Assert.IsTrue(settings.ContainsKey<DummyStruct>("tests.user.static.struct", SettingsScope.User), "tests.user.static.struct");
- Assert.IsTrue(settings.ContainsKey<DummyStruct>("tests.project.static.struct", SettingsScope.Project), "tests.project.static.struct");
- Assert.IsTrue(settings.ContainsKey<DummyClass>("tests.user.static.class", SettingsScope.User), "tests.user.static.class");
- Assert.IsTrue(settings.ContainsKey<DummyClass>("tests.project.static.class", SettingsScope.Project), "tests.project.static.class");
- }
- catch (Exception e)
- {
- Debug.LogError(e.ToString());
- }
- }
- [Test]
- public static void KeysExistInSerializedForm()
- {
- try
- {
- foreach (var pref in s_AllPreferences)
- pref.Reset();
- settings.Save();
- var instance = new Settings(k_PackageName);
- Assert.IsTrue(instance.ContainsKey<bool>("tests.user.static.bool", SettingsScope.User), "tests.user.static.bool");
- Assert.IsTrue(instance.ContainsKey<bool>("tests.project.static.bool", SettingsScope.Project), "tests.project.static.bool");
- Assert.IsTrue(instance.ContainsKey<string>("tests.user.static.string", SettingsScope.User), "tests.user.static.string");
- Assert.IsTrue(instance.ContainsKey<string>("tests.project.static.string", SettingsScope.Project), "tests.project.static.string");
- Assert.IsTrue(instance.ContainsKey<DummyStruct>("tests.user.static.struct", SettingsScope.User), "tests.user.static.struct");
- Assert.IsTrue(instance.ContainsKey<DummyStruct>("tests.project.static.struct", SettingsScope.Project), "tests.project.static.struct");
- Assert.IsTrue(instance.ContainsKey<DummyClass>("tests.user.static.class", SettingsScope.User), "tests.user.static.class");
- Assert.IsTrue(instance.ContainsKey<DummyClass>("tests.project.static.class", SettingsScope.Project), "tests.project.static.class");
- }
- catch (Exception e)
- {
- Debug.LogError(e.ToString());
- }
- }
- [Test]
- public static void ChangingClassValuesSaves()
- {
- try
- {
- s_StaticClassUser.Reset();
- s_StaticClassProject.Reset();
- Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassUser);
- Assert.AreEqual(DummyClass.defaultValue, (DummyClass)s_StaticClassProject);
- var userReference = s_StaticClassUser.value;
- var projectReference = s_StaticClassProject.value;
- userReference.intValue = 200;
- projectReference.intValue = 200;
- s_StaticClassProject.ApplyModifiedProperties();
- s_StaticClassUser.ApplyModifiedProperties();
- Assert.IsTrue(ReferenceEquals(s_StaticClassProject.value, projectReference));
- Assert.IsTrue(ReferenceEquals(s_StaticClassUser.value, userReference));
- Assert.AreEqual(200, s_StaticClassUser.value.intValue, "After ApplyModifiedProperties");
- Assert.AreEqual(200, s_StaticClassProject.value.intValue, "After ApplyModifiedProperties");
- settings.Save();
- var instance = new Settings(k_PackageName);
- Assert.AreEqual(200, instance.Get<DummyClass>(s_StaticClassUser.key, s_StaticClassUser.scope).intValue, "Reload Settings Instance");
- Assert.AreEqual(200, instance.Get<DummyClass>(s_StaticClassProject.key, s_StaticClassProject.scope).intValue, "Reload Settings Instance");
- }
- catch (Exception e)
- {
- Debug.LogError(e.ToString());
- }
- }
- }
- }
|