# -*- Mode: Python; test-case-name: whipper.test.test_program_cdparanoia -*- # vi:si:et:sw=4:sts=4:ts=4 import os from unittest import mock from whipper.extern.task import task from whipper.program import cdparanoia from whipper.test import common class ParseTestCase(common.TestCase): def setUp(self): # report from Afghan Whigs - Sweet Son Of A Bitch path = os.path.join(os.path.dirname(__file__), 'cdparanoia.progress') self._parser = cdparanoia.ProgressParser(start=45990, stop=47719) self._handle = open(path) def testParse(self): for line in self._handle.readlines(): self._parser.parse(line) q = '%.01f %%' % (self._parser.getTrackQuality() * 100.0, ) self.assertEqual(q, '99.6 %') class Parse1FrameTestCase(common.TestCase): def setUp(self): path = os.path.join(os.path.dirname(__file__), 'cdparanoia.progress.strokes') self._parser = cdparanoia.ProgressParser(start=0, stop=0) self._handle = open(path) def testParse(self): for line in self._handle.readlines(): self._parser.parse(line) q = '%.01f %%' % (self._parser.getTrackQuality() * 100.0, ) self.assertEqual(q, '100.0 %') class ErrorTestCase(common.TestCase): def setUp(self): # report from a rip with offset -1164 causing scsi errors path = os.path.join(os.path.dirname(__file__), 'cdparanoia.progress.error') self._parser = cdparanoia.ProgressParser(start=0, stop=10800) self._handle = open(path) def testParse(self): for line in self._handle.readlines(): self._parser.parse(line) q = '%.01f %%' % (self._parser.getTrackQuality() * 100.0, ) self.assertEqual(q, '79.6 %') class VersionTestCase(common.TestCase): def testGetVersion(self): v = cdparanoia.getCdParanoiaVersion() self.assertTrue(v) class AnalyzeFileTask(cdparanoia.AnalyzeTask): def __init__(self, path): self.command = ['cat', path] def readbytesout(self, bytes_stdout): self.readbyteserr(bytes_stdout) class CacheTestCase(common.TestCase): def testDefeatsCache(self): self.runner = task.SyncRunner(verbose=False) path = os.path.join(os.path.dirname(__file__), 'cdparanoia', 'PX-L890SA.cdparanoia-A.stderr') t = AnalyzeFileTask(path) self.runner.run(t) self.assertTrue(t.defeatsCache) class ReadTrackAbortTestCase(common.TestCase): def testAbortTerminatesRunningProcess(self): popen = mock.Mock() popen.poll.return_value = None rip_task = cdparanoia.ReadTrackTask( '/tmp/track.wav', mock.Mock(), 0, 0, False ) rip_task._popen = popen rip_task.abort() popen.terminate.assert_called_once_with() def testAbortIgnoresFinishedProcess(self): popen = mock.Mock() popen.poll.return_value = 0 rip_task = cdparanoia.ReadTrackTask( '/tmp/track.wav', mock.Mock(), 0, 0, False ) rip_task._popen = popen rip_task.abort() popen.terminate.assert_not_called() class ReadVerifyAbortTestCase(common.TestCase): def testAbortDelegatesToCurrentTaskAbort(self): current_task = mock.Mock() current_task.abort = mock.Mock() verify_task = cdparanoia.ReadVerifyTrackTask.__new__( cdparanoia.ReadVerifyTrackTask ) verify_task.tasks = [mock.Mock(), current_task] verify_task._task = 2 verify_task.abort() current_task.abort.assert_called_once_with() def testAbortFallsBackToStop(self): current_task = mock.Mock() del current_task.abort verify_task = cdparanoia.ReadVerifyTrackTask.__new__( cdparanoia.ReadVerifyTrackTask ) verify_task.tasks = [current_task] verify_task._task = 1 verify_task.abort() current_task.stop.assert_called_once_with()