You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

318 lines
9.8 KiB

  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. """Contains test cases for the DownloadItem object."""
  4. from __future__ import unicode_literals
  5. import sys
  6. import os.path
  7. import unittest
  8. PATH = os.path.realpath(os.path.abspath(__file__))
  9. sys.path.insert(0, os.path.dirname(os.path.dirname(PATH)))
  10. try:
  11. from youtube_dl_gui.downloadmanager import DownloadItem
  12. except ImportError as error:
  13. print error
  14. sys.exit(1)
  15. class TestItemInit(unittest.TestCase):
  16. """Test case for DownloadItem init."""
  17. def test_init(self):
  18. url = "url"
  19. options = ["-f", "flv"]
  20. ditem = DownloadItem(url, options)
  21. self.assertEqual(ditem.stage, "Queued")
  22. self.assertEqual(ditem.url, url)
  23. self.assertEqual(ditem.options, options)
  24. self.assertEqual(ditem.object_id, hash(url + unicode(options)))
  25. self.assertEqual(ditem.path, "")
  26. self.assertEqual(ditem.filenames, [])
  27. self.assertEqual(ditem.extensions, [])
  28. self.assertEqual(
  29. ditem.progress_stats,
  30. {"filename": url,
  31. "extension": "-",
  32. "filesize": "-",
  33. "percent": "0%",
  34. "speed": "-",
  35. "eta": "-",
  36. "status": "Queued",
  37. "playlist_size": "",
  38. "playlist_index": ""}
  39. )
  40. class TestGetFiles(unittest.TestCase):
  41. """Test case for DownloadItem get_files method."""
  42. def setUp(self):
  43. self.ditem = DownloadItem("url", ["-f", "flv"])
  44. def test_get_files(self):
  45. path = os.path.join("/home", "user", "downloads")
  46. self.ditem.path = path
  47. self.ditem.filenames = ["file1", "file2"]
  48. self.ditem.extensions = [".mp4", ".m4a"]
  49. self.assertEqual(self.ditem.get_files(), [os.path.join(path, "file1" + ".mp4"), os.path.join(path, "file2" + ".m4a")])
  50. def test_get_files_no_data(self):
  51. self.assertEqual(self.ditem.get_files(), [])
  52. class TestItemComparison(unittest.TestCase):
  53. """Test case for DownloadItem __eq__ method."""
  54. def test_equal_true(self):
  55. ditem1 = DownloadItem("url", ["-f", "flv"])
  56. ditem2 = DownloadItem("url", ["-f", "flv"])
  57. self.assertTrue(ditem1 == ditem2)
  58. def test_equal_false(self):
  59. ditem1 = DownloadItem("url", ["-f", "flv"])
  60. ditem2 = DownloadItem("url2", ["-f", "flv"])
  61. self.assertFalse(ditem1 == ditem2)
  62. ditem1 = DownloadItem("url", ["-f", "flv"])
  63. ditem2 = DownloadItem("url", ["-f", "mp4"])
  64. self.assertFalse(ditem1 == ditem2)
  65. class TestSetItemStage(unittest.TestCase):
  66. """Test case for DownloadItem stage setter."""
  67. def setUp(self):
  68. self.ditem = DownloadItem("url", ["-f", "flv"])
  69. def test_set_stage_valid(self):
  70. self.ditem.stage = "Queued"
  71. self.assertEqual(self.ditem.stage, "Queued")
  72. self.assertEqual(self.ditem.progress_stats["status"], "Queued")
  73. self.ditem.stage = "Active"
  74. self.assertEqual(self.ditem.stage, "Active")
  75. self.assertEqual(self.ditem.progress_stats["status"], "Pre Processing")
  76. self.ditem.stage = "Completed"
  77. self.assertEqual(self.ditem.stage, "Completed")
  78. self.assertEqual(self.ditem.progress_stats["status"], "Finished")
  79. self.ditem.stage = "Paused"
  80. self.assertEqual(self.ditem.stage, "Paused")
  81. self.assertEqual(self.ditem.progress_stats["status"], "Paused")
  82. def test_set_stage_invalid(self):
  83. raised = False
  84. try:
  85. self.ditem.stage = "some other status"
  86. except ValueError:
  87. raised = True
  88. self.assertTrue(raised)
  89. class TestUpdateStats(unittest.TestCase):
  90. """Test case for DownloadItem update_stats method."""
  91. def setUp(self):
  92. self.ditem = DownloadItem("url", ["-f", "flv"])
  93. def test_update_stats(self):
  94. path = os.path.join("/home", "user")
  95. self.ditem.update_stats({"filename": "somefilename",
  96. "extension": ".mp4",
  97. "filesize": "9.45MiB",
  98. "percent": "2.0%",
  99. "speed": "200.00KiB/s",
  100. "eta": "00:38",
  101. "status": "Downloading",
  102. "path": path,
  103. "playlist_size": "10",
  104. "playlist_index": "1"})
  105. self.assertEqual(self.ditem.path, path)
  106. self.assertEqual(self.ditem.filenames, ["somefilename"])
  107. self.assertEqual(self.ditem.extensions, [".mp4"])
  108. self.assertEqual(
  109. self.ditem.progress_stats,
  110. {"filename": "somefilename",
  111. "extension": ".mp4",
  112. "filesize": "9.45MiB",
  113. "percent": "2.0%",
  114. "speed": "200.00KiB/s",
  115. "eta": "00:38",
  116. "status": "Downloading",
  117. "playlist_size": "10",
  118. "playlist_index": "1"}
  119. )
  120. self.ditem.update_stats({"filename": "someotherfilename",
  121. "extension": ".m4a",
  122. "playlist_index": "2"})
  123. self.assertEqual(self.ditem.filenames, ["somefilename", "someotherfilename"])
  124. self.assertEqual(self.ditem.extensions, [".mp4", ".m4a"])
  125. self.assertEqual(
  126. self.ditem.progress_stats,
  127. {"filename": "someotherfilename",
  128. "extension": ".m4a",
  129. "filesize": "9.45MiB",
  130. "percent": "2.0%",
  131. "speed": "200.00KiB/s",
  132. "eta": "00:38",
  133. "status": "Downloading",
  134. "playlist_size": "10",
  135. "playlist_index": "2"}
  136. )
  137. def test_update_stats_invalid_input(self):
  138. self.assertRaises(AssertionError, self.ditem.update_stats, [])
  139. def test_update_stats_empty_strings(self):
  140. self.ditem.update_stats({"filename": "",
  141. "extension": "",
  142. "filesize": "",
  143. "percent": "",
  144. "speed": "",
  145. "eta": "",
  146. "status": "",
  147. "playlist_size": "",
  148. "playlist_index": ""})
  149. self.assertEqual(
  150. self.ditem.progress_stats,
  151. {"filename": "url",
  152. "extension": "-",
  153. "filesize": "-",
  154. "percent": "0%",
  155. "speed": "-",
  156. "eta": "-",
  157. "status": "Queued",
  158. "playlist_size": "",
  159. "playlist_index": ""}
  160. )
  161. def test_update_stats_not_string(self):
  162. self.ditem.update_stats({"filename": None, "status": 1234, "eta": False})
  163. self.assertEqual(self.ditem.progress_stats["filename"], "url")
  164. self.assertEqual(self.ditem.progress_stats["status"], "Queued")
  165. self.assertEqual(self.ditem.progress_stats["eta"], "-")
  166. class TestDownloadItemPrivate(unittest.TestCase):
  167. """Test case for private method of the DownloadItem."""
  168. def test_set_stage(self):
  169. ditem = DownloadItem("url", ["-f", "flv"])
  170. active_status = ["Pre Processing", "Downloading", "Post Processing"]
  171. complete_status = ["Finished", "Error", "Warning", "Stopped", "Already Downloaded", "Filesize Abort"]
  172. for status in active_status:
  173. ditem._stage = "Queued"
  174. ditem._set_stage(status)
  175. self.assertEqual(ditem.stage, "Active")
  176. for status in complete_status:
  177. ditem._stage = "Active"
  178. ditem._set_stage(status)
  179. self.assertEqual(ditem.stage, "Completed")
  180. class TestReset(unittest.TestCase):
  181. """Test case for the DownloadItem reset method."""
  182. def setUp(self):
  183. self.ditem = DownloadItem("url", ["-f", "flv"])
  184. def test_reset_error_status(self):
  185. self.ditem._stage = "Completed"
  186. self.ditem.path = os.path.join("/home", "user")
  187. self.ditem.filenames = ["file1", "file2", "file"]
  188. self.ditem.extensions = [".mp4", ".m4a", ".mp4"]
  189. self.ditem.progress_stats = {
  190. "filename": "file",
  191. "extension": ".mp4",
  192. "filsize": "9.45MiB",
  193. "percent": "100%",
  194. "speed": "-",
  195. "eta": "00:00",
  196. "status": "Error",
  197. "playlist_size": "10",
  198. "playlist_index": "8"
  199. }
  200. self.ditem.reset()
  201. self.assertEqual(self.ditem._stage, "Queued")
  202. self.assertEqual(self.ditem.path, "")
  203. self.assertEqual(self.ditem.filenames, [])
  204. self.assertEqual(self.ditem.extensions, [])
  205. self.assertEqual(
  206. self.ditem.progress_stats,
  207. {"filename": "url",
  208. "extension": "-",
  209. "filesize": "-",
  210. "percent": "0%",
  211. "speed": "-",
  212. "eta": "-",
  213. "status": "Queued",
  214. "playlist_size": "",
  215. "playlist_index": ""}
  216. )
  217. def test_reset_paused_stage(self):
  218. self.ditem._stage = "Paused"
  219. # No need to change filanames, extension, etc
  220. # since everything in pause state has the default value
  221. self.ditem.reset()
  222. self.assertEqual(self.ditem._stage, "Queued")
  223. def test_reset_active_stage(self):
  224. self.ditem._stage = "Active"
  225. self.ditem.path = os.path.join("/home", "user")
  226. self.ditem.filenames = ["file1"]
  227. self.ditem.extensions = [".mp4"]
  228. self.ditem.progress_stats = {
  229. "filename": "file1",
  230. "extension": ".mp4",
  231. "filsize": "9.45MiB",
  232. "percent": "75.5%",
  233. "speed": "200.00KiB/s",
  234. "eta": "00:10",
  235. "status": "Downloading"
  236. }
  237. self.assertRaises(RuntimeError, self.ditem.reset)
  238. def main():
  239. unittest.main()
  240. if __name__ == '__main__':
  241. main()