at 25.11-pre 4.5 kB view raw
1import ../make-test-python.nix ( 2 { lib, ... }: 3 rec { 4 name = "fcitx5"; 5 meta.maintainers = with lib.maintainers; [ nevivurn ]; 6 7 nodes.machine = 8 { pkgs, ... }: 9 { 10 imports = [ 11 ../common/user-account.nix 12 ]; 13 14 environment.systemPackages = [ 15 # To avoid clashing with xfce4-terminal 16 pkgs.alacritty 17 ]; 18 19 services.displayManager.autoLogin = { 20 enable = true; 21 user = "alice"; 22 }; 23 24 services.xserver = { 25 enable = true; 26 displayManager.lightdm.enable = true; 27 desktopManager.xfce.enable = true; 28 }; 29 30 i18n.inputMethod = { 31 enable = true; 32 type = "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 = 80 { nodes, ... }: 81 let 82 user = nodes.machine.users.users.alice; 83 xauth = "${user.home}/.Xauthority"; 84 in 85 '' 86 start_all() 87 88 machine.wait_for_x() 89 machine.wait_for_file("${xauth}") 90 machine.succeed("xauth merge ${xauth}") 91 machine.sleep(5) 92 93 machine.wait_until_succeeds("pgrep fcitx5") 94 machine.succeed("su - ${user.name} -c 'kill $(pgrep fcitx5)'") 95 machine.sleep(1) 96 97 machine.succeed("su - ${user.name} -c 'alacritty >&2 &'") 98 machine.wait_for_window("alice@machine") 99 100 machine.succeed("su - ${user.name} -c 'fcitx5 >&2 &'") 101 machine.sleep(10) 102 103 ### Type on terminal 104 machine.send_chars("echo ") 105 machine.sleep(1) 106 107 ### Start fcitx Unicode input 108 machine.send_key("ctrl-alt-shift-u") 109 machine.sleep(1) 110 111 ### Search for smiling face 112 machine.send_chars("smil") 113 machine.sleep(1) 114 115 ### Navigate to the second one 116 machine.send_key("tab") 117 machine.sleep(1) 118 119 ### Choose it 120 machine.send_key("\n") 121 machine.sleep(1) 122 123 ### Start fcitx language input 124 machine.send_key("ctrl-spc") 125 machine.sleep(1) 126 127 ### Default wubi, enter 128 machine.send_chars("gggh ") 129 machine.sleep(1) 130 131 ### Switch to Hangul 132 machine.send_key("alt-shift") 133 machine.sleep(1) 134 135 ### Enter 136 machine.send_chars("gks") 137 machine.sleep(1) 138 139 ### Switch to Harvard Kyoto 140 machine.send_key("alt-shift") 141 machine.sleep(1) 142 143 ### Enter 144 machine.send_chars("ka") 145 machine.sleep(1) 146 147 ### Switch to Mozc 148 machine.send_key("alt-shift") 149 machine.sleep(1) 150 151 ### Enter 152 machine.send_chars("ka\n") 153 machine.sleep(1) 154 155 ### Turn off Fcitx 156 machine.send_key("ctrl-spc") 157 machine.sleep(1) 158 159 ### Redirect typed characters to a file 160 machine.send_chars(" > fcitx_test.out\n") 161 machine.sleep(1) 162 machine.screenshot("terminal_chars") 163 164 ### Verify that file contents are as expected 165 file_content = machine.succeed("cat ${user.home}/fcitx_test.out") 166 assert file_content == "\n", f'output does not match input:\n{file_content}' 167 ''; 168 } 169)