1
- # type: ignore
2
1
from __future__ import annotations
3
2
4
3
import os
5
4
import shutil
6
5
import subprocess
7
6
import sys
8
- from collections .abc import Callable
9
7
from dataclasses import dataclass , field
10
8
from fractions import Fraction
11
9
from time import perf_counter
12
- from typing import Any
10
+ from typing import TYPE_CHECKING
13
11
14
12
import numpy as np
15
13
20
18
from auto_editor .utils .log import Log
21
19
from auto_editor .vanparse import ArgumentParser
22
20
21
+ if TYPE_CHECKING :
22
+ from collections .abc import Callable
23
+ from typing import Any
24
+
25
+ from auto_editor .vanparse import ArgumentParser
26
+
23
27
24
28
@dataclass (slots = True )
25
29
class TestArgs :
@@ -29,7 +33,7 @@ class TestArgs:
29
33
category : str = "cli"
30
34
31
35
32
- def test_options (parser ) :
36
+ def test_options (parser : ArgumentParser ) -> ArgumentParser :
33
37
parser .add_argument ("--only" , "-n" , nargs = "*" )
34
38
parser .add_argument ("--no-fail-fast" , flag = True )
35
39
parser .add_required (
@@ -47,14 +51,6 @@ def pipe_to_console(cmd: list[str]) -> tuple[int, str, str]:
47
51
return process .returncode , stdout .decode ("utf-8" ), stderr .decode ("utf-8" )
48
52
49
53
50
- class Checker :
51
- def __init__ (self , log : Log ):
52
- self .log = log
53
-
54
- def check (self , path : str ) -> FileInfo :
55
- return initFileInfo (path , self .log )
56
-
57
-
58
54
class Runner :
59
55
def __init__ (self ) -> None :
60
56
self .program = [sys .executable , "-m" , "auto_editor" ]
@@ -176,7 +172,10 @@ def main(sys_args: list[str] | None = None):
176
172
args = test_options (ArgumentParser ("test" )).parse_args (TestArgs , sys_args )
177
173
178
174
run = Runner ()
179
- checker = Checker (Log ())
175
+ log = Log ()
176
+
177
+ def fileinfo (path : str ) -> FileInfo :
178
+ return initFileInfo (path , log )
180
179
181
180
### Tests ###
182
181
@@ -229,7 +228,7 @@ def desc():
229
228
230
229
def example ():
231
230
out = run .main (inputs = ["example.mp4" ], cmd = [])
232
- cn = checker . check (out )
231
+ cn = fileinfo (out )
233
232
video = cn .videos [0 ]
234
233
235
234
assert video .fps == 30
@@ -295,7 +294,7 @@ def gif():
295
294
out = run .main (
296
295
["resources/only-video/man-on-green-screen.gif" ], ["--edit" , "none" ]
297
296
)
298
- assert checker . check (out ).videos [0 ].codec == "gif"
297
+ assert fileinfo (out ).videos [0 ].codec == "gif"
299
298
300
299
return out
301
300
@@ -319,11 +318,11 @@ def output_extension():
319
318
out = run .main (inputs = ["example.mp4" ], cmd = [], output = "out" )
320
319
321
320
assert out == "out.mp4"
322
- assert checker . check (out ).videos [0 ].codec == "h264"
321
+ assert fileinfo (out ).videos [0 ].codec == "h264"
323
322
324
323
out = run .main (inputs = ["resources/testsrc.mkv" ], cmd = [], output = "out" )
325
324
assert out == "out.mkv"
326
- assert checker . check (out ).videos [0 ].codec == "h264"
325
+ assert fileinfo (out ).videos [0 ].codec == "h264"
327
326
328
327
return "out.mp4" , "out.mkv"
329
328
@@ -357,22 +356,22 @@ def premiere_named_export():
357
356
run .main (["example.mp4" ], ["--export" , 'premiere:name="Foo Bar"' ])
358
357
359
358
def resolution_and_scale ():
360
- cn = checker . check (run .main (["example.mp4" ], ["--scale" , "1.5" ]))
359
+ cn = fileinfo (run .main (["example.mp4" ], ["--scale" , "1.5" ]))
361
360
362
361
assert cn .videos [0 ].fps == 30
363
362
assert cn .videos [0 ].width == 1920
364
363
assert cn .videos [0 ].height == 1080
365
364
assert cn .audios [0 ].samplerate == 48000
366
365
367
- cn = checker . check (run .main (["example.mp4" ], ["--scale" , "0.2" ]))
366
+ cn = fileinfo (run .main (["example.mp4" ], ["--scale" , "0.2" ]))
368
367
369
368
assert cn .videos [0 ].fps == 30
370
369
assert cn .videos [0 ].width == 256
371
370
assert cn .videos [0 ].height == 144
372
371
assert cn .audios [0 ].samplerate == 48000
373
372
374
373
out = run .main (["example.mp4" ], ["-res" , "700,380" , "-b" , "darkgreen" ])
375
- cn = checker . check (out )
374
+ cn = fileinfo (out )
376
375
377
376
assert cn .videos [0 ].fps == 30
378
377
assert cn .videos [0 ].width == 700
@@ -416,7 +415,7 @@ def multi_track_edit():
416
415
["--edit" , "audio:stream=1" ],
417
416
"out.mov" ,
418
417
)
419
- assert len (checker . check (out ).audios ) == 1
418
+ assert len (fileinfo (out ).audios ) == 1
420
419
421
420
return out
422
421
@@ -427,7 +426,7 @@ def concat():
427
426
428
427
def concat_mux_tracks ():
429
428
out = run .main (["example.mp4" , "resources/multi-track.mov" ], [], "out.mov" )
430
- assert len (checker . check (out ).audios ) == 1
429
+ assert len (fileinfo (out ).audios ) == 1
431
430
432
431
return out
433
432
@@ -437,30 +436,30 @@ def concat_multiple_tracks():
437
436
["--keep-tracks-separate" ],
438
437
"out.mov" ,
439
438
)
440
- assert len (checker . check (out ).audios ) == 2
439
+ assert len (fileinfo (out ).audios ) == 2
441
440
out = run .main (
442
441
["example.mp4" , "resources/multi-track.mov" ],
443
442
["--keep-tracks-separate" ],
444
443
"out.mov" ,
445
444
)
446
- assert len (checker . check (out ).audios ) == 2
445
+ assert len (fileinfo (out ).audios ) == 2
447
446
448
447
return out
449
448
450
449
def frame_rate ():
451
- cn = checker . check (run .main (["example.mp4" ], ["-r" , "15" , "--no-seek" ]))
450
+ cn = fileinfo (run .main (["example.mp4" ], ["-r" , "15" , "--no-seek" ]))
452
451
video = cn .videos [0 ]
453
452
assert video .fps == 15
454
453
assert video .time_base == Fraction (1 , 15 )
455
454
assert float (video .duration ) - 17.33333333333333333333333 < 3
456
455
457
- cn = checker . check (run .main (["example.mp4" ], ["-r" , "20" ]))
456
+ cn = fileinfo (run .main (["example.mp4" ], ["-r" , "20" ]))
458
457
video = cn .videos [0 ]
459
458
assert video .fps == 20
460
459
assert video .time_base == Fraction (1 , 20 )
461
460
assert float (video .duration ) - 17.33333333333333333333333 < 2
462
461
463
- cn = checker . check (out := run .main (["example.mp4" ], ["-r" , "60" ]))
462
+ cn = fileinfo (out := run .main (["example.mp4" ], ["-r" , "60" ]))
464
463
video = cn .videos [0 ]
465
464
466
465
assert video .fps == 60
@@ -471,22 +470,22 @@ def frame_rate():
471
470
472
471
def embedded_image ():
473
472
out1 = run .main (["resources/embedded-image/h264-png.mp4" ], [])
474
- cn = checker . check (out1 )
473
+ cn = fileinfo (out1 )
475
474
assert cn .videos [0 ].codec == "h264"
476
475
assert cn .videos [1 ].codec == "png"
477
476
478
477
out2 = run .main (["resources/embedded-image/h264-mjpeg.mp4" ], [])
479
- cn = checker . check (out2 )
478
+ cn = fileinfo (out2 )
480
479
assert cn .videos [0 ].codec == "h264"
481
480
assert cn .videos [1 ].codec == "mjpeg"
482
481
483
482
out3 = run .main (["resources/embedded-image/h264-png.mkv" ], [])
484
- cn = checker . check (out3 )
483
+ cn = fileinfo (out3 )
485
484
assert cn .videos [0 ].codec == "h264"
486
485
assert cn .videos [1 ].codec == "png"
487
486
488
487
out4 = run .main (["resources/embedded-image/h264-mjpeg.mkv" ], [])
489
- cn = checker . check (out4 )
488
+ cn = fileinfo (out4 )
490
489
assert cn .videos [0 ].codec == "h264"
491
490
assert cn .videos [1 ].codec == "mjpeg"
492
491
@@ -532,7 +531,7 @@ def yuv442p():
532
531
# Issue 280
533
532
def SAR ():
534
533
out = run .main (["resources/SAR-2by3.mp4" ], [])
535
- assert checker . check (out ).videos [0 ].sar == Fraction (2 , 3 )
534
+ assert fileinfo (out ).videos [0 ].sar == Fraction (2 , 3 )
536
535
537
536
return out
538
537
0 commit comments