Resolve WES-117 "Persistent data handling"

This commit is contained in:
Dries Van Schuylenbergh
2023-04-04 17:00:47 +00:00
parent 3499e61bb0
commit 5f4408063f
82 changed files with 1963 additions and 1190 deletions

View File

@@ -5,7 +5,8 @@
"UnityEngine.TestRunner",
"UnityEditor.TestRunner",
"AccountsScripts",
"InterfacesScripts"
"InterfacesScripts",
"SystemArchitecture"
],
"includePlatforms": [
"Editor"

View File

@@ -1,213 +0,0 @@
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using UnityEngine;
/// <summary>
/// Test the Progress class
/// </summary>
[TestFixture]
public class ProgressTest
{
/// <summary>
/// Reference to the progress object to be tested
/// </summary>
private Progress progress;
/// <summary>
/// A dummy serializable struct to perform test operations on
/// </summary>
[Serializable]
private struct SerializableStruct
{
public int r, g, b;
public float x, y, z;
}
/// <summary>
/// A dummy non-serializable struct to perform test operations on
/// </summary>
private struct NonSerializableStruct
{
public int r, g, b;
public float x, y, z;
}
/// <summary>
/// Setup the tests
/// </summary>
[SetUp]
public void Setup_Progress()
{
progress = new Progress();
}
/// <summary>
/// Test for creation of a new progress
/// </summary>
[Test]
public void Test_New_Progress()
{
Assert.IsNotNull(progress);
}
/// <summary>
/// Test whether invalid data will not be added
/// </summary>
[Test]
public void Test_Progress_Add_InvalidData()
{
Assert.IsFalse(progress.AddOrUpdate<GameObject>("key", null));
}
/// <summary>
/// Test whether a duplicated key will be added
/// </summary>
[Test]
public void Test_Progress_Add_DuplicateKey()
{
progress.AddOrUpdate<int>("key 1", 0);
Assert.IsTrue(progress.AddOrUpdate<int>("key 1", 1));
}
/// <summary>
/// Test whether a <c>int</c> value can be added
/// </summary>
[Test]
public void Test_Progress_Add_Int()
{
Assert.IsTrue(progress.AddOrUpdate<int>("key", 1));
}
/// <summary>
/// Test whether a <c>double</c> value can be added
/// </summary>
[Test]
public void Test_Progress_Add_Double()
{
Assert.IsTrue(progress.AddOrUpdate<double>("key", 1.0));
}
/// <summary>
/// Test whether a <c>string</c> value can be added
/// </summary>
[Test]
public void Test_Progress_Add_String()
{
Assert.IsTrue(progress.AddOrUpdate<string>("key", "Hello World!"));
}
/// <summary>
/// Test whether a serializable struct can be added
/// </summary>
[Test]
public void Test_Progress_Add_SerializableStruct()
{
Assert.IsTrue(progress.AddOrUpdate<SerializableStruct>("key", new SerializableStruct()));
}
/// <summary>
/// Test whether a non-serializable struct will throw an error
/// </summary>
[Test]
public void Test_Progress_Add_NonSerializableStruct()
{
NonSerializableStruct nss = new NonSerializableStruct();
Assert.Throws<SerializationException>(delegate { progress.AddOrUpdate<NonSerializableStruct>("key", nss); });
}
/// <summary>
/// Test whether a key is present
/// </summary>
[Test]
public void Test_Progress_Has_ValidKey()
{
progress.AddOrUpdate<int>("key", 1);
Assert.IsTrue(progress.Has("key"));
}
/// <summary>
/// Test whether a key is not present
/// </summary>
[Test]
public void Test_Progress_Has_InvalidKey()
{
Assert.IsFalse(progress.Has("non-existing key"));
}
/// <summary>
/// Test whether an invalid key will throw an error
/// </summary>
[Test]
public void Test_Progress_Get_InvalidKey()
{
Assert.Throws<KeyNotFoundException>(delegate { progress.Get<int>("non-existing key"); });
}
/// <summary>
/// Test whether an invalid type will throw an error
/// </summary>
[Test]
public void Test_Progress_Get_InvalidType()
{
progress.AddOrUpdate<int>("key", 123456789);
Assert.Throws<InvalidCastException>(delegate { progress.Get<double>("key"); });
}
/// <summary>
/// Test whether a value is correctly updated
/// </summary>
[Test]
public void Test_Progress_Update()
{
progress.AddOrUpdate<int>("key", 1);
Assert.AreEqual(progress.Get<int>("key"), 1);
progress.AddOrUpdate<int>("key", 2);
Assert.AreEqual(progress.Get<int>("key"), 2);
}
/// <summary>
/// Test whether a <c>int</c> value can be read
/// </summary>
[Test]
public void Test_Progress_Get_Int()
{
progress.AddOrUpdate<int>("key", 1);
Assert.AreEqual(progress.Get<int>("key"), 1);
}
/// <summary>
/// Test whether a <c>double</c> value can be read
/// </summary>
[Test]
public void Test_Progress_Get_Double()
{
progress.AddOrUpdate<double>("key", 1.0);
Assert.AreEqual(progress.Get<double>("key"), 1.0);
}
/// <summary>
/// Test whether a <c>string</c> value can be read
/// </summary>
[Test]
public void Test_Progress_Get_String()
{
progress.AddOrUpdate<string>("key", "Hello World!");
Assert.AreEqual(progress.Get<string>("key"), "Hello World!");
}
/// <summary>
/// Test whether a serializable struct can be read
/// </summary>
[Test]
public void Test_Progress_Get_Struct()
{
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.AddOrUpdate<SerializableStruct>("key", data);
SerializableStruct result = progress.Get<SerializableStruct>("key");
Assert.AreEqual(result, data);
}
}

View File

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

View File

@@ -1,8 +1,8 @@
using NUnit.Framework;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
/// <summary>
@@ -12,20 +12,10 @@ using UnityEngine;
public class UserListTest
{
/// <summary>
/// Create a new path so the existing users.json file will not be overwritten
/// Create a new path so the existing .json file will not be overwritten
/// </summary>
private static string PATH = $"{Application.persistentDataPath}/unit_test_users.json";
/// <summary>
/// NUnit test magic (for skipping the setup)
/// </summary>
public const string SKIP_SETUP = "SKIP_SETUP";
/// <summary>
/// Reference to the userlist to be tested
/// </summary>
private UserList userList;
/// <summary>
/// Helper variable for quick user creation
/// </summary>
@@ -34,11 +24,7 @@ public class UserListTest
/// <summary>
/// Helper variable for quick user creation
/// </summary>
private Sprite avatar = Sprite.Create(
Texture2D.blackTexture,
new Rect(0, 0, Texture2D.blackTexture.width, Texture2D.blackTexture.height),
new Vector2(0.5f, 0.5f)
);
private Sprite avatar = null;
/// <summary>
/// Setup the tests
@@ -46,27 +32,14 @@ public class UserListTest
[SetUp]
public void Setup_UserList()
{
// Check whether the current test needs to skip the setup
ArrayList cat = TestContext.CurrentContext.Test.Properties["_CATEGORIES"] as ArrayList;
bool skip = cat != null && cat.Contains(SKIP_SETUP);
if (!skip)
{
// The actual setup code
UserList.PATH = UserListTest.PATH;
userList = ScriptableObject.CreateInstance<UserList>();
}
}
PersistentDataController.PATH = UserListTest.PATH;
/// <summary>
/// Test whether the UserList.PATH is correctly set
/// </summary>
[Test]
[Category(SKIP_SETUP)]
public void Test_UserList_OnEnable()
{
UserList.PATH = null;
userList = ScriptableObject.CreateInstance<UserList>();
Assert.AreEqual($"{Application.persistentDataPath}/users.json", UserList.PATH);
if (File.Exists(PATH))
File.Delete(PATH);
PersistentDataController.GetInstance().Load();
AssetDatabase.LoadAssetAtPath<UserAvatarList>("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake();
avatar = UserList.AVATARS[0];
}
/// <summary>
@@ -75,36 +48,22 @@ public class UserListTest
[Test]
public void Test_New_UserList()
{
Assert.IsNotNull(userList);
Assert.Zero(userList.GetUsers().Count);
Assert.Zero(UserList.GetUsers().Count);
}
/// <summary>
/// Test for creation of new user (without adding the user to the list)
/// </summary>
[Test]
public void Test_UserList_CreateNewUser()
public void Test_UserList_AddUser()
{
User user = userList.CreateNewUser(username, avatar);
Assert.Zero(UserList.GetUsers().Count);
User user = UserList.AddUser(username, avatar);
Assert.IsNotNull(user);
Assert.Zero(userList.GetUsers().Count);
Assert.AreEqual(username, user.username);
Assert.AreEqual(avatar, user.avatar);
}
/// <summary>
/// Test for creating a new user and adding the user to the list
/// </summary>
public void Test_UserList_CreateAndAddNewUser()
{
Assert.AreEqual(-1, userList.GetCurrentUserIndex());
User user = userList.CreateAndAddNewUser(username, avatar);
Assert.IsNotNull(user);
Assert.AreEqual(1, userList.GetUsers().Count);
Assert.AreEqual(user, userList.GetUsers()[0]);
Assert.Zero(userList.GetCurrentUserIndex());
Assert.AreEqual(1, UserList.GetUsers().Count);
Assert.AreEqual(username, user.GetUsername());
Assert.AreEqual(avatar, user.GetAvatar());
}
/// <summary>
@@ -113,9 +72,9 @@ public class UserListTest
[Test]
public void Test_UserList_GetUserByUsername_Valid()
{
User u = userList.CreateAndAddNewUser(username, avatar);
User v = userList.GetUserByUsername(username);
Assert.AreEqual(u, v);
User u = UserList.AddUser(username, avatar);
User v = UserList.GetUserByUsername(username);
Assert.AreEqual(u.GetUsername(), v.GetUsername());
}
/// <summary>
@@ -124,32 +83,70 @@ public class UserListTest
[Test]
public void Test_UserList_GetUserByUsername_Null()
{
User user = userList.GetUserByUsername("not-a-user");
User user = UserList.GetUserByUsername("not-a-user");
Assert.IsNull(user);
}
/// <summary>
/// Test whether an existing user can be found by its username
/// </summary>
[Test]
public void Test_UserList_GetUserByIndex_Valid()
{
User u = UserList.AddUser(username, avatar);
User v = UserList.GetUserByIndex(0);
Assert.AreEqual(u.GetUsername(), v.GetUsername());
}
/// <summary>
/// Test whether a non-existing user can not be found
/// </summary>
[Test]
public void Test_UserList_GetUserByIndex_Exception()
{
Assert.Throws<IndexOutOfRangeException>(delegate { UserList.GetUserByIndex(0); });
}
/// <summary>
/// Test whether a userlist is correctly returned
/// </summary>
[Test]
public void Test_UserList_GetUsers()
{
List<User> u = new List<User>();
for (int i = 0; i < 5; i++)
u.Add(UserList.AddUser($"{username}_{i}", avatar));
List<User> v = UserList.GetUsers();
Assert.AreEqual(v.Count, u.Count);
for (int i = 0; i < 5; i++)
Assert.AreEqual(u[i].GetUsername(), v[i].GetUsername());
}
/// <summary>
/// Test whether the correct current user is returned
/// </summary>
[Test]
public void Test_UserList_GetCurrentUser()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
userList.ChangeCurrentUser(2);
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = UserList.AddUser($"{username}_{'v'}", avatar);
User w = UserList.AddUser($"{username}_{'w'}", avatar);
UserList.ChangeCurrentUser(2);
User W = userList.GetCurrentUser();
Assert.AreEqual(w, W);
User W = UserList.GetCurrentUser();
Assert.AreEqual(w.GetUsername(), W.GetUsername());
}
/// <summary>
/// Test whether a null user is returned when the userlist is empty
/// </summary>
[Test]
public void Test_UserList_GetCurrent_Empty()
public void Test_UserList_GetCurrentUser_Empty()
{
User user = userList.GetCurrentUser();
User user = UserList.GetCurrentUser();
Assert.IsNull(user);
}
@@ -157,24 +154,30 @@ public class UserListTest
/// Test whether the correct index is returned for the current user
/// </summary>
[Test]
public void Test_UserList_GetCurrentUserIndex()
public void Test_UserList_IndexOf_Valid()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
userList.ChangeCurrentUser(2);
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = UserList.AddUser($"{username}_{'v'}", avatar);
User w = UserList.AddUser($"{username}_{'w'}", avatar);
UserList.ChangeCurrentUser(2);
int idx = userList.GetCurrentUserIndex();
Assert.AreEqual(2, idx);
Assert.AreEqual(0, UserList.IndexOf(u.GetUsername()));
Assert.AreEqual(1, UserList.IndexOf(v.GetUsername()));
Assert.AreEqual(2, UserList.IndexOf(w.GetUsername()));
}
/// <summary>
/// Test whether a bad index is returned when the userlist is empty
/// Test whether the correct index is returned for the current user
/// </summary>
[Test]
public void Test_UserList_GetCurrentUserIndex_Empty()
public void Test_UserList_IndexOf_Exception()
{
Assert.AreEqual(-1, userList.GetCurrentUserIndex());
User u = new User(new PersistentDataController.SavedUserData()
{
username = username,
avatarIndex = 0
});
Assert.Throws<KeyNotFoundException>(delegate { UserList.IndexOf(u.GetUsername()); });
}
/// <summary>
@@ -183,13 +186,13 @@ public class UserListTest
[Test]
public void Test_UserList_ChangeCurrentUser_ValidIndex()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
userList.ChangeCurrentUser(2);
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = UserList.AddUser($"{username}_{'v'}", avatar);
User w = UserList.AddUser($"{username}_{'w'}", avatar);
UserList.ChangeCurrentUser(2);
User W = userList.GetCurrentUser();
Assert.AreEqual(w, W);
User W = UserList.GetCurrentUser();
Assert.AreEqual(w.GetUsername(), W.GetUsername());
}
/// <summary>
@@ -198,11 +201,11 @@ public class UserListTest
[Test]
public void Test_UserList_ChangeCurrentUser_InvalidIndex()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
Assert.Throws<IndexOutOfRangeException>(delegate { userList.ChangeCurrentUser(-1); });
Assert.Throws<IndexOutOfRangeException>(delegate { userList.ChangeCurrentUser(5); });
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = UserList.AddUser($"{username}_{'v'}", avatar);
User w = UserList.AddUser($"{username}_{'w'}", avatar);
Assert.Throws<IndexOutOfRangeException>(delegate { UserList.ChangeCurrentUser(-1); });
Assert.Throws<IndexOutOfRangeException>(delegate { UserList.ChangeCurrentUser(5); });
}
/// <summary>
@@ -211,41 +214,45 @@ public class UserListTest
[Test]
public void Test_UserList_ChangeCurrentUser_IndexEmpty()
{
Assert.Throws<IndexOutOfRangeException>(delegate { userList.ChangeCurrentUser(0); });
Assert.Throws<IndexOutOfRangeException>(delegate { UserList.ChangeCurrentUser(0); });
}
/// <summary>
/// Test whether the current user is correctly changed
/// </summary>
[Test]
public void Test_UserList_ChangeCurrentUser_ValidUser()
public void Test_UserList_ChangeCurrentUser_ValidUsername()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
userList.ChangeCurrentUser(v);
User V = userList.GetCurrentUser();
Assert.AreEqual(v, V);
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = UserList.AddUser($"{username}_{'v'}", avatar);
User w = UserList.AddUser($"{username}_{'w'}", avatar);
UserList.ChangeCurrentUser(v.GetUsername());
User V = UserList.GetCurrentUser();
Assert.AreEqual(v.GetUsername(), V.GetUsername());
}
/// <summary>
/// Test whether the current user is not changed when a non-existing user is given
/// </summary>
[Test]
public void Test_UserList_ChangeCurrentUser_InvalidUser()
public void Test_UserList_ChangeCurrentUser_InvalidUsername()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateNewUser($"{username}_{'v'}", avatar);
Assert.Throws<KeyNotFoundException>(delegate { userList.ChangeCurrentUser(v); });
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = new User(new PersistentDataController.SavedUserData()
{
username = $"{username}_{'v'}",
avatarIndex = 0
});
Assert.Throws<KeyNotFoundException>(delegate { UserList.ChangeCurrentUser(v.GetUsername()); });
}
/// <summary>
/// Test whether the current user is not changed when a null user is given
/// </summary>
[Test]
public void Test_UserList_ChangeCurrentUser_NullUser()
public void Test_UserList_ChangeCurrentUser_NullUsername()
{
Assert.Throws<KeyNotFoundException>(delegate { userList.ChangeCurrentUser(null); });
Assert.Throws<KeyNotFoundException>(delegate { UserList.ChangeCurrentUser(null); });
}
/// <summary>
@@ -254,10 +261,10 @@ public class UserListTest
[Test]
public void Test_UserList_DeleteUser_ValidIndex()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
Assert.IsTrue(userList.DeleteUser(1));
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = UserList.AddUser($"{username}_{'v'}", avatar);
User w = UserList.AddUser($"{username}_{'w'}", avatar);
Assert.IsTrue(UserList.DeleteUser(1));
}
/// <summary>
@@ -266,11 +273,11 @@ public class UserListTest
[Test]
public void Test_UserList_DeleteUser_InValidIndex()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
Assert.IsFalse(userList.DeleteUser(-1));
Assert.IsFalse(userList.DeleteUser(5));
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = UserList.AddUser($"{username}_{'v'}", avatar);
User w = UserList.AddUser($"{username}_{'w'}", avatar);
Assert.Throws<IndexOutOfRangeException>(delegate { UserList.DeleteUser(-1); });
Assert.Throws<IndexOutOfRangeException>(delegate { UserList.DeleteUser(5); });
}
/// <summary>
@@ -279,44 +286,61 @@ public class UserListTest
[Test]
public void Test_UserList_DeleteUser_IndexEmpty()
{
Assert.IsFalse(userList.DeleteUser(0));
Assert.Throws<IndexOutOfRangeException>(delegate { UserList.DeleteUser(0); });
}
/// <summary>
/// Test whether deleting an existing user will correctly remove the user and set the currentUserIndex correctly
/// </summary>
[Test]
public void Test_UserList_DeleteUser_LastValid()
public void Test_UserList_DeleteUser_BeforeCurrentUser()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
userList.ChangeCurrentUser(2);
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = UserList.AddUser($"{username}_{'v'}", avatar);
User w = UserList.AddUser($"{username}_{'w'}", avatar);
UserList.ChangeCurrentUser(1);
Assert.AreEqual(3, userList.GetUsers().Count);
Assert.AreEqual(2, userList.GetCurrentUserIndex());
Assert.IsTrue(userList.DeleteUser(w));
Assert.AreEqual(2, userList.GetUsers().Count);
Assert.AreEqual(1, userList.GetCurrentUserIndex());
Assert.AreEqual(3, UserList.GetUsers().Count);
Assert.AreEqual(1, UserList.IndexOf(UserList.GetCurrentUser().GetUsername()));
Assert.IsTrue(UserList.DeleteUser(u.GetUsername()));
Assert.AreEqual(2, UserList.GetUsers().Count);
Assert.AreEqual(0, UserList.IndexOf(UserList.GetCurrentUser().GetUsername()));
}
/// <summary>
/// Test whether deleting an existing user will remove the user correctly
/// Test whether deleting an existing user will correctly remove the user and set the currentUserIndex correctly
/// </summary>
/// <remarks>This will change the currentUserIndex to point to another user</remarks>
[Test]
public void Test_UserList_DeleteUser_FirstValid()
public void Test_UserList_DeleteUser_CurrentUser()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
userList.ChangeCurrentUser(0);
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = UserList.AddUser($"{username}_{'v'}", avatar);
User w = UserList.AddUser($"{username}_{'w'}", avatar);
UserList.ChangeCurrentUser(1);
Assert.AreEqual(3, userList.GetUsers().Count);
Assert.AreEqual(0, userList.GetCurrentUserIndex());
Assert.IsTrue(userList.DeleteUser(u));
Assert.AreEqual(2, userList.GetUsers().Count);
Assert.AreEqual(0, userList.GetCurrentUserIndex());
Assert.AreEqual(3, UserList.GetUsers().Count);
Assert.AreEqual(1, UserList.IndexOf(UserList.GetCurrentUser().GetUsername()));
Assert.IsTrue(UserList.DeleteUser(v.GetUsername()));
Assert.AreEqual(2, UserList.GetUsers().Count);
Assert.AreEqual(0, UserList.IndexOf(UserList.GetCurrentUser().GetUsername()));
}
/// <summary>
/// Test whether deleting an existing user will correctly remove the user and set the currentUserIndex correctly
/// </summary>
[Test]
public void Test_UserList_DeleteUser_AfterCurrentUser()
{
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = UserList.AddUser($"{username}_{'v'}", avatar);
User w = UserList.AddUser($"{username}_{'w'}", avatar);
UserList.ChangeCurrentUser(1);
Assert.AreEqual(3, UserList.GetUsers().Count);
Assert.AreEqual(1, UserList.IndexOf(UserList.GetCurrentUser().GetUsername()));
Assert.IsTrue(UserList.DeleteUser(w.GetUsername()));
Assert.AreEqual(2, UserList.GetUsers().Count);
Assert.AreEqual(1, UserList.IndexOf(UserList.GetCurrentUser().GetUsername()));
}
/// <summary>
@@ -325,12 +349,16 @@ public class UserListTest
[Test]
public void Test_UserList_DeleteUser_Invalid()
{
User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
User v = userList.CreateNewUser($"{username}_{'v'}", avatar);
User u = UserList.AddUser($"{username}_{'u'}", avatar);
User v = new User(new PersistentDataController.SavedUserData()
{
username = $"{username}_{'v'}",
avatarIndex = 0
});
Assert.AreEqual(1, userList.GetUsers().Count);
Assert.IsFalse(userList.DeleteUser(v));
Assert.AreEqual(1, userList.GetUsers().Count);
Assert.AreEqual(1, UserList.GetUsers().Count);
Assert.Throws<KeyNotFoundException>(delegate { UserList.DeleteUser(v.GetUsername()); });
Assert.AreEqual(1, UserList.GetUsers().Count);
}
/// <summary>
@@ -339,10 +367,14 @@ public class UserListTest
[Test]
public void Test_UserList_DeleteUser_Empty()
{
User user = userList.CreateNewUser(username, avatar);
Assert.Zero(userList.GetUsers().Count);
Assert.IsFalse(userList.DeleteUser(user));
Assert.Zero(userList.GetUsers().Count);
User user = new User(new PersistentDataController.SavedUserData()
{
username = username,
avatarIndex = 0
});
Assert.Zero(UserList.GetUsers().Count);
Assert.Throws<KeyNotFoundException>(delegate { UserList.DeleteUser(user.GetUsername()); });
Assert.Zero(UserList.GetUsers().Count);
}
/// <summary>
@@ -351,23 +383,16 @@ public class UserListTest
[Test]
public void Test_UserList_Save_New()
{
if (File.Exists(PATH))
{
File.Delete(PATH);
}
List<User> u = new List<User>();
for (int i = 0; i < 5; i++)
{
u.Add(userList.CreateAndAddNewUser($"{username}_{i}", avatar));
}
userList.ChangeCurrentUser(3);
userList.Save();
u.Add(UserList.AddUser($"{username}_{i}", avatar));
UserList.ChangeCurrentUser(3);
UserList.Save();
FileAssert.Exists(PATH);
string content = File.ReadAllText(PATH);
int id = avatar.GetInstanceID();
string expected = $"{{\"currentUserIndex\":3,\"storedUsers\":[{{\"username\":\"u5erNam3_0\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_1\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_2\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_3\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_4\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}}]}}";
string expected = $"{{\"version\":{PersistentDataController.VERSION},\"users\":[{{\"entries\":[],\"username\":\"u5erNam3_0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}},{{\"entries\":[],\"username\":\"u5erNam3_1\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}},{{\"entries\":[],\"username\":\"u5erNam3_2\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}},{{\"entries\":[],\"username\":\"u5erNam3_3\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}},{{\"entries\":[],\"username\":\"u5erNam3_4\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}}],\"currentUser\":3,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}";
Assert.AreEqual(expected, content);
}
@@ -385,16 +410,14 @@ public class UserListTest
List<User> u = new List<User>();
for (int i = 0; i < 5; i++)
{
u.Add(userList.CreateAndAddNewUser($"{username}_{i}", avatar));
}
userList.ChangeCurrentUser(3);
userList.Save();
u.Add(UserList.AddUser($"{username}_{i}", avatar));
UserList.ChangeCurrentUser(3);
UserList.Save();
FileAssert.Exists(PATH);
string content = File.ReadAllText(PATH);
int id = avatar.GetInstanceID();
string expected = $"{{\"currentUserIndex\":3,\"storedUsers\":[{{\"username\":\"u5erNam3_0\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_1\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_2\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_3\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_4\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}}]}}";
string expected = $"{{\"version\":{PersistentDataController.VERSION},\"users\":[{{\"entries\":[],\"username\":\"u5erNam3_0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}},{{\"entries\":[],\"username\":\"u5erNam3_1\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}},{{\"entries\":[],\"username\":\"u5erNam3_2\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}},{{\"entries\":[],\"username\":\"u5erNam3_3\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}},{{\"entries\":[],\"username\":\"u5erNam3_4\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}}],\"currentUser\":3,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}";
Assert.AreEqual(expected, content);
}
@@ -404,67 +427,11 @@ public class UserListTest
[Test]
public void Test_UserList_Save_Empty()
{
userList.Save();
UserList.Save();
FileAssert.Exists(PATH);
string content = File.ReadAllText(PATH);
string expected = "{\"currentUserIndex\":-1,\"storedUsers\":[]}";
string expected = $"{{\"version\":{PersistentDataController.VERSION},\"users\":[],\"currentUser\":-1,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}";
Assert.AreEqual(expected, content);
}
/// <summary>
/// Test whether a userlist (containing some users) is correrctly loaded
/// </summary>
[Test]
public void Test_UserList_Load()
{
List<User> u = new List<User>();
for (int i = 0; i < 5; i++)
{
u.Add(userList.CreateAndAddNewUser($"{username}_{i}", avatar));
}
userList.ChangeCurrentUser(3);
userList.Save();
userList.Load();
Assert.AreEqual(userList.GetUsers().Count, u.Count);
Assert.AreEqual(userList.GetCurrentUserIndex(), 3);
List<User> v = userList.GetUsers();
for (int i = 0; i < 5; i++)
{
Assert.AreEqual(u[i].username, v[i].username);
Assert.AreEqual(u[i].avatar, v[i].avatar);
}
}
/// <summary>
/// Test whether an empty userlist is correctly loaded
/// </summary>
[Test]
public void Test_UserList_Load_Empty()
{
userList.Save();
userList.Load();
Assert.Zero(userList.GetUsers().Count);
Assert.AreEqual(-1, userList.GetCurrentUserIndex());
}
/// <summary>
/// Test if the user save file is not found, a new one will be created and an empty userlist will be loaded
/// </summary>
[Test]
public void Test_UserList_Load_NotFound()
{
List<User> u = new List<User>();
for (int i = 0; i < 5; i++)
{
u.Add(userList.CreateAndAddNewUser($"{username}_{i}", avatar));
}
userList.ChangeCurrentUser(3);
userList.Save();
File.Delete(PATH);
userList.Load();
Assert.Zero(userList.GetUsers().Count);
}
}

View File

@@ -19,7 +19,10 @@ public class UserTest
[SetUp]
public void Setup_User()
{
user = new User();
PersistentDataController.SavedUserData data = new PersistentDataController.SavedUserData();
data.username = "username";
data.avatarIndex = 0;
user = new User(data);
}
@@ -30,8 +33,8 @@ public class UserTest
public void Test_New_User()
{
Assert.NotNull(user);
Assert.Zero(user.courses.Count);
Assert.Zero(user.minigames.Count);
Assert.Zero(user.GetCourses().Count);
Assert.Zero(user.GetMinigames().Count);
}
/// <summary>
@@ -40,10 +43,10 @@ public class UserTest
[Test]
public void Test_User_AddCourse()
{
Progress p = new Progress();
user.courses.Add(p);
Assert.AreEqual(user.courses.Count, 1);
Assert.Zero(user.minigames.Count);
var p = new PersistentDataController.SavedCourseProgress();
user.AddCourseProgress(p);
Assert.AreEqual(user.GetCourses().Count, 1);
Assert.Zero(user.GetMinigames().Count);
}
/// <summary>
@@ -52,10 +55,10 @@ public class UserTest
[Test]
public void Test_User_AddMinigame()
{
Progress p = new Progress();
user.minigames.Add(p);
Assert.Zero(user.courses.Count);
Assert.AreEqual(user.minigames.Count, 1);
var p = new PersistentDataController.SavedMinigameProgress();
user.AddMinigameProgress(p);
Assert.Zero(user.GetCourses().Count);
Assert.AreEqual(user.GetMinigames().Count, 1);
}
/// <summary>
@@ -73,10 +76,10 @@ public class UserTest
[Test]
public void Test_User_GetRecentCourses_All()
{
Progress p = new Progress();
p.AddOrUpdate<CourseIndex>("courseIndex", CourseIndex.FINGERSPELLING);
p.AddOrUpdate<float>("courseProgress", 0.5f);
user.courses.Add(p);
var p = new PersistentDataController.SavedCourseProgress();
p.courseIndex = CourseIndex.FINGERSPELLING;
p.progress = 0.5f;
user.AddCourseProgress(p);
List<Tuple<CourseIndex, float>> list = user.GetRecentCourses();
Assert.AreEqual(list.Count, 1);
Assert.AreEqual(list[0].Item1, CourseIndex.FINGERSPELLING);
@@ -101,10 +104,10 @@ public class UserTest
[Test]
public void Test_User_GetRecommendedCourses_All()
{
Progress p = new Progress();
p.AddOrUpdate<CourseIndex>("courseIndex", CourseIndex.FINGERSPELLING);
p.AddOrUpdate<float>("courseProgress", 0.5f);
user.courses.Add(p);
var p = new PersistentDataController.SavedCourseProgress();
p.courseIndex = CourseIndex.FINGERSPELLING;
p.progress = 0.5f;
user.AddCourseProgress(p);
List<Tuple<CourseIndex, float>> list = user.GetRecommendedCourses();
Assert.AreEqual(list.Count, 1);
Assert.AreEqual(list[0].Item1, CourseIndex.FINGERSPELLING);
@@ -127,13 +130,13 @@ public class UserTest
[Test]
public void Test_User_GetCourseProgress_Valid()
{
Progress p = new Progress();
p.AddOrUpdate<CourseIndex>("courseIndex", CourseIndex.FINGERSPELLING);
p.AddOrUpdate<float>("courseProgress", 3.14159265f);
user.courses.Add(p);
Progress q = user.GetCourseProgress(CourseIndex.FINGERSPELLING);
Assert.AreEqual(q.Get<CourseIndex>("courseIndex"), CourseIndex.FINGERSPELLING);
Assert.AreEqual(q.Get<float>("courseProgress"), 3.14159265f);
var p = new PersistentDataController.SavedCourseProgress();
p.courseIndex = CourseIndex.FINGERSPELLING;
p.progress = 3.14159265f;
user.AddCourseProgress(p);
var q = user.GetCourseProgress(CourseIndex.FINGERSPELLING);
Assert.AreEqual(q.courseIndex, CourseIndex.FINGERSPELLING);
Assert.AreEqual(q.progress, 3.14159265f);
}
/// <summary>
@@ -145,9 +148,9 @@ public class UserTest
Assert.Null(user.GetMinigameProgress(MinigameIndex.SPELLING_BEE));
Assert.Null(user.GetMinigameProgress((MinigameIndex)100));
Progress p = new Progress();
p.AddOrUpdate<MinigameIndex>("minigameIndex", MinigameIndex.SPELLING_BEE);
user.minigames.Add(p);
var p = new PersistentDataController.SavedMinigameProgress();
p.minigameIndex = MinigameIndex.SPELLING_BEE;
user.AddMinigameProgress(p);
Assert.Null(user.GetMinigameProgress(MinigameIndex.HANGMAN));
}
@@ -157,10 +160,12 @@ public class UserTest
[Test]
public void Test_User_GetMinigameProgress_Valid()
{
Progress p = new Progress();
p.AddOrUpdate<MinigameIndex>("minigameIndex", MinigameIndex.SPELLING_BEE);
user.minigames.Add(p);
Progress q = user.GetMinigameProgress(MinigameIndex.SPELLING_BEE);
Assert.AreEqual(q.Get<CourseIndex>("minigameIndex"), CourseIndex.FINGERSPELLING);
var p = new PersistentDataController.SavedMinigameProgress();
p.minigameIndex = MinigameIndex.SPELLING_BEE;
user.AddMinigameProgress(p);
var q = user.GetMinigameProgress(MinigameIndex.SPELLING_BEE);
Assert.AreEqual(q.minigameIndex, MinigameIndex.SPELLING_BEE);
Assert.Zero(q.latestScores.Count);
Assert.Zero(q.highestScores.Count);
}
}