aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/nixos/tests/fcitx/default.nix
import ../make-test-python.nix (
  {
    pkgs, ...
  }:
    # copy_from_host works only for store paths
    rec {
        name = "fcitx";
        machine =
        {
          pkgs,
          ...
        }:
          {
            virtualisation.memorySize = 1024;

            imports = [
              ../common/user-account.nix
            ];

            environment.systemPackages = [
              # To avoid clashing with xfce4-terminal
              pkgs.alacritty
            ];


            services.xserver =
            {
              enable = true;

              displayManager = {
                lightdm.enable = true;
                autoLogin = {
                  enable = true;
                  user = "alice";
                };
              };

              desktopManager.xfce.enable = true;
            };

            i18n = {
              inputMethod = {
                enabled = "fcitx";
                fcitx.engines = [
                  pkgs.fcitx-engines.m17n
                  pkgs.fcitx-engines.table-extra
                ];
              };
            };
          }
        ;

        testScript = { nodes, ... }:
        let
            user = nodes.machine.config.users.users.alice;
            userName      = user.name;
            userHome      = user.home;
            xauth         = "${userHome}/.Xauthority";
            fcitx_confdir = "${userHome}/.config/fcitx";
        in
        ''
            # We need config files before login session
            # So copy first thing

            # Point and click would be expensive,
            # So configure using files
            machine.copy_from_host(
                "${./profile}",
                "${fcitx_confdir}/profile",
            )
            machine.copy_from_host(
                "${./config}",
                "${fcitx_confdir}/config",
            )

            start_all()

            machine.wait_for_file("${xauth}")
            machine.succeed("xauth merge ${xauth}")

            machine.sleep(5)

            machine.succeed("su - ${userName} -c 'alacritty&'")
            machine.succeed("su - ${userName} -c 'fcitx&'")
            machine.sleep(10)

            ### Type on terminal
            machine.send_chars("echo ")
            machine.sleep(1)

            ### Start fcitx Unicode input
            machine.send_key("ctrl-alt-shift-u")
            machine.sleep(5)
            machine.sleep(1)

            ### Search for smiling face
            machine.send_chars("smil")
            machine.sleep(1)

            ### Navigate to the second one
            machine.send_key("tab")
            machine.sleep(1)

            ### Choose it
            machine.send_key("\n")
            machine.sleep(1)

            ### Start fcitx language input
            machine.send_key("ctrl-spc")
            machine.sleep(1)

            ### Default zhengma, enter 一下
            machine.send_chars("a2")
            machine.sleep(1)

            ### Switch to Harvard Kyoto
            machine.send_key("alt-shift")
            machine.sleep(1)

            ### Enter क
            machine.send_chars("ka ")
            machine.sleep(1)

            machine.send_key("alt-shift")
            machine.sleep(1)

            ### Turn off Fcitx
            machine.send_key("ctrl-spc")
            machine.sleep(1)

            ### Redirect typed characters to a file
            machine.send_chars(" > fcitx_test.out\n")
            machine.sleep(1)
            machine.screenshot("terminal_chars")

            ### Verify that file contents are as expected
            file_content = machine.succeed("cat ${userHome}/fcitx_test.out")
            assert file_content == "☺一下क\n"
            ''
    ;
  }
)