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