nixos/tests: add musescore

Changed files
+90
nixos
pkgs
applications
audio
musescore
+1
nixos/tests/all-tests.nix
···
mosquitto = handleTest ./mosquitto.nix {};
mpd = handleTest ./mpd.nix {};
mumble = handleTest ./mumble.nix {};
+
musescore = handleTest ./musescore.nix {};
munin = handleTest ./munin.nix {};
mutableUsers = handleTest ./mutable-users.nix {};
mxisd = handleTest ./mxisd.nix {};
+86
nixos/tests/musescore.nix
···
+
import ./make-test-python.nix ({ pkgs, ...} :
+
+
let
+
# Make sure we don't have to go through the startup tutorial
+
customMuseScoreConfig = pkgs.writeText "MuseScore3.ini" ''
+
[application]
+
startup\firstStart=false
+
+
[ui]
+
application\startup\showTours=false
+
application\startup\showStartCenter=false
+
'';
+
in
+
{
+
name = "musescore";
+
meta = with pkgs.lib.maintainers; {
+
maintainers = [ turion ];
+
};
+
+
machine = { ... }:
+
+
{
+
imports = [
+
./common/x11.nix
+
];
+
+
services.xserver.enable = true;
+
environment.systemPackages = with pkgs; [
+
musescore
+
pdfgrep
+
];
+
};
+
+
enableOCR = true;
+
+
testScript = { ... }: ''
+
start_all()
+
machine.wait_for_x()
+
+
# Inject custom settings
+
machine.succeed("mkdir -p /root/.config/MuseScore/")
+
machine.succeed(
+
"cp ${customMuseScoreConfig} /root/.config/MuseScore/MuseScore3.ini"
+
)
+
+
# Start MuseScore window
+
machine.execute("DISPLAY=:0.0 mscore &")
+
+
# Wait until MuseScore has launched
+
machine.wait_for_window("MuseScore")
+
+
# Wait until the window has completely initialised
+
machine.wait_for_text("MuseScore")
+
+
# Start entering notes
+
machine.send_key("n")
+
# Type the beginning of https://de.wikipedia.org/wiki/Alle_meine_Entchen
+
machine.send_chars("cdef6gg5aaaa7g")
+
# Make sure the VM catches up with all the keys
+
machine.sleep(1)
+
+
machine.screenshot("MuseScore0")
+
+
# Go to the export dialogue and create a PDF
+
machine.send_key("alt-f")
+
machine.sleep(1)
+
machine.send_key("e")
+
+
# Wait until the export dialogue appears.
+
machine.wait_for_window("Export")
+
machine.screenshot("MuseScore1")
+
machine.send_key("ret")
+
machine.sleep(1)
+
machine.send_key("ret")
+
+
machine.screenshot("MuseScore2")
+
+
# Wait until PDF is exported
+
machine.wait_for_file("/root/Documents/MuseScore3/Scores/Untitled.pdf")
+
+
# Check that it contains the title of the score
+
machine.succeed("pdfgrep Title /root/Documents/MuseScore3/Scores/Untitled.pdf")
+
+
machine.screenshot("MuseScore3")
+
'';
+
})
+3
pkgs/applications/audio/musescore/default.nix
···
, portaudio, portmidi, qtbase, qtdeclarative, qtgraphicaleffects
, qtquickcontrols2, qtscript, qtsvg, qttools
, qtwebengine, qtxmlpatterns
+
, nixosTests
}:
mkDerivation rec {
···
qtbase qtdeclarative qtgraphicaleffects qtquickcontrols2
qtscript qtsvg qttools qtwebengine qtxmlpatterns
];
+
+
passthru.tests = nixosTests.musescore;
meta = with lib; {
description = "Music notation and composition software";