Files
whipper-gui/whipper/test/test_program_cdparanoia.py
2026-04-18 17:55:52 +03:00

149 lines
4.0 KiB
Python

# -*- 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()