117 lines
2.6 KiB
C
117 lines
2.6 KiB
C
#include "test.h"
|
|
|
|
void
|
|
dictionary_candidates(struct ct *t)
|
|
{
|
|
char many[512], item[8];
|
|
char *p;
|
|
Dictreq req;
|
|
Dictres res;
|
|
Hmap *saved;
|
|
Lang *lang;
|
|
Str key;
|
|
int i;
|
|
|
|
lang = getlang(LangJP);
|
|
saved = lang->dict;
|
|
lang->dict = hmapalloc(1);
|
|
key = mkstr("かな");
|
|
hmapset(&lang->dict, &key, " 候補1 かな 候補2 ",
|
|
strlen(" 候補1 かな 候補2 "));
|
|
memset(&req, 0, sizeof req);
|
|
req.key = key;
|
|
req.pre = mkstr("preedit-one");
|
|
req.lang = LangJP;
|
|
dictlookup(&req, &res);
|
|
if(!CT_EQ_INT(t, 2, res.nkouho))
|
|
goto cleanup;
|
|
CT_EQ_INT(t, LangJP, res.lang);
|
|
CT_EQ_INT(t, 0, scmp(&req.pre, &res.key));
|
|
checkstr(t, "candidate 1", "候補1", &res.kouho[0]);
|
|
checkstr(t, "candidate 2", "候補2", &res.kouho[1]);
|
|
key = mkstr("key");
|
|
p = many;
|
|
for(i = 0; i < Maxkouho+1; i++){
|
|
snprint(item, sizeof item, "c%02d", i);
|
|
if(i > 0)
|
|
*p++ = ' ';
|
|
memmove(p, item, strlen(item));
|
|
p += strlen(item);
|
|
}
|
|
*p = '\0';
|
|
hmapset(&lang->dict, &key, many, strlen(many));
|
|
req.key = key;
|
|
req.pre = mkstr("preedit-two");
|
|
dictlookup(&req, &res);
|
|
if(!CT_EQ_INT(t, Maxkouho, res.nkouho))
|
|
goto cleanup;
|
|
CT_EQ_INT(t, LangJP, res.lang);
|
|
CT_EQ_INT(t, 0, scmp(&req.pre, &res.key));
|
|
checkstr(t, "first capped candidate", "c00", &res.kouho[0]);
|
|
checkstr(t, "last capped candidate", "c31", &res.kouho[31]);
|
|
cleanup:
|
|
hmapfree(lang->dict);
|
|
lang->dict = saved;
|
|
}
|
|
|
|
void
|
|
dictionary_misses_clear_result(struct ct *t)
|
|
{
|
|
static const struct {
|
|
char *name;
|
|
char *key;
|
|
char *pre;
|
|
} cases[] = {
|
|
{ "empty key", "", "empty-preedit" },
|
|
{ "missing key", "missing", "missing-preedit" },
|
|
};
|
|
Dictreq req;
|
|
Dictres res;
|
|
Hmap *saved;
|
|
Lang *lang;
|
|
int i;
|
|
|
|
lang = getlang(LangJP);
|
|
saved = lang->dict;
|
|
lang->dict = hmapalloc(1);
|
|
for(i = 0; i < nelem(cases); i++){
|
|
memset(&res, 0xa5, sizeof res);
|
|
req.key = mkstr(cases[i].key);
|
|
req.pre = mkstr(cases[i].pre);
|
|
req.lang = LangJP;
|
|
dictlookup(&req, &res);
|
|
if(res.nkouho != 0)
|
|
CT_ERRORF(t, "%s: want 0 candidates, got %d",
|
|
cases[i].name, res.nkouho);
|
|
CT_EQ_INT(t, LangJP, res.lang);
|
|
checkstr(t, cases[i].name, cases[i].pre, &res.key);
|
|
}
|
|
hmapfree(lang->dict);
|
|
lang->dict = saved;
|
|
}
|
|
|
|
void
|
|
dictionary_emoji_identity(struct ct *t)
|
|
{
|
|
Dictreq req;
|
|
Dictres res;
|
|
Hmap *saved;
|
|
Lang *lang;
|
|
Str key;
|
|
|
|
lang = getlang(LangEMOJI);
|
|
saved = lang->dict;
|
|
lang->dict = hmapalloc(2);
|
|
key = mkstr("é");
|
|
hmapset(&lang->dict, &key, "é", strlen("é"));
|
|
memset(&req, 0, sizeof req);
|
|
req.key = key;
|
|
req.pre = key;
|
|
req.lang = LangEMOJI;
|
|
dictlookup(&req, &res);
|
|
if(CT_EQ_INT(t, 1, res.nkouho))
|
|
checkstr(t, "emoji identity candidate", "é", &res.kouho[0]);
|
|
hmapfree(lang->dict);
|
|
lang->dict = saved;
|
|
}
|