chrome-devtools-frontend
Version:
Chrome DevTools UI
64 lines (50 loc) • 2.45 kB
text/typescript
// Copyright 2024 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {Debugger} from './RealBackend.js';
import {createWorkerPlugin, makeURL, nonNull} from './TestUtils.js';
const wasmUrl = makeURL('/build/tests/inputs/externref.s.wasm');
describe('Externref', () => {
it('externref test', async () => {
const debug = await Debugger.create();
const page = debug.page('./externref.js');
await page.open();
const rawModuleId = await debug.waitForScript(wasmUrl);
const plugin = await createWorkerPlugin(debug);
const sources = await plugin.addRawModule(rawModuleId, '', {url: wasmUrl});
if ('missingSymbolFiles' in sources) {
throw new Error('Unexpected missing symbol files');
}
const sourceFileURL = sources.find(s => s.endsWith('externref.c'));
if (!sourceFileURL) {
throw new Error('externref.c source not found');
}
await debug.setBreakpoint(1, new URL(sourceFileURL), plugin, rawModuleId);
const goPromise = page.go();
const pauseOrExitcode = await Promise.race([debug.waitForPause(), goPromise]);
if (typeof pauseOrExitcode === 'number') {
throw new Error('Program terminated before all breakpoints were hit.');
}
const {callFrame, rawLocation} = pauseOrExitcode;
const variables = await plugin.listVariablesInScope(rawLocation);
expect(variables.map(v => v.name).sort()).to.deep.equal(['x', 'y']);
{
const value = nonNull(await plugin.evaluate('x', rawLocation, debug.stopIdForCallFrame(callFrame)));
assert(value.type === 'reftype');
const {subtype, description, preview} = await debug.getRemoteObject(callFrame, value);
expect(subtype).to.eql('wasmvalue');
expect(description).to.eql('externref');
expect(preview?.properties).to.eql([{name: 'value', type: 'object', value: 'Object'}]);
}
{
const value = nonNull(await plugin.evaluate('y', rawLocation, debug.stopIdForCallFrame(callFrame)));
assert(value.type === 'reftype');
const {subtype, description, preview} = await debug.getRemoteObject(callFrame, value);
expect(subtype).to.eql('wasmvalue');
expect(description).to.eql('externref');
expect(preview?.properties).to.eql([{name: 'value', type: 'string', value: 'test'}]);
}
await debug.resume();
await debug.close();
});
});