Add table-driven dictionary miss and language-switch state coverage, regress stale candidates after backspace, and clear them before dictionary refresh. Keep IPC and runtime-created file checks outside the unit runner.
89 lines
2.0 KiB
C
89 lines
2.0 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, 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, 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);
|
|
checkstr(t, cases[i].name, cases[i].pre, &res.key);
|
|
}
|
|
hmapfree(lang->dict);
|
|
lang->dict = saved;
|
|
}
|