Files
scratch-vm/test/integration/tw_security_manager.js
T
GarboMuffin dcc0d961d7 Automatically load custom extensions saved in project
Requires disabled-by-default security manager configuration
2022-10-22 22:02:30 -05:00

64 lines
2.0 KiB
JavaScript

const {test} = require('tap');
const fs = require('fs');
const path = require('path');
const VirtualMachine = require('../../src/virtual-machine');
const testProject = fs.readFileSync(path.join(__dirname, '..', 'fixtures', 'tw-project-with-extensions.sb3'));
// The test project contains two extensions: a fetch one and a bitwise one.
const FETCH_EXTENSION = 'https://extensions.turbowarp.org/fetch.js';
const BITWISE_EXTENSION = 'https://extensions.turbowarp.org/bitwise.js';
test('Deny both extensions', async t => {
const vm = new VirtualMachine();
vm.extensionManager.loadExtensionURL = () => {
t.fail();
};
vm.securityManager.canLoadExtensionFromProject = () => false;
try {
await vm.loadProject(testProject);
// loadProject() should fail because extensions were denied
t.fail();
} catch (e) {
t.pass();
}
t.end();
});
test('Deny 1 of 2 extensions', async t => {
const vm = new VirtualMachine();
vm.extensionManager.loadExtensionURL = () => {
t.fail();
};
vm.securityManager.canLoadExtensionFromProject = url => Promise.resolve(url === FETCH_EXTENSION);
try {
await vm.loadProject(testProject);
// loadProject() should fail because extensions were denied
t.fail();
} catch (e) {
t.pass();
}
t.end();
});
test('Allow both extensions', async t => {
const vm = new VirtualMachine();
const loadedExtensions = [];
vm.extensionManager.loadExtensionURL = url => {
loadedExtensions.push(url);
return Promise.resolve();
};
vm.securityManager.canLoadExtensionFromProject = url => {
if (url === FETCH_EXTENSION) {
return true;
}
if (url === BITWISE_EXTENSION) {
return Promise.resolve(true);
}
t.fail('unknown extension');
};
await vm.loadProject(testProject);
t.same(new Set(loadedExtensions), new Set([FETCH_EXTENSION, BITWISE_EXTENSION]));
t.end();
});