exemplos-compmus/_examples/python/test_alsamidi.py

334 lines
8.2 KiB
Python

---
author: "Flávio Schiavoni"
description:
---
from __future__ import print_function
from unittest import TestCase
class NoteEvent(TestCase):
def test(self):
from alsamidi import noteevent
midi_event = (1, 60, 127, 1000, 10)
data = (1, 60, 127, 0, 10)
expected = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, noteevent(*midi_event))
class NoteOnEvent(TestCase):
def test(self):
from alsamidi import noteonevent
midi_event = (1, 60, 127)
data = (1, 60, 127, 0, 0)
expected = (6, 1, 0, 253, (0, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, noteonevent(*midi_event))
class NoteOffEvent(TestCase):
def test(self):
from alsamidi import noteoffevent
midi_event = (1, 60, 10)
data = (1, 60, 10, 0, 0)
expected = (7, 1, 0, 253, (0, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, noteoffevent(*midi_event))
class PgmChangeEvent(TestCase):
def test_sent_directly(self):
from alsamidi import pgmchangeevent
data = (1, 0, 0, 0, 0, 9)
expected = (11, 1, 0, 253, (0, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, pgmchangeevent(1, 9))
def test_scheduled(self):
from alsamidi import pgmchangeevent
data = (1, 0, 0, 0, 0, 9)
expected = (11, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, pgmchangeevent(1, 9, 1000))
class PitchbendEvent(TestCase):
def test_sent_directly(self):
from alsamidi import pitchbendevent
data = (1, 0, 9)
expected = (13, 1, 0, 253, (0, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, pitchbendevent(1, 9))
def test_scheduled(self):
from alsamidi import pitchbendevent
data = (1, 0, 9)
expected = (13, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, pitchbendevent(1, 9, 1000))
class ChanPress(TestCase):
def test_sent_directly(self):
from alsamidi import chanpress
data = (1, 0, 9)
expected = (12, 1, 0, 253, (0, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, chanpress(1, 9))
def test_scheduled(self):
from alsamidi import chanpress
data = (1, 0, 9)
expected = (12, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, chanpress(1, 9, 1000))
class Tuple2Time(TestCase):
def test(self):
from alsamidi import tuple2time
self.assertEqual(1.5, tuple2time((1, 500000000)))
class Time2Tuple(TestCase):
def test(self):
from alsamidi import time2tuple
self.assertEqual((1, 500000000), time2tuple(1.5))
class ModifyEvent(TestCase):
def test(self):
from alsamidi import modifyevent
data = (1, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
modified_data = (15, 72, 127, 0, 10)
modified_event = (5, 1, 0, 250, (2, 0), (2, 0), (3, 0), modified_data)
self.assertEqual(modified_event, modifyevent(event, timedelta=1,
ch=15, dest=(3, 0), source=(2, 0), queue=250, keydelta=12))
class ModifyEvents(TestCase):
def test(self):
from alsamidi import modifyevents
data = (1, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
modified_data = (15, 72, 127, 0, 10)
modified_event = (5, 1, 0, 250, (2, 0), (2, 0), (3, 0), modified_data)
self.assertEqual([modified_event], modifyevents([event], timedelta=1,
ch=15, dest=(3, 0), source=(2, 0), queue=250, keydelta=12))
class Merge(TestCase):
def test_no_tracks(self):
from alsamidi import merge
self.assertEqual([], merge([]))
def test_track(self):
from alsamidi import merge
event = (0, 0, 0, 0, 0)
self.assertEqual([event], merge([[event]]))
class UniqueNotes(TestCase):
def test(self):
from alsamidi import uniquenotes
data = (1, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
expected = {1: [60]}
self.assertEqual(expected, uniquenotes([event]))
class TestSeq(TestCase):
def setUp(self):
try:
from mock import Mock
except:
from unittest.mock import Mock
import alsamidi
alsamidi.print = Mock()
def tearDown(self):
import alsamidi
del alsamidi.print
def test_instance(self):
from alsamidi import Seq
self.assertTrue(isinstance(Seq(), Seq))
def test_info(self):
from alsamidi import Seq
import alsamidi
data = (9, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
track = [event]
seq = Seq()
seq.names = ['name']
seq.tags = 'tags'
seq.tracks = [track]
seq.info()
alsamidi.print.assert_any_call('tags')
args = '0:', 'name ', 0, 'Sec.', 1, 'events,', {9: [60]}, 'Hi Bongo'
alsamidi.print.assert_called_with(*args)
class SeqRead(TestCase):
def setUp(self):
import os
try:
from mock import Mock
except:
from unittest.mock import Mock
import alsamidi
self.file = Mock()
text = 'track melody\n' \
'6,1,0,1,2 5430786,20 0,130 0,1 108 82 0 0\n' \
'name = value'
lines = text.split('\n')
self.file.readlines.return_value = lines
lines[0] = lines[0] + '\n'
alsamidi.open = Mock(return_value=self.file)
alsamidi.print = Mock()
self.exits = os.path.exists
os.path.exists = Mock(return_value=True)
def tearDown(self):
import os
import alsamidi
del alsamidi.open
del alsamidi.print
def test_read_not_found(self):
import os
from alsamidi import Seq
os.path.exists.return_value = False
seq = Seq()
seq.read('path')
self.assertEqual([], seq.tracks)
def test_read_named_track(self):
from alsamidi import Seq
seq = Seq()
seq.read('path')
self.assertEqual(['track melody'], seq.names)
def test_read_default_track(self):
from alsamidi import Seq
text = '6,1,0,1,2 5430786,20 0,130 0,1 108 82 0 0'
self.file.readlines.return_value = text.split('\n')
seq = Seq()
seq.read('path')
self.assertEqual(['Default'], seq.names)
def test_read_track(self):
from alsamidi import Seq
seq = Seq()
seq.read('path')
self.assertEqual([[
(6, 1, 0, 1,
(2, 5430786),
(20, 0),
(130, 0), (1, 108, 82, 0, 0))]], seq.tracks)
class SeqWrite(TestCase):
def setUp(self):
try:
from mock import Mock
except:
from unittest.mock import Mock
import alsamidi
self.file = Mock()
alsamidi.open = Mock(return_value=self.file)
alsamidi.print = Mock()
def tearDown(self):
import alsamidi
del alsamidi.open
del alsamidi.print
def test_write(self):
from alsamidi import Seq
data = (9, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
track = [event]
seq = Seq()
seq.names = ['name']
seq.tags = {'name': 'value'}
seq.orderedtags = ['name']
seq.tracks = [track]
seq.write('path')
line = '5,1,0,0,1 0,0 0,0 0,9 60 127 0 10\n'
self.file.write.assert_called_with(line)
def test_write_no_name(self):
from alsamidi import Seq
data = (9, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
track = [event]
seq = Seq()
seq.names = []
seq.tags = {'name': 'value'}
seq.orderedtags = ['name']
seq.tracks = [track]
seq.write('path')
line = '5,1,0,0,1 0,0 0,0 0,9 60 127 0 10\n'
self.file.write.assert_called_with(line)
def test_error(self):
from alsamidi import Seq
import alsamidi
alsamidi.open.side_effect = IOError
seq = Seq()
seq.write('path')
if __name__ == '__main__':
unittest.main()