test_forge.py 4.3 KB

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