343 lines
15 KiB
C#
343 lines
15 KiB
C#
using NUnit.Framework;
|
|
using System.Collections;
|
|
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.TestTools;
|
|
|
|
public class JustSignControllerTests
|
|
{
|
|
/// <summary>
|
|
/// Setup for testing Just Sign
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[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.GetInstance().Load();
|
|
AssetDatabase.LoadAssetAtPath<UserAvatarList>("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake();
|
|
|
|
// Go to the minigame-selection scene to make sure that the minigameIndex is set correctly
|
|
SystemController.GetInstance().LoadNextScene("Common/Scenes/ListMinigamesScreen");
|
|
yield return new WaitForSeconds(0.2f);
|
|
ListMinigamesScreen minigameScreen = GameObject.FindObjectOfType<ListMinigamesScreen>();
|
|
minigameScreen.minigameList.SetCurrentMinigame(MinigameIndex.JUST_SIGN);
|
|
|
|
SystemController.GetInstance().LoadNextScene("JustSign/Scenes/JustSignGame");
|
|
yield return new WaitForSeconds(0.2f);
|
|
|
|
// Fetch the SignPredictor and deactivate it, this stops the basic game-loop from happening
|
|
var signPredictor = GameObject.FindObjectOfType<SignPredictor>();
|
|
GameObject signPredictorController = signPredictor.gameObject;
|
|
signPredictorController.SetActive(false);
|
|
yield return new WaitForSeconds(0.2f);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests a sign that is done too quickly, i.e., feedback during game and scoreboard after
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[UnityTest]
|
|
public IEnumerator EarlyScoreTest()
|
|
{
|
|
JustSignController justSignController = GameObject.FindObjectOfType<JustSignController>();
|
|
|
|
yield return new WaitForSeconds(5.0f);
|
|
|
|
string currentSign = justSignController.GetFirstSign();
|
|
justSignController.ProcessMostProbableSign(1.0f, currentSign);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
|
|
Assert.AreEqual("Te vroeg! \n -3", justSignController.timingFeedback.text);
|
|
Assert.AreEqual(-3, justSignController.CalculateScore());
|
|
Assert.AreEqual("Score: -3", justSignController.scoreDisplay.text);
|
|
|
|
justSignController.ActivateEnd(true);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
JustSignGameEndedPanel justSignGameEndedPanel = GameObject.FindObjectOfType<JustSignGameEndedPanel>();
|
|
Assert.NotNull(justSignGameEndedPanel);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.perfectSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.goodSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.mehSignsText.text);
|
|
Assert.AreEqual("1", justSignGameEndedPanel.terribleSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.notFoundSignsText.text);
|
|
Assert.AreEqual("Score: -3", justSignGameEndedPanel.scoreText.text);
|
|
string gpmText = (60f / 64).ToString("#") + " GPM";
|
|
Assert.AreEqual(gpmText, justSignGameEndedPanel.gpmText.text);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests a sign that is done too late, i.e., feedback during game and scoreboard after
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[UnityTest]
|
|
public IEnumerator TooLateScoreTest()
|
|
{
|
|
JustSignController justSignController = GameObject.FindObjectOfType<JustSignController>();
|
|
|
|
yield return new WaitForSeconds(23.0f);
|
|
|
|
Assert.AreEqual("Te laat! \n -5", justSignController.timingFeedback.text);
|
|
Assert.AreEqual(-5, justSignController.CalculateScore());
|
|
Assert.AreEqual("Score: -5", justSignController.scoreDisplay.text);
|
|
|
|
justSignController.ActivateEnd(true);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
JustSignGameEndedPanel justSignGameEndedPanel = GameObject.FindObjectOfType<JustSignGameEndedPanel>();
|
|
Assert.NotNull(justSignGameEndedPanel);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.perfectSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.goodSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.mehSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.terribleSignsText.text);
|
|
Assert.AreEqual("1", justSignGameEndedPanel.notFoundSignsText.text);
|
|
Assert.AreEqual("Score: -5", justSignGameEndedPanel.scoreText.text);
|
|
string gpmText = (0).ToString("#") + " GPM";
|
|
Assert.AreEqual(gpmText, justSignGameEndedPanel.gpmText.text);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests a sign that is done in the meh-zone, i.e., feedback during game and scoreboard after
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[UnityTest]
|
|
public IEnumerator MehScoreTest()
|
|
{
|
|
JustSignController justSignController = GameObject.FindObjectOfType<JustSignController>();
|
|
|
|
yield return new WaitForSeconds(14.5f);
|
|
|
|
string currentSign = justSignController.GetFirstSign();
|
|
justSignController.ProcessMostProbableSign(1.0f, currentSign);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
|
|
Assert.AreEqual("Bijna... \n +10", justSignController.timingFeedback.text);
|
|
Assert.AreEqual(10, justSignController.CalculateScore());
|
|
Assert.AreEqual("Score: 10", justSignController.scoreDisplay.text);
|
|
|
|
justSignController.ActivateEnd(true);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
JustSignGameEndedPanel justSignGameEndedPanel = GameObject.FindObjectOfType<JustSignGameEndedPanel>();
|
|
Assert.NotNull(justSignGameEndedPanel);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.perfectSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.goodSignsText.text);
|
|
Assert.AreEqual("1", justSignGameEndedPanel.mehSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.terribleSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.notFoundSignsText.text);
|
|
Assert.AreEqual("Score: 10", justSignGameEndedPanel.scoreText.text);
|
|
string gpmText = (60f / 64).ToString("#") + " GPM";
|
|
Assert.AreEqual(gpmText, justSignGameEndedPanel.gpmText.text);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests a sign that is done in the good-zone, i.e., feedback during game and scoreboard after
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[UnityTest]
|
|
public IEnumerator GoodScoreTest()
|
|
{
|
|
JustSignController justSignController = GameObject.FindObjectOfType<JustSignController>();
|
|
|
|
yield return new WaitForSeconds(17.5f);
|
|
|
|
string currentSign = justSignController.GetFirstSign();
|
|
justSignController.ProcessMostProbableSign(1.0f, currentSign);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
|
|
Assert.AreEqual("Goed \n +20", justSignController.timingFeedback.text);
|
|
Assert.AreEqual(20, justSignController.CalculateScore());
|
|
Assert.AreEqual("Score: 20", justSignController.scoreDisplay.text);
|
|
|
|
justSignController.ActivateEnd(true);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
JustSignGameEndedPanel justSignGameEndedPanel = GameObject.FindObjectOfType<JustSignGameEndedPanel>();
|
|
Assert.NotNull(justSignGameEndedPanel);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.perfectSignsText.text);
|
|
Assert.AreEqual("1", justSignGameEndedPanel.goodSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.mehSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.terribleSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.notFoundSignsText.text);
|
|
Assert.AreEqual("Score: 20", justSignGameEndedPanel.scoreText.text);
|
|
string gpmText = (60f / 64).ToString("#") + " GPM";
|
|
Assert.AreEqual(gpmText, justSignGameEndedPanel.gpmText.text);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests a sign that is done in the perfect-zone, i.e., feedback during game and scoreboard after
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[UnityTest]
|
|
public IEnumerator PerfectScoreTest()
|
|
{
|
|
JustSignController justSignController = GameObject.FindObjectOfType<JustSignController>();
|
|
|
|
yield return new WaitForSeconds(19.0f);
|
|
|
|
string currentSign = justSignController.GetFirstSign();
|
|
justSignController.ProcessMostProbableSign(1.0f, currentSign);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
|
|
Assert.AreEqual("Perfect! \n +50", justSignController.timingFeedback.text);
|
|
Assert.AreEqual(50, justSignController.CalculateScore());
|
|
Assert.AreEqual("Score: 50", justSignController.scoreDisplay.text);
|
|
|
|
justSignController.ActivateEnd(true);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
JustSignGameEndedPanel justSignGameEndedPanel = GameObject.FindObjectOfType<JustSignGameEndedPanel>();
|
|
Assert.NotNull(justSignGameEndedPanel);
|
|
Assert.AreEqual("1", justSignGameEndedPanel.perfectSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.goodSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.mehSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.terribleSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.notFoundSignsText.text);
|
|
Assert.AreEqual("Score: 50", justSignGameEndedPanel.scoreText.text);
|
|
string gpmText = (60f / 64).ToString("#") + " GPM";
|
|
Assert.AreEqual(gpmText, justSignGameEndedPanel.gpmText.text);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests the entire game, i.e., feedback during game and scoreboard after
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[UnityTest]
|
|
public IEnumerator WalkthroughTest()
|
|
{
|
|
JustSignController justSignController = GameObject.FindObjectOfType<JustSignController>();
|
|
|
|
yield return new WaitForSeconds(10.0f);
|
|
|
|
string currentSign = justSignController.GetFirstSign();
|
|
justSignController.ProcessMostProbableSign(1.0f, currentSign);
|
|
|
|
Assert.AreEqual(justSignController.CalculateScore(), -3);
|
|
|
|
yield return new WaitForSeconds(10.0f);
|
|
|
|
currentSign = justSignController.GetFirstSign();
|
|
justSignController.ProcessMostProbableSign(1.0f, currentSign);
|
|
|
|
Assert.AreEqual(justSignController.CalculateScore(), 7);
|
|
|
|
yield return new WaitForSeconds(6.0f);
|
|
|
|
currentSign = justSignController.GetFirstSign();
|
|
justSignController.ProcessMostProbableSign(1.0f, currentSign);
|
|
|
|
Assert.AreEqual(justSignController.CalculateScore(), 27);
|
|
|
|
yield return new WaitForSeconds(6.0f);
|
|
|
|
currentSign = justSignController.GetFirstSign();
|
|
justSignController.ProcessMostProbableSign(1.0f, currentSign);
|
|
|
|
Assert.AreEqual(justSignController.CalculateScore(), 77);
|
|
|
|
yield return new WaitForSeconds(10.0f);
|
|
|
|
Assert.AreEqual(justSignController.CalculateScore(), 72);
|
|
|
|
justSignController.ActivateEnd(true);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
JustSignGameEndedPanel justSignGameEndedPanel = GameObject.FindObjectOfType<JustSignGameEndedPanel>();
|
|
Assert.NotNull(justSignGameEndedPanel);
|
|
Assert.AreEqual("1", justSignGameEndedPanel.perfectSignsText.text);
|
|
Assert.AreEqual("1", justSignGameEndedPanel.goodSignsText.text);
|
|
Assert.AreEqual("1", justSignGameEndedPanel.mehSignsText.text);
|
|
Assert.AreEqual("1", justSignGameEndedPanel.terribleSignsText.text);
|
|
Assert.AreEqual("1", justSignGameEndedPanel.notFoundSignsText.text);
|
|
Assert.AreEqual("Score: 72", justSignGameEndedPanel.scoreText.text);
|
|
string gpmText = (60f * 4/ 64).ToString("#") + " GPM";
|
|
Assert.AreEqual(gpmText, justSignGameEndedPanel.gpmText.text);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests if the game ends when the song does
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[UnityTest]
|
|
public IEnumerator SongEndTest()
|
|
{
|
|
JustSignController justSignController = GameObject.FindObjectOfType<JustSignController>();
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
|
|
Song song = justSignController.songList.songs[justSignController.songList.currentSongIndex];
|
|
song.duration = 1;
|
|
|
|
yield return new WaitForSeconds(1.2f);
|
|
|
|
JustSignGameEndedPanel justSignGameEndedPanel = GameObject.FindObjectOfType<JustSignGameEndedPanel>();
|
|
Assert.NotNull(justSignGameEndedPanel);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.perfectSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.goodSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.mehSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.terribleSignsText.text);
|
|
Assert.AreEqual("0", justSignGameEndedPanel.notFoundSignsText.text);
|
|
Assert.AreEqual("Score: 0", justSignGameEndedPanel.scoreText.text);
|
|
string gpmText = (0).ToString("#") + " GPM";
|
|
Assert.AreEqual(gpmText, justSignGameEndedPanel.gpmText.text);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests the feedback in the game
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[UnityTest]
|
|
public IEnumerator FeedbackTest()
|
|
{
|
|
JustSignController justSignController = GameObject.FindObjectOfType<JustSignController>();
|
|
|
|
yield return new WaitForSeconds(5.0f);
|
|
|
|
string currentSign = justSignController.GetFirstSign();
|
|
float threshold = justSignController.GetThreshold(currentSign);
|
|
justSignController.ProcessMostProbableSign(0.9f * threshold, currentSign);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
|
|
Assert.Null(justSignController.GetFirstSign());
|
|
Assert.AreEqual($"Herkent '{currentSign}'", justSignController.feedbackText.text);
|
|
Assert.AreEqual(new Color(0x8b / 255.0f, 0xd4 / 255.0f, 0x5e / 255.0f), justSignController.feedbackText.color);
|
|
|
|
yield return new WaitForSeconds(5.0f);
|
|
|
|
currentSign = justSignController.GetFirstSign();
|
|
threshold = justSignController.GetThreshold(currentSign);
|
|
justSignController.ProcessMostProbableSign(1.2f * threshold, currentSign);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
|
|
Assert.AreEqual($"Lijkt op '{currentSign}'", justSignController.feedbackText.text);
|
|
Assert.AreEqual(new Color(0xf2 / 255.0f, 0x7f / 255.0f, 0x0c / 255.0f), justSignController.feedbackText.color);
|
|
|
|
justSignController.ProcessMostProbableSign(3.0f * threshold, currentSign);
|
|
|
|
yield return new WaitForSeconds(0.2f);
|
|
|
|
Assert.AreEqual("Detecteren...", justSignController.feedbackText.text);
|
|
Assert.AreEqual(new Color(0xf5 / 255.0f, 0x49 / 255.0f, 0x3d / 255.0f), justSignController.feedbackText.color);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Cleanup after testing
|
|
/// </summary>
|
|
[TearDown]
|
|
public void TearDown_JustSignTests()
|
|
{
|
|
PersistentDataController.PATH = null;
|
|
}
|
|
}
|