about summary refs log tree commit diff
path: root/tests/games/starbound.nix
diff options
context:
space:
mode:
Diffstat (limited to 'tests/games/starbound.nix')
-rw-r--r--tests/games/starbound.nix117
1 files changed, 117 insertions, 0 deletions
diff --git a/tests/games/starbound.nix b/tests/games/starbound.nix
new file mode 100644
index 00000000..a2c8ba64
--- /dev/null
+++ b/tests/games/starbound.nix
@@ -0,0 +1,117 @@
+{ pkgs, ... }:
+
+let
+  xdo = { name, description, xdoScript }: let
+    xdoFile = pkgs.writeText "${name}.xdo" ''
+      search --onlyvisible --class starbound
+      windowfocus --sync
+      windowactivate --sync
+      ${xdoScript}
+    '';
+    escapeScreenshot = pkgs.lib.replaceStrings ["-"] ["_"];
+  in ''
+    $client->nest("${description}", sub {
+      $client->screenshot("before_${escapeScreenshot name}");
+      $client->succeed("${pkgs.xdotool}/bin/xdotool '${xdoFile}'");
+    });
+  '';
+
+  clickAt = name: x: y: xdo {
+    name = "click-${name}";
+    description = "clicking on ${name} (coords ${toString x} ${toString y})";
+    xdoScript = ''
+      mousemove --window %1 --sync ${toString x} ${toString y}
+      click --repeat 10 1
+    '';
+  };
+
+  typeText = name: text: xdo {
+    name = "type-${name}";
+    description = "typing `${text}' into Starbound";
+    xdoScript = ''
+      type --delay 200 '${text}'
+    '';
+  };
+
+in {
+  name = "starbound";
+
+  enableOCR = true;
+
+  nodes = {
+    server = {
+      vuizvui.services.starbound = {
+        enable = true;
+        # Use a different dataDir than the default to make
+        # sure everything is still working.
+        dataDir = "/var/lib/starbound-test";
+        users.alice.password = "secret";
+      };
+      virtualisation.memorySize = 1024;
+      networking.interfaces.eth1.ipAddress = "192.168.0.1";
+      networking.interfaces.eth1.prefixLength = 24;
+      networking.firewall.enable = false;
+    };
+
+    client = { pkgs, ... }: {
+      imports = [
+        "${import ../../nixpkgs-path.nix}/nixos/tests/common/x11.nix"
+      ];
+      virtualisation.memorySize = 2047;
+      environment.systemPackages = [ pkgs.vuizvui.games.steam.starbound ];
+      networking.interfaces.eth1.ipAddress = "192.168.0.2";
+      networking.interfaces.eth1.prefixLength = 24;
+      networking.firewall.enable = false;
+    };
+  };
+
+  testScript = ''
+    $server->waitForUnit("starbound.service");
+
+    $client->nest("waiting for client to start up", sub {
+      $client->waitForX;
+      $client->succeed("starbound >&2 &");
+      $client->waitForText(qr/options/i);
+    });
+
+    ${clickAt "multiplayer" 100 460}
+    $client->waitForText(qr/select/i);
+    ${clickAt "new-character" 460 170}
+    $client->waitForText(qr/species/i);
+    ${clickAt "create-character" 600 525}
+    $client->waitForText(qr/select/i);
+    ${clickAt "use-character" 460 170}
+    $client->waitForText(qr/ser[vu]er/i);
+
+    ${clickAt "server-address" 460 272}
+    ${typeText "server-address" "192.168.0.1"}
+
+    ${clickAt "server-account" 490 304}
+    ${typeText "server-account" "alice"}
+
+    ${clickAt "server-password" 490 336}
+    ${typeText "server-password" "secret"}
+
+    ${clickAt "join-server" 495 370}
+
+    $client->waitForText(qr/q[uv]est/i);
+    ${xdo {
+      name = "close-quest-dialog";
+      description = "closing the quest dialog window";
+      xdoScript = ''
+        key Escape
+      '';
+    }}
+    ${xdo {
+      name = "move-right";
+      description = "moving to the right of the ship";
+      xdoScript = ''
+        keydown d
+        sleep 10
+        keyup d
+      '';
+    }}
+
+    $client->screenshot("client");
+  '';
+}