From 06b523f3e86a5828dbd6a35f12580bcdc010ddb1 Mon Sep 17 00:00:00 2001 From: Maveno Date: Mon, 4 Nov 2024 00:13:04 +0100 Subject: [PATCH] nightly tests tc --- bin/ffx.py | 1 + bin/ffx/ffx_controller.py | 11 +- bin/ffx/test/scenario.py | 25 ++++ bin/ffx/test/scenario_1.py | 30 ++--- bin/ffx/test/scenario_2.py | 26 ++-- bin/ffx/test/scenario_4.py | 67 +++------- bin/ffx/test/track_tag_combinator_3_4.py | 150 ++++++++++++++++++----- 7 files changed, 199 insertions(+), 111 deletions(-) diff --git a/bin/ffx.py b/bin/ffx.py index 2f99c4b..d27a282 100755 --- a/bin/ffx.py +++ b/bin/ffx.py @@ -478,6 +478,7 @@ def convert(ctx, if context['use_jellyfin']: # Reorder subtracks in types with default the last, then make subindices flat again targetMediaDescriptor.applyJellyfinOrder() + # sourceMediaDescriptor.applyJellyfinOrder() # click.echo(f"tmd subindices: {[t.getIndex() for t in targetMediaDescriptor.getAllTrackDescriptors()]} {[t.getSubIndex() for t in targetMediaDescriptor.getAllTrackDescriptors()]} {[t.getDispositionFlag(TrackDisposition.DEFAULT) for t in targetMediaDescriptor.getAllTrackDescriptors()]}") # raise click.Abort diff --git a/bin/ffx/ffx_controller.py b/bin/ffx/ffx_controller.py index 69569b0..665a664 100644 --- a/bin/ffx/ffx_controller.py +++ b/bin/ffx/ffx_controller.py @@ -174,7 +174,12 @@ class FfxController(): targetTrackDescriptors = self.__targetMediaDescriptor.getAllTrackDescriptors() - sourceTrackDescriptors = [] if self.__sourceMediaDescriptor is None else self.__sourceMediaDescriptor.getAllTrackDescriptors() + sourceTrackDescriptors = ([] if self.__sourceMediaDescriptor is None + else self.__sourceMediaDescriptor.getAllTrackDescriptors()) + # if not self.__sourceMediaDescriptor is None: + # sourceTrackDescriptors = self.__sourceMediaDescriptor.getAllTrackDescriptors() + # else: + # sourceTrackDescriptors = [] dispositionTokens = [] @@ -190,7 +195,9 @@ class FfxController(): streamIndicator = td.getType().indicator() - sourceDispositionSet = sourceTrackDescriptors[trackIndex].getDispositionSet() if sourceTrackDescriptors else set() + sourceDispositionSet = sourceTrackDescriptors[td.getSourceIndex()].getDispositionSet() if sourceTrackDescriptors else set() + + #TODO: Alles discarden was im targetDescriptor vorhanden ist (?) sourceDispositionSet.discard(TrackDisposition.DEFAULT) dispositionSet = td.getDispositionSet() | sourceDispositionSet diff --git a/bin/ffx/test/scenario.py b/bin/ffx/test/scenario.py index 5834e93..70f67ff 100644 --- a/bin/ffx/test/scenario.py +++ b/bin/ffx/test/scenario.py @@ -1,6 +1,11 @@ import os, glob, sys, importlib, glob, inspect +from ffx.show_controller import ShowController +from ffx.pattern_controller import PatternController +from ffx.media_controller import MediaController + from ffx.test.helper import createEmptyDirectory +from ffx.database import databaseContext class Scenario(): """Scenarios @@ -95,6 +100,26 @@ class Scenario(): self._logger = context['logger'] self._reportLogger = context['report_logger'] + self._testDbFilePath = os.path.join(self._testDirectory, 'test.db') + self.createEmptyTestDatabase() + + + def createEmptyTestDatabase(self): + + if not self._context['database'] is None: + self._context['database']['engine'].dispose() + + if os.path.isfile(self._testDbFilePath): + os.unlink(self._testDbFilePath) + self._context['database'] = None + + self._logger.debug(f"Creating test db with path {self._testDbFilePath}") + self._context['database'] = databaseContext(databasePath=self._testDbFilePath) + + self._sc = ShowController(context = self._context) + self._pc = PatternController(context = self._context) + self._mc = MediaController(context = self._context) + def clearTestDirectory(self): testFiles = glob.glob(f"{self._testDirectory}/*") diff --git a/bin/ffx/test/scenario_1.py b/bin/ffx/test/scenario_1.py index 61dae62..a24f546 100644 --- a/bin/ffx/test/scenario_1.py +++ b/bin/ffx/test/scenario_1.py @@ -23,15 +23,15 @@ class Scenario1(Scenario): Converting to VaA, vp9/opus/opus No tmdb, default parameters""" - TESTFILE_EXTENSION = 'mkv' - EXPECTED_EXTENSION = 'webm' + TEST_FILE_EXTENSION = 'mkv' + EXPECTED_FILE_EXTENSION = 'webm' + def __init__(self, context): context['use_jellyfin'] = True context['use_tmdb'] = False context['use_pattern'] = False - #context['no_prompt'] = False super().__init__(context) @@ -39,7 +39,6 @@ class Scenario1(Scenario): return self.__class__.__name__[8:] - def job(self, yieldObj: dict): testContext = self._context.copy() @@ -62,8 +61,8 @@ class Scenario1(Scenario): variantFilenameLabel = variantPayload['label'] expectedBasename = variantPayload['expectedBasename'] - variantFilename = f"{variantBasename}.{Scenario1.TESTFILE_EXTENSION}" - expectedFilename = f"{expectedBasename}.{Scenario1.EXPECTED_EXTENSION}" + variantFilename = f"{variantBasename}.{Scenario1.TEST_FILE_EXTENSION}" + expectedFilename = f"{expectedBasename}.{Scenario1.EXPECTED_FILE_EXTENSION}" if self._context['test_variant'] and variantIdentifier != self._context['test_variant']: @@ -88,10 +87,9 @@ class Scenario1(Scenario): logger=self._logger, length = 2) -# # Phase 2: Prepare database -# - # Phase 3: Run ffx + # Phase 2: Run ffx + commandSequence = [sys.executable, self._ffxExecutablePath] @@ -123,14 +121,13 @@ class Scenario1(Scenario): if rc: self._logger.debug(f"{variantLabel}: Process returned ERROR {rc} ({err})") - # Phase 4: Find result files + + # Phase 3: Evaluate results resultFilenames = [rf for rf in self.getFilenamesInTestDirectory() if rf != 'ffmpeg2pass-0.log' and rf != variantFilename] - self._logger.debug(f"{variantLabel}: Result filenames: {resultFilenames}") - # Phase 5: Evaluate results try: jobFailed = bool(rc) @@ -147,15 +144,6 @@ class Scenario1(Scenario): assert (os.path.isfile(expectedResultFilePath) ), f"Result file {expectedFilename} in path '{self._testDirectory}' wasn't created" -# resultFileProperties = FileProperties(testContext, resultFile) -# resultMediaDescriptor = resultFileProperties.getMediaDescriptor() -# -# if testContext['use_jellyfin']: -# sourceMediaDescriptor.applyJellyfinOrder() -# resultMediaDescriptor.applySourceIndices(sourceMediaDescriptor) -# -# resultMediaTracks = resultMediaDescriptor.getAllTrackDescriptors() - for assertIndex in range(len(assertSelectorList)): assertSelector = assertSelectorList[assertIndex] diff --git a/bin/ffx/test/scenario_2.py b/bin/ffx/test/scenario_2.py index b53a531..8c4307a 100644 --- a/bin/ffx/test/scenario_2.py +++ b/bin/ffx/test/scenario_2.py @@ -21,12 +21,15 @@ class Scenario2(Scenario): Converting to VaA, vp9/opus/opus No tmdb, default parameters""" + TEST_FILE_EXTENSION = 'mkv' + EXPECTED_FILE_EXTENSION = 'webm' + + def __init__(self, context): context['use_jellyfin'] = True context['use_tmdb'] = False context['use_pattern'] = False - #context['no_prompt'] = False super().__init__(context) @@ -39,6 +42,7 @@ class Scenario2(Scenario): testContext = self._context.copy() targetYieldObj = yieldObj['target'] + # presetYieldObj = yieldObj['preset'] # not used here identifier = targetYieldObj['identifier'] variantList = targetYieldObj['variants'] @@ -66,13 +70,18 @@ class Scenario2(Scenario): self._logger.debug(f"Running Job: {variantLabel}") + # Phase 1: Setup source files + self.clearTestDirectory() - mediaFilePath = createMediaTestFile(mediaDescriptor=sourceMediaDescriptor, directory=self._testDirectory, logger=self._logger, length = 2) + mediaFilePath = createMediaTestFile(mediaDescriptor=sourceMediaDescriptor, + directory=self._testDirectory, + logger=self._logger, + length = 2) + + + # Phase 2: Run ffx -# # Phase 2: Prepare database -# - # Phase 3: Run ffx commandSequence = [sys.executable, self._ffxExecutablePath, 'convert', @@ -82,6 +91,7 @@ class Scenario2(Scenario): if not testContext['use_jellyfin']: commandSequence += ['--no-jellyfin'] + self._logger.debug(f"{variantLabel}: Test sequence: {commandSequence}") out, err, rc = executeProcess(commandSequence, directory = self._testDirectory) @@ -92,21 +102,21 @@ class Scenario2(Scenario): self._logger.debug(f"{variantLabel}: Process returned ERROR {rc} ({err})") - # Phase 4: Evaluate results + # Phase 3: Evaluate results - resultFilenames = [rf for rf in self.getFilenamesInTestDirectory() if rf != 'ffmpeg2pass-0.log' and rf != variantFilename] + resultFilenames = [rf for rf in self.getFilenamesInTestDirectory() if rf.endswith(f".{Scenario2.EXPECTED_FILE_EXTENSION}")] self._logger.debug(f"{variantLabel}: Result filenames: {resultFilenames}") try: jobFailed = bool(rc) - self._logger.debug(f"{variantLabel}: Should fail: {shouldFail} / actually failed: {jobFailed}") assert (jobFailed == shouldFail ), f"Process {'failed' if jobFailed else 'did not fail'}" + if not jobFailed: resultFile = os.path.join(self._testDirectory, 'media.webm') diff --git a/bin/ffx/test/scenario_4.py b/bin/ffx/test/scenario_4.py index e4bb572..a516dfa 100644 --- a/bin/ffx/test/scenario_4.py +++ b/bin/ffx/test/scenario_4.py @@ -19,9 +19,7 @@ from ffx.test.media_combinator import MediaCombinator from ffx.test.indicator_combinator import IndicatorCombinator from ffx.show_descriptor import ShowDescriptor -from ffx.show_controller import ShowController -from ffx.pattern_controller import PatternController -from ffx.media_controller import MediaController + from ffx.tmdb_controller import TmdbController from ffx.tmdb_controller import TMDB_API_KEY_NOT_PRESENT_EXCEPTION @@ -47,67 +45,46 @@ class Scenario4(Scenario): if self.__tmdbApiKey is None: raise TMDB_API_KEY_NOT_PRESENT_EXCEPTION - self.__testDbFilePath = os.path.join(self._testDirectory, 'test.db') - self.createEmptyTestDatabase() - self.__ic = IndicatorCombinator(context = context) - self.__tc = TmdbController() - def getScenario(self): - return self.__class__.__name__[8:] - - - def createEmptyTestDatabase(self): - - if not self._context['database'] is None: - self._context['database']['engine'].dispose() + kwargs = {} + kwargs[ShowDescriptor.ID_KEY] = Scenario4.TEST_SHOW_IDENTIFIER + kwargs[ShowDescriptor.NAME_KEY] = Scenario4.TEST_SHOW_NAME + kwargs[ShowDescriptor.YEAR_KEY] = Scenario4.TEST_SHOW_YEAR - if os.path.isfile(self.__testDbFilePath): - os.unlink(self.__testDbFilePath) - self._context['database'] = None + self.__testShowDescriptor = ShowDescriptor(**kwargs) - self._logger.debug(f"Creating test db with path {self.__testDbFilePath}") - self._context['database'] = databaseContext(databasePath=self.__testDbFilePath) + def getScenario(self): + return self.__class__.__name__[8:] - self.__sc = ShowController(context = self._context) - self.__pc = PatternController(context = self._context) - self.__mc = MediaController(context = self._context) - def prepareTestDatabase(self, sourceMediaDescriptor: MediaDescriptor): if not self._context['database'] is None: self._context['database']['engine'].dispose() - if os.path.isfile(self.__testDbFilePath): - os.unlink(self.__testDbFilePath) + if os.path.isfile(self._testDbFilePath): + os.unlink(self._testDbFilePath) self._context['database'] = None - self._logger.debug(f"Creating test db with path {self.__testDbFilePath}") - self._context['database'] = databaseContext(databasePath=self.__testDbFilePath) - - kwargs = {} - - kwargs[ShowDescriptor.ID_KEY] = Scenario4.TEST_SHOW_IDENTIFIER - kwargs[ShowDescriptor.NAME_KEY] = Scenario4.TEST_SHOW_NAME - kwargs[ShowDescriptor.YEAR_KEY] = Scenario4.TEST_SHOW_YEAR + self._logger.debug(f"Creating test db with path {self._testDbFilePath}") + self._context['database'] = databaseContext(databasePath=self._testDbFilePath) - self.__testShowDescriptor = ShowDescriptor(**kwargs) self._logger.debug(f"Adding test show '{self.__testShowDescriptor.getFilenamePrefix()}' to test db") - if not self.__sc.updateShow(self.__testShowDescriptor): + if not self._sc.updateShow(self.__testShowDescriptor): raise click.ClickException('Could not create test show in db') testPatternDescriptor = { 'show_id': Scenario4.TEST_SHOW_IDENTIFIER, 'pattern': Scenario4.TEST_PATTERN } - patternId = self.__pc.addPattern(testPatternDescriptor) + patternId = self._pc.addPattern(testPatternDescriptor) if patternId: - self.__mc.setPatternMediaDescriptor(sourceMediaDescriptor, patternId) + self._mc.setPatternMediaDescriptor(sourceMediaDescriptor, patternId) def job(self, yieldObj: dict): @@ -152,7 +129,9 @@ class Scenario4(Scenario): self._logger.debug(f"Running Job: {variantLabel}") + # Phase 1: Setup source files + self.clearTestDirectory() testFileList = [] @@ -175,6 +154,7 @@ class Scenario4(Scenario): testFileList.append(testFileObj) + # Phase 2: Prepare database self.createEmptyTestDatabase() @@ -182,10 +162,11 @@ class Scenario4(Scenario): # Phase 3: Run ffx + commandSequence = [sys.executable, self._ffxExecutablePath, '--database-file', - self.__testDbFilePath, + self._testDbFilePath, 'convert'] commandSequence += [tfo['filename'] for tfo in testFileList] @@ -213,9 +194,6 @@ class Scenario4(Scenario): try: - # assert not (bool(rc) - # ), f"Process failed" - jobFailed = bool(rc) self._logger.debug(f"{variantLabel}: Should fail: {shouldFail} / actually failed: {jobFailed}") @@ -239,8 +217,6 @@ class Scenario4(Scenario): assert (os.path.isfile(expectedFilePath) ), f"Result file '{expectedFilename}' in path '{self._testDirectory}' wasn't created" - ### - # rfp = FileProperties(testContext, expectedFilePath) self._logger.debug(f"{variantLabel}: Result file properties: {rfp.getFilename()} season={rfp.getSeason()} episode={rfp.getEpisode()}") @@ -257,7 +233,6 @@ class Scenario4(Scenario): # num tracks differ rmd.applySourceIndices(sourceMediaDescriptor) - for assertIndex in range(len(assertSelectorList)): @@ -294,8 +269,6 @@ class Scenario4(Scenario): def run(self): - - MC_list = [MediaCombinator.getClassReference(6)] for MC in MC_list: self._logger.debug(f"MC={MC.__name__}") diff --git a/bin/ffx/test/track_tag_combinator_3_4.py b/bin/ffx/test/track_tag_combinator_3_4.py index 1edcd77..1249306 100644 --- a/bin/ffx/test/track_tag_combinator_3_4.py +++ b/bin/ffx/test/track_tag_combinator_3_4.py @@ -48,42 +48,90 @@ class TrackTagCombinator34(TrackTagCombinator3): # source subIndex 0 assert ('language' in resortedTrackDescriptors[0].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag" + ), (f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()}" + + f"index={resortedTrackDescriptors[0].getIndex()}" + + f"[{resortedTrackDescriptors[0].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag") assert (resortedTrackDescriptors[0].getTags()['language'] == 'jpn' - ), f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'jpn'" + ), (f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()}" + + f"index={resortedTrackDescriptors[0].getIndex()}" + + f"[{resortedTrackDescriptors[0].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'jpn'") assert ('title' in resortedTrackDescriptors[0].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title tag" + ), (f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()}" + + f"index={resortedTrackDescriptors[0].getIndex()}" + + f"[{resortedTrackDescriptors[0].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set title tag") assert (resortedTrackDescriptors[0].getTags()['title'] == 'Japanisch' - ), f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Japanisch'" - - assert ('THIS_IS' in resortedTrackDescriptors[0].getTags().keys() and resortedTrackDescriptors[0].getTags()['THIS_IS'] == 'track0' - ), f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not preserved tag THIS_IS" + ), (f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()}" + + f"index={resortedTrackDescriptors[0].getIndex()}" + + f"[{resortedTrackDescriptors[0].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Japanisch'") + + assert ('THIS_IS' in resortedTrackDescriptors[0].getTags().keys() + and resortedTrackDescriptors[0].getTags()['THIS_IS'] == 'track0' + ), (f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()}" + + f"index={resortedTrackDescriptors[0].getIndex()}" + + f"[{resortedTrackDescriptors[0].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not preserved tag THIS_IS") # source subIndex 1 assert ('language' in resortedTrackDescriptors[1].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag" + ), (f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()}" + + f"index={resortedTrackDescriptors[1].getIndex()}" + + f"[{resortedTrackDescriptors[1].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag") assert (resortedTrackDescriptors[1].getTags()['language'] == 'deu' - ), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'deu'" + ), (f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()}" + + f"index={resortedTrackDescriptors[1].getIndex()}" + + f"[{resortedTrackDescriptors[1].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'deu'") assert ('title' in resortedTrackDescriptors[1].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title tag" + ), (f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()}" + + f"index={resortedTrackDescriptors[1].getIndex()}" + + f"[{resortedTrackDescriptors[1].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set title tag") assert (resortedTrackDescriptors[1].getTags()['title'] == 'Deutsch' - ), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Deutsch'" - - assert ('THIS_IS' in resortedTrackDescriptors[1].getTags().keys() and resortedTrackDescriptors[1].getTags()['THIS_IS'] == 'track1' - ), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[1].getSubIndex()}] has not preserved tag THIS_IS" + ), (f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()}" + + f"index={resortedTrackDescriptors[1].getIndex()}" + + f"[{resortedTrackDescriptors[1].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Deutsch'") + + assert ('THIS_IS' in resortedTrackDescriptors[1].getTags().keys() + and resortedTrackDescriptors[1].getTags()['THIS_IS'] == 'track1' + ), (f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()}" + + f"index={resortedTrackDescriptors[1].getIndex()}" + + f"[{resortedTrackDescriptors[1].getType().label()}:" + + f"{resortedTrackDescriptors[1].getSubIndex()}] has not preserved tag THIS_IS") # source subIndex 2 assert ('language' in resortedTrackDescriptors[2].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag" + ), (f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()}" + + f"index={resortedTrackDescriptors[2].getIndex()}" + + f"[{resortedTrackDescriptors[2].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag") assert (resortedTrackDescriptors[2].getTags()['language'] == 'eng' - ), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'eng'" + ), (f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()}" + + f"index={resortedTrackDescriptors[2].getIndex()}" + + f"[{resortedTrackDescriptors[2].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'eng'") assert ('title' in resortedTrackDescriptors[2].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title tag" + ), (f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()}" + + f"index={resortedTrackDescriptors[2].getIndex()}" + + f"[{resortedTrackDescriptors[2].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set title tag") assert (resortedTrackDescriptors[2].getTags()['title'] == 'English' - ), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'English'" - - assert ('THIS_IS' in resortedTrackDescriptors[2].getTags().keys() and resortedTrackDescriptors[2].getTags()['THIS_IS'] == 'track2' - ), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[2].getSubIndex()}] has not preserved tag THIS_IS" + ), (f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()}" + + f"index={resortedTrackDescriptors[2].getIndex()}" + + f"[{resortedTrackDescriptors[2].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'English'") + + assert ('THIS_IS' in resortedTrackDescriptors[2].getTags().keys() + and resortedTrackDescriptors[2].getTags()['THIS_IS'] == 'track2' + ), (f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()}" + + f"index={resortedTrackDescriptors[2].getIndex()}" + + f"[{resortedTrackDescriptors[1].getType().label()}:" + + f"{resortedTrackDescriptors[2].getSubIndex()}] has not preserved tag THIS_IS") else: @@ -95,33 +143,69 @@ class TrackTagCombinator34(TrackTagCombinator3): # source subIndex 0 assert ('language' in resortedTrackDescriptors[0].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag" + ), (f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} " + + f"index={resortedTrackDescriptors[0].getIndex()} " + + f"[{resortedTrackDescriptors[0].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag") assert (resortedTrackDescriptors[0].getTags()['language'] == 'jpn' - ), f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'jpn'" + ), (f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} " + + f"index={resortedTrackDescriptors[0].getIndex()} " + + f"[{resortedTrackDescriptors[0].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'jpn'") assert ('title' in resortedTrackDescriptors[0].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title tag" + ), (f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} " + + f"index={resortedTrackDescriptors[0].getIndex()} " + + f"[{resortedTrackDescriptors[0].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set title tag") assert (resortedTrackDescriptors[0].getTags()['title'] == 'Japanisch' - ), f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Japanisch'" + ), (f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} " + + f"index={resortedTrackDescriptors[0].getIndex()} " + + f"[{resortedTrackDescriptors[0].getType().label()}:" + + f"{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Japanisch'") # source subIndex 1 assert ('language' in resortedTrackDescriptors[1].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag" + ), (f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} " + + f"index={resortedTrackDescriptors[1].getIndex()} " + + f"[{resortedTrackDescriptors[1].getType().label()}:" + + f"{resortedTrackDescriptors[1].getSubIndex()}] has not set language tag") assert (resortedTrackDescriptors[1].getTags()['language'] == 'deu' - ), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'deu'" + ), (f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} " + + f"index={resortedTrackDescriptors[1].getIndex()} " + + f"[{resortedTrackDescriptors[1].getType().label()}:" + + f"{resortedTrackDescriptors[1].getSubIndex()}] has not set language tag 'deu'") assert ('title' in resortedTrackDescriptors[1].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title tag" + ), (f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} " + + f"index={resortedTrackDescriptors[1].getIndex()} " + + f"[{resortedTrackDescriptors[1].getType().label()}:" + + f"{resortedTrackDescriptors[1].getSubIndex()}] has not set title tag") assert (resortedTrackDescriptors[1].getTags()['title'] == 'Deutsch' - ), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Deutsch'" + ), (f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} " + + f"index={resortedTrackDescriptors[1].getIndex()} " + + f"[{resortedTrackDescriptors[1].getType().label()}:" + + f"{resortedTrackDescriptors[1].getSubIndex()}] has not set title 'Deutsch'") # source subIndex 2 assert ('language' in resortedTrackDescriptors[2].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag" + ), (f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} " + + f"index={resortedTrackDescriptors[2].getIndex()} " + + f"[{resortedTrackDescriptors[2].getType().label()}:" + + f"{resortedTrackDescriptors[2].getSubIndex()}] has not set language tag") assert (resortedTrackDescriptors[2].getTags()['language'] == 'eng' - ), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'eng'" + ), (f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} " + + f"index={resortedTrackDescriptors[2].getIndex()} " + + f"[{resortedTrackDescriptors[2].getType().label()}:" + + f"{resortedTrackDescriptors[2].getSubIndex()}] has not set language tag 'eng'") assert ('title' in resortedTrackDescriptors[2].getTags().keys() - ), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title tag" + ), (f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} " + + f"index={resortedTrackDescriptors[2].getIndex()} " + + f"[{resortedTrackDescriptors[2].getType().label()}:" + + f"{resortedTrackDescriptors[2].getSubIndex()}] has not set title tag") assert (resortedTrackDescriptors[2].getTags()['title'] == 'English' - ), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'English'" + ), (f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} " + + f"index={resortedTrackDescriptors[2].getIndex()} " + + f"[{resortedTrackDescriptors[2].getType().label()}:" + + f"{resortedTrackDescriptors[2].getSubIndex()}] has not set title 'English'") return f