dictlookup took a Lang for two reasons that were not its business: to know whether to walk below the key (the emoji dictionary) and to drop a candidate equal to the key except there. No dictionary lists its key among its candidates — the rule was left from a first version that put the reading first itself — so it goes, and the walk is dictprefix(), called by the emoji search alone.
130 lines
4.7 KiB
C
130 lines
4.7 KiB
C
/* Included after dat.h and fn.h (or after the source under test). */
|
|
#include "cutest/cutest.h"
|
|
|
|
extern Lang testvi;
|
|
|
|
/*
|
|
* 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_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_startup_requires_ownership(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 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*);
|