mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-20 05:05:47 +01:00
Add a test for basic Netscript functionality. (#235)
This commit is contained in:
parent
6a4d40ce2b
commit
ce1879fb62
82
test/jest/Netscript/RunScript.test.ts
Normal file
82
test/jest/Netscript/RunScript.test.ts
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
import { startWorkerScript } from "../../../src/NetscriptWorker";
|
||||||
|
import { Server } from "../../../src/Server/Server";
|
||||||
|
import { RunningScript } from "../../../src/Script/RunningScript";
|
||||||
|
import { AddToAllServers, DeleteServer } from "../../../src/Server/AllServers";
|
||||||
|
import { WorkerScriptStartStopEventEmitter } from "../../../src/Netscript/WorkerScriptStartStopEventEmitter";
|
||||||
|
import { AlertEvents } from "../../../src/ui/React/AlertManager";
|
||||||
|
|
||||||
|
test.each([
|
||||||
|
{
|
||||||
|
name: "NS1 test /w import",
|
||||||
|
expected: ["false home 8", "Script finished running"],
|
||||||
|
scripts: [
|
||||||
|
{
|
||||||
|
name: "import.script",
|
||||||
|
code: `
|
||||||
|
export function getInfo() {
|
||||||
|
return stock.has4SData();
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "simple_test.script",
|
||||||
|
code: `
|
||||||
|
import { getInfo } from "import.script";
|
||||||
|
|
||||||
|
var access = getInfo();
|
||||||
|
var server = getServer();
|
||||||
|
printf("%s %s %d", access, server.hostname, server.maxRam);
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
/* { // Doesn't work, due to issues with URL.createObjectURL
|
||||||
|
name: "NS2 test, no import",
|
||||||
|
expected: [
|
||||||
|
"false home 8",
|
||||||
|
"Script finished running",
|
||||||
|
],
|
||||||
|
scripts: [
|
||||||
|
{name: "simple_test.js", code: `
|
||||||
|
export async function main(ns) {
|
||||||
|
var access = ns.stock.has4SData();
|
||||||
|
var server = ns.getServer();
|
||||||
|
ns.printf("%s %s %d", access, server.hostname, server.maxRam);
|
||||||
|
}
|
||||||
|
`},
|
||||||
|
],
|
||||||
|
},*/
|
||||||
|
])("Netscript execution: $name", async function ({ expected: expectedLog, scripts }) {
|
||||||
|
let server, eventDelete, alertDelete;
|
||||||
|
try {
|
||||||
|
const alerted = new Promise((resolve) => {
|
||||||
|
alertDelete = AlertEvents.subscribe((x) => resolve(x));
|
||||||
|
});
|
||||||
|
server = new Server({ hostname: "home", hasAdminRights: true, maxRam: 8 });
|
||||||
|
AddToAllServers(server);
|
||||||
|
for (const s of scripts) {
|
||||||
|
expect(server.writeToScriptFile(s.name, s.code)).toEqual({ success: true, overwritten: false });
|
||||||
|
}
|
||||||
|
|
||||||
|
const script = server.scripts[server.scripts.length - 1];
|
||||||
|
expect(script.filename).toEqual(scripts[scripts.length - 1].name);
|
||||||
|
|
||||||
|
const runningScript = new RunningScript(script);
|
||||||
|
runningScript.threads = 1;
|
||||||
|
expect(startWorkerScript(runningScript, server)).toBeGreaterThan(0);
|
||||||
|
// We don't care about start, so subscribe after that. Await script death.
|
||||||
|
const result = await Promise.race([
|
||||||
|
alerted,
|
||||||
|
new Promise((resolve) => {
|
||||||
|
eventDelete = WorkerScriptStartStopEventEmitter.subscribe(() => resolve(null));
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
// If an error alert was thrown, we catch it here.
|
||||||
|
expect(result).toBeNull();
|
||||||
|
expect(runningScript.logs).toEqual(expectedLog);
|
||||||
|
} finally {
|
||||||
|
if (eventDelete) eventDelete();
|
||||||
|
if (server) DeleteServer(server.hostname);
|
||||||
|
if (alertDelete) alertDelete();
|
||||||
|
}
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user