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 };
40 };
41
42 testScript = { nodes, ... }:
43 let
44 user = nodes.machine.users.users.alice;
45 xauth = "${user.home}/.Xauthority";
46 fcitx_confdir = "${user.home}/.config/fcitx5";
47 in
48 ''
49 start_all()
50
51 machine.wait_for_x()
52 machine.wait_for_file("${xauth}")
53 machine.succeed("xauth merge ${xauth}")
54 machine.sleep(5)
55
56 machine.succeed("su - ${user.name} -c 'kill $(pgrep fcitx5)'")
57 machine.sleep(1)
58
59 machine.copy_from_host(
60 "${./profile}",
61 "${fcitx_confdir}/profile",
62 )
63 machine.copy_from_host(
64 "${./config}",
65 "${fcitx_confdir}/config",
66 )
67
68 machine.succeed("su - ${user.name} -c 'alacritty >&2 &'")
69 machine.succeed("su - ${user.name} -c 'fcitx5 >&2 &'")
70 machine.sleep(10)
71
72 ### Type on terminal
73 machine.send_chars("echo ")
74 machine.sleep(1)
75
76 ### Start fcitx Unicode input
77 machine.send_key("ctrl-alt-shift-u")
78 machine.sleep(1)
79
80 ### Search for smiling face
81 machine.send_chars("smil")
82 machine.sleep(1)
83
84 ### Navigate to the second one
85 machine.send_key("tab")
86 machine.sleep(1)
87
88 ### Choose it
89 machine.send_key("\n")
90 machine.sleep(1)
91
92 ### Start fcitx language input
93 machine.send_key("ctrl-spc")
94 machine.sleep(1)
95
96 ### Default wubi, enter 一下
97 machine.send_chars("gggh ")
98 machine.sleep(1)
99
100 ### Switch to Hangul
101 machine.send_key("alt-shift")
102 machine.sleep(1)
103
104 ### Enter 한
105 machine.send_chars("gks")
106 machine.sleep(1)
107
108 ### Switch to Harvard Kyoto
109 machine.send_key("alt-shift")
110 machine.sleep(1)
111
112 ### Enter क
113 machine.send_chars("ka")
114 machine.sleep(1)
115
116 ### Switch to Mozc
117 machine.send_key("alt-shift")
118 machine.sleep(1)
119
120 ### Enter か
121 machine.send_chars("ka\n")
122 machine.sleep(1)
123
124 ### Turn off Fcitx
125 machine.send_key("ctrl-spc")
126 machine.sleep(1)
127
128 ### Redirect typed characters to a file
129 machine.send_chars(" > fcitx_test.out\n")
130 machine.sleep(1)
131 machine.screenshot("terminal_chars")
132
133 ### Verify that file contents are as expected
134 file_content = machine.succeed("cat ${user.home}/fcitx_test.out")
135 assert file_content == "☺一下한कか\n"
136 ''
137 ;
138})