Edit

kc3-lang/libxkbcommon/test/test-keysym.py

Branch :

  • Show log

    Commit

  • Author : Pierre Le Marre
    Date : 2023-09-28 09:50:43
    Hash : 1a4a89a7
    Message : Python: make ruff & black happy

  • test/test-keysym.py
  • #!/usr/bin/env python3
    #
    # This script creates a custom layout, overriding the TDLE key with the first
    # argument given.
    
    import argparse
    import tempfile
    from pathlib import Path
    import subprocess
    import os
    import re
    import sys
    
    # Template to force our key to TLDE
    template = """
    default
    xkb_symbols "basic" {{
        include "us(basic)"
        replace key <TLDE> {{ [ {} ] }};
    }};
    """
    
    parser = argparse.ArgumentParser(
        description="Tool to verify whether a keysym is resolved"
    )
    parser.add_argument("keysym", type=str, help="XKB keysym")
    parser.add_argument(
        "--tool",
        type=str,
        nargs=1,
        default=["xkbcli", "compile-keymap"],
        help="Full path to the xkbcli-compile-keymap tool",
    )
    args = parser.parse_args()
    
    with tempfile.TemporaryDirectory() as tmpdir:
        symfile = Path(tmpdir) / "symbols" / "keytest"
        symfile.parent.mkdir()
        with symfile.open(mode="w") as f:
            f.write(template.format(args.keysym))
    
        try:
            cmd = [
                *args.tool,
                "--layout",
                "keytest",
            ]
    
            env = os.environ.copy()
            env["XKB_CONFIG_EXTRA_PATH"] = tmpdir
    
            result = subprocess.run(
                cmd, env=env, capture_output=True, universal_newlines=True
            )
            if result.returncode != 0:
                print("ERROR: Failed to compile:")
                print(result.stderr)
                sys.exit(1)
    
            # grep for TLDE actually being remapped
            for l in result.stdout.split("\n"):
                match = re.match(r"\s+key \<TLDE\>\s+{\s+\[\s+(?P<keysym>\w+)\s+\]\s+}", l)
                if match:
                    if args.keysym == match.group("keysym"):
                        sys.exit(0)
                    elif match.group("keysym") == "NoSymbol":
                        print("ERROR: key {} not resolved:".format(args.keysym), l)
                    else:
                        print("ERROR: key {} mapped to wrong key:".format(args.keysym), l)
                    sys.exit(1)
    
            print(result.stdout)
            print("ERROR: above keymap is missing key mapping for {}".format(args.keysym))
            sys.exit(1)
        except FileNotFoundError as err:
            print("ERROR: invalid or missing tool: {}".format(err))
            sys.exit(1)