eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TextToSpeechServiceTest.java 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. /*
  2. * Copyright (C) 2015 Reece H. Dunn
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.reecedunn.espeak.test;
  17. import android.annotation.SuppressLint;
  18. import android.content.Context;
  19. import android.os.Build;
  20. import android.speech.tts.TextToSpeech;
  21. import android.test.AndroidTestCase;
  22. import com.reecedunn.espeak.TtsService;
  23. import com.reecedunn.espeak.Voice;
  24. import java.util.Locale;
  25. import java.util.Set;
  26. import static com.reecedunn.espeak.test.TtsMatcher.isTtsLangCode;
  27. import static org.hamcrest.MatcherAssert.assertThat;
  28. import static org.hamcrest.Matchers.*;
  29. public class TextToSpeechServiceTest extends AndroidTestCase
  30. {
  31. public class TtsServiceTest extends TtsService
  32. {
  33. public TtsServiceTest(Context context)
  34. {
  35. attachBaseContext(context);
  36. }
  37. public String[] onGetLanguage() {
  38. return super.onGetLanguage();
  39. }
  40. public int onIsLanguageAvailable(String language, String country, String variant) {
  41. return super.onIsLanguageAvailable(language, country, variant);
  42. }
  43. public int onLoadLanguage(String language, String country, String variant) {
  44. return super.onLoadLanguage(language, country, variant);
  45. }
  46. public Set<String> onGetFeaturesForLanguage(String language, String country, String variant) {
  47. return super.onGetFeaturesForLanguage(language, country, variant);
  48. }
  49. public Voice getActiveVoice() {
  50. return mMatchingVoice;
  51. }
  52. @SuppressLint("NewApi")
  53. private android.speech.tts.Voice getVoice(String name) {
  54. for (android.speech.tts.Voice voice : onGetVoices()) {
  55. if (voice.getName().equals(name)) {
  56. return voice;
  57. }
  58. }
  59. return null;
  60. }
  61. }
  62. private TtsServiceTest mService = null;
  63. @Override
  64. public void setUp() throws Exception
  65. {
  66. mService = new TtsServiceTest(getContext());
  67. mService.onCreate();
  68. }
  69. @Override
  70. public void tearDown()
  71. {
  72. if (mService != null)
  73. {
  74. mService.onDestroy();
  75. mService = null;
  76. }
  77. }
  78. private void checkLanguage(String[] locale, String language, String country, String variant) {
  79. assertThat(locale.length, is(3));
  80. assertThat(locale[0], is(language));
  81. assertThat(locale[1], is(country));
  82. assertThat(locale[2], is(variant));
  83. }
  84. public void testOnLoadLanguage() {
  85. assertThat(mService.onLoadLanguage("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
  86. checkLanguage(mService.onGetLanguage(), "eng", "", "");
  87. assertThat(mService.getActiveVoice(), is(notNullValue()));
  88. assertThat(mService.getActiveVoice().name, is("en"));
  89. assertThat(mService.onLoadLanguage("eng", "USA", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
  90. checkLanguage(mService.onGetLanguage(), "eng", "USA", "");
  91. assertThat(mService.getActiveVoice(), is(notNullValue()));
  92. assertThat(mService.getActiveVoice().name, is("en-us"));
  93. assertThat(mService.onLoadLanguage("eng", "GBR", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
  94. checkLanguage(mService.onGetLanguage(), "eng", "GBR", "scotland");
  95. assertThat(mService.getActiveVoice(), is(notNullValue()));
  96. assertThat(mService.getActiveVoice().name, is("en-sc"));
  97. assertThat(mService.onLoadLanguage("eng", "USA", "rp"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
  98. checkLanguage(mService.onGetLanguage(), "eng", "USA", "");
  99. assertThat(mService.getActiveVoice(), is(notNullValue()));
  100. assertThat(mService.getActiveVoice().name, is("en-us"));
  101. assertThat(mService.onLoadLanguage("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
  102. checkLanguage(mService.onGetLanguage(), "eng", "", "");
  103. assertThat(mService.getActiveVoice(), is(notNullValue()));
  104. assertThat(mService.getActiveVoice().name, is("en"));
  105. assertThat(mService.onLoadLanguage("eng", "FRA", "rp"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
  106. checkLanguage(mService.onGetLanguage(), "eng", "", "");
  107. assertThat(mService.getActiveVoice(), is(notNullValue()));
  108. assertThat(mService.getActiveVoice().name, is("en"));
  109. assertThat(mService.onLoadLanguage("eng", "FRA", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
  110. checkLanguage(mService.onGetLanguage(), "eng", "", "");
  111. assertThat(mService.getActiveVoice(), is(notNullValue()));
  112. assertThat(mService.getActiveVoice().name, is("en"));
  113. assertThat(mService.onLoadLanguage("ine", "", ""), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
  114. checkLanguage(mService.onGetLanguage(), "eng", "", "");
  115. assertThat(mService.getActiveVoice(), is(notNullValue()));
  116. assertThat(mService.getActiveVoice().name, is("en"));
  117. }
  118. public void testOnIsLanguageAvailable() {
  119. assertThat(mService.onLoadLanguage("vie", "VNM", "saigon"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
  120. assertThat(mService.onIsLanguageAvailable("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
  121. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  122. assertThat(mService.getActiveVoice(), is(notNullValue()));
  123. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  124. assertThat(mService.onIsLanguageAvailable("eng", "USA", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
  125. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  126. assertThat(mService.getActiveVoice(), is(notNullValue()));
  127. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  128. assertThat(mService.onIsLanguageAvailable("eng", "GBR", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
  129. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  130. assertThat(mService.getActiveVoice(), is(notNullValue()));
  131. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  132. assertThat(mService.onIsLanguageAvailable("eng", "USA", "rp"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
  133. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  134. assertThat(mService.getActiveVoice(), is(notNullValue()));
  135. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  136. assertThat(mService.onIsLanguageAvailable("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
  137. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  138. assertThat(mService.getActiveVoice(), is(notNullValue()));
  139. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  140. assertThat(mService.onIsLanguageAvailable("eng", "FRA", "rp"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
  141. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  142. assertThat(mService.getActiveVoice(), is(notNullValue()));
  143. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  144. assertThat(mService.onIsLanguageAvailable("eng", "FRA", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
  145. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  146. assertThat(mService.getActiveVoice(), is(notNullValue()));
  147. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  148. assertThat(mService.onIsLanguageAvailable("ine", "", ""), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
  149. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  150. assertThat(mService.getActiveVoice(), is(notNullValue()));
  151. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  152. }
  153. public void testOnGetDefaultVoiceNameFor() {
  154. assertThat(mService.onLoadLanguage("vie", "VNM", "saigon"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
  155. assertThat(mService.onGetDefaultVoiceNameFor("eng", "", ""), is("en"));
  156. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  157. assertThat(mService.getActiveVoice(), is(notNullValue()));
  158. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  159. assertThat(mService.onGetDefaultVoiceNameFor("eng", "USA", ""), is("en-us"));
  160. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  161. assertThat(mService.getActiveVoice(), is(notNullValue()));
  162. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  163. assertThat(mService.onGetDefaultVoiceNameFor("eng", "GBR", "scotland"), is("en-sc"));
  164. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  165. assertThat(mService.getActiveVoice(), is(notNullValue()));
  166. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  167. assertThat(mService.onGetDefaultVoiceNameFor("eng", "USA", "rp"), is("en-us"));
  168. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  169. assertThat(mService.getActiveVoice(), is(notNullValue()));
  170. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  171. assertThat(mService.onGetDefaultVoiceNameFor("eng", "", "scotland"), is("en"));
  172. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  173. assertThat(mService.getActiveVoice(), is(notNullValue()));
  174. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  175. assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", "rp"), is("en"));
  176. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  177. assertThat(mService.getActiveVoice(), is(notNullValue()));
  178. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  179. assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", ""), is("en"));
  180. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  181. assertThat(mService.getActiveVoice(), is(notNullValue()));
  182. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  183. assertThat(mService.onGetDefaultVoiceNameFor("ine", "", ""), is(nullValue()));
  184. checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
  185. assertThat(mService.getActiveVoice(), is(notNullValue()));
  186. assertThat(mService.getActiveVoice().name, is("vi-sgn"));
  187. }
  188. public void testLanguages() {
  189. for (VoiceData.Voice data : VoiceData.voices)
  190. {
  191. assertThat(mService.onIsLanguageAvailable(data.javaLanguage, data.javaCountry, data.variant), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
  192. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
  193. assertThat(mService.onLoadLanguage(data.javaLanguage, data.javaCountry, data.variant), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
  194. checkLanguage(mService.onGetLanguage(), data.javaLanguage, data.javaCountry, data.variant);
  195. } else {
  196. assertThat(mService.onGetDefaultVoiceNameFor(data.javaLanguage, data.javaCountry, data.variant), is(data.name));
  197. assertThat(mService.onLoadVoice(data.name), is(TextToSpeech.SUCCESS));
  198. android.speech.tts.Voice voice = mService.getVoice(data.name);
  199. assertThat(voice, is(notNullValue()));
  200. Locale locale = voice.getLocale();
  201. assertThat(locale, is(notNullValue()));
  202. assertThat(locale.getISO3Language(), is(data.javaLanguage));
  203. assertThat(locale.getISO3Country(), is(data.javaCountry));
  204. assertThat(locale.getVariant(), is(data.variant));
  205. Set<String> features = mService.onGetFeaturesForLanguage(data.javaLanguage, data.javaCountry, data.variant);
  206. assertThat(features, is(notNullValue()));
  207. assertThat(features.size(), is(0));
  208. }
  209. }
  210. }
  211. }