test: don't use process.exit to end tests

Newer versions of `tap` run more asynchronously, so sometimes using `process.nextTick(process.exit)`
to end a test would prevent the test from completing correctly. Removing all instances of
`process.nextTick(process.exit)` put tests into three categories:
* the test still worked correctly -- no fixup needed.
* the test would hang because the VM's `_steppingInterval` was keeping
  Node alive. These tests call a new `quit()` method which ends the
  stepping interval.
* the `load-extensions` test needed special attention because the "Video
  Sensing" extension starts its own loop using `setTimeout`. I added a
  `_stopLoop()` method on the extension and directly call that from the
  test. I'm not completely happy with this solution but anything more
  general would likely require a change to the extension spec, so I'm
  leaving that as a followup task.
This commit is contained in:
Christopher Willis-Ford 2022-06-06 12:00:10 -07:00
parent 605b1c2386
commit 840ffb5df0
69 changed files with 182 additions and 156 deletions
test/integration

View file

@ -66,6 +66,8 @@ fs.readdirSync(executeDir)
log.suggest.deny('vm', 'error');
t.tearDown(() => log.suggest.clear());
const vm = new VirtualMachine();
// Map string messages to tap reporting methods. This will be used
// with events from scratch's runtime emitted on block instructions.
let didPlan;
@ -86,6 +88,7 @@ fs.readdirSync(executeDir)
},
end () {
didEnd = true;
vm.quit();
t.end();
}
};
@ -100,7 +103,6 @@ fs.readdirSync(executeDir)
return reporters.comment(text);
};
const vm = new VirtualMachine();
vm.attachStorage(makeTestStorage());
// Start the VM and initialize some vm properties.
@ -138,6 +140,7 @@ fs.readdirSync(executeDir)
// it can be resolved.
if (!didEnd) {
t.fail('did not say "end"');
vm.quit();
t.end();
}
});