at 23.11-beta 4.3 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.succeed("su - ${user.name} -c 'kill $(pgrep fcitx5)'") 93 machine.sleep(1) 94 95 machine.succeed("su - ${user.name} -c 'alacritty >&2 &'") 96 machine.succeed("su - ${user.name} -c 'fcitx5 >&2 &'") 97 machine.sleep(10) 98 99 ### Type on terminal 100 machine.send_chars("echo ") 101 machine.sleep(1) 102 103 ### Start fcitx Unicode input 104 machine.send_key("ctrl-alt-shift-u") 105 machine.sleep(1) 106 107 ### Search for smiling face 108 machine.send_chars("smil") 109 machine.sleep(1) 110 111 ### Navigate to the second one 112 machine.send_key("tab") 113 machine.sleep(1) 114 115 ### Choose it 116 machine.send_key("\n") 117 machine.sleep(1) 118 119 ### Start fcitx language input 120 machine.send_key("ctrl-spc") 121 machine.sleep(1) 122 123 ### Default wubi, enter 124 machine.send_chars("gggh ") 125 machine.sleep(1) 126 127 ### Switch to Hangul 128 machine.send_key("alt-shift") 129 machine.sleep(1) 130 131 ### Enter 132 machine.send_chars("gks") 133 machine.sleep(1) 134 135 ### Switch to Harvard Kyoto 136 machine.send_key("alt-shift") 137 machine.sleep(1) 138 139 ### Enter 140 machine.send_chars("ka") 141 machine.sleep(1) 142 143 ### Switch to Mozc 144 machine.send_key("alt-shift") 145 machine.sleep(1) 146 147 ### Enter 148 machine.send_chars("ka\n") 149 machine.sleep(1) 150 151 ### Turn off Fcitx 152 machine.send_key("ctrl-spc") 153 machine.sleep(1) 154 155 ### Redirect typed characters to a file 156 machine.send_chars(" > fcitx_test.out\n") 157 machine.sleep(1) 158 machine.screenshot("terminal_chars") 159 160 ### Verify that file contents are as expected 161 file_content = machine.succeed("cat ${user.home}/fcitx_test.out") 162 assert file_content == "\n" 163 '' 164 ; 165})