at 24.11-pre 4.4 kB view raw
1import ../make-test-python.nix ({ lib, ... }: 2rec { 3 name = "fcitx5"; 4 meta.maintainers = with lib.maintainers; [ nevivurn ]; 5 6 nodes.machine = { pkgs, ... }: 7 { 8 imports = [ 9 ../common/user-account.nix 10 ]; 11 12 environment.systemPackages = [ 13 # To avoid clashing with xfce4-terminal 14 pkgs.alacritty 15 ]; 16 17 services.xserver = { 18 enable = true; 19 20 displayManager = { 21 lightdm.enable = true; 22 autoLogin = { 23 enable = true; 24 user = "alice"; 25 }; 26 }; 27 28 desktopManager.xfce.enable = true; 29 }; 30 31 i18n.inputMethod = { 32 enabled = "fcitx5"; 33 fcitx5.addons = [ 34 pkgs.fcitx5-chinese-addons 35 pkgs.fcitx5-hangul 36 pkgs.fcitx5-m17n 37 pkgs.fcitx5-mozc 38 ]; 39 fcitx5.settings = { 40 globalOptions = { 41 "Hotkey"."EnumerateSkipFirst" = "False"; 42 "Hotkey/TriggerKeys"."0" = "Control+space"; 43 "Hotkey/EnumerateForwardKeys"."0" = "Alt+Shift_L"; 44 "Hotkey/EnumerateBackwardKeys"."0" = "Alt+Shift_R"; 45 }; 46 inputMethod = { 47 "GroupOrder" = { 48 "0" = "NixOS_test"; 49 }; 50 "Groups/0" = { 51 "Default Layout" = "us"; 52 "DefaultIM" = "wbx"; 53 "Name" = "NixOS_test"; 54 }; 55 "Groups/0/Items/0" = { 56 "Name" = "keyboard-us"; 57 }; 58 "Groups/0/Items/1" = { 59 "Layout" = "us"; 60 "Name" = "wbx"; 61 }; 62 "Groups/0/Items/2" = { 63 "Layout" = "us"; 64 "Name" = "hangul"; 65 }; 66 "Groups/0/Items/3" = { 67 "Layout" = "us"; 68 "Name" = "m17n_sa_harvard-kyoto"; 69 }; 70 "Groups/0/Items/4" = { 71 "Layout" = "us"; 72 "Name" = "mozc"; 73 }; 74 }; 75 }; 76 }; 77 }; 78 79 testScript = { nodes, ... }: 80 let 81 user = nodes.machine.users.users.alice; 82 xauth = "${user.home}/.Xauthority"; 83 in 84 '' 85 start_all() 86 87 machine.wait_for_x() 88 machine.wait_for_file("${xauth}") 89 machine.succeed("xauth merge ${xauth}") 90 machine.sleep(5) 91 92 machine.wait_until_succeeds("pgrep fcitx5") 93 machine.succeed("su - ${user.name} -c 'kill $(pgrep fcitx5)'") 94 machine.sleep(1) 95 96 machine.succeed("su - ${user.name} -c 'alacritty >&2 &'") 97 machine.wait_for_window("alice@machine") 98 99 machine.succeed("su - ${user.name} -c 'fcitx5 >&2 &'") 100 machine.sleep(10) 101 102 ### Type on terminal 103 machine.send_chars("echo ") 104 machine.sleep(1) 105 106 ### Start fcitx Unicode input 107 machine.send_key("ctrl-alt-shift-u") 108 machine.sleep(1) 109 110 ### Search for smiling face 111 machine.send_chars("smil") 112 machine.sleep(1) 113 114 ### Navigate to the second one 115 machine.send_key("tab") 116 machine.sleep(1) 117 118 ### Choose it 119 machine.send_key("\n") 120 machine.sleep(1) 121 122 ### Start fcitx language input 123 machine.send_key("ctrl-spc") 124 machine.sleep(1) 125 126 ### Default wubi, enter 127 machine.send_chars("gggh ") 128 machine.sleep(1) 129 130 ### Switch to Hangul 131 machine.send_key("alt-shift") 132 machine.sleep(1) 133 134 ### Enter 135 machine.send_chars("gks") 136 machine.sleep(1) 137 138 ### Switch to Harvard Kyoto 139 machine.send_key("alt-shift") 140 machine.sleep(1) 141 142 ### Enter 143 machine.send_chars("ka") 144 machine.sleep(1) 145 146 ### Switch to Mozc 147 machine.send_key("alt-shift") 148 machine.sleep(1) 149 150 ### Enter 151 machine.send_chars("ka\n") 152 machine.sleep(1) 153 154 ### Turn off Fcitx 155 machine.send_key("ctrl-spc") 156 machine.sleep(1) 157 158 ### Redirect typed characters to a file 159 machine.send_chars(" > fcitx_test.out\n") 160 machine.sleep(1) 161 machine.screenshot("terminal_chars") 162 163 ### Verify that file contents are as expected 164 file_content = machine.succeed("cat ${user.home}/fcitx_test.out") 165 assert file_content == "\n" 166 '' 167 ; 168})