143 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			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"
 | 
						|
            ''
 | 
						|
    ;
 | 
						|
  }
 | 
						|
)
 |