blob: 5f545fe08814a180a1bb4ef71420aa99e48b5a1f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
{ 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 = 2047;
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.humblebundle.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 "join-game" 100 560}
$client->waitForText(qr/select/i);
${clickAt "new-character" 460 220}
$client->waitForText(qr/randomise/i);
${clickAt "create-character" 600 625}
$client->waitForText(qr/select/i);
${clickAt "use-character" 460 220}
$client->waitForText(qr/ser[vu]er/i);
${clickAt "server-address" 460 322}
${typeText "server-address" "192.168.0.1"}
${clickAt "server-account" 490 354}
${typeText "server-account" "alice"}
${clickAt "server-password" 490 386}
${typeText "server-password" "secret"}
${clickAt "join-server" 495 420}
$client->waitForText(qr/graduation/i);
$client->sleep(30);
$client->screenshot("client");
'';
}
|