00001
00002
00003
00004
00005 import os
00006 import rospy
00007 import logging
00008 import unittest
00009 import ConfigParser
00010
00011
00012 from nose.tools import raises
00013 from nose.tools import nottest
00014
00015
00016 from rospeex_core.ss.docomo_aitalk import Client
00017 from rospeex_core import exceptions as ext
00018
00019
00020 FORMAT = '[%(levelname)s] %(message)s @%(filename)s:%(funcName)s:%(lineno)d'
00021 logging.basicConfig(format=FORMAT, level=logging.DEBUG)
00022 logger = logging.getLogger(__name__)
00023
00024
00025 class TestVoiceTextClient(unittest.TestCase):
00026 def setUp(self):
00027 base_dir = os.path.dirname(__file__)
00028 settings = ConfigParser.ConfigParser()
00029 filename = os.path.join(base_dir, 'config.cfg')
00030
00031 settings.read(filename)
00032
00033 self.big_text_file = os.path.join(
00034 base_dir,
00035 settings.get('SpeechSynthesis', 'big_text_for_docomo_aitalk_file')
00036 )
00037 self.api_key = settings.get('SpeechSynthesis', 'docomo_api_key')
00038
00039 self.big_text_data = None
00040 with open(self.big_text_file, 'r') as f:
00041 self.big_text_data = f.read()
00042
00043 @raises(ext.ParameterException)
00044 def test_request_invalid_message(self):
00045 message = None
00046 language = 'ja'
00047 voice_font = '*'
00048 timeout = 100
00049 client = Client()
00050 client._key = self.api_key
00051 client.request(message, language, voice_font, timeout)
00052
00053 @raises(ext.ParameterException)
00054 def test_request_invalid_too_long_message(self):
00055 message = ''
00056 language = 'ja'
00057 voice_font = 'seiji'
00058 timeout = 100
00059 client = Client()
00060 client._key = self.api_key
00061
00062
00063 for i in range(300):
00064 message = message + 'a'
00065
00066 client.request(message, language, voice_font, timeout)
00067
00068 @raises(ext.ParameterException)
00069 def test_request_invalid_long_utf8_message(self):
00070 message = u''
00071 language = 'ja'
00072 voice_font = 'seiji'
00073 timeout = 100
00074 client = Client()
00075 client._key = self.api_key
00076
00077
00078 for i in range(201):
00079 message = message + u'あ'
00080 client.request(message, language, voice_font, timeout)
00081
00082 @nottest
00083 @raises(ext.InvalidResponseException)
00084 def test_request_invalid_message_charactor(self):
00085 message = '<'
00086 language = 'ja'
00087 voice_font = 'seiji'
00088 timeout = 100
00089 client = Client()
00090 client._key = self.api_key
00091 client.request(message, language, voice_font, timeout)
00092
00093 @raises(ext.UnsupportedLanguageException)
00094 def test_request_invalid_language(self):
00095 message = 'hello'
00096 language = 'de'
00097 voice_font = 'seiji'
00098 timeout = 100
00099 client = Client()
00100 client._key = self.api_key
00101 client.request(message, language, voice_font, timeout)
00102
00103 @raises(ext.ParameterException)
00104 def test_request_invalid_api_key(self):
00105 message = 'hello'
00106 language = 'ja'
00107 voice_font = 'seiji'
00108 timeout = 100
00109 client = Client()
00110 client.request(message, language, voice_font, timeout)
00111
00112 @raises(ext.InvalidResponseException)
00113 def test_request_invalid_url(self):
00114 message = 'hello'
00115 language = 'ja'
00116 voice_font = 'seiji'
00117 timeout = 100
00118 client = Client()
00119 client.URL = 'http://rospeex.nict.go.jp/nauth_json/jsServices/hoge'
00120 client._key = self.api_key
00121 client.request(message, language, voice_font, timeout)
00122
00123 @raises(ext.ParameterException)
00124 def test_request_invalid_voice_font(self):
00125 message = 'hello'
00126 language = 'ja'
00127 voice_font = 'hogehoge'
00128 timeout = 100
00129 client = Client()
00130 client._key = self.api_key
00131 client.request(message, language, voice_font, timeout)
00132
00133 @nottest
00134 @raises(ext.RequestTimeoutException)
00135 def test_request_server_timeout_post(self):
00136 message = self.big_text_data
00137 language = 'ja'
00138 voice_font = 'seiji'
00139 timeout = 2
00140 client = Client()
00141 client._key = self.api_key
00142 client.request(message, language, voice_font, timeout)
00143
00144 @nottest
00145 def test_request_valid_big_message(self):
00146 message = self.big_text_data
00147 language = 'ja'
00148 voice_font = 'seiji'
00149 timeout = 1000000
00150 client = Client()
00151 client._key = self.api_key
00152 client.request(message, language, voice_font, timeout)
00153
00154 @nottest
00155 def test_request_valid_japanese_message(self):
00156 message = u'こんにちは'
00157 language = 'ja'
00158 voice_font = 'seiji'
00159 timeout = 10000
00160 client = Client()
00161 client._key = self.api_key
00162 client.request(message.encode('utf-8'), language, voice_font, timeout)
00163
00164 @nottest
00165 def test_request_valid_voice_fonts(self):
00166 message = u'こんにちは'
00167 language = 'ja'
00168 timeout = 10000
00169 client = Client()
00170 client._key = self.api_key
00171
00172 for speaker in client.SPEAKER_LIST:
00173 client.request(message.encode('utf-8'), language, speaker, timeout)
00174 rospy.sleep(2)
00175
00176
00177 if __name__ == '__main__':
00178 import rosunit
00179 test_class = TestVoiceTextClient
00180 rosunit.unitrun(
00181 'rospeex_core',
00182 'speech_synthesis_client_docomo_aitalk',
00183 test_class,
00184 None,
00185 coverage_packages=['rospeex_core.ss']
00186 )