1#!/usr/local/bin/python3.8 2# vim:fileencoding=utf-8 3# License: GPL v3 Copyright: 2020, Kovid Goyal <kovid at kovidgoyal.net> 4 5from calibre_extensions.winsapi import ISpVoice 6 7 8def develop(): 9 spv = ISpVoice() 10 spv.create_recording_wav('test.wav', 'Hello, world!') 11 12 13def find_tests(): 14 import unittest 15 import os 16 is_ci = os.environ.get('CI', '').lower() == 'true' 17 18 class TestSAPI(unittest.TestCase): 19 20 def setUp(self): 21 self.sapi = ISpVoice() 22 23 def tearDown(self): 24 self.sapi = None 25 26 def test_enumeration_of_voices(self): 27 default_voice = self.sapi.get_current_voice() 28 self.assertTrue(default_voice) 29 all_voices = self.sapi.get_all_voices() 30 self.assertTrue(all_voices) 31 self.assertIn(default_voice, {x['id'] for x in all_voices}) 32 for voice in all_voices: 33 for key in ('name', 'gender', 'age', 'language', 'description'): 34 self.assertIn(key, voice) 35 self.sapi.set_current_voice(voice['id']) 36 self.assertEqual(self.sapi.get_current_voice(), voice['id']) 37 self.sapi.set_current_voice() 38 self.assertEqual(self.sapi.get_current_voice(), default_voice) 39 40 @unittest.skipIf(is_ci, 'No sound output on CI') 41 def test_enumeration_of_sound_outputs(self): 42 default_output = self.sapi.get_current_sound_output() 43 self.assertTrue(default_output) 44 all_outputs = self.sapi.get_all_sound_outputs() 45 self.assertTrue(all_outputs) 46 self.assertIn(default_output, {x['id'] for x in all_outputs}) 47 for output in all_outputs: 48 for key in ('id', 'description',): 49 self.assertIn(key, output) 50 self.sapi.set_current_voice(output['id']) 51 self.assertEqual(self.sapi.get_current_sound_output(), output['id']) 52 self.sapi.set_current_sound_output() 53 self.assertEqual(self.sapi.get_current_sound_output(), default_output) 54 55 def test_volume_and_rate(self): 56 dr = self.sapi.get_current_rate() 57 new_rate = dr // 2 + 1 58 self.sapi.set_current_rate(new_rate) 59 self.assertEqual(self.sapi.get_current_rate(), new_rate) 60 self.sapi.set_current_rate(dr) 61 62 dv = self.sapi.get_current_volume() 63 new_vol = dv // 2 + 3 64 self.sapi.set_current_volume(new_vol) 65 self.assertEqual(self.sapi.get_current_volume(), new_vol) 66 self.sapi.set_current_volume(dv) 67 68 def test_record_as_audio_file(self): 69 import tempfile 70 with tempfile.TemporaryDirectory() as tdir: 71 wav_path = os.path.join(tdir, 'test.wav') 72 self.sapi.create_recording_wav(wav_path, 'testing microsoft voices') 73 self.assertGreater(os.path.getsize(wav_path), 256) 74 75 return unittest.defaultTestLoader.loadTestsFromTestCase(TestSAPI) 76 77 78def run_tests(): 79 from calibre.utils.run_tests import run_tests 80 run_tests(find_tests) 81