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"
 | |
|             ''
 | |
|     ;
 | |
|   }
 | |
| )
 | 
