ya2 · news · projects · code · about

housekeeping: pmachines.audio.music
[pmachines.git] / tests / pmachines / audio / test_music.py
1 from panda3d.core import load_prc_file_data
2 load_prc_file_data('', 'window-type none')
3 from pathlib import Path
4 import sys
5 if '' in sys.path: sys.path.remove('')
6 sys.path.append(str(Path(__file__).parent.parent.parent))
7 from os.path import basename
8 from glob import glob
9 from unittest import TestCase
10 from unittest.mock import patch
11 from direct.showbase.ShowBase import ShowBase
12 from panda3d.core import AudioSound
13 from pmachines.audio.music import MusicManager
14 from pmachines.audio import music
15
16
17 class MusicTests(TestCase):
18
19 def setUp(self):
20 self.__app = ShowBase()
21
22 def tearDown(self):
23 self.__app.destroy()
24
25 @patch.object(music, 'AudioTools', autospec=True)
26 def test_music(self, a):
27 m = MusicManager(.8, 'pmachines')
28 a.set_volume.assert_called_once()
29 a_args = a.set_volume.call_args_list[0].args
30 self.assertAlmostEqual(a_args[0], .8, delta=.01)
31 self.assertEqual(len(a_args), 1)
32 tasks = [t.name for t in taskMgr.getTasks() + taskMgr.getDoLaters()]
33 self.assertIn('on frame music', tasks)
34 _music = m._MusicManager__music
35 musics = list(map(basename, glob('assets/audio/music/*.ogg')))
36 self.assertIn(_music.get_name(), musics)
37 self.assertEqual(_music.status(), AudioSound.PLAYING)
38 prev_music_name = _music.get_name()
39 m._MusicManager__restart_music()
40 _music = m._MusicManager__music
41 self.assertIn(_music.get_name(), musics)
42 self.assertEqual(_music.status(), AudioSound.PLAYING)
43 self.assertNotEqual(_music.get_name(), prev_music_name)