* morituri/program/cdrdao.py:

* morituri/test/test_program_cdrdao.py:
	  Fix up tests.  Use an IndexTable.
This commit is contained in:
Thomas Vander Stichele
2009-05-04 12:28:12 +00:00
parent 91b9c393de
commit d34f3683ec
3 changed files with 23 additions and 11 deletions

View File

@@ -1,3 +1,9 @@
2009-05-04 Thomas Vander Stichele <thomas at apestaart dot org>
* morituri/program/cdrdao.py:
* morituri/test/test_program_cdrdao.py:
Fix up tests. Use an IndexTable.
2009-05-04 Thomas Vander Stichele <thomas at apestaart dot org>
* morituri/program/cdrdao.py:

View File

@@ -65,11 +65,12 @@ class OutputParser(object, log.Loggable):
self._lines = [] # accumulate lines
self._errors = [] # accumulate error lines
self._state = 'START'
self._frames = None # number of frames
self._starts = [] # start of each track, in frames
self._track = None # which track are we analyzing?
self._frames = None # number of frames
self._track = None # which track are we analyzing?
self._task = taskk
self.toc = table.IndexTable() # the index table for the TOC
def read(self, bytes):
self._buffer += bytes
@@ -88,7 +89,8 @@ class OutputParser(object, log.Loggable):
# we need both a position reported and an Analyzing line
# to have been parsed to report progress
if m and self._track is not None:
frame = self._starts[self._track - 1] or 0 \
track = self.toc.tracks[self._track - 1]
frame = track.getIndex(1).absolute or 0 \
+ int(m.group('hh')) * 60 * 75 \
+ int(m.group('mm')) * 75 \
+ int(m.group('ss'))
@@ -132,7 +134,9 @@ class OutputParser(object, log.Loggable):
m = _TRACK_RE.search(line)
if m:
self._tracks = int(m.group('track'))
self._starts.append(int(m.group('start')))
track = table.ITTrack(self._tracks)
track.index(1, absolute=int(m.group('start')))
self.toc.tracks.append(track)
self.debug('Found track %d', self._tracks)
m = _LEADOUT_RE.search(line)
@@ -141,10 +145,10 @@ class OutputParser(object, log.Loggable):
self._state = 'LEADOUT'
self._frames = int(m.group('start'))
self.debug('Found leadout at offset %r', self._frames)
self.toc.leadout = self._frames
self.info('%d tracks found', self._tracks)
return
def _parse_LEADOUT(self, line):
m = _ANALYZING_RE.search(line)
if m:
@@ -156,7 +160,6 @@ class OutputParser(object, log.Loggable):
#print 'analyzing', track
# FIXME: handle errors
class CDRDAOTask(task.Task):
@@ -233,7 +236,7 @@ class ReadTOCTask(CDRDAOTask):
description = "Scanning indexes..."
def __init__(self):
self._parser = OutputParser(self)
self.parser = OutputParser(self)
self.toc = None # result
(fd, self._toc) = tempfile.mkstemp(suffix='.morituri')
os.close(fd)
@@ -242,7 +245,7 @@ class ReadTOCTask(CDRDAOTask):
self.options = ['read-toc', self._toc]
def readbytes(self, bytes):
self._parser.read(bytes)
self.parser.read(bytes)
def done(self):
self.toc = toc.TOC(self._toc)

View File

@@ -22,6 +22,9 @@ class ParseTestCase(unittest.TestCase):
# FIXME: we should be testing splitting in byte blocks, not lines
for line in self._handle.readlines():
self._parser.read(line)
self.assertEquals(self._parser._starts,
for i, offset in enumerate(
[0, 13864, 31921, 48332, 61733, 80961,
100219, 116291, 136188, 157504, 175275])
100219, 116291, 136188, 157504, 175275]):
track = self._parser.toc.tracks[i]
self.assertEquals(track.getIndex(1).absolute, offset)