/* 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_reaches_back(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_surrounding_text(struct ct*); void wl_repeat_ends(struct ct*);