summaryrefslogtreecommitdiff
path: root/runtime/js/40_testing.js
diff options
context:
space:
mode:
authorCasper Beyer <caspervonb@pm.me>2021-07-14 06:11:02 +0800
committerGitHub <noreply@github.com>2021-07-14 00:11:02 +0200
commit9cb48bd8fe8ee1d7c728c0de54c3bd5e728b6a8c (patch)
tree39e7e2597939df917e8d39909cfb9b8262aaca1e /runtime/js/40_testing.js
parent9dc33907207eaafdd21ebcdcf3faee9d455d8f4c (diff)
refactor(runtime): apply permissions as a hook during registration (#11347)
Diffstat (limited to 'runtime/js/40_testing.js')
-rw-r--r--runtime/js/40_testing.js53
1 files changed, 31 insertions, 22 deletions
diff --git a/runtime/js/40_testing.js b/runtime/js/40_testing.js
index 4ee863ee7..0d4c23120 100644
--- a/runtime/js/40_testing.js
+++ b/runtime/js/40_testing.js
@@ -105,6 +105,29 @@ finishing test case.`;
};
}
+ function withPermissions(fn, permissions) {
+ function pledgePermissions(permissions) {
+ return core.opSync(
+ "op_pledge_test_permissions",
+ parsePermissions(permissions),
+ );
+ }
+
+ function restorePermissions(token) {
+ core.opSync("op_restore_test_permissions", token);
+ }
+
+ return async function applyPermissions() {
+ const token = pledgePermissions(permissions);
+
+ try {
+ await fn();
+ } finally {
+ restorePermissions(token);
+ }
+ };
+ }
+
const tests = [];
// Main test function provided by Deno, as you can see it merely
@@ -153,6 +176,13 @@ finishing test case.`;
testDef.fn = assertExit(testDef.fn);
}
+ if (testDef.permissions) {
+ testDef.fn = withPermissions(
+ testDef.fn,
+ parsePermissions(testDef.permissions),
+ );
+ }
+
ArrayPrototypePush(tests, testDef);
}
@@ -180,37 +210,16 @@ finishing test case.`;
};
}
- function pledgeTestPermissions(permissions) {
- return core.opSync(
- "op_pledge_test_permissions",
- parsePermissions(permissions),
- );
- }
-
- function restoreTestPermissions(token) {
- core.opSync("op_restore_test_permissions", token);
- }
-
- async function runTest({ ignore, fn, permissions }) {
+ async function runTest({ ignore, fn }) {
if (ignore) {
return "ignored";
}
- let token = null;
-
try {
- if (permissions) {
- token = pledgeTestPermissions(permissions);
- }
await fn();
-
return "ok";
} catch (error) {
return { "failed": inspectArgs([error]) };
- } finally {
- if (token) {
- restoreTestPermissions(token);
- }
}
}