Files
whipper-gui/morituri/test/test_image_toc.py
Thomas Vander Stichele 483c7b8a0c * morituri/program/cdrdao.py:
read all sessions by reading session 9.
	* morituri/image/toc.py:
	  Parse ZERO statements properly.
	  Also set absolute offsets when we know them from the .toc file.
	  Properly set audio flag on tracks.
	  FIXME: probably doesn't work if the .toc does not have lengths.
	* morituri/image/table.py:
	  Add some debug to cddb disc id calculation.
	  Fix absolutize function, it was going one index too far.
	  raise ValueError when overriding .absolute with a wrong value.
	* examples/readdisc.py:
	  Show CDDB disc id at the start.
	  Assert when toc and table have different disc id's (to be fixed)
	* morituri/test/test_image_cue.py:
	  Update for having the table already with absolute values.
	* morituri/test/test_image_toc.py:
	  Add Ladyhawke CDDB test, it has a data track.
2009-05-16 19:09:27 +00:00

186 lines
6.6 KiB
Python

# -*- Mode: Python; test-case-name: morituri.test.test_image_cue -*-
# vi:si:et:sw=4:sts=4:ts=4
import os
import unittest
from morituri.image import toc
from morituri.test import common
class CureTestCase(unittest.TestCase):
def setUp(self):
self.toc = toc.TocFile(os.path.join(os.path.dirname(__file__),
'cure.toc'))
self.toc.parse()
self.assertEquals(len(self.toc.table.tracks), 13)
def testGetTrackLength(self):
t = self.toc.table.tracks[0]
# first track has known length because the .toc is a single file
self.assertEquals(self.toc.getTrackLength(t), 28324)
# last track has unknown length
t = self.toc.table.tracks[-1]
self.assertEquals(self.toc.getTrackLength(t), -1)
def testIndexes(self):
# track 2, index 0 is at 06:16:45 or 28245
# track 2, index 1 is at 06:17:49 or 28324
# FIXME: cdrdao seems to get length of FILE 1 frame too many,
# and START value one frame less
t = self.toc.table.tracks[1]
self.assertEquals(t.getIndex(0).relative, 28245)
self.assertEquals(t.getIndex(1).relative, 28324)
def _getIndex(self, t, i):
track = self.toc.table.tracks[t - 1]
return track.getIndex(i)
def _assertAbsolute(self, t, i, value):
index = self._getIndex(t, i)
self.assertEquals(index.absolute, value)
def _assertPath(self, t, i, value):
index = self._getIndex(t, i)
self.assertEquals(index.path, value)
def _assertRelative(self, t, i, value):
index = self._getIndex(t, i)
self.assertEquals(index.relative, value)
def testSetFile(self):
self._assertAbsolute(1, 1, 0)
self._assertAbsolute(2, 0, 28245)
self._assertAbsolute(2, 1, 28324)
self._assertPath(1, 1, "data.wav")
def dump():
for t in self.toc.table.tracks:
print t
print t.indexes.values()
self.toc.table.absolutize()
self.toc.table.clearFiles()
self._assertAbsolute(1, 1, 0)
self._assertAbsolute(2, 0, 28245)
self._assertAbsolute(2, 1, 28324)
self._assertAbsolute(3, 1, 46110)
self._assertAbsolute(4, 1, 66767)
self._assertPath(1, 1, None)
self._assertRelative(1, 1, None)
# adding the first track file with length 28324 to the table should
# relativize from absolute 0 to absolute 28323, right before track 2,
# index 1
self.toc.table.setFile(1, 1, 'track01.wav', 28324)
self._assertPath(1, 1, 'track01.wav')
self._assertRelative(1, 1, 0)
self._assertPath(2, 0, 'track01.wav')
self._assertRelative(2, 0, 28245)
self._assertPath(2, 1, None)
self._assertRelative(2, 1, None)
def testConvertCue(self):
self.toc.table.absolutize()
cue = self.toc.table.cue()
ref = open(os.path.join(os.path.dirname(__file__), 'cure.cue')).read()
self.assertEquals(cue, ref)
# we verify it because it has failed in readdisc in the past
self.assertEquals(self.toc.table.getAccurateRipURL(),
'http://www.accuraterip.com/accuraterip/'
'3/c/4/dBAR-013-0019d4c3-00fe8924-b90c650d.bin')
# Bloc Party - Silent Alarm has a Hidden Track One Audio
class BlocTestCase(unittest.TestCase):
def setUp(self):
self.toc = toc.TocFile(os.path.join(os.path.dirname(__file__),
'bloc.toc'))
self.toc.parse()
self.assertEquals(len(self.toc.table.tracks), 13)
def testGetTrackLength(self):
t = self.toc.table.tracks[0]
# first track has known length because the .toc is a single file
# the length is from Track 1, Index 1 to Track 2, Index 1, so
# does not include the htoa
self.assertEquals(self.toc.getTrackLength(t), 19649)
# last track has unknown length
t = self.toc.table.tracks[-1]
self.assertEquals(self.toc.getTrackLength(t), -1)
def testIndexes(self):
t = self.toc.table.tracks[0]
self.assertEquals(t.getIndex(0).relative, 0)
self.assertEquals(t.getIndex(1).relative, 15220)
# This disc has a pre-gap, so is a good test for .CUE writing
def testConvertCue(self):
#self.toc.table.absolutize()
self.failUnless(self.toc.table.hasTOC())
cue = self.toc.table.cue()
ref = open(os.path.join(os.path.dirname(__file__),
'bloc.cue')).read()
self.assertEquals(cue, ref)
def testCDDBId(self):
self.toc.table.absolutize()
# cd-discid output:
# ad0be00d 13 15370 35019 51532 69190 84292 96826 112527 132448
# 148595 168072 185539 203331 222103 3244
self.assertEquals(self.toc.table.getCDDBDiscId(), 'ad0be00d')
def testAccurateRip(self):
# we verify it because it has failed in readdisc in the past
self.toc.table.absolutize()
self.assertEquals(self.toc.table.getAccurateRipURL(),
'http://www.accuraterip.com/accuraterip/'
'e/d/2/dBAR-013-001af2de-0105994e-ad0be00d.bin')
# The Breeders - Mountain Battles has CDText
class BreedersTestCase(unittest.TestCase):
def setUp(self):
self.toc = toc.TocFile(os.path.join(os.path.dirname(__file__),
'breeders.toc'))
self.toc.parse()
self.assertEquals(len(self.toc.table.tracks), 13)
def testCDText(self):
cdt = self.toc.table.cdtext
self.assertEquals(cdt['PERFORMER'], 'THE BREEDERS')
self.assertEquals(cdt['TITLE'], 'MOUNTAIN BATTLES')
t = self.toc.table.tracks[0]
cdt = t.cdtext
self.assertRaises(AttributeError, getattr, cdt, 'PERFORMER')
self.assertEquals(cdt['TITLE'], 'OVERGLAZED')
def testConvertCue(self):
self.toc.table.absolutize()
self.failUnless(self.toc.table.hasTOC())
cue = self.toc.table.cue()
ref = open(os.path.join(os.path.dirname(__file__),
'breeders.cue')).read()
self.assertEquals(cue, ref)
# Ladyhawke has a data track
class LadyhawkeTestCase(unittest.TestCase):
def setUp(self):
self.toc = toc.TocFile(os.path.join(os.path.dirname(__file__),
'ladyhawke.toc'))
self.toc.parse()
self.assertEquals(len(self.toc.table.tracks), 13)
#import code; code.interact(local=locals())
self.failIf(self.toc.table.tracks[-1].audio)
def testCDDBId(self):
self.toc.table.absolutize()
self.assertEquals(self.toc.table.getCDDBDiscId(), 'c60af50d')
# output from cd-discid:
# c60af50d 13 150 15687 31841 51016 66616 81352 99559 116070 133243
# 149997 161710 177832 207256 2807