test_forge.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. from datetime import datetime, timedelta
  2. from nose.tools import raises, eq_
  3. from forge import get_files_and_intervals, get_timefile_exact, round_timefile,\
  4. get_timefile, mp3_join
  5. from config_manager import get_config
  6. eight = datetime(2014, 5, 30, 20)
  7. nine = datetime(2014, 5, 30, 21)
  8. ten = datetime(2014, 5, 30, 22)
  9. get_config()['AUDIO_INPUT'] = ''
  10. get_config()['AUDIO_INPUT_FORMAT'] = '%Y-%m/%d/%Y-%m-%d-%H-%M-%S.mp3'
  11. get_config()['FFMPEG_PATH'] = 'ffmpeg'
  12. get_config()['FFMPEG_OUT_CODEC'] = ['-acodec', 'copy']
  13. def minutes(n):
  14. return timedelta(minutes=n)
  15. def seconds(n):
  16. return timedelta(seconds=n)
  17. # timefile
  18. def test_timefile_exact():
  19. eq_(get_timefile_exact(eight),
  20. '2014-05/30/2014-05-30-20-00-00.mp3')
  21. # Rounding
  22. def test_rounding_similarity():
  23. eq_(round_timefile(eight), round_timefile(eight+minutes(20)))
  24. assert round_timefile(eight) != round_timefile(nine)
  25. def test_rounding_value():
  26. eq_(round_timefile(eight), eight)
  27. eq_(round_timefile(eight + minutes(20)), eight)
  28. # Rounding + timefile
  29. def test_timefile_alreadyround():
  30. eq_(get_timefile(eight),
  31. '2014-05/30/2014-05-30-20-00-00.mp3')
  32. def test_timefile_toround():
  33. eq_(get_timefile(eight + minutes(20)),
  34. '2014-05/30/2014-05-30-20-00-00.mp3')
  35. # Intervals
  36. @raises(ValueError)
  37. def test_intervals_same():
  38. tuple(get_files_and_intervals(eight, eight))
  39. @raises(ValueError)
  40. def test_intervals_before():
  41. tuple(get_files_and_intervals(nine, eight))
  42. def test_intervals_full_1():
  43. res = list(get_files_and_intervals(eight, nine-seconds(1)))
  44. eq_(len(res), 1)
  45. eq_(res[0][1], 0)
  46. eq_(res[0][2], 0)
  47. def test_intervals_partial_1():
  48. res = list(get_files_and_intervals(eight, nine-minutes(10)))
  49. eq_(len(res), 1)
  50. eq_(res[0][1], 0)
  51. eq_(res[0][2], 10*60 - 1)
  52. def test_intervals_exact_2():
  53. res = list(get_files_and_intervals(eight, nine))
  54. eq_(len(res), 2)
  55. eq_(res[0][1], 0)
  56. eq_(res[0][2], 0)
  57. eq_(res[1][1], 0)
  58. eq_(res[1][2], 3599)
  59. def test_intervals_partial_2():
  60. res = list(get_files_and_intervals(eight, nine + minutes(50)))
  61. eq_(len(res), 2)
  62. eq_(res[0][1], 0)
  63. eq_(res[0][2], 0)
  64. eq_(res[1][1], 0)
  65. eq_(res[1][2], 599)
  66. def test_intervals_full_2():
  67. res = list(get_files_and_intervals(eight,
  68. nine + minutes(59) + seconds(59)))
  69. eq_(len(res), 2)
  70. eq_(res[0][1], 0)
  71. eq_(res[0][2], 0)
  72. eq_(res[1][1], 0)
  73. eq_(res[1][2], 0)
  74. def test_intervals_exact_3():
  75. res = list(get_files_and_intervals(eight, ten))
  76. eq_(len(res), 3)
  77. eq_(res[0][1], 0)
  78. eq_(res[0][2], 0)
  79. eq_(res[1][1], 0)
  80. eq_(res[1][2], 0)
  81. eq_(res[2][1], 0)
  82. eq_(res[2][2], 3599)
  83. def test_intervals_partial_3():
  84. res = list(get_files_and_intervals(eight, ten+minutes(50)))
  85. eq_(len(res), 3)
  86. eq_(res[0][1], 0)
  87. eq_(res[0][2], 0)
  88. eq_(res[1][1], 0)
  89. eq_(res[1][2], 0)
  90. eq_(res[2][1], 0)
  91. eq_(res[2][2], 599)
  92. def test_intervals_full_3():
  93. res = list(get_files_and_intervals(eight, ten+minutes(59) + seconds(59)))
  94. eq_(len(res), 3)
  95. eq_(res[0][1], 0)
  96. eq_(res[0][2], 0)
  97. eq_(res[1][1], 0)
  98. eq_(res[1][2], 0)
  99. eq_(res[2][1], 0)
  100. eq_(res[2][2], 0)
  101. def test_intervals_middle_1():
  102. res = list(get_files_and_intervals(eight + minutes(20),
  103. nine - minutes(20)))
  104. eq_(len(res), 1)
  105. eq_(res[0][1], 20*60)
  106. eq_(res[0][2], 20*60-1)
  107. def test_intervals_left_2():
  108. res = list(get_files_and_intervals(eight+minutes(30), nine))
  109. eq_(len(res), 2)
  110. eq_(res[0][1], 30*60)
  111. eq_(res[0][2], 0)
  112. eq_(res[1][1], 0)
  113. eq_(res[1][2], 3599)
  114. # MP3 Join
  115. def test_mp3_1():
  116. eq_(' '.join(mp3_join((('a', 0, 0),))),
  117. 'ffmpeg -i concat:a -acodec copy')
  118. def test_mp3_1_left():
  119. eq_(' '.join(mp3_join((('a', 160, 0),))),
  120. 'ffmpeg -i concat:a -acodec copy -ss 160')
  121. def test_mp3_1_right():
  122. eq_(' '.join(mp3_join((('a', 0, 1600),))),
  123. 'ffmpeg -i concat:a -acodec copy -t 2000')
  124. def test_mp3_1_leftright():
  125. eq_(' '.join(mp3_join((('a', 160, 1600),))),
  126. 'ffmpeg -i concat:a -acodec copy -ss 160 -t 1840')
  127. def test_mp3_2():
  128. eq_(' '.join(mp3_join((('a', 0, 0), ('b', 0, 0)))),
  129. 'ffmpeg -i concat:a|b -acodec copy')
  130. def test_mp3_2_leftright():
  131. eq_(' '.join(mp3_join((('a', 1000, 0), ('b', 0, 1600)))),
  132. 'ffmpeg -i concat:a|b -acodec copy -ss 1000 -t 4600')