Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_repr_default():
subs = SSAFile()
ref = ""
assert repr(subs) == ref
def test_simple_write():
subs = SSAFile()
e1 = SSAEvent()
e1.start = 0
e1.end = 60000
e1.text = "An example subtitle."
e2 = SSAEvent()
e2.start = 60000
e2.end = 120000
e2.text = "Subtitle number\\Ntwo."
e3 = SSAEvent()
e3.start = 60000
e3.end = 120000
e3.text = "Invisible subtitle."
e3.is_comment = True
def build_ref():
subs = SSAFile()
subs.info["My Custom Info"] = "Some: Test, String."
subs.styles["left"] = SSAStyle(alignment=7, bold=True)
subs.styles["topleft"] = SSAStyle(alignment=4)
subs.append(SSAEvent(start=0, end=make_time(m=1), text="An, example, subtitle."))
subs.append(SSAEvent(start=0, end=make_time(m=1), type="Comment", text="You can't see this one."))
subs.append(SSAEvent(start=make_time(m=1), end=make_time(m=2), text="Subtitle number\\Ntwo."))
return subs
def build(self, **extra):
from pysubs2 import SSAFile, SSAEvent, Color # type: ignore[import]
millis = lambda td: td / timedelta(milliseconds=1)
subs = (
SSAEvent(
start=millis(t - self.start),
end =millis(t - self.start + timedelta(seconds=length)),
text=text.replace('\n', r'\N'), # \N necessary for SSA files
) for t, text, length in self.l
)
sf = SSAFile()
style = sf.styles['Default'].copy()
style.fontsize = 16 # default is 20, bit too much??
style.outlinecolor = Color(0, 0, 0, 50) # semitransparent
style.shadow = 0.0
style.outline = 0.1
style.borderstyle = 3 # no idea why 3, but it makes the background apperar in conjunction with outline
for k, v in extra.items():
setattr(style, k, v)
sf.styles['Default'] = style
for s in subs:
sf.append(s)
return sf.to_string('ass')
def test_import_styles():
red1 = SSAStyle()
red2 = SSAStyle()
green = SSAStyle()
subs1 = SSAFile()
subs2 = SSAFile()
def prepare():
subs1.styles = {}
subs2.styles = {}
subs1.styles["green"] = green
subs1.styles["red"] = red1
subs2.styles["red"] = red2
prepare()
subs2.import_styles(subs1)
assert subs2.styles["green"] is green
assert subs2.styles["red"] is red1
prepare()
subs2.import_styles(subs1, overwrite=False)
def test_read_position_styling():
"""position is ignored, italic is converted, color is ignored"""
text = dedent("""\
1
00:00:10,500 --> 00:00:13,000 X1:63 X2:223 Y1:43 Y2:58
<i>Elephant's Dream</i>
2
00:00:15,000 --> 00:00:18,000 X1:53 X2:303 Y1:438 Y2:453
<font color="cyan">At the left we can see...</font>
""")
ref = SSAFile()
ref.append(SSAEvent(start=make_time(s=10.5), end=make_time(s=13), text="{\\i1}Elephant's Dream{\\i0}"))
ref.append(SSAEvent(start=make_time(s=15), end=make_time(s=18), text="At the left we can see..."))
subs = SSAFile.from_string(text)
assert subs.equals(ref)
assert subs1[0] == SSAEvent(start=make_time(ms=12300), end=make_time(ms=45600), text="Line 1")
test_input2 = "[123][456] / Line 1| Line 2/2"
subs2 = SSAFile.from_string(test_input2)
assert len(subs2) == 1
assert subs2[0] == SSAEvent(start=make_time(ms=12300), end=make_time(ms=45600), text="{\i1}Line 1{\i0}\\NLine2/2")
test_input3 = dedent("""
[123][456] Line 1
[321][456] / Line 2| Line 3
(123)(456)This line should not be parsed
This line should also not be parsed
[789][1234] /Line 4""")
subs3 = SSAFile.from_string(test_input3)
assert len(subs3) == 3
assert subs3[0] == SSAEvent(start=make_time(ms=12300), end=make_time(ms=45600), text="Line 1")
assert subs3[1] == SSAEvent(start=make_time(ms=32100), end=make_time(ms=45600), text="{\i1}Line 2{\i0}\\NLine 3")
assert subs3[2] == SSAEvent(start=make_time(ms=78900), end=make_time(ms=123400), text="{\i1}Line 4{\i0}")
def test_read_bad_tags():
"""missing opening/closing tag, bad nesting, extra whitespace"""
text = dedent("""\
1
00:00:10,500 --> 00:00:13,000
< u><i><font color="red">Elephant's < s>Dream< / i > Is Long And Badly Nested
""")
ref = SSAFile()
ref.append(SSAEvent(start=make_time(s=10.5), end=make_time(s=13), text="{\\u1}{\\i1}Elephant's {\\s1}Dream{\\i0} Is Long{\\s0} And Badly Nested"))
subs = SSAFile.from_string(text)
assert subs.equals(ref)
</font></i>