hanjaquery matched the reading exactly, so a word was reachable only once every syllable of it had been typed, and the popup went blank on the way there. Measured over map/hanja.dict's 187,304 readings: 95,024 proper prefixes of a word answer with nothing today, and 66,731 of those are the keystroke just before the word completes -- 대한민 is one, so 대한민국 looks absent until the last key lands. dictprefix walks the entry at a node before its children, so the reading's own conversions keep their place and the words follow: 34,441 readings gain candidates and none of the 187,304 has its existing order changed. A jamo reading is untouched, since the two keyspaces do not meet and ㅁ has no children. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
132 lines
4.8 KiB
C
132 lines
4.8 KiB
C
/* Included after dat.h and fn.h (or after the source under test). */
|
|
#include "cutest/cutest.h"
|
|
|
|
/*
|
|
* A test's stand-in for imthread: handles engine requests from keyc,
|
|
* tracing each one first. Requests whose op is holdop (every request
|
|
* when holdop is Pumpall) wait on go before the engine sees them.
|
|
*/
|
|
typedef struct Pump Pump;
|
|
struct Pump
|
|
{
|
|
Channel *trace;
|
|
Channel *go;
|
|
Channel *stop;
|
|
Channel *done;
|
|
int holdop;
|
|
int active;
|
|
};
|
|
|
|
enum
|
|
{
|
|
Pumpnone = -1,
|
|
Pumpall = -2,
|
|
};
|
|
|
|
Str mkstr(char*);
|
|
int checkstr(struct ct*, char*, char*, Str*);
|
|
void checkenginepreedit(struct ct*, char*);
|
|
void pumpstart(Pump*, int);
|
|
void pumphold(Pump*, int);
|
|
void pumpstop(Pump*);
|
|
|
|
/* Engine internals reached through engine_test.c. */
|
|
void testengineinit(int);
|
|
void testenginehandle(Keyreq*);
|
|
void* testengineowner(void);
|
|
void testenginepreedit(Str*);
|
|
void testenginecaret(Caret*);
|
|
|
|
void str_init_utf8(struct ct*);
|
|
void str_edit_and_alias(struct ct*);
|
|
void str_utf8_capacity(struct ct*);
|
|
void str_invalid_and_full_appends(struct ct*);
|
|
void trie_exact_prefix_and_duplicate(struct ct*);
|
|
void trie_put_and_unloaded(struct ct*);
|
|
void popup_layout(struct ct*);
|
|
void font_render(struct ct*);
|
|
void production_maps_load(struct ct*);
|
|
void transmap_states(struct ct*);
|
|
void korean_sequences(struct ct*);
|
|
void korean_compound_vowels(struct ct*);
|
|
void korean_compound_finals(struct ct*);
|
|
void korean_backspace(struct ct*);
|
|
void vietnamese_transitions(struct ct*);
|
|
void vietnamese_backspace(struct ct*);
|
|
void vietnamese_state_lifetime(struct ct*);
|
|
void engine_clears_candidates(struct ct*);
|
|
void engine_backspace_clears_candidates(struct ct*);
|
|
void engine_selects_visible_candidate(struct ct*);
|
|
void engine_candidate_shortcut_modifiers(struct ct*);
|
|
void engine_candidate_page_metadata(struct ct*);
|
|
void engine_candidate_page_snapshots(struct ct*);
|
|
void engine_candidate_page_movement(struct ct*);
|
|
void engine_candidate_completion(struct ct*);
|
|
void engine_active_owner_lifecycle(struct ct*);
|
|
void engine_active_owner_reset(struct ct*);
|
|
void engine_active_owner_caret(struct ct*);
|
|
void engine_popup_preedit_capability(struct ct*);
|
|
void engine_vietnamese_client_preedit(struct ct*);
|
|
void engine_commit_contract(struct ct*);
|
|
void engine_language_switch_state(struct ct*);
|
|
void engine_telex_history_bound(struct ct*);
|
|
void engine_korean_modifiers_and_backspace(struct ct*);
|
|
void engine_direct_language_modes(struct ct*);
|
|
void engine_japanese_readings(struct ct*);
|
|
void engine_japanese_candidates(struct ct*);
|
|
void engine_japanese_backspace_and_boundaries(struct ct*);
|
|
void engine_katakana_sequences(struct ct*);
|
|
void engine_emoji_single_candidate(struct ct*);
|
|
void engine_emoji_queries(struct ct*);
|
|
void engine_emoji_japanese_and_multirune(struct ct*);
|
|
void engine_emoji_digit_aliases(struct ct*);
|
|
void engine_emoji_navigation(struct ct*);
|
|
void engine_search_candidate_keys(struct ct*);
|
|
void engine_emoji_preedit_languages(struct ct*);
|
|
void engine_emoji_start_and_unknown(struct ct*);
|
|
void engine_hanja_search(struct ct*);
|
|
void engine_hanja_unknown_and_cancel(struct ct*);
|
|
void engine_hanja_word_prefix(struct ct*);
|
|
void engine_hanja_korean_keys(struct ct*);
|
|
void engine_hanja_backspace(struct ct*);
|
|
void engine_hanja_input_languages(struct ct*);
|
|
void engine_randomized_stress(struct ct*);
|
|
void engine_full_boundary_passthrough(struct ct*);
|
|
void dictionary_candidates(struct ct*);
|
|
void dictionary_misses(struct ct*);
|
|
void dictionary_prefix(struct ct*);
|
|
void ipc_masks_modifiers(struct ct*);
|
|
void ipc_control_and_caret_frames(struct ct*);
|
|
void ipc_runtime_path(struct ct*);
|
|
void ipc_response_pack_boundaries(struct ct*);
|
|
void ipc_response_empty_and_preedit(struct ct*);
|
|
void ipc_response_max_and_drain(struct ct*);
|
|
void ipc_response_fragmented_and_truncated(struct ct*);
|
|
void ipc_broken_peer_send(struct ct*);
|
|
void server_connection_ownership(struct ct*);
|
|
void server_extension_stream(struct ct*);
|
|
void server_rejects_unknown_extension(struct ct*);
|
|
void ibus_machine_id_fallback(struct ct*);
|
|
void ibus_capability_policy(struct ct*);
|
|
void ibus_private_input_policy(struct ct*);
|
|
void ibus_context_lifecycle(struct ct*);
|
|
void ibus_active_release_lifecycle(struct ct*);
|
|
void compose_sequences(struct ct*);
|
|
void xim_keymap_lookup(struct ct*);
|
|
void xim_compound_text(struct ct*);
|
|
void xim_adapter_key_contract(struct ct*);
|
|
void xim_adapter_release_lifecycle(struct ct*);
|
|
void xim_adapter_free_waits_for_release(struct ct*);
|
|
void xim_adapter_styles(struct ct*);
|
|
void xim_adapter_placement(struct ct*);
|
|
void xim_adapter_placement_updates(struct ct*);
|
|
void xim_adapter_callback_replacement(struct ct*);
|
|
void xim_adapter_callback_unicode(struct ct*);
|
|
void xim_adapter_callback_cleanup(struct ct*);
|
|
void xim_adapter_callback_transfer(struct ct*);
|
|
void xim_adapter_callback_owner_loss(struct ct*);
|
|
void xim_adapter_commit_encoding(struct ct*);
|
|
void wl_modifier_mask(struct ct*);
|
|
void wl_forwarded_keys(struct ct*);
|
|
void wl_repeat_ends(struct ct*);
|