Tons of Solutions Engineering work done today for the rest of the CS team! Headway, Howard Hanna, Engels, Brighton, etc. Also completed Datasnippers auth flow and worked on Anthology's script. Cloned Anthology's courses (900..) and will clone Full Story on Monday.

This commit is contained in:
Norm Rasmussen
2024-01-05 17:07:59 -05:00
parent ce261975ca
commit a5fe4bd2c8
3157 changed files with 554269 additions and 16 deletions

View File

@ -0,0 +1,77 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TestQuickJSWASMModule = void 0;
const errors_1 = require("./errors");
const lifetime_1 = require("./lifetime");
/**
* A test wrapper of [[QuickJSWASMModule]] that keeps a reference to each
* context or runtime created.
*
* Call [[disposeAll]] to reset these sets and calls `dispose` on any left alive
* (which may throw an error).
*
* Call [[assertNoMemoryAllocated]] at the end of a test, when you expect that you've
* freed all the memory you've ever allocated.
*/
class TestQuickJSWASMModule {
constructor(parent) {
this.parent = parent;
this.contexts = new Set();
this.runtimes = new Set();
}
newRuntime(options) {
const runtime = this.parent.newRuntime({
...options,
ownedLifetimes: [
new lifetime_1.Lifetime(undefined, undefined, () => this.runtimes.delete(runtime)),
...(options?.ownedLifetimes ?? []),
],
});
this.runtimes.add(runtime);
return runtime;
}
newContext(options) {
const context = this.parent.newContext({
...options,
ownedLifetimes: [
new lifetime_1.Lifetime(undefined, undefined, () => this.contexts.delete(context)),
...(options?.ownedLifetimes ?? []),
],
});
this.contexts.add(context);
return context;
}
evalCode(code, options) {
return this.parent.evalCode(code, options);
}
disposeAll() {
const allDisposables = [...this.contexts, ...this.runtimes];
this.runtimes.clear();
this.contexts.clear();
allDisposables.forEach((d) => {
if (d.alive) {
d.dispose();
}
});
}
assertNoMemoryAllocated() {
const leaksDetected = this.getFFI().QTS_RecoverableLeakCheck();
if (leaksDetected) {
// Note: this is currently only available when building from source
// with debug builds.
throw new errors_1.QuickJSMemoryLeakDetected("Leak sanitizer detected un-freed memory");
}
if (this.contexts.size > 0) {
throw new errors_1.QuickJSMemoryLeakDetected(`${this.contexts.size} contexts leaked`);
}
if (this.runtimes.size > 0) {
throw new errors_1.QuickJSMemoryLeakDetected(`${this.runtimes.size} runtimes leaked`);
}
}
/** @private */
getFFI() {
return this.parent.getFFI();
}
}
exports.TestQuickJSWASMModule = TestQuickJSWASMModule;
//# sourceMappingURL=module-test.js.map