2013-04-21 22:04:06 +02:00
using System ;
using System.Collections.Generic ;
using System.Diagnostics ;
using System.IO ;
using System.Linq ;
using System.Text ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
2019-11-08 02:31:44 +01:00
using ChanSort.Api ;
2013-04-21 22:04:06 +02:00
using ChanSort.Loader.Samsung ;
2021-01-23 14:22:18 +01:00
using ChanSort.Loader.Samsung.Scm ;
2013-04-21 22:04:06 +02:00
2021-01-23 14:22:18 +01:00
namespace Test.Loader.Samsung.Scm
2013-04-21 22:04:06 +02:00
{
[TestClass]
2022-11-29 18:21:52 +01:00
public class SamsungScmTest
2013-04-21 22:04:06 +02:00
{
#region InitExpectedSamsungData ( )
2022-11-29 18:21:52 +01:00
private Dictionary < string , LoaderTestBase . ExpectedData > InitExpectedSamsungData ( )
2013-04-21 22:04:06 +02:00
{
var expected = new [ ]
{
2022-11-29 18:21:52 +01:00
new LoaderTestBase . ExpectedData ( @"catmater_B\Clone.scm" , 31 , 272 , 0 , 0 , 0 ) ,
new LoaderTestBase . ExpectedData ( @"easy2003_B\easy2003_B.scm" , 0 , 0 , 1225 , 0 , 0 ) ,
2013-06-23 23:22:09 +02:00
//new ExpectedData(@"_Manu_C\channel_list_LE40C650_1001.scm", 0, 9, 0, 0, 0)
2013-04-21 22:04:06 +02:00
} ;
2022-11-29 18:21:52 +01:00
var dict = new Dictionary < string , LoaderTestBase . ExpectedData > ( StringComparer . InvariantCultureIgnoreCase ) ;
2013-04-21 22:04:06 +02:00
foreach ( var entry in expected )
dict [ entry . File ] = entry ;
return dict ;
}
#endregion
#region TestSamsungScmLoader ( )
[TestMethod]
[DeploymentItem("ChanSort.Loader.Samsung\\ChanSort.Loader.Samsung.ini")]
public void TestSamsungScmLoader ( )
{
var expectedData = this . InitExpectedSamsungData ( ) ;
2021-01-23 14:22:18 +01:00
SamsungPlugin plugin = new SamsungPlugin ( ) ;
2013-04-21 22:04:06 +02:00
StringBuilder errors = new StringBuilder ( ) ;
2023-06-03 10:38:11 +02:00
var list = LoaderTestBase . FindAllFiles ( "TestFiles\\TestFiles_Samsung" , "*.scm" ) ;
2013-04-21 22:04:06 +02:00
var models = new Dictionary < string , string > ( ) ;
foreach ( var file in list )
{
2025-06-05 18:35:10 +02:00
if ( file . Contains ( "Apu TV" ) | | file . Contains ( "__broken" ) | | file . Contains ( "unsupported" ) )
2017-10-28 13:20:39 +02:00
continue ;
2013-04-21 22:04:06 +02:00
Debug . Print ( "Testing " + file ) ;
try
{
var serializer = plugin . CreateSerializer ( file ) as ScmSerializer ;
Assert . IsNotNull ( serializer , "No Serializer for " + file ) ;
serializer . Load ( ) ;
2013-05-16 21:06:44 +02:00
var fileName = Path . GetFileName ( file ) ? ? "" ;
var model = this . GetSamsungModel ( file ) ;
var analogAirList = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . AnalogT | ChanSort . Api . SignalSource . Tv ) ;
var analogCableList = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . AnalogC | ChanSort . Api . SignalSource . Tv ) ;
var digitalAirList = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . DvbT | ChanSort . Api . SignalSource . Tv ) ;
var digitalCableList = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . DvbC | ChanSort . Api . SignalSource . Tv ) ;
var satChannelList = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . DvbS | ChanSort . Api . SignalSource . Tv ) ;
2014-01-19 19:08:17 +01:00
var primeChannelList = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . CablePrimeD | ChanSort . Api . SignalSource . Tv ) ;
var hdplusChannelList = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . HdPlusD | ChanSort . Api . SignalSource . Tv ) ;
var freesatChannelList = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . FreesatD | ChanSort . Api . SignalSource . Tv ) ;
var tivusatChannelList = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . TivuSatD | ChanSort . Api . SignalSource . Tv ) ;
2023-06-03 10:38:11 +02:00
var iptvChannelList = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . Ip | SignalSource . Tv ) ;
2014-01-19 19:08:17 +01:00
2013-05-16 21:06:44 +02:00
string key = serializer . Series +
"\t" + model +
"\t" + serializer . AnalogChannelLength +
"\t" + ( analogAirList ! = null & & analogAirList . Count > 0 ) +
"\t" + ( analogCableList ! = null & & analogCableList . Count > 0 ) +
"\t" + serializer . DigitalChannelLength +
"\t" + ( digitalAirList ! = null & & digitalAirList . Count > 0 ) +
"\t" + ( digitalCableList ! = null & & digitalCableList . Count > 0 ) +
2014-01-19 19:08:17 +01:00
"\t" + ( primeChannelList ! = null & & primeChannelList . Count > 0 ) +
2013-05-16 21:06:44 +02:00
"\t" + serializer . SatChannelLength +
"\t" + ( satChannelList ! = null & & satChannelList . Count > 0 ) +
"\t" + serializer . HdPlusChannelLength +
2014-01-19 19:08:17 +01:00
"\t" + ( hdplusChannelList ! = null & & hdplusChannelList . Count > 0 ) +
"\t" + ( freesatChannelList ! = null & & freesatChannelList . Count > 0 ) +
"\t" + ( tivusatChannelList ! = null & & tivusatChannelList . Count > 0 ) +
2022-11-29 14:56:23 +01:00
"\t" + ( iptvChannelList ! = null & & iptvChannelList . Count > 0 ) +
2013-06-23 23:22:09 +02:00
"\t" + serializer . SatDatabaseVersion ;
2013-04-21 22:04:06 +02:00
string relPath = Path . GetFileName ( Path . GetDirectoryName ( file ) ) + "\\" + fileName ;
2013-05-16 21:06:44 +02:00
models [ key ] = serializer . Series +
"\t" + model +
"\t" + serializer . AnalogChannelLength +
"\t" + serializer . DigitalChannelLength +
"\t" + serializer . SatChannelLength +
"\t" + serializer . HdPlusChannelLength +
2013-06-23 23:22:09 +02:00
"\t" + serializer . SatDatabaseVersion +
2013-05-16 21:06:44 +02:00
"\t" + ( analogAirList = = null ? 0 : analogAirList . Count ) +
"\t" + ( analogCableList = = null ? 0 : analogCableList . Count ) +
"\t" + ( digitalAirList = = null ? 0 : digitalAirList . Count ) +
"\t" + ( digitalCableList = = null ? 0 : digitalCableList . Count ) +
2014-01-19 19:08:17 +01:00
"\t" + ( primeChannelList = = null ? 0 : primeChannelList . Count ) +
2013-05-16 21:06:44 +02:00
"\t" + ( satChannelList = = null ? 0 : satChannelList . Count ) +
2014-01-19 19:08:17 +01:00
"\t" + ( hdplusChannelList = = null ? 0 : hdplusChannelList . Count ) +
"\t" + ( freesatChannelList = = null ? 0 : freesatChannelList . Count ) +
"\t" + ( tivusatChannelList = = null ? 0 : tivusatChannelList . Count ) +
2022-11-29 14:56:23 +01:00
"\t" + ( iptvChannelList = = null ? 0 : iptvChannelList . Count ) +
2013-05-16 21:06:44 +02:00
"\t" + relPath ;
2013-04-21 22:04:06 +02:00
Assert . IsFalse ( serializer . DataRoot . IsEmpty , "No channels loaded from " + file ) ;
2022-11-29 18:21:52 +01:00
LoaderTestBase . ExpectedData exp ;
2013-04-21 22:04:06 +02:00
key = Path . GetFileName ( Path . GetDirectoryName ( file ) ) + "\\" + Path . GetFileName ( file ) ;
if ( expectedData . TryGetValue ( key , out exp ) )
{
2019-08-29 16:57:20 +02:00
var analogTv = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . AnalogC ) ;
var dtvTv = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . DvbC ) ;
var satTv = serializer . DataRoot . GetChannelList ( ChanSort . Api . SignalSource . DvbS ) ;
2013-04-21 22:04:06 +02:00
expectedData . Remove ( key ) ;
if ( exp . AnalogChannels ! = 0 | | analogTv ! = null )
Assert . AreEqual ( exp . AnalogChannels , analogTv . Channels . Count , file + ": analog" ) ;
if ( exp . DtvChannels ! = 0 | | dtvTv ! = null )
Assert . AreEqual ( exp . DtvChannels , dtvTv . Channels . Count , file + ": DTV" ) ;
if ( exp . SatChannels ! = 0 | | satTv ! = null )
Assert . AreEqual ( exp . SatChannels , satTv . Channels . Count , file + ": Sat" ) ;
}
}
catch ( Exception ex )
{
errors . AppendLine ( ) ;
errors . AppendLine ( ) ;
errors . AppendLine ( file ) ;
errors . AppendLine ( ex . ToString ( ) ) ;
}
}
foreach ( var model in models . OrderBy ( e = > e . Key ) )
2013-05-16 21:06:44 +02:00
Debug . WriteLine ( model . Value ) ;
2013-04-21 22:04:06 +02:00
if ( expectedData . Count > 0 )
Assert . Fail ( "Some files were not tested: " + expectedData . Keys . Aggregate ( ( prev , cur ) = > prev + "," + cur ) ) ;
Assert . AreEqual ( "" , errors . ToString ( ) ) ;
}
2013-05-16 21:06:44 +02:00
private string GetSamsungModel ( string filePath )
{
string fileName = Path . GetFileNameWithoutExtension ( filePath ) ? ? "" ;
return fileName . StartsWith ( "channel_list_" ) ? fileName . Substring ( 13 , fileName . IndexOf ( '_' , 14 ) - 13 ) : fileName ;
}
2013-04-21 22:04:06 +02:00
#endregion
2019-11-08 02:31:44 +01:00
#region TestDeletingSatChannel
[TestMethod]
public void TestDeletingSatChannel ( )
{
2021-01-23 14:22:18 +01:00
var tempFile = TestUtils . DeploymentItem ( "Test.Loader.Samsung\\Scm\\TestFiles\\channel_list_T_J_ohne_smart_12.scm" ) ;
var plugin = new SamsungPlugin ( ) ;
2019-11-08 02:31:44 +01:00
var ser = plugin . CreateSerializer ( tempFile ) ;
ser . Load ( ) ;
var data = ser . DataRoot ;
data . ValidateAfterLoad ( ) ;
data . ApplyCurrentProgramNumbers ( ) ;
// Pr# 122 = ORF2W HD
var dvbs = data . GetChannelList ( SignalSource . DvbS ) ;
var orf2w = dvbs . Channels . FirstOrDefault ( ch = > ch . Name = = "ORF2W HD" ) ;
Assert . AreEqual ( 122 , orf2w . OldProgramNr ) ;
Assert . AreEqual ( 122 , orf2w . NewProgramNr ) ;
Assert . IsFalse ( orf2w . IsDeleted ) ;
orf2w . NewProgramNr = - 1 ;
2019-11-08 19:35:59 +01:00
data . AssignNumbersToUnsortedAndDeletedChannels ( UnsortedChannelMode . Delete ) ;
2019-11-08 02:31:44 +01:00
Assert . IsTrue ( orf2w . IsDeleted ) ;
Assert . AreNotEqual ( - 1 , orf2w . NewProgramNr ) ;
Assert . AreEqual ( 0 , dvbs . Channels . Count ( ch = > ch . NewProgramNr < = 0 ) ) ;
// save and reload
2022-11-29 22:00:16 +01:00
ser . Save ( ) ;
2019-11-08 02:31:44 +01:00
ser = plugin . CreateSerializer ( tempFile ) ;
ser . Load ( ) ;
data = ser . DataRoot ;
data . ValidateAfterLoad ( ) ;
data . ApplyCurrentProgramNumbers ( ) ;
dvbs = data . GetChannelList ( SignalSource . DvbS ) ;
orf2w = dvbs . Channels . FirstOrDefault ( ch = > ch . Name = = "ORF2W HD" ) ;
// For .scm sat-channels, there is no known "IsDeleted" flag. Instead, the "IsUsed" flag is set to false when saving a channel with IsDeleted==true
// When loading the file back, it can no longer be distinguished between a garbage record and a deleted record. The loader doesn't add IsUsed=false channels to the list
Assert . IsNull ( orf2w ) ;
//Assert.IsTrue(orf2w.IsDeleted);
//Assert.AreEqual(-1, orf2w.OldProgramNr);
}
#endregion
#region TestDeletingCableChannel
[TestMethod]
public void TestDeletingCableChannel ( )
{
2021-01-23 14:22:18 +01:00
var tempFile = TestUtils . DeploymentItem ( "Test.Loader.Samsung\\Scm\\TestFiles\\Samsung_upcmini_EF_12.scm" ) ;
var plugin = new SamsungPlugin ( ) ;
2019-11-08 02:31:44 +01:00
var ser = plugin . CreateSerializer ( tempFile ) ;
ser . Load ( ) ;
var data = ser . DataRoot ;
data . ValidateAfterLoad ( ) ;
data . ApplyCurrentProgramNumbers ( ) ;
// Pr# 2 = ORF 2 Wien HD
var dvbc = data . GetChannelList ( SignalSource . DvbC ) ;
var orf2w = dvbc . Channels . FirstOrDefault ( ch = > ch . Name = = "ORF 2 Wien HD" ) ;
Assert . IsNotNull ( orf2w ) ;
Assert . AreEqual ( 2 , orf2w . OldProgramNr ) ;
Assert . AreEqual ( 2 , orf2w . NewProgramNr ) ;
Assert . IsFalse ( orf2w . IsDeleted ) ;
orf2w . NewProgramNr = - 1 ;
2019-11-08 19:35:59 +01:00
data . AssignNumbersToUnsortedAndDeletedChannels ( UnsortedChannelMode . Delete ) ;
2019-11-08 02:31:44 +01:00
Assert . IsTrue ( orf2w . IsDeleted ) ;
Assert . AreNotEqual ( - 1 , orf2w . NewProgramNr ) ;
Assert . AreEqual ( 0 , dvbc . Channels . Count ( ch = > ch . NewProgramNr < = 0 ) ) ;
// save and reload
2022-11-29 22:00:16 +01:00
ser . Save ( ) ;
2019-11-08 02:31:44 +01:00
ser = plugin . CreateSerializer ( tempFile ) ;
ser . Load ( ) ;
data = ser . DataRoot ;
data . ValidateAfterLoad ( ) ;
data . ApplyCurrentProgramNumbers ( ) ;
dvbc = data . GetChannelList ( SignalSource . DvbC ) ;
orf2w = dvbc . Channels . FirstOrDefault ( ch = > ch . Name = = "ORF 2 Wien HD" ) ;
// For .scm sat-channels, there is no known "IsDeleted" flag. Instead, the "IsUsed" flag is set to false when saving a channel with IsDeleted==true
// When loading the file back, it can no longer be distinguished between a garbage record and a deleted record. The loader doesn't add IsUsed=false channels to the list
Assert . IsNotNull ( orf2w ) ;
Assert . IsTrue ( orf2w . IsDeleted ) ;
Assert . AreEqual ( - 1 , orf2w . OldProgramNr ) ;
}
#endregion
2021-03-14 22:13:22 +01:00
#region TestChannelAndFavListEditing
[TestMethod]
public void TestChannelAndFavListEditing ( )
{
var tempFile = TestUtils . DeploymentItem ( "Test.Loader.Samsung\\Scm\\TestFiles\\Channel_list_T_J_ohne_smart_12.scm" ) ;
RoundtripTest . TestChannelAndFavListEditing ( tempFile , new SamsungPlugin ( ) ) ;
}
#endregion
2013-04-21 22:04:06 +02:00
}
}