2021-03-14 22:13:22 +01:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using ChanSort.Api;
|
|
|
|
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Test.Loader
|
|
|
|
|
|
{
|
|
|
|
|
|
public static class RoundtripTest
|
|
|
|
|
|
{
|
|
|
|
|
|
#region TestChannelAndFavListEditing
|
2021-07-08 22:13:08 +02:00
|
|
|
|
public static void TestChannelAndFavListEditing(string tempFile, ISerializerPlugin plugin, bool swapChans = true, int firstProgNr = 1, int firstProgIndex = 0)
|
2021-03-14 22:13:22 +01:00
|
|
|
|
{
|
|
|
|
|
|
var ser = plugin.CreateSerializer(tempFile);
|
|
|
|
|
|
ser.Load();
|
|
|
|
|
|
|
|
|
|
|
|
var root = ser.DataRoot;
|
|
|
|
|
|
root.ValidateAfterLoad();
|
|
|
|
|
|
foreach (var l in root.ChannelLists)
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var ch in l.Channels)
|
|
|
|
|
|
{
|
|
|
|
|
|
ch.NewProgramNr = ch.OldProgramNr;
|
|
|
|
|
|
ch.ResetFavorites();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int maxFav = Math.Min(4, ser.DataRoot.FavListCount);
|
|
|
|
|
|
int chanCount = Math.Max(2, maxFav);
|
|
|
|
|
|
|
|
|
|
|
|
var editor = new Editor();
|
|
|
|
|
|
editor.DataRoot = root;
|
|
|
|
|
|
var list = root.ChannelLists.FirstOrDefault(l => l.Channels.Count(ch => !ch.IsDeleted) >= chanCount);
|
|
|
|
|
|
Assert.IsNotNull(list);
|
|
|
|
|
|
editor.ChannelList = list;
|
|
|
|
|
|
|
|
|
|
|
|
// swap channels 1 and 2
|
|
|
|
|
|
if (swapChans)
|
|
|
|
|
|
{
|
|
|
|
|
|
var chans1 = list.GetChannelByNewProgNr(firstProgNr + 0);
|
|
|
|
|
|
var chans2 = list.GetChannelByNewProgNr(firstProgNr + 1);
|
|
|
|
|
|
Assert.AreEqual(1, chans1.Count);
|
|
|
|
|
|
Assert.AreEqual(1, chans2.Count);
|
|
|
|
|
|
Assert.AreEqual(firstProgNr + 0, chans1[0].NewProgramNr);
|
|
|
|
|
|
Assert.AreEqual(firstProgNr + 1, chans2[0].NewProgramNr);
|
|
|
|
|
|
editor.SetSlotNumber(chans2, firstProgNr, false, false);
|
|
|
|
|
|
Assert.AreEqual(firstProgNr + 0, chans2[0].NewProgramNr);
|
|
|
|
|
|
Assert.AreEqual(firstProgNr + 1, chans1[0].NewProgramNr);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// set channels 4-1 as favorites 1-4 (using reverse order to catch bugs with equal progNr and favNr)
|
|
|
|
|
|
var orderedFav = root.SortedFavorites;
|
|
|
|
|
|
if (root.FavoritesMode != FavoritesMode.None)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = 1; i <= maxFav; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var progNr = maxFav + 1 - i;
|
|
|
|
|
|
var chans = list.GetChannelByNewProgNr(firstProgNr + progNr - 1);
|
|
|
|
|
|
Assert.AreEqual(1, chans.Count);
|
|
|
|
|
|
editor.SetFavorites(chans, i - 1, true);
|
|
|
|
|
|
Assert.AreEqual(orderedFav ? 1 : firstProgNr + progNr - 1, chans[0].GetPosition(i));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-07-08 22:13:08 +02:00
|
|
|
|
foreach (var l in root.ChannelLists)
|
|
|
|
|
|
l.ReadOnly = false;
|
|
|
|
|
|
|
2022-11-29 22:00:16 +01:00
|
|
|
|
ser.Save();
|
2021-03-14 22:13:22 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ser = plugin.CreateSerializer(tempFile);
|
|
|
|
|
|
ser.Load();
|
|
|
|
|
|
|
|
|
|
|
|
root = ser.DataRoot;
|
|
|
|
|
|
root.ValidateAfterLoad();
|
|
|
|
|
|
root.ApplyCurrentProgramNumbers();
|
|
|
|
|
|
list = root.ChannelLists.FirstOrDefault(l => l.Count >= chanCount);
|
|
|
|
|
|
Assert.IsNotNull(list);
|
|
|
|
|
|
|
|
|
|
|
|
// validate program number and fav numbers
|
|
|
|
|
|
for (int i = 1; i <= chanCount; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var chans = list.GetChannelByNewProgNr(firstProgNr + i - 1);
|
|
|
|
|
|
Assert.AreEqual(1, chans.Count);
|
|
|
|
|
|
if (i <= maxFav) // ignore favs for lists that don't support favs
|
|
|
|
|
|
Assert.AreEqual(orderedFav ? 1 : chans[0].NewProgramNr, chans[0].GetPosition(maxFav + 1 - i));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|