|
|
|
|
|
|
|
|
#include "synthesize.h" |
|
|
#include "synthesize.h" |
|
|
#include "translate.h" |
|
|
#include "translate.h" |
|
|
|
|
|
|
|
|
|
|
|
// Arguments to ReadClause. Declared here to avoid duplicating them across the |
|
|
|
|
|
// different test functions. |
|
|
|
|
|
static char source[N_TR_SOURCE+40]; // extra space for embedded command & voice change info at end |
|
|
|
|
|
static short charix[N_TR_SOURCE+4]; |
|
|
|
|
|
static int charix_top = 0; |
|
|
|
|
|
static int tone2; |
|
|
|
|
|
static char voice_change_name[40]; |
|
|
|
|
|
static int terminator; |
|
|
|
|
|
|
|
|
|
|
|
static espeak_ng_STATUS |
|
|
|
|
|
set_text(const char *text, const char *voicename) |
|
|
|
|
|
{ |
|
|
|
|
|
espeak_ng_STATUS status = espeak_ng_SetVoiceByName(voicename); |
|
|
|
|
|
if (status != ENS_OK) |
|
|
|
|
|
return status; |
|
|
|
|
|
|
|
|
|
|
|
if (p_decoder == NULL) |
|
|
|
|
|
p_decoder = create_text_decoder(); |
|
|
|
|
|
|
|
|
|
|
|
return text_decoder_decode_string(p_decoder, text, -1, ESPEAKNG_ENCODING_UTF_8); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void |
|
|
void |
|
|
test_latin() |
|
|
test_latin() |
|
|
{ |
|
|
{ |
|
|
|
|
|
|
|
|
assert(clause_type_from_codepoint(0xFF1F) == (CLAUSE_QUESTION | CLAUSE_OPTIONAL_SPACE_AFTER)); |
|
|
assert(clause_type_from_codepoint(0xFF1F) == (CLAUSE_QUESTION | CLAUSE_OPTIONAL_SPACE_AFTER)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
|
test_emoji_single_character_sequences() |
|
|
|
|
|
{ |
|
|
|
|
|
short retix[] = { |
|
|
|
|
|
0, -1, -1, |
|
|
|
|
|
2, -1, -1, |
|
|
|
|
|
3, -1, -1, |
|
|
|
|
|
4, -1, -1, -1, |
|
|
|
|
|
5, -1, -1, -1, |
|
|
|
|
|
6, |
|
|
|
|
|
0 }; |
|
|
|
|
|
|
|
|
|
|
|
assert(set_text( |
|
|
|
|
|
"\xE2\x86\x94" // [2194] left right arrow |
|
|
|
|
|
"\xE2\x86\x95" // [2195] up down arrow |
|
|
|
|
|
"\xE2\x9B\x94" // [26D5] no entry |
|
|
|
|
|
"\xF0\x9F\x90\x8B" // [1F40B] whale |
|
|
|
|
|
"\xF0\x9F\x90\xAC", // [1F42C] dolphin |
|
|
|
|
|
"en") == ENS_OK); |
|
|
|
|
|
|
|
|
|
|
|
assert(ReadClause(translator, source, charix, &charix_top, N_TR_SOURCE, &tone2, voice_change_name) == CLAUSE_EOF); |
|
|
|
|
|
assert(!strcmp(source, |
|
|
|
|
|
"\xE2\x86\x94" // [2194] left right arrow |
|
|
|
|
|
"\xE2\x86\x95" // [2195] up down arrow |
|
|
|
|
|
"\xE2\x9B\x94" // [26D5] no entry |
|
|
|
|
|
"\xF0\x9F\x90\x8B" // [1F40B] whale |
|
|
|
|
|
"\xF0\x9F\x90\xAC" // [1F42C] dolphin |
|
|
|
|
|
" ")); |
|
|
|
|
|
assert(charix_top == (sizeof(retix)/sizeof(retix[0])) - 2); |
|
|
|
|
|
assert(!memcmp(charix, retix, sizeof(retix))); |
|
|
|
|
|
assert(tone2 == 0); |
|
|
|
|
|
assert(voice_change_name[0] == 0); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
|
test_emoji() |
|
|
|
|
|
{ |
|
|
|
|
|
printf("testing Emoji\n"); |
|
|
|
|
|
|
|
|
|
|
|
test_emoji_single_character_sequences(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
int |
|
|
int |
|
|
main(int argc, char **argv) |
|
|
main(int argc, char **argv) |
|
|
{ |
|
|
{ |
|
|
|
|
|
assert(espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS, 0, NULL, espeakINITIALIZE_DONT_EXIT) == 22050); |
|
|
|
|
|
|
|
|
test_latin(); |
|
|
test_latin(); |
|
|
test_greek(); |
|
|
test_greek(); |
|
|
test_armenian(); |
|
|
test_armenian(); |
|
|
|
|
|
|
|
|
test_ideographic(); |
|
|
test_ideographic(); |
|
|
test_fullwidth(); |
|
|
test_fullwidth(); |
|
|
|
|
|
|
|
|
|
|
|
test_emoji(); |
|
|
|
|
|
|
|
|
|
|
|
assert(espeak_Terminate() == EE_OK); |
|
|
|
|
|
|
|
|
return EXIT_SUCCESS; |
|
|
return EXIT_SUCCESS; |
|
|
} |
|
|
} |