using NUnit.Framework; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using UnityEngine.TestTools; [TestFixture] public class CoursesControllerTests { /// /// Setup the environment before each test /// /// [UnitySetUp] public IEnumerator SetupFunction() { string path = $"{Application.persistentDataPath}/wesign_unit_test.json"; string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"TEST\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}"; File.WriteAllText(path, oneUser); PersistentDataController.PATH = path; PersistentDataController.GetInstance().Load(); AssetDatabase.LoadAssetAtPath("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake(); SceneManager.LoadScene("Common/Scenes/MainMenuScreen"); yield return null; var mainMenuScreen = GameObject.FindObjectOfType(); mainMenuScreen.GotoCourses(); yield return null; } /// /// Cleanup after testing /// [TearDown] public void TearDown_CoursesControllerTests() { PersistentDataController.PATH = null; } /// /// Function used to Spoof the sign predictor. The it uses 0f as certainty so the sign is "perfect". /// /// /// /// public IEnumerator SignLetter(string sign, SignPredictor signPredictor) { signPredictor.learnableProbabilities = new Dictionary(); // Loop through all capital letters of the alphabet for (char c = 'A'; c <= 'Z'; c++) { string letter = c.ToString(); // If the current letter is the input sign, set its value to 0. // Otherwise, set it to 20. signPredictor.learnableProbabilities[letter] = letter == sign ? 0f : 20f; } foreach (Listener listener in signPredictor.listeners) { yield return listener.ProcessIncomingCall(); } } /// /// Simulates a little playtrough of a course /// /// [UnityTest] public IEnumerator PlaytroughTest() { var courseMenuScreen = GameObject.FindObjectOfType(); var courseList = courseMenuScreen.courseList; Assert.IsNotNull(courseList, "Course was not started."); courseList.SetCurrentCourse(0); SystemController.GetInstance().LoadNextScene("Common/Scenes/CourseActivityScreen"); yield return null; var courseActivityScreen = GameObject.FindObjectOfType(); Assert.IsNotNull(courseActivityScreen); courseActivityScreen.StartCourse(); yield return null; var coursesController = GameObject.FindObjectOfType(); Assert.IsNotNull(coursesController); var signPredictor = GameObject.FindObjectOfType(); Assert.IsNotNull(signPredictor); int counter = 0; while (counter < 100) { if (coursesController.GetPanelId() == 0 || coursesController.GetPanelId() == 2) { yield return SignLetter(coursesController.GetCurrentSign(), signPredictor); } else { GameObject buttonObject = GameObject.Find("Choice Fingerspelling(Clone)"); Assert.IsNotNull(buttonObject); Button button = buttonObject.GetComponent