{ micro, expect, runCommand, writeScript, runtimeShell }:

let expect-script = writeScript "expect-script" ''
  #!${expect}/bin/expect -f

  spawn micro file.txt
  expect "file.txt"

  send "Hello world!"
  expect "Hello world!"

  # Send ctrl-q (exit)
  send "\021"

  expect "Save changes to file.txt before closing?"
  send "y"

  expect eof
''; in
runCommand "micro-test-expect"
{
  nativeBuildInputs = [ micro expect ];
  passthru = { inherit expect-script; };
} ''
  # Micro really wants a writable $HOME for its config directory.
  export HOME=$(pwd)
  expect -f ${expect-script}
  grep "Hello world!" file.txt
  touch $out
''