/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/ >. */
/**
* This file is for use by unit tests for isolated debugger components that do
* not need to interact with the redux store. When these tests need to construct
* debugger objects, these interfaces should be used instead of plain object
* literals.
*/
import * as asyncValue from "./async-value" ;
import { initialState } from "../reducers/index" ;
import { getDisplayURL } from "./sources-tree/getURL" ;
import { createLocation } from "./location" ;
function makeMockSource(url = "url" , id = "source" , thread = "FakeThread" ) {
return {
id,
url,
shortName: getDisplayURL(url).filename,
longName: getDisplayURL(url).filename + getDisplayURL(url).search,
displayURL: getDisplayURL(url),
thread ,
isPrettyPrinted: false ,
isWasm: false ,
extensionName: null ,
isExtension: false ,
isOriginal: id.includes("originalSource" ),
};
}
function makeMockDisplaySource(
url = "url" ,
id = "source" ,
thread = "FakeThread"
) {
return makeMockSource(url, id, thread );
}
function makeMockSourceWithContent(
url,
id,
contentType = "text/javascript" ,
text = ""
) {
const source = makeMockSource(url, id);
return {
...source,
content: text
? asyncValue.fulfilled({
type: "text" ,
value: text,
contentType,
})
: null ,
};
}
function makeMockSourceAndContent(
url,
id,
contentType = "text/javascript" ,
text = ""
) {
const source = makeMockSource(url, id);
return {
...source,
content: {
type: "text" ,
value: text,
contentType,
},
};
}
function makeFullfilledMockSourceContent(
text = "" ,
contentType = "text/javascript"
) {
return asyncValue.fulfilled({
type: "text" ,
value: text,
contentType,
});
}
function makeMockWasmSource() {
return {
id: "wasm-source-id" ,
url: "url" ,
displayURL: getDisplayURL("url" ),
thread : "FakeThread" ,
isPrettyPrinted: false ,
isWasm: true ,
extensionName: null ,
isExtension: false ,
isOriginal: false ,
};
}
function makeMockWasmSourceWithContent(text) {
const source = makeMockWasmSource();
return {
...source,
content: asyncValue.fulfilled({
type: "wasm" ,
value: text,
}),
};
}
function makeMockScope(actor = "scope-actor" , type = "block" , parent = null ) {
return {
actor,
parent,
bindings: {
arguments: [],
variables: {},
},
object: null ,
function : null ,
type,
scopeKind: "" ,
};
}
function mockScopeAddVariable(scope, name) {
if (!scope.bindings) {
throw new Error("no scope bindings" );
}
scope.bindings.variables[name] = { value: null };
}
function makeMockBreakpoint(source = makeMockSource(), line = 1, column) {
const location = column ? { source, line, column } : { source, line };
return {
id: "breakpoint" ,
location,
generatedLocation: location,
disabled: false ,
text: "text" ,
originalText: "text" ,
options: {},
};
}
function makeMockFrame(
id = "frame" ,
source = makeMockSource("url" ),
scope = makeMockScope(),
line = 4,
displayName = `display-${id}`,
index = 0
) {
const sourceActor = {
id: `${source.id}-actor`,
actor: `${source.id}-actor`,
source: source.id,
sourceObject: source,
};
const location = createLocation({ source, sourceActor, line });
return {
id,
thread : "FakeThread" ,
displayName,
location,
generatedLocation: location,
source,
scope,
this : {},
index,
asyncCause: null ,
state: "on-stack" ,
type: "call" ,
};
}
function makeMockFrameWithURL(url) {
return makeMockFrame(undefined, makeMockSource(url));
}
function makeWhyNormal(frameReturnValue = undefined) {
if (frameReturnValue) {
return { type: "why-normal" , frameFinished: { return : frameReturnValue } };
}
return { type: "why-normal" };
}
function makeWhyThrow(frameThrowValue) {
return { type: "why-throw" , frameFinished: { throw : frameThrowValue } };
}
function makeMockExpression(value) {
return {
input: "input" ,
value,
from: "from" ,
updating: false ,
};
}
// Mock contexts for use in tests that do not create a redux store.
const mockcx = { navigateCounter: 0 };
const mockthreadcx = {
navigateCounter: 0,
thread : "FakeThread" ,
pauseCounter: 0,
isPaused: false ,
};
function makeMockThread(fields) {
return {
actor: "test" ,
url: "example.com" ,
type: "worker" ,
name: "test" ,
...fields,
};
}
function makeMockState(state) {
return {
...initialState(),
...state,
};
}
function formatTree(tree, depth = 0, str = "" ) {
const whitespace = new Array(depth * 2).join(" " );
if (tree.type === "directory" ) {
str += `${whitespace} - ${tree.name} path=${tree.path} \n`;
tree.contents.forEach(t => {
str = formatTree(t, depth + 1, str);
});
} else {
str += `${whitespace} - ${tree.name} path=${tree.path} source_id=${tree.contents.id} \n`;
}
return str;
}
export {
makeMockDisplaySource,
makeMockSource,
makeMockSourceWithContent,
makeMockSourceAndContent,
makeMockWasmSource,
makeMockWasmSourceWithContent,
makeMockScope,
mockScopeAddVariable,
makeMockBreakpoint,
makeMockFrame,
makeMockFrameWithURL,
makeWhyNormal,
makeWhyThrow,
makeMockExpression,
mockcx,
mockthreadcx,
makeMockState,
makeMockThread,
makeFullfilledMockSourceContent,
formatTree,
};
quality 85%
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland