From 7ef8df8767914249192d09d9056f13e04e54a7e6 Mon Sep 17 00:00:00 2001 From: Patrick Hilhorst Date: Thu, 24 Feb 2022 20:23:40 +0100 Subject: [PATCH] nixosTests.nano: replace with script using GNU expect --- nixos/tests/all-tests.nix | 1 - nixos/tests/nano.nix | 44 ------------------- pkgs/applications/editors/nano/default.nix | 6 ++- .../editors/nano/test-with-expect.nix | 35 +++++++++++++++ 4 files changed, 39 insertions(+), 47 deletions(-) delete mode 100644 nixos/tests/nano.nix create mode 100644 pkgs/applications/editors/nano/test-with-expect.nix diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index c9c39e792514..53637861febf 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -322,7 +322,6 @@ in mysql-replication = handleTest ./mysql/mysql-replication.nix {}; n8n = handleTest ./n8n.nix {}; nagios = handleTest ./nagios.nix {}; - nano = handleTest ./nano.nix {}; nar-serve = handleTest ./nar-serve.nix {}; nat.firewall = handleTest ./nat.nix { withFirewall = true; }; nat.firewall-conntrack = handleTest ./nat.nix { withFirewall = true; withConntrackHelpers = true; }; diff --git a/nixos/tests/nano.nix b/nixos/tests/nano.nix deleted file mode 100644 index 6585a6842e85..000000000000 --- a/nixos/tests/nano.nix +++ /dev/null @@ -1,44 +0,0 @@ -import ./make-test-python.nix ({ pkgs, ...} : { - name = "nano"; - meta = with pkgs.lib.maintainers; { - maintainers = [ nequissimus ]; - }; - - machine = { lib, ... }: { - environment.systemPackages = [ pkgs.nano ]; - }; - - testScript = { ... }: '' - start_all() - - with subtest("Create user and log in"): - machine.wait_for_unit("multi-user.target") - machine.wait_until_succeeds("pgrep -f 'agetty.*tty1'") - machine.succeed("useradd -m alice") - machine.succeed("(echo foobar; echo foobar) | passwd alice") - machine.wait_until_tty_matches(1, "login: ") - machine.send_chars("alice\n") - machine.wait_until_tty_matches(1, "login: alice") - machine.wait_until_succeeds("pgrep login") - machine.wait_until_tty_matches(1, "Password: ") - machine.send_chars("foobar\n") - machine.wait_until_succeeds("pgrep -u alice bash") - machine.screenshot("prompt") - - with subtest("Use nano"): - machine.send_chars("nano /tmp/foo") - machine.send_key("ret") - machine.sleep(2) - machine.send_chars("42") - machine.sleep(1) - machine.send_key("ctrl-x") - machine.sleep(1) - machine.send_key("y") - machine.sleep(1) - machine.screenshot("nano") - machine.sleep(1) - machine.send_key("ret") - machine.wait_for_file("/tmp/foo") - assert "42" in machine.succeed("cat /tmp/foo") - ''; -}) diff --git a/pkgs/applications/editors/nano/default.nix b/pkgs/applications/editors/nano/default.nix index f7d6004b5816..658c18e5cb5c 100644 --- a/pkgs/applications/editors/nano/default.nix +++ b/pkgs/applications/editors/nano/default.nix @@ -1,5 +1,5 @@ { lib, stdenv, fetchurl, fetchFromGitHub, ncurses, texinfo, writeScript -, common-updater-scripts, git, nix, nixfmt, coreutils, gnused, nixosTests +, common-updater-scripts, git, nix, nixfmt, coreutils, gnused, callPackage , gettext ? null, enableNls ? true, enableTiny ? false }: assert enableNls -> (gettext != null); @@ -41,7 +41,9 @@ in stdenv.mkDerivation rec { enableParallelBuilding = true; passthru = { - tests = { inherit (nixosTests) nano; }; + tests = { + expect = callPackage ./test-with-expect.nix {}; + }; updateScript = writeScript "update.sh" '' #!${stdenv.shell} diff --git a/pkgs/applications/editors/nano/test-with-expect.nix b/pkgs/applications/editors/nano/test-with-expect.nix new file mode 100644 index 000000000000..bd48eba4324b --- /dev/null +++ b/pkgs/applications/editors/nano/test-with-expect.nix @@ -0,0 +1,35 @@ +{ nano, expect, runCommand, writeScriptBin, runtimeShell }: + +let expect-script = writeScriptBin "expect-script" '' + #!${expect}/bin/expect -f + + # Load nano + spawn nano file.txt + expect "GNU nano ${nano.version}" + + # Add some text to the buffer + send "Hello world!" + expect "Hello world!" + + # Send ctrl-x (exit) + send "\030" + expect "Save modified buffer?" + + # Answer "yes" + send "y" + expect "File Name to Write" + + # Send "return" to accept the file path. + send "\r" + sleep 1 + exit +''; in +runCommand "nano-test-expect" +{ + nativeBuildInputs = [ nano expect ]; + passthru = { inherit expect-script; }; +} '' + expect -f ${expect-script}/bin/expect-script + grep "Hello world!" file.txt + touch $out +''