def setUp(self): self.meters = [ Meter(4,4), Meter(3,4) ] self.meterStandard = self.meters[0] self.meter34 = self.meters[1] self.clock = BeatClock(135, meters=self.meters, reactor=TestReactor())
class ClockTests(TestCase, ClockRunner): def setUp(self): self.meters = [ Meter(4,4), Meter(3,4) ] self.meterStandard = self.meters[0] self.meter34 = self.meters[1] self.clock = BeatClock(135, meters=self.meters, reactor=TestReactor()) def test_defaultMeterIsStandard(self): clock = BeatClock(120) self.assertEquals(len(clock.meters), 1) meter = clock.meters[0] self.assertEquals(meter.length, 4) self.assertEquals(meter.division, 4) self.assertEquals(meter.number, 1) def test_startLater(self): called = [] instr1 = TestInstrument('f1', self.clock, called) self.clock.schedule(instr1).startLater(0, 0.25) self._runTicks(96 * 2) expected = [(0, 'f1'), (24, 'f1'), (48, 'f1'), (72, 'f1'), (96, 'f1'), (120, 'f1'), (144, 'f1'), (168, 'f1'), (192, 'f1')] self.assertEquals(called, expected) called[:] = [] instr2 = TestInstrument('f2', self.clock, called) self.clock.schedule(instr2).startLater(1.0, 1.0 / 3) self._runTicks(96 * 2) expected = [(216, 'f1'), (240, 'f1'), (264, 'f1'), (288, 'f2'), (288, 'f1'), (312, 'f1'), (320, 'f2'), (336, 'f1'), (352, 'f2'), (360, 'f1'), (384, 'f2'), (384, 'f1')] self.assertEquals(called, expected) def test_startLaterWithMeter(self): called = [] instr1 = TestInstrument('f1', self.clock, called) instr2 = TestInstrument('f2', self.clock, called) self.clock.schedule(instr1).startLater(1.0, 0.25, meter=self.meterStandard) self.clock.schedule(instr2).startLater(1.0, 0.25, meter=self.meter34) self._runTicks(96 * 2) expected = [(72, 'f2'), (96, 'f2'), (96, 'f1'), (120, 'f2'), (120, 'f1'), (144, 'f2'), (144, 'f1'), (168, 'f2'), (168, 'f1'), (192, 'f2'), (192, 'f1')] self.assertEquals(len(called), len(expected)) self.assertEquals(set(called), set(expected)) def test_stopLater(self): called = [] instr1 = TestInstrument('f1', self.clock, called) instr2 = TestInstrument('f2', self.clock, called) self.clock.schedule(instr1).startLater(1.0, 0.25, meter=self.meterStandard).stopLater(3.5) self._runTicks(96 * 5) expected = [ (96, 'f1'), (120, 'f1'), (144, 'f1'), (168, 'f1'), (192, 'f1'), (216, 'f1'), (240, 'f1'), (264, 'f1'), (288, 'f1'), (312, 'f1')] self.assertEquals(len(called), len(expected)) self.assertEquals(called, expected) called[:] = [] self.clock.schedule(instr2).startLater(0, 0.25, meter=self.meter34).stopLater(2 + 2/3., meter=self.meter34) self._runTicks(96 * 5) expected = [(504, 'f2'), (528, 'f2'), (552, 'f2'), (576, 'f2'), (600, 'f2')] self.assertEquals(called, expected) def test_bindMeter(self): called = [] instr1 = TestInstrument('f1', self.clock, called) instr2 = TestInstrument('f2', self.clock, called) self.clock.schedule(instr1).bindMeter(self.meterStandard).startLater(1.0, 0.25).stopLater(3.5) self._runTicks(96 * 5) expected = [ (96, 'f1'), (120, 'f1'), (144, 'f1'), (168, 'f1'), (192, 'f1'), (216, 'f1'), (240, 'f1'), (264, 'f1'), (288, 'f1'), (312, 'f1')] self.assertEquals(len(called), len(expected)) self.assertEquals(called, expected) called[:] = [] self.clock.schedule(instr2).bindMeter(self.meter34).startLater(0, 0.25).stopLater(2 + 2/3.) self._runTicks(96 * 5) expected = [(504, 'f2'), (528, 'f2'), (552, 'f2'), (576, 'f2'), (600, 'f2')] self.assertEquals(called, expected) def test_setTempo(self): self.clock.setTempo(60) interval_before = self.clock._tick_interval called = [] self.clock.startTicking() self.clock.on_stop.addCallback(called.append) self.clock.setTempo(120) self.assertEquals(len(called), 1) self.assertEquals(self.clock._tick_interval, interval_before / 2.) self.clock.task.stop() def test_nudge(self): self.clock.startTicking() self.clock.nudge() self.assertEquals(self.clock.reactor.scheduled, [(0.1, self.clock.task.start, (self.clock._tick_interval, True), {})]) self.clock.task.start(1, True) self.clock.nudge(pause=0.5) self.assertEquals(self.clock.reactor.scheduled, [(0.1, self.clock.task.start, (self.clock._tick_interval, True), {}), (0.5, self.clock.task.start, (self.clock._tick_interval, True), {})])