@@ -101,7 +101,7 @@ def test_stream_repr():
101101    assert  repr (dummy_out ) ==  'dummy()[{!r}] <{}>' .format (dummy_out .label , dummy_out .node .short_hash )
102102
103103
104- def  test_get_args_simple ():
104+ def  test__get_args__simple ():
105105    out_file  =  ffmpeg .input ('dummy.mp4' ).output ('dummy2.mp4' )
106106    assert  out_file .get_args () ==  ['-i' , 'dummy.mp4' , 'dummy2.mp4' ]
107107
@@ -111,6 +111,10 @@ def test_global_args():
111111    assert  out_file .get_args () ==  ['-i' , 'dummy.mp4' , 'dummy2.mp4' , '-progress' , 'someurl' ]
112112
113113
114+ def  _get_simple_example ():
115+     return  ffmpeg .input (TEST_INPUT_FILE1 ).output (TEST_OUTPUT_FILE1 )
116+ 
117+ 
114118def  _get_complex_filter_example ():
115119    split  =  (ffmpeg 
116120        .input (TEST_INPUT_FILE1 )
@@ -134,7 +138,7 @@ def _get_complex_filter_example():
134138    )
135139
136140
137- def  test_get_args_complex_filter ():
141+ def  test__get_args__complex_filter ():
138142    out  =  _get_complex_filter_example ()
139143    args  =  ffmpeg .get_args (out )
140144    assert  args  ==  ['-i' , TEST_INPUT_FILE1 ,
@@ -305,41 +309,81 @@ def _get_drawtext_text_repr(text):
305309#    subprocess.check_call(['ffmpeg', '-version']) 
306310
307311
308- def  test_compile ():
312+ def  test__compile ():
309313    out_file  =  ffmpeg .input ('dummy.mp4' ).output ('dummy2.mp4' )
310314    assert  out_file .compile () ==  ['ffmpeg' , '-i' , 'dummy.mp4' , 'dummy2.mp4' ]
311315    assert  out_file .compile (cmd = 'ffmpeg.old' ) ==  ['ffmpeg.old' , '-i' , 'dummy.mp4' , 'dummy2.mp4' ]
312316
313317
314- def  test_run ():
318+ def  test__run ():
315319    stream  =  _get_complex_filter_example ()
316-     ffmpeg .run (stream )
317- 
318- 
319- def  test_run_multi_output ():
320+     out , err  =  ffmpeg .run (stream )
321+     assert  out  is  None 
322+     assert  err  is  None 
323+ 
324+ 
325+ @pytest .mark .parametrize ('capture_stdout' , [True , False ]) 
326+ @pytest .mark .parametrize ('capture_stderr' , [True , False ]) 
327+ def  test__run__capture_out (mocker , capture_stdout , capture_stderr ):
328+     mocker .patch .object (ffmpeg ._run , 'compile' , return_value = ['echo' , 'test' ])
329+     stream  =  _get_simple_example ()
330+     out , err  =  ffmpeg .run (stream , capture_stdout = capture_stdout , capture_stderr = capture_stderr )
331+     if  capture_stdout :
332+         assert  out  ==  'test\n ' .encode ()
333+     else :
334+         assert  out  is  None 
335+     if  capture_stderr :
336+         assert  err  ==  '' .encode ()
337+     else :
338+         assert  err  is  None 
339+ 
340+ 
341+ def  test__run__input_output (mocker ):
342+     mocker .patch .object (ffmpeg ._run , 'compile' , return_value = ['cat' ])
343+     stream  =  _get_simple_example ()
344+     out , err  =  ffmpeg .run (stream , input = 'test' .encode (), capture_stdout = True )
345+     assert  out  ==  'test' .encode ()
346+     assert  err  is  None 
347+ 
348+ 
349+ @pytest .mark .parametrize ('capture_stdout' , [True , False ]) 
350+ @pytest .mark .parametrize ('capture_stderr' , [True , False ]) 
351+ def  test__run__error (mocker , capture_stdout , capture_stderr ):
352+     mocker .patch .object (ffmpeg ._run , 'compile' , return_value = ['ffmpeg' ])
353+     stream  =  _get_complex_filter_example ()
354+     with  pytest .raises (ffmpeg .Error ) as  excinfo :
355+         out , err  =  ffmpeg .run (stream , capture_stdout = capture_stdout , capture_stderr = capture_stderr )
356+     assert  str (excinfo .value ) ==  'ffmpeg error (see stderr output for detail)' 
357+     out  =  excinfo .value .stdout 
358+     err  =  excinfo .value .stderr 
359+     if  capture_stdout :
360+         assert  out  ==  '' .encode ()
361+     else :
362+         assert  out  is  None 
363+     if  capture_stderr :
364+         assert  err .decode ().startswith ('ffmpeg version' )
365+     else :
366+         assert  err  is  None 
367+ 
368+ 
369+ def  test__run__multi_output ():
320370    in_  =  ffmpeg .input (TEST_INPUT_FILE1 )
321371    out1  =  in_ .output (TEST_OUTPUT_FILE1 )
322372    out2  =  in_ .output (TEST_OUTPUT_FILE2 )
323373    ffmpeg .run ([out1 , out2 ], overwrite_output = True )
324374
325375
326- def  test_run_dummy_cmd ():
376+ def  test__run__dummy_cmd ():
327377    stream  =  _get_complex_filter_example ()
328378    ffmpeg .run (stream , cmd = 'true' )
329379
330380
331- def  test_run_dummy_cmd_list ():
381+ def  test__run__dummy_cmd_list ():
332382    stream  =  _get_complex_filter_example ()
333383    ffmpeg .run (stream , cmd = ['true' , 'ignored' ])
334384
335385
336- def  test_run_failing_cmd ():
337-     stream  =  _get_complex_filter_example ()
338-     with  pytest .raises (subprocess .CalledProcessError ):
339-         ffmpeg .run (stream , cmd = 'false' )
340- 
341- 
342- def  test_custom_filter ():
386+ def  test__filter__custom ():
343387    stream  =  ffmpeg .input ('dummy.mp4' )
344388    stream  =  ffmpeg .filter_ (stream , 'custom_filter' , 'a' , 'b' , kwarg1 = 'c' )
345389    stream  =  ffmpeg .output (stream , 'dummy2.mp4' )
@@ -351,7 +395,7 @@ def test_custom_filter():
351395    ]
352396
353397
354- def  test_custom_filter_fluent ():
398+ def  test__filter__custom_fluent ():
355399    stream  =  (ffmpeg 
356400        .input ('dummy.mp4' )
357401        .filter_ ('custom_filter' , 'a' , 'b' , kwarg1 = 'c' )
@@ -365,7 +409,7 @@ def test_custom_filter_fluent():
365409    ]
366410
367411
368- def  test_merge_outputs ():
412+ def  test__merge_outputs ():
369413    in_  =  ffmpeg .input ('in.mp4' )
370414    out1  =  in_ .output ('out1.mp4' )
371415    out2  =  in_ .output ('out2.mp4' )
@@ -441,14 +485,14 @@ def test_pipe():
441485    assert  out_data  ==  in_data [start_frame * frame_size :]
442486
443487
444- def  test_ffprobe ():
488+ def  test__probe ():
445489    data  =  ffmpeg .probe (TEST_INPUT_FILE1 )
446490    assert  set (data .keys ()) ==  {'format' , 'streams' }
447491    assert  data ['format' ]['duration' ] ==  '7.036000' 
448492
449493
450- def  test_ffprobe_exception ():
451-     with  pytest .raises (ffmpeg .ProbeException ) as  excinfo :
494+ def  test__probe__exception ():
495+     with  pytest .raises (ffmpeg .Error ) as  excinfo :
452496        ffmpeg .probe (BOGUS_INPUT_FILE )
453-     assert  str (excinfo .value ) ==  'ffprobe error' 
454-     assert  b 'No such file or directory'  in  excinfo .value .stderr_output 
497+     assert  str (excinfo .value ) ==  'ffprobe error (see stderr output for detail) ' 
498+     assert  'No such file or directory' . encode ()  in  excinfo .value .stderr 
0 commit comments