nightly combinator tests rc1
This commit is contained in:
@@ -1,27 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
class DispositionCombination2():
|
||||
|
||||
def __init__(self, context = None):
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
def getIdentifier(self):
|
||||
return self._combinationIdentifier
|
||||
|
||||
@staticmethod
|
||||
def list():
|
||||
basePath = os.path.dirname(__file__)
|
||||
return [os.path.basename(p)[26:-3]
|
||||
for p
|
||||
in glob.glob(f"{ basePath }/disposition_combination_2_*.py", recursive = True)
|
||||
if p != __file__]
|
||||
|
||||
@staticmethod
|
||||
def getClassReference(identifier):
|
||||
importlib.import_module(f"ffx.test.disposition_combination_2_{ identifier }")
|
||||
for name, obj in inspect.getmembers(sys.modules[f"ffx.test.disposition_combination_2_{ identifier }"]):
|
||||
#HINT: Excluding DispositionCombination as it seems to be included by import (?)
|
||||
if inspect.isclass(obj) and name != 'DispositionCombination2' and name.startswith('DispositionCombination2'):
|
||||
return obj
|
||||
@@ -1,24 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .disposition_combination_2 import DispositionCombination2
|
||||
|
||||
|
||||
class DispositionCombination20(DispositionCombination2):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'D00'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = DispositionCombination20.COMBINATION_IDENTIFIER
|
||||
|
||||
def getDispositionTuple(self):
|
||||
return (set(), # 0
|
||||
set()) # 1
|
||||
|
||||
def evaluateTrackDescriptors(self, trackDescriptors):
|
||||
assert not trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has set default disposition"
|
||||
assert not trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has set default disposition"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
@@ -1,28 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .disposition_combination_2 import DispositionCombination2
|
||||
|
||||
|
||||
class DispositionCombination21(DispositionCombination2):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'D10'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = DispositionCombination21.COMBINATION_IDENTIFIER
|
||||
|
||||
def getDispositionTuple(self):
|
||||
return (set([TrackDisposition.DEFAULT]), # 0
|
||||
set()) # 1
|
||||
|
||||
def evaluateTrackDescriptors(self, trackDescriptors):
|
||||
if self._context['use_jellyfin']:
|
||||
assert not trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has set default disposition"
|
||||
assert trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has not set default disposition"
|
||||
else:
|
||||
assert trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has not set default disposition"
|
||||
assert not trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has set default disposition"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
@@ -1,24 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .disposition_combination_2 import DispositionCombination2
|
||||
|
||||
|
||||
class DispositionCombination22(DispositionCombination2):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'D01'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = DispositionCombination22.COMBINATION_IDENTIFIER
|
||||
|
||||
def getDispositionTuple(self):
|
||||
return (set(), # 0
|
||||
set([TrackDisposition.DEFAULT])) # 1
|
||||
|
||||
def evaluateTrackDescriptors(self, trackDescriptors):
|
||||
assert trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has set default disposition"
|
||||
assert not trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has not set default disposition"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
@@ -1,23 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .disposition_combination_2 import DispositionCombination2
|
||||
|
||||
|
||||
class DispositionCombination23(DispositionCombination2):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'D11'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = DispositionCombination23.COMBINATION_IDENTIFIER
|
||||
|
||||
def getDispositionTuple(self):
|
||||
return (set([TrackDisposition.DEFAULT]), # 0
|
||||
set([TrackDisposition.DEFAULT])) # 1
|
||||
|
||||
def evaluateTrackDescriptors(self, trackDescriptors):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
return True
|
||||
@@ -1,27 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
class DispositionCombination3():
|
||||
|
||||
def __init__(self, context = None):
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
def getIdentifier(self):
|
||||
return self._combinationIdentifier
|
||||
|
||||
@staticmethod
|
||||
def list():
|
||||
basePath = os.path.dirname(__file__)
|
||||
return [os.path.basename(p)[26:-3]
|
||||
for p
|
||||
in glob.glob(f"{ basePath }/disposition_combination_3_*.py", recursive = True)
|
||||
if p != __file__]
|
||||
|
||||
@staticmethod
|
||||
def getClassReference(identifier):
|
||||
importlib.import_module(f"ffx.test.disposition_combination_3_{ identifier }")
|
||||
for name, obj in inspect.getmembers(sys.modules[f"ffx.test.disposition_combination_3_{ identifier }"]):
|
||||
#HINT: Excluding DispositionCombination as it seems to be included by import (?)
|
||||
if inspect.isclass(obj) and name != 'DispositionCombination3' and name.startswith('DispositionCombination3'):
|
||||
return obj
|
||||
@@ -1,26 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .disposition_combination_3 import DispositionCombination3
|
||||
|
||||
|
||||
class DispositionCombination30(DispositionCombination3):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'D000'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = DispositionCombination30.COMBINATION_IDENTIFIER
|
||||
|
||||
def getDispositionTuple(self):
|
||||
return (set(), # 0
|
||||
set(), # 1
|
||||
set()) # 2
|
||||
|
||||
def evaluateTrackDescriptors(self, trackDescriptors):
|
||||
assert not trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has set default disposition"
|
||||
assert not trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has set default disposition"
|
||||
assert not trackDescriptors[2].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #2 has set default disposition"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
@@ -1,31 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .disposition_combination_3 import DispositionCombination3
|
||||
|
||||
|
||||
class DispositionCombination31(DispositionCombination3):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'D100'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = DispositionCombination31.COMBINATION_IDENTIFIER
|
||||
|
||||
def getDispositionTuple(self):
|
||||
return (set([TrackDisposition.DEFAULT]), # 0
|
||||
set(), # 1
|
||||
set()) # 2
|
||||
|
||||
def evaluateTrackDescriptors(self, trackDescriptors):
|
||||
if self._context['use_jellyfin']:
|
||||
assert not trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has set default disposition"
|
||||
assert not trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has set default disposition"
|
||||
assert trackDescriptors[2].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #2 has not set default disposition"
|
||||
else:
|
||||
assert trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has not set default disposition"
|
||||
assert not trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has set default disposition"
|
||||
assert not trackDescriptors[2].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #2 has set default disposition"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
@@ -1,31 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .disposition_combination_3 import DispositionCombination3
|
||||
|
||||
|
||||
class DispositionCombination32(DispositionCombination3):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'D010'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = DispositionCombination32.COMBINATION_IDENTIFIER
|
||||
|
||||
def getDispositionTuple(self):
|
||||
return (set(), # 0
|
||||
set([TrackDisposition.DEFAULT]), # 1
|
||||
set()) # 2
|
||||
|
||||
def evaluateTrackDescriptors(self, trackDescriptors):
|
||||
if self._context['use_jellyfin']:
|
||||
assert not trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has set default disposition"
|
||||
assert not trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has set default disposition"
|
||||
assert trackDescriptors[2].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #2 has not set default disposition"
|
||||
else:
|
||||
assert not trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has set default disposition"
|
||||
assert trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has not set default disposition"
|
||||
assert not trackDescriptors[2].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #2 has set default disposition"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
@@ -1,27 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .disposition_combination_3 import DispositionCombination3
|
||||
|
||||
|
||||
class DispositionCombination33(DispositionCombination3):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'D001'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = DispositionCombination33.COMBINATION_IDENTIFIER
|
||||
|
||||
def getDispositionTuple(self):
|
||||
return (set(), # 0
|
||||
set(), # 1
|
||||
set([TrackDisposition.DEFAULT])) # 2
|
||||
|
||||
def evaluateTrackDescriptors(self, trackDescriptors):
|
||||
if self._context['use_jellyfin']:
|
||||
assert not trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has set default disposition"
|
||||
assert not trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has set default disposition"
|
||||
assert trackDescriptors[2].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #2 has not set default disposition"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
@@ -1,24 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .disposition_combination_3 import DispositionCombination3
|
||||
|
||||
|
||||
class DispositionCombination34(DispositionCombination3):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'D101'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = DispositionCombination34.COMBINATION_IDENTIFIER
|
||||
|
||||
def getDispositionTuple(self):
|
||||
return (set([TrackDisposition.DEFAULT]), # 0
|
||||
set(), # 1
|
||||
set([TrackDisposition.DEFAULT])) # 2
|
||||
|
||||
def evaluateTrackDescriptors(self, trackDescriptors):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
return True
|
||||
@@ -18,8 +18,8 @@ class DispositionCombinator22(DispositionCombinator2):
|
||||
set([TrackDisposition.DEFAULT])) # 1
|
||||
|
||||
def assertFunc(self, trackDescriptors):
|
||||
assert trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 has set default disposition"
|
||||
assert not trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has not set default disposition"
|
||||
assert not trackDescriptors[0].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #0 index={trackDescriptors[0].getIndex()} [{trackDescriptors[0].getType().label()}:{trackDescriptors[0].getSubIndex()}] has set default disposition"
|
||||
assert trackDescriptors[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 index={trackDescriptors[1].getIndex()} [{trackDescriptors[1].getType().label()}:{trackDescriptors[1].getSubIndex()}] has not set default disposition"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
|
||||
@@ -44,7 +44,7 @@ def getTimeString(hours: float = 0.0,
|
||||
return f"{hours:02d}:{minutes:02d}:{seconds:02d}.{millis:03d}"
|
||||
|
||||
|
||||
def createAssFile(entries: dict):
|
||||
def createAssFile(entries: dict, directory = None):
|
||||
|
||||
# [Script Info]
|
||||
# ; Script generated by FFmpeg/Lavc61.3.100
|
||||
@@ -63,7 +63,7 @@ def createAssFile(entries: dict):
|
||||
# Dialogue: 0,0:00:01.00,0:00:02.00,Default,,0,0,0,,yolo
|
||||
# Dialogue: 0,0:00:03.00,0:00:04.00,Default,,0,0,0,,zolo
|
||||
# Dialogue: 0,0:00:05.00,0:00:06.00,Default,,0,0,0,,golo
|
||||
tmpFileName = tempfile.mktemp(suffix=".ass")
|
||||
tmpFileName = tempfile.mktemp(suffix=".ass", dir = directory)
|
||||
|
||||
with open(tmpFileName, 'w') as tmpFile:
|
||||
|
||||
@@ -87,7 +87,7 @@ def createAssFile(entries: dict):
|
||||
|
||||
return tmpFileName
|
||||
|
||||
def createSrtFile(entries: dict):
|
||||
def createSrtFile(entries: dict, directory = None):
|
||||
# 1
|
||||
# 00:00:00,000 --> 00:00:02,500
|
||||
# Welcome to the Example Subtitle File!
|
||||
@@ -100,7 +100,7 @@ def createSrtFile(entries: dict):
|
||||
# 00:00:07,000 --> 00:00:10,500
|
||||
# You can use SRT files to add subtitles to your videos.
|
||||
|
||||
tmpFileName = tempfile.mktemp(suffix=".srt")
|
||||
tmpFileName = tempfile.mktemp(suffix=".srt", dir = directory)
|
||||
|
||||
with open(tmpFileName, 'w') as tmpFile:
|
||||
|
||||
@@ -113,13 +113,13 @@ def createSrtFile(entries: dict):
|
||||
return tmpFileName
|
||||
|
||||
|
||||
def createVttFile(entries: dict):
|
||||
def createVttFile(entries: dict, directory = None):
|
||||
# WEBVTT
|
||||
#
|
||||
# 01:20:33.050 --> 01:20:35.050
|
||||
# Yolo
|
||||
|
||||
tmpFileName = tempfile.mktemp(suffix=".vtt")
|
||||
tmpFileName = tempfile.mktemp(suffix=".vtt", dir = directory)
|
||||
|
||||
with open(tmpFileName, 'w') as tmpFile:
|
||||
|
||||
@@ -143,7 +143,8 @@ def createMediaTestFile(mediaDescriptor: MediaDescriptor,
|
||||
sizeX: int = 1280,
|
||||
sizeY: int = 720,
|
||||
rate: int = 25,
|
||||
length: int = 10):
|
||||
length: int = 10,
|
||||
logger = None):
|
||||
|
||||
# subtitleFilePath = createVttFile(SHORT_SUBTITLE_SEQUENCE)
|
||||
|
||||
@@ -217,7 +218,7 @@ def createMediaTestFile(mediaDescriptor: MediaDescriptor,
|
||||
# click.echo(f"createMediaTestFile() cache index={cacheIndex} size={len(generatorCache)}")
|
||||
|
||||
if cacheIndex == -1:
|
||||
importTokens = ['-i', createVttFile(SHORT_SUBTITLE_SEQUENCE)]
|
||||
importTokens = ['-i', createVttFile(SHORT_SUBTITLE_SEQUENCE, directory=directory if directory else None)]
|
||||
|
||||
sourceIndex = len(generatorCache) - 1 if cacheIndex == -1 else cacheIndex
|
||||
mappingTokens += ['-map', f"{sourceIndex}:s:0"]
|
||||
@@ -254,10 +255,18 @@ def createMediaTestFile(mediaDescriptor: MediaDescriptor,
|
||||
|
||||
commandTokens += [outputPath]
|
||||
|
||||
# click.echo(f"command sequence: {commandTokens}")
|
||||
|
||||
if not logger is None:
|
||||
logger.debug(f"createMediaTestFile(): Command sequence: {commandTokens}")
|
||||
|
||||
out, err, rc = executeProcess(commandTokens)
|
||||
#if rc:
|
||||
# click.echo(f"Creating testfile failed with {rc}: {err}")
|
||||
|
||||
if not logger is None:
|
||||
if out:
|
||||
logger.debug(f"createMediaTestFile(): Process output: {out}")
|
||||
if rc:
|
||||
logger.debug(f"createMediaTestFile(): Process returned ERROR {rc} ({err})")
|
||||
|
||||
|
||||
return outputPath
|
||||
|
||||
|
||||
33
bin/ffx/test/jellyfin_combinator.py
Normal file
33
bin/ffx/test/jellyfin_combinator.py
Normal file
@@ -0,0 +1,33 @@
|
||||
import os, sys, importlib, glob, inspect, itertools
|
||||
|
||||
class JellyfinCombinator():
|
||||
|
||||
IDENTIFIER = 'jellyfin'
|
||||
|
||||
def __init__(self, context = None):
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
def getIdentifier(self):
|
||||
return JellyfinCombinator.IDENTIFIER
|
||||
|
||||
@staticmethod
|
||||
def list():
|
||||
basePath = os.path.dirname(__file__)
|
||||
return [os.path.basename(p)[20:-3]
|
||||
for p
|
||||
in glob.glob(f"{ basePath }/jellyfin_combinator_*.py", recursive = True)
|
||||
if p != __file__]
|
||||
|
||||
@staticmethod
|
||||
def getClassReference(identifier):
|
||||
importlib.import_module(f"ffx.test.jellyfin_combinator_{ identifier }")
|
||||
for name, obj in inspect.getmembers(sys.modules[f"ffx.test.jellyfin_combinator_{ identifier }"]):
|
||||
#HINT: Excluding MediaCombinator as it seems to be included by import (?)
|
||||
if inspect.isclass(obj) and name != 'JellyfinCombinator' and name.startswith('JellyfinCombinator'):
|
||||
return obj
|
||||
|
||||
@staticmethod
|
||||
def getAllClassReferences():
|
||||
return [JellyfinCombinator.getClassReference(i) for i in JellyfinCombinator.list()]
|
||||
34
bin/ffx/test/jellyfin_combinator_0.py
Normal file
34
bin/ffx/test/jellyfin_combinator_0.py
Normal file
@@ -0,0 +1,34 @@
|
||||
import os, sys, importlib, glob, inspect, itertools
|
||||
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.media_descriptor import MediaDescriptor
|
||||
|
||||
from .jellyfin_combinator import JellyfinCombinator
|
||||
|
||||
|
||||
class JellyfinCombinator0(JellyfinCombinator):
|
||||
|
||||
VARIANT = 'j'
|
||||
|
||||
# def __init__(self, SubCombinators: dict = {}, context = None):
|
||||
def __init__(self, context = None):
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
# self._SubCombinators = SubCombinators
|
||||
|
||||
def getVariant(self):
|
||||
return JellyfinCombinator0.VARIANT
|
||||
|
||||
|
||||
def getPayload(self):
|
||||
return False
|
||||
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
34
bin/ffx/test/jellyfin_combinator_1.py
Normal file
34
bin/ffx/test/jellyfin_combinator_1.py
Normal file
@@ -0,0 +1,34 @@
|
||||
import os, sys, importlib, glob, inspect, itertools
|
||||
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.media_descriptor import MediaDescriptor
|
||||
|
||||
from .jellyfin_combinator import JellyfinCombinator
|
||||
|
||||
class JellyfinCombinator1(JellyfinCombinator):
|
||||
|
||||
VARIANT = 'J'
|
||||
|
||||
# def __init__(self, SubCombinators: dict = {}, context = None):
|
||||
def __init__(self, context = None):
|
||||
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
# self._SubCombinators = SubCombinations
|
||||
|
||||
def getVariant(self):
|
||||
return JellyfinCombinator1.VARIANT
|
||||
|
||||
|
||||
def getPayload(self):
|
||||
return True
|
||||
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
@@ -10,9 +10,7 @@ class MediaCombinator():
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
def getIdentifier(self):
|
||||
return self._identifier
|
||||
def getVariant(self):
|
||||
return self._variant
|
||||
return MediaCombinator.IDENTIFIER
|
||||
|
||||
@staticmethod
|
||||
def list():
|
||||
|
||||
@@ -6,6 +6,8 @@ from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.media_descriptor import MediaDescriptor
|
||||
|
||||
from .media_combinator import MediaCombinator
|
||||
from .jellyfin_combinator import JellyfinCombinator
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
|
||||
class MediaCombinator0(MediaCombinator):
|
||||
@@ -20,8 +22,9 @@ class MediaCombinator0(MediaCombinator):
|
||||
|
||||
# self._SubCombinators = SubCombinators
|
||||
|
||||
self._identifier = MediaCombinator0.IDENTIFIER
|
||||
self._variant = MediaCombinator0.VARIANT
|
||||
def getVariant(self):
|
||||
return MediaCombinator0.VARIANT
|
||||
|
||||
|
||||
|
||||
def getPayload(self):
|
||||
@@ -45,7 +48,7 @@ class MediaCombinator0(MediaCombinator):
|
||||
|
||||
return mediaDescriptor
|
||||
|
||||
def assertFunc(self, testObj):
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
@@ -53,13 +56,21 @@ class MediaCombinator0(MediaCombinator):
|
||||
|
||||
def getYield(self):
|
||||
|
||||
for MTC in MediaTagCombinator.getAllClassReferences():
|
||||
|
||||
mtc = MTC(self._context)
|
||||
|
||||
yieldObj = {}
|
||||
|
||||
yieldObj['identifier'] = MediaCombinator0.IDENTIFIER
|
||||
yieldObj['variants'] = [MediaCombinator0.VARIANT]
|
||||
yieldObj['identifier'] = self.getIdentifier()
|
||||
yieldObj['variants'] = [self.getVariant(),
|
||||
mtc.getVariant()]
|
||||
yieldObj['payload'] = self.getPayload()
|
||||
|
||||
yieldObj['assertFuncs'] = [self.assertFunc]
|
||||
yieldObj['shouldFail'] = self.shouldFail()
|
||||
yieldObj['assertSelectors'] = ['M', 'MT']
|
||||
yieldObj['assertFuncs'] = [self.assertFunc,
|
||||
mtc.assertFunc]
|
||||
yieldObj['shouldFail'] = (self.shouldFail()
|
||||
| mtc.shouldFail())
|
||||
|
||||
yield yieldObj
|
||||
|
||||
@@ -6,6 +6,9 @@ from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.media_descriptor import MediaDescriptor
|
||||
|
||||
from .media_combinator import MediaCombinator
|
||||
from .jellyfin_combinator import JellyfinCombinator
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
|
||||
class MediaCombinator1(MediaCombinator):
|
||||
|
||||
@@ -20,8 +23,9 @@ class MediaCombinator1(MediaCombinator):
|
||||
|
||||
# self._SubCombinators = SubCombinations
|
||||
|
||||
self._identifier = MediaCombinator1.IDENTIFIER
|
||||
self._variant = MediaCombinator1.VARIANT
|
||||
def getVariant(self):
|
||||
return MediaCombinator1.VARIANT
|
||||
|
||||
|
||||
def getPayload(self):
|
||||
|
||||
@@ -51,7 +55,7 @@ class MediaCombinator1(MediaCombinator):
|
||||
|
||||
return mediaDescriptor
|
||||
|
||||
def assertFunc(self, testObj):
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
@@ -59,13 +63,23 @@ class MediaCombinator1(MediaCombinator):
|
||||
|
||||
def getYield(self):
|
||||
|
||||
for MTC in MediaTagCombinator.getAllClassReferences():
|
||||
|
||||
mtc = MTC(self._context)
|
||||
|
||||
yieldObj = {}
|
||||
|
||||
yieldObj['identifier'] = MediaCombinator1.IDENTIFIER
|
||||
yieldObj['variants'] = [MediaCombinator1.VARIANT]
|
||||
yieldObj['identifier'] = self.getIdentifier()
|
||||
yieldObj['variants'] = [self.getVariant(),
|
||||
mtc.getVariant()]
|
||||
|
||||
yieldObj['payload'] = self.getPayload()
|
||||
yieldObj['assertFuncs'] = [self.assertFunc]
|
||||
yieldObj['shouldFail'] = self.shouldFail()
|
||||
|
||||
yieldObj['assertSelectors'] = ['M', 'MT']
|
||||
yieldObj['assertFuncs'] = [self.assertFunc,
|
||||
mtc.assertFunc]
|
||||
|
||||
yieldObj['shouldFail'] = (self.shouldFail()
|
||||
| mtc.shouldFail())
|
||||
|
||||
yield yieldObj
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import os, sys, importlib, glob, inspect, itertools
|
||||
import os, sys, importlib, glob, inspect, itertools, click
|
||||
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
@@ -8,6 +8,10 @@ from ffx.media_descriptor import MediaDescriptor
|
||||
from .media_combinator import MediaCombinator
|
||||
|
||||
from .disposition_combinator_2 import DispositionCombinator2
|
||||
from .track_tag_combinator_2 import TrackTagCombinator2
|
||||
from .jellyfin_combinator import JellyfinCombinator
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
|
||||
class MediaCombinator2(MediaCombinator):
|
||||
|
||||
@@ -22,10 +26,11 @@ class MediaCombinator2(MediaCombinator):
|
||||
|
||||
# self._SubCombinators = SubCombinators
|
||||
|
||||
self._identifier = MediaCombinator2.IDENTIFIER
|
||||
self._variant = MediaCombinator2.VARIANT
|
||||
def getVariant(self):
|
||||
return MediaCombinator2.VARIANT
|
||||
|
||||
def getPayload(self, subtitleDispositionTuple = (set(), set())):
|
||||
|
||||
def getPayload(self, subtitleDispositionTuple = (set(), set()), subtitleTagTuple = ({}, {})):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
@@ -41,12 +46,14 @@ class MediaCombinator2(MediaCombinator):
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = subtitleDispositionTuple[0]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = subtitleTagTuple[0]
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = subtitleDispositionTuple[1]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = subtitleTagTuple[1]
|
||||
trackDescriptor3 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
@@ -61,7 +68,7 @@ class MediaCombinator2(MediaCombinator):
|
||||
|
||||
return mediaDescriptor
|
||||
|
||||
def assertFunc(self, testObj):
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
@@ -69,17 +76,40 @@ class MediaCombinator2(MediaCombinator):
|
||||
|
||||
def getYield(self):
|
||||
|
||||
for MTC in MediaTagCombinator.getAllClassReferences():
|
||||
for DC2 in DispositionCombinator2.getAllClassReferences():
|
||||
for TC2 in TrackTagCombinator2.getAllClassReferences():
|
||||
for J in JellyfinCombinator.getAllClassReferences():
|
||||
|
||||
j = J(self._context)
|
||||
self._context['use_jellyfin'] = j.getPayload()
|
||||
|
||||
dc2 = DC2(self._context)
|
||||
tc2 = TC2(self._context)
|
||||
mtc = MTC(self._context)
|
||||
|
||||
yieldObj = {}
|
||||
|
||||
yieldObj['identifier'] = MediaCombinator2.IDENTIFIER
|
||||
yieldObj['variants'] = [MediaCombinator2.VARIANT, f"S:{dc2.getVariant()}"]
|
||||
yieldObj['identifier'] = self.getIdentifier()
|
||||
yieldObj['variants'] = [self.getVariant(),
|
||||
f"S:{dc2.getVariant()}",
|
||||
f"S:{tc2.getVariant()}",
|
||||
mtc.getVariant(),
|
||||
j.getVariant()]
|
||||
|
||||
yieldObj['payload'] = self.getPayload(dc2.getPayload())
|
||||
yieldObj['assertFuncs'] = [self.assertFunc, dc2.assertFunc]
|
||||
yieldObj['shouldFail'] = self.shouldFail() | dc2.shouldFail()
|
||||
yieldObj['payload'] = self.getPayload(dc2.getPayload(), tc2.getPayload())
|
||||
|
||||
yieldObj['assertSelectors'] = ['M', 'SD', 'ST', 'MT', 'J']
|
||||
yieldObj['assertFuncs'] = [self.assertFunc,
|
||||
dc2.assertFunc,
|
||||
tc2.assertFunc,
|
||||
mtc.assertFunc,
|
||||
j.assertFunc]
|
||||
|
||||
yieldObj['shouldFail'] = (self.shouldFail()
|
||||
| dc2.shouldFail()
|
||||
| tc2.shouldFail()
|
||||
| mtc.shouldFail()
|
||||
| j.shouldFail())
|
||||
|
||||
yield yieldObj
|
||||
|
||||
@@ -8,6 +8,9 @@ from ffx.media_descriptor import MediaDescriptor
|
||||
from .media_combinator import MediaCombinator
|
||||
|
||||
from .disposition_combinator_3 import DispositionCombinator3
|
||||
from .track_tag_combinator_3 import TrackTagCombinator3
|
||||
from .jellyfin_combinator import JellyfinCombinator
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
|
||||
class MediaCombinator3(MediaCombinator):
|
||||
@@ -23,11 +26,11 @@ class MediaCombinator3(MediaCombinator):
|
||||
|
||||
# self._SubCombinators = SubCombinations
|
||||
|
||||
self._identifier = MediaCombinator3.IDENTIFIER
|
||||
self._variant = MediaCombinator3.VARIANT
|
||||
def getVariant(self):
|
||||
return MediaCombinator3.VARIANT
|
||||
|
||||
|
||||
def getPayload(self, subtitleDispositionTuple = (set(), set(), set())):
|
||||
def getPayload(self, subtitleDispositionTuple = (set(), set(), set()), subtitleTagTuple = ({}, {}, {})):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
@@ -43,18 +46,21 @@ class MediaCombinator3(MediaCombinator):
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = subtitleDispositionTuple[0]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = subtitleTagTuple[0]
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = subtitleDispositionTuple[1]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = subtitleTagTuple[1]
|
||||
trackDescriptor3 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = subtitleDispositionTuple[2]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = subtitleTagTuple[2]
|
||||
trackDescriptor4 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
@@ -71,7 +77,7 @@ class MediaCombinator3(MediaCombinator):
|
||||
return mediaDescriptor
|
||||
|
||||
|
||||
def assertFunc(self, testObj):
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
@@ -79,17 +85,40 @@ class MediaCombinator3(MediaCombinator):
|
||||
|
||||
def getYield(self):
|
||||
|
||||
for MTC in MediaTagCombinator.getAllClassReferences():
|
||||
for DC3 in DispositionCombinator3.getAllClassReferences():
|
||||
for TC3 in TrackTagCombinator3.getAllClassReferences():
|
||||
for J in JellyfinCombinator.getAllClassReferences():
|
||||
|
||||
j = J(self._context)
|
||||
self._context['use_jellyfin'] = j.getPayload()
|
||||
|
||||
dc3 = DC3(self._context)
|
||||
tc3 = TC3(self._context)
|
||||
mtc = MTC(self._context)
|
||||
|
||||
yieldObj = {}
|
||||
|
||||
yieldObj['identifier'] = MediaCombinator3.IDENTIFIER
|
||||
yieldObj['variants'] = [MediaCombinator3.VARIANT, f"S:{dc3.getVariant()}"]
|
||||
yieldObj['identifier'] = self.getIdentifier()
|
||||
yieldObj['variants'] = [self.getVariant(),
|
||||
f"S:{dc3.getVariant()}",
|
||||
f"S:{tc3.getVariant()}",
|
||||
mtc.getVariant(),
|
||||
j.getVariant()]
|
||||
|
||||
yieldObj['payload'] = self.getPayload(dc3.getPayload())
|
||||
yieldObj['assertFuncs'] = [self.assertFunc, dc3.assertFunc]
|
||||
yieldObj['shouldFail'] = self.shouldFail() | dc3.shouldFail()
|
||||
yieldObj['payload'] = self.getPayload(dc3.getPayload(), tc3.getPayload())
|
||||
|
||||
yieldObj['assertSelectors'] = ['M', 'SD', 'ST', 'MT', 'J']
|
||||
yieldObj['assertFuncs'] = [self.assertFunc,
|
||||
dc3.assertFunc,
|
||||
tc3.assertFunc,
|
||||
mtc.assertFunc,
|
||||
j.assertFunc]
|
||||
|
||||
yieldObj['shouldFail'] = (self.shouldFail()
|
||||
| dc3.shouldFail()
|
||||
| tc3.shouldFail()
|
||||
| mtc.shouldFail()
|
||||
| j.shouldFail())
|
||||
|
||||
yield yieldObj
|
||||
|
||||
@@ -8,6 +8,9 @@ from ffx.media_descriptor import MediaDescriptor
|
||||
from .media_combinator import MediaCombinator
|
||||
|
||||
from .disposition_combinator_2 import DispositionCombinator2
|
||||
from .track_tag_combinator_2 import TrackTagCombinator2
|
||||
from .jellyfin_combinator import JellyfinCombinator
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
|
||||
class MediaCombinator4(MediaCombinator):
|
||||
@@ -23,10 +26,11 @@ class MediaCombinator4(MediaCombinator):
|
||||
|
||||
# self._SubCombinators = SubCombinations
|
||||
|
||||
self._identifier = MediaCombinator4.IDENTIFIER
|
||||
self._variant = MediaCombinator4.VARIANT
|
||||
def getVariant(self):
|
||||
return MediaCombinator4.VARIANT
|
||||
|
||||
def getPayload(self, audioDispositionTuple = (set(), set())):
|
||||
|
||||
def getPayload(self, audioDispositionTuple = (set(), set()), audioTagTuple = ({}, {})):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
@@ -37,12 +41,14 @@ class MediaCombinator4(MediaCombinator):
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = audioDispositionTuple[0]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = audioTagTuple[0]
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = audioDispositionTuple[1]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = audioTagTuple[1]
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
@@ -57,7 +63,7 @@ class MediaCombinator4(MediaCombinator):
|
||||
return mediaDescriptor
|
||||
|
||||
|
||||
def assertFunc(self, testObj):
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
@@ -65,17 +71,40 @@ class MediaCombinator4(MediaCombinator):
|
||||
|
||||
def getYield(self):
|
||||
|
||||
for MTC in MediaTagCombinator.getAllClassReferences():
|
||||
for DC2 in DispositionCombinator2.getAllClassReferences():
|
||||
for TC2 in TrackTagCombinator2.getAllClassReferences():
|
||||
for J in JellyfinCombinator.getAllClassReferences():
|
||||
|
||||
j = J(self._context)
|
||||
self._context['use_jellyfin'] = j.getPayload()
|
||||
|
||||
dc2 = DC2(self._context)
|
||||
tc2 = TC2(self._context)
|
||||
mtc = MTC(self._context)
|
||||
|
||||
yieldObj = {}
|
||||
|
||||
yieldObj['identifier'] = MediaCombinator4.IDENTIFIER
|
||||
yieldObj['variants'] = [MediaCombinator4.VARIANT, f"A:{dc2.getVariant()}"]
|
||||
yieldObj['identifier'] = self.getIdentifier()
|
||||
yieldObj['variants'] = [self.getVariant(),
|
||||
f"A:{dc2.getVariant()}",
|
||||
f"A:{tc2.getVariant()}",
|
||||
mtc.getVariant(),
|
||||
j.getVariant()]
|
||||
|
||||
yieldObj['payload'] = self.getPayload(dc2.getPayload())
|
||||
yieldObj['assertFuncs'] = [self.assertFunc, dc2.assertFunc]
|
||||
yieldObj['shouldFail'] = self.shouldFail() | dc2.shouldFail()
|
||||
yieldObj['payload'] = self.getPayload(dc2.getPayload(), tc2.getPayload())
|
||||
|
||||
yieldObj['assertSelectors'] = ['M', 'AD', 'AT', 'MT', 'J']
|
||||
yieldObj['assertFuncs'] = [self.assertFunc,
|
||||
dc2.assertFunc,
|
||||
tc2.assertFunc,
|
||||
mtc.assertFunc,
|
||||
j.assertFunc]
|
||||
|
||||
yieldObj['shouldFail'] = (self.shouldFail()
|
||||
| dc2.shouldFail()
|
||||
| tc2.shouldFail()
|
||||
| mtc.shouldFail()
|
||||
| j.shouldFail())
|
||||
|
||||
yield yieldObj
|
||||
|
||||
@@ -8,6 +8,9 @@ from ffx.media_descriptor import MediaDescriptor
|
||||
from .media_combinator import MediaCombinator
|
||||
|
||||
from .disposition_combinator_2 import DispositionCombinator2
|
||||
from .track_tag_combinator_2 import TrackTagCombinator2
|
||||
from .jellyfin_combinator import JellyfinCombinator
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
|
||||
class MediaCombinator5(MediaCombinator):
|
||||
@@ -23,10 +26,11 @@ class MediaCombinator5(MediaCombinator):
|
||||
|
||||
# self._SubCombinators = SubCombinations
|
||||
|
||||
self._identifier = MediaCombinator5.IDENTIFIER
|
||||
self._variant = MediaCombinator5.VARIANT
|
||||
def getVariant(self):
|
||||
return MediaCombinator5.VARIANT
|
||||
|
||||
def getPayload(self, audioDispositionTuple = (set(), set())):
|
||||
|
||||
def getPayload(self, audioDispositionTuple = (set(), set()), audioTagTuple = ({}, {})):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
@@ -37,12 +41,14 @@ class MediaCombinator5(MediaCombinator):
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = audioDispositionTuple[0]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = audioTagTuple[0]
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = audioDispositionTuple[1]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = audioTagTuple[1]
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
@@ -64,7 +70,7 @@ class MediaCombinator5(MediaCombinator):
|
||||
return mediaDescriptor
|
||||
|
||||
|
||||
def assertFunc(self, testObj):
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
@@ -72,17 +78,40 @@ class MediaCombinator5(MediaCombinator):
|
||||
|
||||
def getYield(self):
|
||||
|
||||
for MTC in MediaTagCombinator.getAllClassReferences():
|
||||
for DC2 in DispositionCombinator2.getAllClassReferences():
|
||||
for TC2 in TrackTagCombinator2.getAllClassReferences():
|
||||
for J in JellyfinCombinator.getAllClassReferences():
|
||||
|
||||
j = J(self._context)
|
||||
self._context['use_jellyfin'] = j.getPayload()
|
||||
|
||||
dc2 = DC2(self._context)
|
||||
tc2 = TC2(self._context)
|
||||
mtc = MTC(self._context)
|
||||
|
||||
yieldObj = {}
|
||||
|
||||
yieldObj['identifier'] = MediaCombinator5.IDENTIFIER
|
||||
yieldObj['variants'] = [MediaCombinator5.VARIANT, f"A:{dc2.getVariant()}"]
|
||||
yieldObj['identifier'] = self.getIdentifier()
|
||||
yieldObj['variants'] = [self.getVariant(),
|
||||
f"A:{dc2.getVariant()}",
|
||||
f"A:{tc2.getVariant()}",
|
||||
mtc.getVariant(),
|
||||
j.getVariant()]
|
||||
|
||||
yieldObj['payload'] = self.getPayload(dc2.getPayload())
|
||||
yieldObj['assertFuncs'] = [self.assertFunc, dc2.assertFunc]
|
||||
yieldObj['shouldFail'] = self.shouldFail() | dc2.shouldFail()
|
||||
yieldObj['payload'] = self.getPayload(dc2.getPayload(), tc2.getPayload())
|
||||
|
||||
yieldObj['assertSelectors'] = ['M', 'AD', 'AT', 'MT', 'J']
|
||||
yieldObj['assertFuncs'] = [self.assertFunc,
|
||||
dc2.assertFunc,
|
||||
tc2.assertFunc,
|
||||
mtc.assertFunc,
|
||||
j.assertFunc]
|
||||
|
||||
yieldObj['shouldFail'] = (self.shouldFail()
|
||||
| dc2.shouldFail()
|
||||
| tc2.shouldFail()
|
||||
| mtc.shouldFail()
|
||||
| j.shouldFail())
|
||||
|
||||
yield yieldObj
|
||||
|
||||
@@ -8,6 +8,9 @@ from ffx.media_descriptor import MediaDescriptor
|
||||
from .media_combinator import MediaCombinator
|
||||
|
||||
from .disposition_combinator_2 import DispositionCombinator2
|
||||
from .track_tag_combinator_2 import TrackTagCombinator2
|
||||
from .jellyfin_combinator import JellyfinCombinator
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
|
||||
class MediaCombinator6(MediaCombinator):
|
||||
@@ -23,10 +26,11 @@ class MediaCombinator6(MediaCombinator):
|
||||
|
||||
# self._SubCombinators = SubCombinations
|
||||
|
||||
self._identifier = MediaCombinator6.IDENTIFIER
|
||||
self._variant = MediaCombinator6.VARIANT
|
||||
def getVariant(self):
|
||||
return MediaCombinator6.VARIANT
|
||||
|
||||
def getPayload(self, audioDispositionTuple = (set(), set()), subtitleDispositionTuple = (set(), set())):
|
||||
|
||||
def getPayload(self, audioDispositionTuple = (set(), set()), audioTagTuple = ({}, {}), subtitleDispositionTuple = (set(), set()), subtitleTagTuple = ({}, {})):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
@@ -37,24 +41,28 @@ class MediaCombinator6(MediaCombinator):
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = audioDispositionTuple[0]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = audioTagTuple[0]
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = audioDispositionTuple[1]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = audioTagTuple[1]
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = subtitleDispositionTuple[0]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = subtitleTagTuple[0]
|
||||
trackDescriptor3 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = subtitleDispositionTuple[1]
|
||||
kwargs[TrackDescriptor.TAGS_KEY] = subtitleTagTuple[1]
|
||||
trackDescriptor4 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
@@ -71,7 +79,7 @@ class MediaCombinator6(MediaCombinator):
|
||||
return mediaDescriptor
|
||||
|
||||
|
||||
def assertFunc(self, testObj):
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
@@ -79,19 +87,50 @@ class MediaCombinator6(MediaCombinator):
|
||||
|
||||
def getYield(self):
|
||||
|
||||
for MTC in MediaTagCombinator.getAllClassReferences():
|
||||
for DC2_A in DispositionCombinator2.getAllClassReferences():
|
||||
for TC2_A in TrackTagCombinator2.getAllClassReferences():
|
||||
for DC2_S in DispositionCombinator2.getAllClassReferences():
|
||||
for TC2_S in TrackTagCombinator2.getAllClassReferences():
|
||||
for J in JellyfinCombinator.getAllClassReferences():
|
||||
|
||||
j = J(self._context)
|
||||
self._context['use_jellyfin'] = j.getPayload()
|
||||
|
||||
dc2a = DC2_A(self._context)
|
||||
tc2a = TC2_A(self._context)
|
||||
dc2s = DC2_S(self._context)
|
||||
tc2s = TC2_S(self._context)
|
||||
mtc = MTC(self._context)
|
||||
|
||||
yieldObj = {}
|
||||
|
||||
yieldObj['identifier'] = MediaCombinator6.IDENTIFIER
|
||||
yieldObj['variants'] = [MediaCombinator6.VARIANT, f"A:{dc2a.getVariant()}", f"S:{dc2s.getVariant()}"]
|
||||
yieldObj['identifier'] = self.getIdentifier()
|
||||
yieldObj['variants'] = [self.getVariant(),
|
||||
f"A:{dc2a.getVariant()}",
|
||||
f"A:{tc2a.getVariant()}",
|
||||
f"S:{dc2s.getVariant()}",
|
||||
f"S:{tc2s.getVariant()}",
|
||||
mtc.getVariant(),
|
||||
j.getVariant()]
|
||||
|
||||
yieldObj['payload'] = self.getPayload(dc2a.getPayload(), dc2s.getPayload())
|
||||
yieldObj['assertFuncs'] = [self.assertFunc, dc2a.assertFunc, dc2s.assertFunc]
|
||||
yieldObj['shouldFail'] = self.shouldFail() | dc2a.shouldFail() | dc2s.shouldFail()
|
||||
yieldObj['payload'] = self.getPayload(dc2a.getPayload(), tc2a.getPayload(), dc2s.getPayload(), tc2s.getPayload())
|
||||
|
||||
yieldObj['assertSelectors'] = ['M', 'AD', 'AT', 'SD', 'ST', 'MT', 'J']
|
||||
yieldObj['assertFuncs'] = [self.assertFunc,
|
||||
dc2a.assertFunc,
|
||||
tc2a.assertFunc,
|
||||
dc2s.assertFunc,
|
||||
tc2s.assertFunc,
|
||||
mtc.assertFunc,
|
||||
j.assertFunc]
|
||||
|
||||
yieldObj['shouldFail'] = (self.shouldFail()
|
||||
| dc2a.shouldFail()
|
||||
| tc2a.shouldFail()
|
||||
| dc2s.shouldFail()
|
||||
| tc2s.shouldFail()
|
||||
| mtc.shouldFail()
|
||||
| j.shouldFail())
|
||||
|
||||
yield yieldObj
|
||||
|
||||
@@ -8,8 +8,9 @@ from ffx.media_descriptor import MediaDescriptor
|
||||
from .media_combinator import MediaCombinator
|
||||
|
||||
from .disposition_combinator_2 import DispositionCombinator2
|
||||
from .disposition_combinator_3 import DispositionCombinator3
|
||||
|
||||
from .track_tag_combinator_3 import TrackTagCombinator3
|
||||
from .jellyfin_combinator import JellyfinCombinator
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
class MediaCombinator7(MediaCombinator):
|
||||
|
||||
@@ -24,8 +25,9 @@ class MediaCombinator7(MediaCombinator):
|
||||
|
||||
# self._SubCombinators = SubCombinations
|
||||
|
||||
self._identifier = MediaCombinator7.IDENTIFIER
|
||||
self._variant = MediaCombinator7.VARIANT
|
||||
def getVariant(self):
|
||||
return MediaCombinator7.VARIANT
|
||||
|
||||
|
||||
def getPayload(self, audioDispositionTuple = (set(), set()), subtitleDispositionTuple = (set(), set(), set())):
|
||||
|
||||
@@ -79,7 +81,7 @@ class MediaCombinator7(MediaCombinator):
|
||||
return mediaDescriptor
|
||||
|
||||
|
||||
def assertFunc(self, testObj):
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
@@ -87,21 +89,51 @@ class MediaCombinator7(MediaCombinator):
|
||||
|
||||
def getYield(self):
|
||||
|
||||
for MTC in MediaTagCombinator.getAllClassReferences():
|
||||
for DC2_A in DispositionCombinator2.getAllClassReferences():
|
||||
for DC3_S in DispositionCombinator3.getAllClassReferences():
|
||||
for TC3_A in TrackTagCombinator3.getAllClassReferences():
|
||||
for DC2_S in DispositionCombinator2.getAllClassReferences():
|
||||
for TC3_S in TrackTagCombinator3.getAllClassReferences():
|
||||
for J in JellyfinCombinator.getAllClassReferences():
|
||||
|
||||
j = J(self._context)
|
||||
self._context['use_jellyfin'] = j.getPayload()
|
||||
|
||||
dc2a = DC2_A(self._context)
|
||||
dc3s = DC3_S(self._context)
|
||||
tc3a = TC3_A(self._context)
|
||||
dc2s = DC2_S(self._context)
|
||||
tc3s = TC3_S(self._context)
|
||||
mtc = MTC(self._context)
|
||||
|
||||
yieldObj = {}
|
||||
|
||||
yieldObj['identifier'] = MediaCombinator7.IDENTIFIER
|
||||
yieldObj['variants'] = [MediaCombinator7.VARIANT, f"A:{dc2a.getVariant()}", f"S:{dc3s.getVariant()}"]
|
||||
yieldObj['identifier'] = self.getIdentifier()
|
||||
yieldObj['variants'] = [self.getVariant(),
|
||||
f"A:{dc2a.getVariant()}",
|
||||
f"A:{tc3a.getVariant()}",
|
||||
f"S:{dc2s.getVariant()}",
|
||||
f"S:{tc3s.getVariant()}",
|
||||
mtc.getVariant(),
|
||||
j.getVariant()]
|
||||
|
||||
yieldObj['payload'] = self.getPayload(dc2a.getPayload(), dc3s.getPayload())
|
||||
yieldObj['payload'] = self.getPayload(dc2a.getPayload(), tc3a.getPayload(), dc2s.getPayload(), tc3s.getPayload())
|
||||
|
||||
yieldObj['assertFuncs'] = [self.assertFunc, dc2a.assertFunc, dc3s.assertFunc]
|
||||
yieldObj['assertSelectors'] = ['M', 'AD', 'AT', 'SD', 'ST', 'MT', 'J']
|
||||
|
||||
yieldObj['shouldFail'] = self.shouldFail() | dc2a.shouldFail() | dc3s.shouldFail()
|
||||
yieldObj['assertFuncs'] = [self.assertFunc,
|
||||
dc2a.assertFunc,
|
||||
tc3a.assertFunc,
|
||||
dc2s.assertFunc,
|
||||
tc3s.assertFunc,
|
||||
mtc.assertFunc,
|
||||
j.assertFunc]
|
||||
|
||||
yieldObj['shouldFail'] = (self.shouldFail()
|
||||
| dc2a.shouldFail()
|
||||
| tc3a.shouldFail()
|
||||
| dc2s.shouldFail()
|
||||
| tc3s.shouldFail()
|
||||
| mtc.shouldFail()
|
||||
| j.shouldFail())
|
||||
|
||||
yield yieldObj
|
||||
|
||||
33
bin/ffx/test/media_tag_combinator.py
Normal file
33
bin/ffx/test/media_tag_combinator.py
Normal file
@@ -0,0 +1,33 @@
|
||||
import os, sys, importlib, glob, inspect, itertools
|
||||
|
||||
class MediaTagCombinator():
|
||||
|
||||
IDENTIFIER = 'mediaTag'
|
||||
|
||||
def __init__(self, context = None):
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
def getIdentifier(self):
|
||||
return MediaTagCombinator.IDENTIFIER
|
||||
|
||||
@staticmethod
|
||||
def list():
|
||||
basePath = os.path.dirname(__file__)
|
||||
return [os.path.basename(p)[21:-3]
|
||||
for p
|
||||
in glob.glob(f"{ basePath }/media_tag_combinator_*.py", recursive = True)
|
||||
if p != __file__]
|
||||
|
||||
@staticmethod
|
||||
def getClassReference(identifier):
|
||||
importlib.import_module(f"ffx.test.media_tag_combinator_{ identifier }")
|
||||
for name, obj in inspect.getmembers(sys.modules[f"ffx.test.media_tag_combinator_{ identifier }"]):
|
||||
#HINT: Excluding MediaCombinator as it seems to be included by import (?)
|
||||
if inspect.isclass(obj) and name != 'MediaTagCombinator' and name.startswith('MediaTagCombinator'):
|
||||
return obj
|
||||
|
||||
@staticmethod
|
||||
def getAllClassReferences():
|
||||
return [MediaTagCombinator.getClassReference(i) for i in MediaTagCombinator.list()]
|
||||
31
bin/ffx/test/media_tag_combinator_0.py
Normal file
31
bin/ffx/test/media_tag_combinator_0.py
Normal file
@@ -0,0 +1,31 @@
|
||||
import os, sys, importlib, glob, inspect, itertools
|
||||
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.media_descriptor import MediaDescriptor
|
||||
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
|
||||
class MediaTagCombinator0(MediaTagCombinator):
|
||||
|
||||
VARIANT = 'MT0'
|
||||
|
||||
# def __init__(self, SubCombinators: dict = {}, context = None):
|
||||
def __init__(self, context = None):
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
def getVariant(self):
|
||||
return MediaTagCombinator0.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return {}
|
||||
|
||||
def assertFunc(self, testObj = {}):
|
||||
pass
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
36
bin/ffx/test/media_tag_combinator_1.py
Normal file
36
bin/ffx/test/media_tag_combinator_1.py
Normal file
@@ -0,0 +1,36 @@
|
||||
import os, sys, importlib, glob, inspect, itertools
|
||||
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.media_descriptor import MediaDescriptor
|
||||
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
class MediaTagCombinator1(MediaTagCombinator):
|
||||
|
||||
VARIANT = 'MT1'
|
||||
|
||||
# def __init__(self, SubCombinators: dict = {}, context = None):
|
||||
def __init__(self, context = None):
|
||||
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
# self._SubCombinators = SubCombinations
|
||||
|
||||
def getVariant(self):
|
||||
return MediaTagCombinator1.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return {'From': 'Encoders'}
|
||||
|
||||
def assertFunc(self, mediaDescriptor: MediaDescriptor):
|
||||
mediaTags = mediaDescriptor.getTags()
|
||||
|
||||
assert 'From' in mediaTags.keys(), "'From' not in media tag keys"
|
||||
assert mediaTags.keys()['From'] == 'Encoders', "Media tag value not 'Encoders' for key 'To'"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
39
bin/ffx/test/media_tag_combinator_2.py
Normal file
39
bin/ffx/test/media_tag_combinator_2.py
Normal file
@@ -0,0 +1,39 @@
|
||||
import os, sys, importlib, glob, inspect, itertools
|
||||
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.media_descriptor import MediaDescriptor
|
||||
|
||||
from .media_tag_combinator import MediaTagCombinator
|
||||
|
||||
class MediaTagCombinator2(MediaTagCombinator):
|
||||
|
||||
VARIANT = 'MT2'
|
||||
|
||||
# def __init__(self, SubCombinators: dict = {}, context = None):
|
||||
def __init__(self, context = None):
|
||||
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
# self._SubCombinators = SubCombinations
|
||||
|
||||
def getVariant(self):
|
||||
return MediaTagCombinator2.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return {'To': 'Fanz',
|
||||
'Yolo': 'Holo'}
|
||||
|
||||
def assertFunc(self, mediaDescriptor: MediaDescriptor):
|
||||
mediaTags = mediaDescriptor.getTags()
|
||||
|
||||
assert 'To' in mediaTags.keys(), "'To' not in media tag keys"
|
||||
assert mediaTags.keys()['To'] == 'Fanz', "Media tag value not 'Fanz' for key 'To'"
|
||||
assert 'Yolo' in mediaTags.keys(), "'Yolo' not in media tag keys"
|
||||
assert mediaTags.keys()['Yolo'] == 'Holo', "Media tag value not 'Holo' for key 'Yolo'"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
@@ -1,4 +1,4 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
import os, glob, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.test.helper import createEmptyDirectory
|
||||
|
||||
@@ -96,6 +96,13 @@ class Scenario():
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
|
||||
def clearTestDirectory(self):
|
||||
testFiles = glob.glob("f{self._testDirectory}/*")
|
||||
for f in testFiles:
|
||||
os.remove(f)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def list():
|
||||
basePath = os.path.dirname(__file__)
|
||||
|
||||
@@ -22,80 +22,123 @@ class Scenario1(Scenario):
|
||||
No tmdb, default parameters"""
|
||||
|
||||
def __init__(self, context):
|
||||
|
||||
context['use_jellyfin'] = True
|
||||
context['use_tmdb'] = False
|
||||
context['use_pattern'] = False
|
||||
#context['no_prompt'] = False
|
||||
|
||||
super().__init__(context)
|
||||
|
||||
|
||||
|
||||
def job(self, yieldObj: dict):
|
||||
|
||||
testContext = self._context.copy()
|
||||
|
||||
identifier = yieldObj['identifier']
|
||||
variantList = yieldObj['variants']
|
||||
|
||||
variantIdentifier = '-'.join(variantList)
|
||||
mediaDescriptor = yieldObj['payload']
|
||||
variantLabel = f"{self.__class__.__name__} Variant {variantIdentifier}"
|
||||
|
||||
sourceMediaDescriptor = yieldObj['payload']
|
||||
assertSelectorList: list = yieldObj['assertSelectors']
|
||||
assertFuncList = yieldObj['assertFuncs']
|
||||
shouldFail = yieldObj['shouldFail']
|
||||
|
||||
self._logger.info(f"Running Scenario 1 Job {variantIdentifier}")
|
||||
try:
|
||||
jellyfinSelectorIndex = assertSelectorList.index('J')
|
||||
jellyfinVariant = variantList[jellyfinSelectorIndex]
|
||||
testContext['use_jellyfin'] = jellyfinVariant == 'J'
|
||||
except ValueError:
|
||||
jellyfinSelectorIndex = -1
|
||||
|
||||
# if variantIdentifier != 'VAASS-A:D01-S:D00':
|
||||
# return
|
||||
|
||||
|
||||
self._logger.debug(f"Running Job: {variantLabel}")
|
||||
|
||||
# Phase 1: Setup source files
|
||||
self.clearTestDirectory()
|
||||
mediaFilePath = createMediaTestFile(mediaDescriptor=sourceMediaDescriptor, directory=self._testDirectory, logger=self._logger)
|
||||
|
||||
# # Phase 1: Setup source files
|
||||
# mediaFilePath = createMediaTestFile(mediaDescriptor=sourceMediaDescriptor, directory=self._testDirectory)
|
||||
#
|
||||
# # Phase 2: Prepare database
|
||||
#
|
||||
# # Phase 3: Run ffx
|
||||
# commandSequence = [sys.executable,
|
||||
# self._ffxExecutablePath,
|
||||
# 'convert',
|
||||
# mediaFilePath]
|
||||
#
|
||||
# self._logger.debug(f"Scenario1.run(): test sequence: {commandSequence}")
|
||||
#
|
||||
# out, err, rc = executeProcess(commandSequence, directory = self._testDirectory)
|
||||
#
|
||||
# if out:
|
||||
# self._logger.debug(f"Scenario1.run(): process output: {out}")
|
||||
# if rc:
|
||||
# self._logger.error(f"Scenario1.run(): process resultet in error {rc}: {err}")
|
||||
#
|
||||
# # Phase 4: Evaluate results
|
||||
#
|
||||
# try:
|
||||
#
|
||||
# resultFile = os.path.join(self._testDirectory, 'media.webm')
|
||||
#
|
||||
# assert os.path.isfile(resultFile), f"Result file 'media.webm' in path '{self._testDirectory}' wasn't created"
|
||||
#
|
||||
# resultFileProperties = FileProperties(self._context, resultFile)
|
||||
# resultMediaDescriptor = resultFileProperties.getMediaDescriptor()
|
||||
#
|
||||
# resultMediaTracks = resultMediaDescriptor.getAllTrackDescriptors()
|
||||
#
|
||||
# assert len(resultMediaTracks) == 3, f"Result file contains unexpected number of streams"
|
||||
#
|
||||
# assert resultMediaTracks[0].getType() == TrackType.VIDEO, f"Stream #0 is not of type video"
|
||||
#
|
||||
# assert resultMediaTracks[1].getType() == TrackType.AUDIO, f"Stream #1 is not of type audio"
|
||||
# assert not resultMediaTracks[1].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has set default disposition"
|
||||
#
|
||||
# assert resultMediaTracks[2].getType() == TrackType.AUDIO, f"Stream #2 is not of type audio"
|
||||
# assert resultMediaTracks[2].getDispositionFlag(TrackDisposition.DEFAULT), f"Stream #1 has not set default disposition"
|
||||
#
|
||||
# self._reportLogger.info('Scenario 1 test passed')
|
||||
#
|
||||
# except AssertionError as ae:
|
||||
#
|
||||
# self._reportLogger.error(f"Scenario 1 test failed ({ae})")
|
||||
# Phase 3: Run ffx
|
||||
commandSequence = [sys.executable,
|
||||
self._ffxExecutablePath,
|
||||
'convert',
|
||||
mediaFilePath,
|
||||
'--no-prompt']
|
||||
|
||||
if not testContext['use_jellyfin']:
|
||||
commandSequence += ['--no-jellyfin']
|
||||
|
||||
self._logger.debug(f"{variantLabel}: Test sequence: {commandSequence}")
|
||||
|
||||
out, err, rc = executeProcess(commandSequence, directory = self._testDirectory)
|
||||
|
||||
if out:
|
||||
self._logger.debug(f"{variantLabel}: Process output: {out}")
|
||||
if rc:
|
||||
self._logger.debug(f"{variantLabel}: Process returned ERROR {rc} ({err})")
|
||||
|
||||
# Phase 4: Evaluate results
|
||||
|
||||
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')
|
||||
|
||||
assert os.path.isfile(resultFile), f"Result file 'media.webm' in path '{self._testDirectory}' wasn't created"
|
||||
|
||||
resultFileProperties = FileProperties(testContext, resultFile)
|
||||
resultMediaDescriptor = resultFileProperties.getMediaDescriptor()
|
||||
|
||||
resultMediaTracks = resultMediaDescriptor.getAllTrackDescriptors()
|
||||
|
||||
for assertIndex in range(len(assertSelectorList)):
|
||||
|
||||
assertSelector = assertSelectorList[assertIndex]
|
||||
assertFunc = assertFuncList[assertIndex]
|
||||
assertVariant = variantList[assertIndex]
|
||||
|
||||
if assertSelector == 'M':
|
||||
assertFunc()
|
||||
for variantIndex in range(len(assertVariant)):
|
||||
assert assertVariant[variantIndex].lower() == resultMediaTracks[variantIndex].getType().indicator(), f"Stream #{variantIndex} is not of type {resultMediaTracks[variantIndex].getType().label()}"
|
||||
|
||||
elif assertSelector == 'AD' or assertSelector == 'AT':
|
||||
assertFunc(resultMediaDescriptor.getAudioTracks())
|
||||
|
||||
elif assertSelector == 'SD' or assertSelector == 'ST':
|
||||
assertFunc(resultMediaDescriptor.getSubtitleTracks())
|
||||
|
||||
elif type(assertSelector) is str:
|
||||
if assertSelector == 'J':
|
||||
assertFunc()
|
||||
|
||||
|
||||
self._reportLogger.info(f"{variantLabel}: Test passed")
|
||||
|
||||
except AssertionError as ae:
|
||||
|
||||
self._reportLogger.error(f"{variantLabel}: Test FAILED ({ae})")
|
||||
|
||||
|
||||
def run(self):
|
||||
|
||||
MC_list = MediaCombinator.getAllClassReferences()
|
||||
|
||||
for MC in MC_list:
|
||||
|
||||
self._logger.debug(f"MC={MC.__name__}")
|
||||
|
||||
mc = MC(context = self._context)
|
||||
|
||||
for y in mc.getYield():
|
||||
self.job(y)
|
||||
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
class TrackCombination():
|
||||
|
||||
def __init__(self, context = None):
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
def getIdentifier(self):
|
||||
return self._combinationIdentifier
|
||||
|
||||
@staticmethod
|
||||
def list():
|
||||
basePath = os.path.dirname(__file__)
|
||||
return [os.path.basename(p)[18:-3]
|
||||
for p
|
||||
in glob.glob(f"{ basePath }/track_combination_*.py", recursive = True)
|
||||
if p != __file__]
|
||||
|
||||
@staticmethod
|
||||
def getClassReference(identifier):
|
||||
importlib.import_module(f"ffx.test.track_combination_{ identifier }")
|
||||
for name, obj in inspect.getmembers(sys.modules[f"ffx.test.track_combination_{ identifier }"]):
|
||||
#HINT: Excluding DispositionCombination as it seems to be included by import (?)
|
||||
if inspect.isclass(obj) and name != 'TrackCombination' and name.startswith('TrackCombination'):
|
||||
return obj
|
||||
@@ -1,36 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from .track_combination import TrackCombination
|
||||
|
||||
|
||||
class TrackCombination0(TrackCombination):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'VA'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = TrackCombination0.COMBINATION_IDENTIFIER
|
||||
|
||||
def getTrackVector(self):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.VIDEO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor0 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
return [trackDescriptor0,
|
||||
trackDescriptor1]
|
||||
|
||||
def getSubcombinations(self):
|
||||
return
|
||||
@@ -1,42 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from .track_combination import TrackCombination
|
||||
|
||||
|
||||
class TrackCombination1(TrackCombination):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'VAS'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = TrackCombination1.COMBINATION_IDENTIFIER
|
||||
|
||||
def getTrackVector(self):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.VIDEO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor0 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
return [trackDescriptor0,
|
||||
trackDescriptor1,
|
||||
trackDescriptor2]
|
||||
|
||||
def getSubcombinations(self):
|
||||
return
|
||||
@@ -1,48 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from .track_combination import TrackCombination
|
||||
|
||||
|
||||
class TrackCombination1(TrackCombination):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'VASS'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = TrackCombination1.COMBINATION_IDENTIFIER
|
||||
|
||||
def getTrackVector(self):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.VIDEO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor0 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
trackDescriptor3 = TrackDescriptor(**kwargs)
|
||||
|
||||
return [trackDescriptor0,
|
||||
trackDescriptor1,
|
||||
trackDescriptor2,
|
||||
trackDescriptor3]
|
||||
|
||||
def getSubcombinations(self):
|
||||
return
|
||||
@@ -1,65 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from .track_combination import TrackCombination
|
||||
from .disposition_combination_3 import DispositionCombination3
|
||||
|
||||
|
||||
class TrackCombination3(TrackCombination):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'VASSS'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = TrackCombination3.COMBINATION_IDENTIFIER
|
||||
|
||||
def getTrackDescriptors(self, dispositionTuple):
|
||||
|
||||
self._logger.debug(f"getTrackDescriptors(): dispositionTuple={dispositionTuple}")
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.VIDEO
|
||||
trackDescriptor0 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = dispositionTuple[0]
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = dispositionTuple[1]
|
||||
trackDescriptor3 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = dispositionTuple[2]
|
||||
trackDescriptor4 = TrackDescriptor(**kwargs)
|
||||
|
||||
return [trackDescriptor0,
|
||||
trackDescriptor1,
|
||||
trackDescriptor2,
|
||||
trackDescriptor3,
|
||||
trackDescriptor4]
|
||||
|
||||
def getSubcombinations(self):
|
||||
for dci in DispositionCombination3.list():
|
||||
dispositionCombination = DispositionCombination3.getClassReference(dci)(self._context)
|
||||
dispositionTuple = dispositionCombination.getDispositionTuple() # tuple of set of dispositions
|
||||
trackDescriptors = self.getTrackDescriptors(dispositionTuple)
|
||||
evaluateFunc = dispositionCombination.evaluateTrackDescriptors # assert function
|
||||
shouldFail = dispositionCombination.shouldFail() # true if this combination should fail
|
||||
dispositionIdentifier = dispositionCombination.getIdentifier()
|
||||
yield (trackDescriptors, evaluateFunc, shouldFail, dispositionIdentifier)
|
||||
@@ -1,42 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from .track_combination import TrackCombination
|
||||
|
||||
|
||||
class TrackCombination4(TrackCombination):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'VAA'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = TrackCombination4.COMBINATION_IDENTIFIER
|
||||
|
||||
def getTrackVector(self):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.VIDEO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor0 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
return [trackDescriptor0,
|
||||
trackDescriptor1,
|
||||
trackDescriptor2]
|
||||
|
||||
def getSubcombinations(self):
|
||||
return
|
||||
@@ -1,48 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from .track_combination import TrackCombination
|
||||
|
||||
|
||||
class TrackCombination5(TrackCombination):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'VAAS'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = TrackCombination5.COMBINATION_IDENTIFIER
|
||||
|
||||
def getTrackVector(self):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.VIDEO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor0 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
trackDescriptor3 = TrackDescriptor(**kwargs)
|
||||
|
||||
return [trackDescriptor0,
|
||||
trackDescriptor1,
|
||||
trackDescriptor2,
|
||||
trackDescriptor3]
|
||||
|
||||
def getSubcombinations(self):
|
||||
return
|
||||
@@ -1,54 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from .track_combination import TrackCombination
|
||||
|
||||
|
||||
class TrackCombination6(TrackCombination):
|
||||
|
||||
COMBINATION_IDENTIFIER = 'VAASS'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = TrackCombination6.COMBINATION_IDENTIFIER
|
||||
|
||||
def getTrackVector(self):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.VIDEO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor0 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
trackDescriptor3 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
trackDescriptor4 = TrackDescriptor(**kwargs)
|
||||
|
||||
return [trackDescriptor0,
|
||||
trackDescriptor1,
|
||||
trackDescriptor2,
|
||||
trackDescriptor3,
|
||||
trackDescriptor4]
|
||||
|
||||
def getSubcombinations(self):
|
||||
return
|
||||
@@ -1,62 +0,0 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_descriptor import TrackDescriptor
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from ffx.track_type import TrackType
|
||||
|
||||
from .track_combination import TrackCombination
|
||||
|
||||
|
||||
class TrackCombination7(TrackCombination):
|
||||
"""VAASSS"""
|
||||
|
||||
COMBINATION_IDENTIFIER = 'VAASSS'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
self._combinationIdentifier = TrackCombination7.COMBINATION_IDENTIFIER
|
||||
|
||||
def getTrackVector(self):
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.VIDEO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor0 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor1 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.AUDIO
|
||||
# kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = set([TrackDisposition.DEFAULT])
|
||||
trackDescriptor2 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
trackDescriptor3 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
trackDescriptor4 = TrackDescriptor(**kwargs)
|
||||
|
||||
kwargs = {}
|
||||
kwargs[TrackDescriptor.CONTEXT_KEY] = self._context
|
||||
kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.SUBTITLE
|
||||
trackDescriptor5 = TrackDescriptor(**kwargs)
|
||||
|
||||
return [trackDescriptor0,
|
||||
trackDescriptor1,
|
||||
trackDescriptor2,
|
||||
trackDescriptor3,
|
||||
trackDescriptor4,
|
||||
trackDescriptor5]
|
||||
|
||||
def getSubcombinations(self):
|
||||
return
|
||||
33
bin/ffx/test/track_tag_combinator_2.py
Normal file
33
bin/ffx/test/track_tag_combinator_2.py
Normal file
@@ -0,0 +1,33 @@
|
||||
import os, sys, importlib, glob, inspect, itertools
|
||||
|
||||
class TrackTagCombinator2():
|
||||
|
||||
IDENTIFIER = 'trackTag2'
|
||||
|
||||
def __init__(self, context = None):
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
def getIdentifier(self):
|
||||
return TrackTagCombinator2.IDENTIFIER
|
||||
|
||||
@staticmethod
|
||||
def list():
|
||||
basePath = os.path.dirname(__file__)
|
||||
return [os.path.basename(p)[23:-3]
|
||||
for p
|
||||
in glob.glob(f"{ basePath }/track_tag_combinator_2_*.py", recursive = True)
|
||||
if p != __file__]
|
||||
|
||||
@staticmethod
|
||||
def getClassReference(identifier):
|
||||
importlib.import_module(f"ffx.test.track_tag_combinator_2_{ identifier }")
|
||||
for name, obj in inspect.getmembers(sys.modules[f"ffx.test.track_tag_combinator_2_{ identifier }"]):
|
||||
#HINT: Excluding DispositionCombination as it seems to be included by import (?)
|
||||
if inspect.isclass(obj) and name != 'TrackTagCombinator2' and name.startswith('TrackTagCombinator2'):
|
||||
return obj
|
||||
|
||||
@staticmethod
|
||||
def getAllClassReferences():
|
||||
return [TrackTagCombinator2.getClassReference(i) for i in TrackTagCombinator2.list()]
|
||||
32
bin/ffx/test/track_tag_combinator_2_0.py
Normal file
32
bin/ffx/test/track_tag_combinator_2_0.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .track_tag_combinator_2 import TrackTagCombinator2
|
||||
|
||||
|
||||
class TrackTagCombinator20(TrackTagCombinator2):
|
||||
|
||||
VARIANT = 'T00'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
|
||||
def getVariant(self):
|
||||
return TrackTagCombinator20.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return ({}, # 0
|
||||
{}) # 1
|
||||
|
||||
def assertFunc(self, trackDescriptors):
|
||||
|
||||
resortedTrackDescriptors = sorted(trackDescriptors, key=lambda d: d.getSourceIndex())
|
||||
|
||||
assert not '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 set language tag"
|
||||
assert not '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 set title tag"
|
||||
|
||||
assert not '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 set language tag"
|
||||
assert not '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 set title tag"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
34
bin/ffx/test/track_tag_combinator_2_1.py
Normal file
34
bin/ffx/test/track_tag_combinator_2_1.py
Normal file
@@ -0,0 +1,34 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .track_tag_combinator_2 import TrackTagCombinator2
|
||||
|
||||
|
||||
class TrackTagCombinator21(TrackTagCombinator2):
|
||||
|
||||
VARIANT = 'T10'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
|
||||
def getVariant(self):
|
||||
return TrackTagCombinator21.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return ({'language': 'fra', 'title': 'Französisch'}, # 0
|
||||
{}) # 1
|
||||
|
||||
def assertFunc(self, trackDescriptors):
|
||||
|
||||
resortedTrackDescriptors = sorted(trackDescriptors, key=lambda d: d.getSourceIndex())
|
||||
|
||||
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"
|
||||
assert resortedTrackDescriptors[0].getTags()['language'] == 'fra', f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'fra'"
|
||||
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"
|
||||
assert resortedTrackDescriptors[0].getTags()['title'] == 'Französisch', f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Französisch'"
|
||||
|
||||
assert not '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 set language tag"
|
||||
assert not '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 set title tag"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
35
bin/ffx/test/track_tag_combinator_2_2.py
Normal file
35
bin/ffx/test/track_tag_combinator_2_2.py
Normal file
@@ -0,0 +1,35 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .track_tag_combinator_2 import TrackTagCombinator2
|
||||
|
||||
|
||||
class TrackTagCombinator21(TrackTagCombinator2):
|
||||
|
||||
VARIANT = 'T01'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
|
||||
def getVariant(self):
|
||||
return TrackTagCombinator21.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return ({}, # 0
|
||||
{'language': 'bas', 'title': 'Baskisch'}) # 1
|
||||
|
||||
def assertFunc(self, trackDescriptors):
|
||||
|
||||
resortedTrackDescriptors = sorted(trackDescriptors, key=lambda d: d.getSourceIndex())
|
||||
|
||||
assert not '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 set language tag"
|
||||
assert not '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 set title tag"
|
||||
|
||||
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"
|
||||
assert resortedTrackDescriptors[1].getTags()['language'] == 'bas', f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'bas'"
|
||||
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"
|
||||
assert resortedTrackDescriptors[1].getTags()['title'] == 'Baskisch', f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Baskisch'"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
|
||||
37
bin/ffx/test/track_tag_combinator_2_3.py
Normal file
37
bin/ffx/test/track_tag_combinator_2_3.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .track_tag_combinator_2 import TrackTagCombinator2
|
||||
|
||||
|
||||
class TrackTagCombinator23(TrackTagCombinator2):
|
||||
|
||||
VARIANT = 'T11'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
|
||||
def getVariant(self):
|
||||
return TrackTagCombinator23.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return ({'language': 'deu', 'title': 'Deutsch'}, # 0
|
||||
{'language': 'jpn', 'title': 'Japanisch'}) # 1
|
||||
|
||||
def assertFunc(self, trackDescriptors):
|
||||
|
||||
resortedTrackDescriptors = sorted(trackDescriptors, key=lambda d: d.getSourceIndex())
|
||||
|
||||
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"
|
||||
assert resortedTrackDescriptors[0].getTags()['language'] == 'deu', f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'deu'"
|
||||
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"
|
||||
assert resortedTrackDescriptors[0].getTags()['title'] == 'Deutsch', f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Deutsch'"
|
||||
|
||||
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"
|
||||
assert resortedTrackDescriptors[1].getTags()['language'] == 'jpn', f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'jpn'"
|
||||
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"
|
||||
assert resortedTrackDescriptors[1].getTags()['title'] == 'Japanisch', f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Japanisch'"
|
||||
|
||||
|
||||
def shouldFail(self):
|
||||
return True
|
||||
33
bin/ffx/test/track_tag_combinator_3.py
Normal file
33
bin/ffx/test/track_tag_combinator_3.py
Normal file
@@ -0,0 +1,33 @@
|
||||
import os, sys, importlib, glob, inspect, itertools
|
||||
|
||||
class TrackTagCombinator3():
|
||||
|
||||
IDENTIFIER = 'trackTag3'
|
||||
|
||||
def __init__(self, context = None):
|
||||
self._context = context
|
||||
self._logger = context['logger']
|
||||
self._reportLogger = context['report_logger']
|
||||
|
||||
def getIdentifier(self):
|
||||
return TrackTagCombinator3.IDENTIFIER
|
||||
|
||||
@staticmethod
|
||||
def list():
|
||||
basePath = os.path.dirname(__file__)
|
||||
return [os.path.basename(p)[23:-3]
|
||||
for p
|
||||
in glob.glob(f"{ basePath }/track_tag_combinator_3_*.py", recursive = True)
|
||||
if p != __file__]
|
||||
|
||||
@staticmethod
|
||||
def getClassReference(identifier):
|
||||
importlib.import_module(f"ffx.test.track_tag_combinator_3_{ identifier }")
|
||||
for name, obj in inspect.getmembers(sys.modules[f"ffx.test.track_tag_combinator_3_{ identifier }"]):
|
||||
#HINT: Excluding DispositionCombination as it seems to be included by import (?)
|
||||
if inspect.isclass(obj) and name != 'TrackTagCombinator3' and name.startswith('TrackTagCombinator3'):
|
||||
return obj
|
||||
|
||||
@staticmethod
|
||||
def getAllClassReferences():
|
||||
return [TrackTagCombinator3.getClassReference(i) for i in TrackTagCombinator3.list()]
|
||||
36
bin/ffx/test/track_tag_combinator_3_0.py
Normal file
36
bin/ffx/test/track_tag_combinator_3_0.py
Normal file
@@ -0,0 +1,36 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .track_tag_combinator_3 import TrackTagCombinator3
|
||||
|
||||
|
||||
class TrackTagCombinator30(TrackTagCombinator3):
|
||||
|
||||
VARIANT = 'T000'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
|
||||
def getVariant(self):
|
||||
return TrackTagCombinator30.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return ({}, # 0
|
||||
{}, # 1
|
||||
{}) # 2
|
||||
|
||||
def assertFunc(self, trackDescriptors):
|
||||
|
||||
resortedTrackDescriptors = sorted(trackDescriptors, key=lambda d: d.getSourceIndex())
|
||||
|
||||
assert not '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 set language tag"
|
||||
assert not '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 set title tag"
|
||||
|
||||
assert not 'language' in resortedTrackDescriptors[1].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[1].getSubIndex()}] has set language tag"
|
||||
assert not 'title' in resortedTrackDescriptors[1].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[1].getSubIndex()}] has set title tag"
|
||||
|
||||
assert not 'language' in resortedTrackDescriptors[2].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[2].getSubIndex()}] has set language tag"
|
||||
assert not 'title' in resortedTrackDescriptors[2].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[2].getSubIndex()}] has set title tag"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
38
bin/ffx/test/track_tag_combinator_3_1.py
Normal file
38
bin/ffx/test/track_tag_combinator_3_1.py
Normal file
@@ -0,0 +1,38 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .track_tag_combinator_3 import TrackTagCombinator3
|
||||
|
||||
|
||||
class TrackTagCombinator31(TrackTagCombinator3):
|
||||
|
||||
VARIANT = 'T100'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
|
||||
def getVariant(self):
|
||||
return TrackTagCombinator31.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return ({'language': 'fra', 'title': 'Französisch'}, # 0
|
||||
{}, # 1
|
||||
{}) # 2
|
||||
|
||||
def assertFunc(self, trackDescriptors):
|
||||
|
||||
resortedTrackDescriptors = sorted(trackDescriptors, key=lambda d: d.getSourceIndex())
|
||||
|
||||
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"
|
||||
assert resortedTrackDescriptors[0].getTags()['language'] == 'fra', f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'fra'"
|
||||
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"
|
||||
assert resortedTrackDescriptors[0].getTags()['title'] == 'Französisch', f"Stream src_index={resortedTrackDescriptors[0].getSourceIndex()} index={resortedTrackDescriptors[0].getIndex()} [{resortedTrackDescriptors[0].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Französisch'"
|
||||
|
||||
assert not 'language' in resortedTrackDescriptors[1].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[1].getSubIndex()}] has set language tag"
|
||||
assert not 'title' in resortedTrackDescriptors[1].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[1].getSubIndex()}] has set title tag"
|
||||
|
||||
assert not 'language' in resortedTrackDescriptors[2].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[2].getSubIndex()}] has set language tag"
|
||||
assert not 'title' in resortedTrackDescriptors[2].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[2].getSubIndex()}] has set title tag"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
39
bin/ffx/test/track_tag_combinator_3_2.py
Normal file
39
bin/ffx/test/track_tag_combinator_3_2.py
Normal file
@@ -0,0 +1,39 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .track_tag_combinator_3 import TrackTagCombinator3
|
||||
|
||||
|
||||
class TrackTagCombinator32(TrackTagCombinator3):
|
||||
|
||||
VARIANT = 'T010'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
|
||||
|
||||
def getVariant(self):
|
||||
return TrackTagCombinator32.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return ({}, # 0
|
||||
{'language': 'bas', 'title': 'Baskisch'}, # 1
|
||||
{}) # 2
|
||||
|
||||
def assertFunc(self, trackDescriptors):
|
||||
|
||||
resortedTrackDescriptors = sorted(trackDescriptors, key=lambda d: d.getSourceIndex())
|
||||
|
||||
assert not '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 set language tag"
|
||||
assert not '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 set title tag"
|
||||
|
||||
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"
|
||||
assert resortedTrackDescriptors[1].getTags()['language'] == 'bas', f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set language tag 'bas'"
|
||||
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"
|
||||
assert resortedTrackDescriptors[1].getTags()['title'] == 'Baskisch', f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[0].getSubIndex()}] has not set title 'Baskisch'"
|
||||
|
||||
assert not 'language' in resortedTrackDescriptors[2].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[2].getSubIndex()}] has set language tag"
|
||||
assert not 'title' in resortedTrackDescriptors[2].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[2].getSourceIndex()} index={resortedTrackDescriptors[2].getIndex()} [{resortedTrackDescriptors[2].getType().label()}:{resortedTrackDescriptors[2].getSubIndex()}] has set title tag"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
38
bin/ffx/test/track_tag_combinator_3_3.py
Normal file
38
bin/ffx/test/track_tag_combinator_3_3.py
Normal file
@@ -0,0 +1,38 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .track_tag_combinator_3 import TrackTagCombinator3
|
||||
|
||||
|
||||
class TrackTagCombinator33(TrackTagCombinator3):
|
||||
|
||||
VARIANT = 'T001'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
|
||||
def getVariant(self):
|
||||
return TrackTagCombinator33.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return ({}, # 0
|
||||
{}, # 1
|
||||
{'language': 'eng', 'title': 'English'}) # 2
|
||||
|
||||
def assertFunc(self, trackDescriptors):
|
||||
|
||||
resortedTrackDescriptors = sorted(trackDescriptors, key=lambda d: d.getSourceIndex())
|
||||
|
||||
assert not '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 set language tag"
|
||||
assert not '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 set title tag"
|
||||
|
||||
assert not 'language' in resortedTrackDescriptors[1].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[1].getSubIndex()}] has set language tag"
|
||||
assert not 'title' in resortedTrackDescriptors[1].getTags().keys(), f"Stream src_index={resortedTrackDescriptors[1].getSourceIndex()} index={resortedTrackDescriptors[1].getIndex()} [{resortedTrackDescriptors[1].getType().label()}:{resortedTrackDescriptors[1].getSubIndex()}] has set title tag"
|
||||
|
||||
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"
|
||||
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'"
|
||||
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"
|
||||
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'"
|
||||
|
||||
def shouldFail(self):
|
||||
return False
|
||||
42
bin/ffx/test/track_tag_combinator_3_4.py
Normal file
42
bin/ffx/test/track_tag_combinator_3_4.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import os, sys, importlib, glob, inspect
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
from .track_tag_combinator_3 import TrackTagCombinator3
|
||||
|
||||
|
||||
class TrackTagCombinator34(TrackTagCombinator3):
|
||||
|
||||
VARIANT = 'T111'
|
||||
|
||||
def __init__(self, context):
|
||||
super().__init__(context)
|
||||
|
||||
def getVariant(self):
|
||||
return TrackTagCombinator34.VARIANT
|
||||
|
||||
def getPayload(self):
|
||||
return ({'language': 'jpn', 'title': 'Japanisch'}, # 0
|
||||
{'language': 'deu', 'title': 'Deutsch'}, # 1
|
||||
{'language': 'eng', 'title': 'English'}) # 2
|
||||
|
||||
def assertFunc(self, trackDescriptors):
|
||||
|
||||
resortedTrackDescriptors = sorted(trackDescriptors, key=lambda d: d.getSourceIndex())
|
||||
|
||||
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"
|
||||
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'"
|
||||
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"
|
||||
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 '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"
|
||||
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'"
|
||||
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"
|
||||
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 '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"
|
||||
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'"
|
||||
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"
|
||||
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'"
|
||||
|
||||
def shouldFail(self):
|
||||
return True
|
||||
@@ -83,7 +83,7 @@ def run(ctx):
|
||||
|
||||
scenario = Scenario.getClassReference(scenarioIdentifier)(ctx.obj)
|
||||
|
||||
ctx.obj['logger'].info(f"Running scenario {scenarioIdentifier}")
|
||||
ctx.obj['logger'].debug(f"Running scenario {scenarioIdentifier}")
|
||||
|
||||
scenario.run()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user