using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Funique.Test
{
public sealed partial class ManagerTest
{
///
/// Testing the utility functionality
/// ------------------------------------------------
/// 測試幫助元件功能
///
public sealed class UtilityTest
{
IToolUtility test_utility => Tool.Instance;
const string testName1 = "testvideo_3dv_2s.mp4";
const string testName2 = "testvideo_3dh_3m2s.mp4";
const string testName3 = "testvideo_mono_5h3m2s.mp4";
const string testFilterName1 = "testvideo_3dv.mp4";
const string testFilterName2 = "testvideo_3dh.mp4";
const string testFilterName3 = "testvideo_mono.mp4";
const string testTime1 = "2s";
const string testTime2 = "3m2s";
const string testTime3 = "5h3m2s";
Dictionary infos;
[OneTimeSetUp]
public void Setup()
{
infos = new Dictionary()
{
{ "192.168.0.1", new PlayerInformation(){ IP = "192.168.0.1", ID = 0 } },
{ "192.168.0.2", new PlayerInformation(){ IP = "192.168.0.2", ID = 1 } },
{ "192.168.0.3", new PlayerInformation(){ IP = "192.168.0.3", ID = 2 } },
{ "192.168.0.4", new PlayerInformation(){ IP = "192.168.0.4", ID = 3 } },
{ "192.168.0.5", new PlayerInformation(){ IP = "192.168.0.5", ID = 4 } },
};
}
[OneTimeTearDown]
public void TearDown()
{
infos.Clear();
}
[Order(0)]
[Test]
public void EnumCycleTest()
{
int count = Enum.GetNames(typeof(CinemaState)).Length;
int[] answer = new int[count * 2];
for (int i = 0; i < answer.Length; i++)
{
answer[i] = i % count;
}
int v = 0;
EnumCycle cycle = new EnumCycle();
for (int i = 0; i < answer.Length; i++)
{
Assert.AreEqual(answer[i], v, "Cycle failed to match the answer");
v = cycle.Next(v);
}
}
[Order(1)]
[Test]
public void CheckSameVideoNameTest()
{
VideoInfo[] t1 = new VideoInfo[2]
{
new VideoInfo() { FilterName = "Test 1" },
new VideoInfo() { FilterName = "Test 2" },
};
Assert.IsTrue(test_utility.CheckSameVideoName(t1, "Test 1"), "List should contain filter name \"Test 1\"");
Assert.IsFalse(test_utility.CheckSameVideoName(t1, "Test 3"), "List should not contain filter name \"Test 3\"");
}
[Order(2)]
[Test]
public void FilterNameTest()
{
Assert.AreEqual(testFilterName1, test_utility.FilterVideoName(testName1), "Second filter not pass");
Assert.AreEqual(testFilterName2, test_utility.FilterVideoName(testName2), "Minutes filter not pass");
Assert.AreEqual(testFilterName3, test_utility.FilterVideoName(testName3), "Hour filter not pass");
}
[Order(3)]
[Test]
public void FilterTimeTest()
{
Assert.AreEqual(2f, test_utility.FilterVideoTime(testName1), "Second filter not pass");
Assert.AreEqual(182f, test_utility.FilterVideoTime(testName2), "Minutes filter not pass");
Assert.AreEqual(18182f, test_utility.FilterVideoTime(testName3), "Hour filter not pass");
}
[Order(4)]
[Test]
public void TranslateTimeTest()
{
Assert.AreEqual(2d, test_utility.TranslateTime(testTime1), "Second filter not pass");
Assert.AreEqual(182d, test_utility.TranslateTime(testTime2), "Minutes filter not pass");
Assert.AreEqual(18182d, test_utility.TranslateTime(testTime3), "Hour filter not pass");
}
[Order(5)]
[Test]
public void FilterButtonName()
{
Assert.AreEqual(testFilterName1, test_utility.FilterVideoName(testName1), "Second filter not pass");
Assert.AreEqual(testFilterName2, test_utility.FilterVideoName(testName2), "Minutes filter not pass");
Assert.AreEqual(testFilterName3, test_utility.FilterVideoName(testName3), "Hour filter not pass");
}
[Order(6)]
[Test]
public void MergeTimeTest()
{
double t1 = 2d;
double t2 = 182d;
double t3 = 18182d;
Assert.AreEqual(testName1, test_utility.MergeTime(testFilterName1, t1), "Second filter not pass");
Assert.AreEqual(testName2, test_utility.MergeTime(testFilterName2, t2), "Minutes filter not pass");
Assert.AreEqual(testName3, test_utility.MergeTime(testFilterName3, t3), "Hour filter not pass");
}
[Order(7)]
[Test]
public void DetectStereoModeTest()
{
Assert.AreEqual("3dv", test_utility.DetectStereoMode(testFilterName1), "Second filter not pass");
Assert.AreEqual("3dh", test_utility.DetectStereoMode(testFilterName2), "Minutes filter not pass");
Assert.AreEqual("mono", test_utility.DetectStereoMode(testFilterName3), "Hour filter not pass");
}
[Order(8)]
[Test]
public void RandomIDTest()
{
int e = test_utility.RandomID(infos, 10);
Assert.LessOrEqual(e, 10, "Value must under the limit it gave");
Assert.GreaterOrEqual(e, 0, "Value must bigger or equal than 0");
Assert.AreNotEqual(infos.Values.ToList().FindIndex(x => x.ID == e), -1, "It select the ID that is not in the list");
}
[Order(9)]
[Test]
public void RandomIPTest()
{
string r = test_utility.RandomIP(infos, 10);
Assert.AreEqual(-1, infos.Values.ToList().FindIndex(x => x.IP == r), "It generate the IP that is already exist");
}
[Order(10)]
[Test]
public void RepeatIPTest()
{
bool r1 = infos.Values.ToList().FindIndex(x => x.IP == "192.168.0.1") != -1;
bool r2 = infos.Values.ToList().FindIndex(x => x.IP == "192.168.1.1") != -1;
Assert.AreEqual(r1, test_utility.CheckRepeatIP(infos, "192.168.0.1"));
Assert.AreEqual(r2, test_utility.CheckRepeatIP(infos, "192.168.1.1"));
}
}
}
}