зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1308566 - Remove reps mochitests. r=bgrins
Remove tests since they were all migrated to jest in Github and will only lives there now. MozReview-Commit-ID: 7N8Wuq6sD2I --HG-- extra : rebase_source : 3f3dba033ed48302094c62ec5f092f7bbf89fa26
This commit is contained in:
Родитель
60f9e16d34
Коммит
2211712d27
|
@ -8,5 +8,3 @@ DevToolsModules(
|
||||||
'reps.css',
|
'reps.css',
|
||||||
'reps.js',
|
'reps.js',
|
||||||
)
|
)
|
||||||
|
|
||||||
MOCHITEST_CHROME_MANIFESTS += ['test/mochitest/chrome.ini']
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
// Extend from the shared list of defined globals for mochitests.
|
|
||||||
"extends": "../../../../../../.eslintrc.mochitests.js"
|
|
||||||
};
|
|
|
@ -1,33 +0,0 @@
|
||||||
[DEFAULT]
|
|
||||||
support-files =
|
|
||||||
head.js
|
|
||||||
|
|
||||||
[test_reps_array.html]
|
|
||||||
[test_reps_attribute.html]
|
|
||||||
[test_reps_comment-node.html]
|
|
||||||
[test_reps_date-time.html]
|
|
||||||
[test_reps_document.html]
|
|
||||||
[test_reps_element-node.html]
|
|
||||||
[test_reps_error.html]
|
|
||||||
[test_reps_event.html]
|
|
||||||
[test_reps_failure.html]
|
|
||||||
[test_reps_function.html]
|
|
||||||
[test_reps_grip.html]
|
|
||||||
[test_reps_grip-array.html]
|
|
||||||
[test_reps_grip-map.html]
|
|
||||||
[test_reps_infinity.html]
|
|
||||||
[test_reps_long-string.html]
|
|
||||||
[test_reps_nan.html]
|
|
||||||
[test_reps_null.html]
|
|
||||||
[test_reps_number.html]
|
|
||||||
[test_reps_object.html]
|
|
||||||
[test_reps_object-with-text.html]
|
|
||||||
[test_reps_object-with-url.html]
|
|
||||||
[test_reps_promise.html]
|
|
||||||
[test_reps_regexp.html]
|
|
||||||
[test_reps_string.html]
|
|
||||||
[test_reps_stylesheet.html]
|
|
||||||
[test_reps_symbol.html]
|
|
||||||
[test_reps_text-node.html]
|
|
||||||
[test_reps_undefined.html]
|
|
||||||
[test_reps_window.html]
|
|
|
@ -1,71 +0,0 @@
|
||||||
/* 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/. */
|
|
||||||
|
|
||||||
/* Entirely disable no-unused-vars, because the second line here
|
|
||||||
doesn't seem to work with eslint 3.15.0 -- it doesn't suppress
|
|
||||||
other no-unused-vars errors. */
|
|
||||||
/* eslint-disable no-unused-vars */
|
|
||||||
/* eslint no-unused-vars: ["error", {"vars": "local"}] */
|
|
||||||
|
|
||||||
/* globals is */
|
|
||||||
|
|
||||||
/* Not really a module. */
|
|
||||||
/* eslint-disable strict */
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
|
|
||||||
|
|
||||||
var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
|
|
||||||
var { Assert } = require("resource://testing-common/Assert.jsm");
|
|
||||||
var { gDevTools } = require("devtools/client/framework/devtools");
|
|
||||||
var { BrowserLoader } = Cu.import("resource://devtools/client/shared/browser-loader.js", {});
|
|
||||||
var flags = require("devtools/shared/flags");
|
|
||||||
var { Task } = require("devtools/shared/task");
|
|
||||||
var DevToolsUtils = require("devtools/shared/DevToolsUtils");
|
|
||||||
|
|
||||||
flags.testing = true;
|
|
||||||
var { require: browserRequire } = BrowserLoader({
|
|
||||||
baseURI: "resource://devtools/client/shared/",
|
|
||||||
window
|
|
||||||
});
|
|
||||||
|
|
||||||
let ReactDOM = browserRequire("devtools/client/shared/vendor/react-dom");
|
|
||||||
let React = browserRequire("devtools/client/shared/vendor/react");
|
|
||||||
var TestUtils = React.addons.TestUtils;
|
|
||||||
|
|
||||||
function renderComponent(component, props) {
|
|
||||||
const el = React.createElement(component, props, {});
|
|
||||||
// By default, renderIntoDocument() won't work for stateless components, but
|
|
||||||
// it will work if the stateless component is wrapped in a stateful one.
|
|
||||||
// See https://github.com/facebook/react/issues/4839
|
|
||||||
const wrappedEl = React.DOM.span({}, [el]);
|
|
||||||
const renderedComponent = TestUtils.renderIntoDocument(wrappedEl);
|
|
||||||
return ReactDOM.findDOMNode(renderedComponent).children[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
function shallowRenderComponent(component, props) {
|
|
||||||
const el = React.createElement(component, props);
|
|
||||||
const renderer = TestUtils.createRenderer();
|
|
||||||
renderer.render(el, {});
|
|
||||||
return renderer.getRenderOutput();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test that a rep renders correctly across different modes.
|
|
||||||
*/
|
|
||||||
function testRepRenderModes(modeTests, testName, componentUnderTest, gripStub,
|
|
||||||
props = {}) {
|
|
||||||
modeTests.forEach(({mode, expectedOutput, message, title}) => {
|
|
||||||
const modeString = typeof mode === "undefined" ? "no mode" : mode.toString();
|
|
||||||
if (!message) {
|
|
||||||
message = `${testName}: ${modeString} renders correctly.`;
|
|
||||||
}
|
|
||||||
|
|
||||||
const rendered = renderComponent(
|
|
||||||
componentUnderTest.rep,
|
|
||||||
Object.assign({}, { object: gripStub, mode, title }, props)
|
|
||||||
);
|
|
||||||
is(rendered.textContent, expectedOutput, message);
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,294 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test ArrayRep rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - ArrayRep</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
"use strict";
|
|
||||||
/* import-globals-from head.js */
|
|
||||||
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { ArrayRep } = REPS;
|
|
||||||
|
|
||||||
let componentUnderTest = ArrayRep;
|
|
||||||
const maxLength = {
|
|
||||||
short: 3,
|
|
||||||
long: 10
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
yield testBasic();
|
|
||||||
|
|
||||||
// Test property iterator
|
|
||||||
yield testMaxProps();
|
|
||||||
yield testMoreThanShortMaxProps();
|
|
||||||
yield testMoreThanLongMaxProps();
|
|
||||||
yield testRecursiveArray();
|
|
||||||
|
|
||||||
// Test that properties are rendered as expected by ItemRep
|
|
||||||
yield testNested();
|
|
||||||
|
|
||||||
yield testArray();
|
|
||||||
yield testObjectLink();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testBasic() {
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
const stub = [];
|
|
||||||
is(getRep(stub), ArrayRep.rep, "Rep correctly selects Array Rep");
|
|
||||||
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const defaultOutput = `[]`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `[]`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testBasic", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMaxProps() {
|
|
||||||
const stub = [1, "foo", {}];
|
|
||||||
const defaultOutput = `[ 1, "foo", Object ]`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `[3]`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testMaxProps", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMoreThanShortMaxProps() {
|
|
||||||
const stub = Array(maxLength.short + 1).fill("foo");
|
|
||||||
const defaultShortOutput = `[ ${Array(maxLength.short).fill("\"foo\"").join(", ")}, 1 more… ]`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultShortOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `[${maxLength.short + 1}]`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultShortOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: `[ ${Array(maxLength.short + 1).fill("\"foo\"").join(", ")} ]`,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testMoreThanMaxProps", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMoreThanLongMaxProps() {
|
|
||||||
const stub = Array(maxLength.long + 1).fill("foo");
|
|
||||||
const defaultShortOutput = `[ ${Array(maxLength.short).fill("\"foo\"").join(", ")}, ${maxLength.long + 1 - maxLength.short} more… ]`;
|
|
||||||
const defaultLongOutput = `[ ${Array(maxLength.long).fill("\"foo\"").join(", ")}, 1 more… ]`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultShortOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `[${maxLength.long + 1}]`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultShortOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultLongOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testMoreThanMaxProps", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testRecursiveArray() {
|
|
||||||
let stub = [1];
|
|
||||||
stub.push(stub);
|
|
||||||
const defaultOutput = `[ 1, [2] ]`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `[2]`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testRecursiveArray", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testNested() {
|
|
||||||
let stub = [
|
|
||||||
{
|
|
||||||
p1: "s1",
|
|
||||||
p2: ["a1", "a2", "a3"],
|
|
||||||
p3: "s3",
|
|
||||||
p4: "s4"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
const defaultOutput = `[ Object ]`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `[1]`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testNested", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testArray() {
|
|
||||||
let stub = [
|
|
||||||
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];
|
|
||||||
|
|
||||||
const defaultOutput = `[ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" ]`;
|
|
||||||
const shortOutput = `[ "a", "b", "c", 7 more… ]`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: shortOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `[10]`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: shortOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testNested", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
let stub = ["a", "b", "c"];
|
|
||||||
|
|
||||||
const defaultOutput = `*[ *"a", "b", "c"* ]*`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `*[*3*]*`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(
|
|
||||||
modeTests,
|
|
||||||
"testObjectLink",
|
|
||||||
componentUnderTest,
|
|
||||||
stub,
|
|
||||||
{
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,75 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Attribute rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Attribute</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { Attribute } = REPS;
|
|
||||||
|
|
||||||
try {
|
|
||||||
testBasic();
|
|
||||||
testObjectLink();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testBasic() {
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(getStub()), Attribute.rep, "Rep correctly selects Attribute Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(Attribute.rep, { object: getStub() });
|
|
||||||
is(renderedComponent.textContent, "class=\"autocomplete-suggestions\"", "Attribute rep has expected text content");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
const renderedComponent = renderComponent(Attribute.rep, {
|
|
||||||
object: getStub(),
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(renderedComponent.textContent, "*class=\"autocomplete-suggestions\"*",
|
|
||||||
"Attribute rep has expected text content when an objectLink is passed as a prop");
|
|
||||||
}
|
|
||||||
|
|
||||||
function getStub() {
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Attr",
|
|
||||||
"actor": "server1.conn19.obj65",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 2,
|
|
||||||
"nodeName": "class",
|
|
||||||
"value": "autocomplete-suggestions"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,82 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test comment-node rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - comment-node</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
try {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { CommentNode } = REPS;
|
|
||||||
|
|
||||||
let gripStub = {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj47",
|
|
||||||
"class": "Comment",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 8,
|
|
||||||
"nodeName": "#comment",
|
|
||||||
"textContent": "test\nand test\nand test\nand test\nand test\nand test\nand test"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen.
|
|
||||||
is(getRep(gripStub), CommentNode.rep, "Rep correctly selects CommentNode Rep");
|
|
||||||
|
|
||||||
// Test rendering.
|
|
||||||
const renderedComponent = renderComponent(CommentNode.rep, { object: gripStub });
|
|
||||||
is(renderedComponent.className, "objectBox theme-comment",
|
|
||||||
"CommentNode rep has expected class names");
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
`<!-- test\nand test\nand test\nan…d test\nand test\nand test -->`,
|
|
||||||
"CommentNode rep has expected text content");
|
|
||||||
|
|
||||||
// Test tiny rendering.
|
|
||||||
const tinyRenderedComponent = renderComponent(CommentNode.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
mode: MODE.TINY,
|
|
||||||
});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
`<!-- test\\nand test\\na… test\\nand test -->`,
|
|
||||||
"CommentNode rep has expected text content in tiny mode");
|
|
||||||
|
|
||||||
// Test long rendering.
|
|
||||||
const longRenderedComponent = renderComponent(CommentNode.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
mode: MODE.LONG,
|
|
||||||
});
|
|
||||||
is(longRenderedComponent.textContent, `<!-- ${gripStub.preview.textContent} -->`,
|
|
||||||
"CommentNode rep has expected text content in long mode");
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,106 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test DateTime rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - DateTime</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { DateTime } = REPS;
|
|
||||||
|
|
||||||
try {
|
|
||||||
testValid();
|
|
||||||
testInvalid();
|
|
||||||
testObjectLink();
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testValid() {
|
|
||||||
let gripStub = {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Date",
|
|
||||||
"actor": "server1.conn0.child1/obj32",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"timestamp": 1459372644859
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(gripStub), DateTime.rep, "Rep correctly selects DateTime Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(DateTime.rep, { object: gripStub });
|
|
||||||
is(renderedComponent.textContent, "Date 2016-03-30T21:17:24.859Z", "DateTime rep has expected text content for valid date");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testInvalid() {
|
|
||||||
let gripStub = {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn0.child1/obj32",
|
|
||||||
"class": "Date",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"timestamp": {
|
|
||||||
"type": "NaN"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(DateTime.rep, { object: gripStub });
|
|
||||||
is(renderedComponent.textContent, "Invalid Date", "DateTime rep has expected text content for invalid date");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
let gripStub = {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Date",
|
|
||||||
"actor": "server1.conn0.child1/obj32",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"timestamp": 1459372644859
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(DateTime.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(renderedComponent.textContent, "*Date *2016-03-30T21:17:24.859Z",
|
|
||||||
"DateTime rep has expected text content when an objectLink is passed as a prop");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,77 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Document rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Document</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { Document } = REPS;
|
|
||||||
|
|
||||||
try {
|
|
||||||
testBasic();
|
|
||||||
testObjectLink();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testBasic() {
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(getStub()), Document.rep, "Rep correctly selects Document Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(Document.rep, { object: getStub() });
|
|
||||||
is(renderedComponent.textContent, "HTMLDocument https://www.mozilla.org/en-US/firefox/new/",
|
|
||||||
"Document rep has expected text content");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(Document.rep, {
|
|
||||||
object: getStub(),
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(renderedComponent.textContent, "*HTMLDocument *https://www.mozilla.org/en-US/firefox/new/",
|
|
||||||
"Document rep has expected text content when an objectLink is passed as a prop");
|
|
||||||
}
|
|
||||||
|
|
||||||
function getStub() {
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "HTMLDocument",
|
|
||||||
"actor": "server1.conn17.obj115",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 1,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 9,
|
|
||||||
"nodeName": "#document",
|
|
||||||
"location": "https://www.mozilla.org/en-US/firefox/new/"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,467 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Element node rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Element node</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
getSelectableInInspectorGrips,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { ElementNode } = REPS;
|
|
||||||
|
|
||||||
try {
|
|
||||||
yield testBodyNode();
|
|
||||||
yield testDocumentElement();
|
|
||||||
yield testNode();
|
|
||||||
yield testNodeWithLeadingAndTrailingSpacesClassName();
|
|
||||||
yield testNodeWithoutAttributes();
|
|
||||||
yield testLotsOfAttributes();
|
|
||||||
yield testSvgNode();
|
|
||||||
yield testSvgNodeInXHTML();
|
|
||||||
|
|
||||||
yield testOnMouseOver();
|
|
||||||
yield testOnMouseOut();
|
|
||||||
yield testOnInspectIconClick();
|
|
||||||
yield testObjectLink();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testBodyNode() {
|
|
||||||
const stub = getGripStub("testBodyNode");
|
|
||||||
is(getRep(stub), ElementNode.rep,
|
|
||||||
"Rep correctly selects ElementNode Rep for body node");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, { object: stub });
|
|
||||||
is(renderedComponent.textContent, `<body id="body-id" class="body-class">`,
|
|
||||||
"Element node rep has expected text content for body node");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ElementNode.rep, { object: stub, mode: MODE.TINY });
|
|
||||||
is(tinyRenderedComponent.textContent, `body#body-id.body-class`,
|
|
||||||
"Element node rep has expected text content for body node in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testDocumentElement() {
|
|
||||||
const stub = getGripStub("testDocumentElement");
|
|
||||||
is(getRep(stub), ElementNode.rep,
|
|
||||||
"Rep correctly selects ElementNode Rep for document element node");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, { object: stub });
|
|
||||||
is(renderedComponent.textContent, `<html dir="ltr" lang="en-US">`,
|
|
||||||
"Element node rep has expected text content for document element node");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ElementNode.rep, { object: stub, mode: MODE.TINY });
|
|
||||||
is(tinyRenderedComponent.textContent, `html`,
|
|
||||||
"Element node rep has expected text content for document element in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testNode() {
|
|
||||||
const stub = getGripStub("testNode");
|
|
||||||
is(getRep(stub), ElementNode.rep,
|
|
||||||
"Rep correctly selects ElementNode Rep for element node");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, { object: stub });
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
`<input id="newtab-customize-button" class="bar baz" dir="ltr" ` +
|
|
||||||
`title="Customize your New Tab page" value="foo" type="button">`,
|
|
||||||
"Element node rep has expected text content for element node");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ElementNode.rep, { object: stub, mode: MODE.TINY });
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
`input#newtab-customize-button.bar.baz`,
|
|
||||||
"Element node rep has expected text content for element node in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testNodeWithLeadingAndTrailingSpacesClassName() {
|
|
||||||
const stub = getGripStub("testNodeWithLeadingAndTrailingSpacesClassName");
|
|
||||||
is(getRep(stub), ElementNode.rep,
|
|
||||||
"Rep correctly selects ElementNode Rep for element node");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, { object: stub });
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
`<body id="nightly-whatsnew" class=" html-ltr ">`,
|
|
||||||
"Element node rep output element node with the class trailing spaces");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ElementNode.rep, { object: stub, mode: MODE.TINY });
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
`body#nightly-whatsnew.html-ltr`,
|
|
||||||
"Element node rep does not show leading nor trailing spaces " +
|
|
||||||
"on class attribute in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testNodeWithoutAttributes() {
|
|
||||||
const stub = getGripStub("testNodeWithoutAttributes");
|
|
||||||
|
|
||||||
is(getRep(stub), ElementNode.rep,
|
|
||||||
"Element node rep has expected text content for element node without attributes");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ElementNode.rep, { object: stub, mode: MODE.TINY });
|
|
||||||
is(tinyRenderedComponent.textContent, `p`,
|
|
||||||
"Element node rep has expected text content for element node without attributes");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testLotsOfAttributes() {
|
|
||||||
const stub = getGripStub("testLotsOfAttributes");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, { object: stub });
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
'<p id="lots-of-attributes" a="" b="" c="" d="" e="" f="" g="" ' +
|
|
||||||
'h="" i="" j="" k="" l="" m="" n="">',
|
|
||||||
"Element node rep has expected text content for node with lots of attributes");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ElementNode.rep, { object: stub, mode: MODE.TINY });
|
|
||||||
is(tinyRenderedComponent.textContent, `p#lots-of-attributes`,
|
|
||||||
"Element node rep has expected text content for node in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testSvgNode() {
|
|
||||||
const stub = getGripStub("testSvgNode");
|
|
||||||
|
|
||||||
is(getRep(stub), ElementNode.rep,
|
|
||||||
`Rep correctly selects ${ElementNode.rep.displayName} for SVG element node`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, { object: stub });
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
'<clipPath id="clip" class="svg-element">',
|
|
||||||
"Element node rep has expected text content for SVG element node");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ElementNode.rep, { object: stub, mode: MODE.TINY });
|
|
||||||
is(tinyRenderedComponent.textContent, `clipPath#clip.svg-element`,
|
|
||||||
"Element node rep has expected text content for SVG element node in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testSvgNodeInXHTML() {
|
|
||||||
const stub = getGripStub("testSvgNodeInXHTML");
|
|
||||||
|
|
||||||
is(getRep(stub), ElementNode.rep,
|
|
||||||
`Rep correctly selects ${ElementNode.rep.displayName} for XHTML SVG element node`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, { object: stub });
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
'<svg:circle class="svg-element" cx="0" cy="0" r="5">',
|
|
||||||
"Element node rep has expected text content for XHTML SVG element node");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ElementNode.rep, { object: stub, mode: MODE.TINY });
|
|
||||||
is(tinyRenderedComponent.textContent, `svg:circle.svg-element`,
|
|
||||||
"Element node rep has expected text content for XHTML SVG element in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnMouseOver() {
|
|
||||||
const stub = getGripStub("testNode");
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one node grip");
|
|
||||||
|
|
||||||
let mouseOverValue;
|
|
||||||
let onDOMNodeMouseOver = (object) => {
|
|
||||||
mouseOverValue = object;
|
|
||||||
};
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, {
|
|
||||||
object: stub,
|
|
||||||
onDOMNodeMouseOver,
|
|
||||||
});
|
|
||||||
|
|
||||||
TestUtils.Simulate.mouseOver(renderedComponent);
|
|
||||||
|
|
||||||
is(mouseOverValue, grips[0], "onDOMNodeMouseOver is called " +
|
|
||||||
"with the expected argument when mouseover is fired on the Rep");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnMouseOut() {
|
|
||||||
const stub = getGripStub("testNode");
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one node grip");
|
|
||||||
|
|
||||||
let called = false;
|
|
||||||
let onDOMNodeMouseOut = (object) => {
|
|
||||||
called = true;
|
|
||||||
};
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, {
|
|
||||||
object: stub,
|
|
||||||
onDOMNodeMouseOut,
|
|
||||||
});
|
|
||||||
|
|
||||||
TestUtils.Simulate.mouseOut(renderedComponent);
|
|
||||||
|
|
||||||
is(called, true, "onDOMNodeMouseOut is called when mouseout is fired on the Rep");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnInspectIconClick() {
|
|
||||||
const stub = getGripStub("testNode");
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one node grip");
|
|
||||||
|
|
||||||
let inspectIconClickedValue = null;
|
|
||||||
let inspectIconClickedEvent = null;
|
|
||||||
|
|
||||||
let onInspectIconClick = (object, event) => {
|
|
||||||
inspectIconClickedValue = object;
|
|
||||||
inspectIconClickedEvent = event;
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderedComponentWithoutInspectIcon = renderComponent(ElementNode.rep, {
|
|
||||||
object: getGripStub("testDisconnectedNode"),
|
|
||||||
onInspectIconClick,
|
|
||||||
});
|
|
||||||
is(renderedComponentWithoutInspectIcon.querySelector(".open-inspector"), null,
|
|
||||||
"There isn't an inspect icon when the node is not in the DOM tree");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, {
|
|
||||||
object: stub,
|
|
||||||
onInspectIconClick,
|
|
||||||
});
|
|
||||||
|
|
||||||
const inspectIconNode = renderedComponent.querySelector(".open-inspector");
|
|
||||||
ok(inspectIconNode !== null, "There is an inspect icon as expected");
|
|
||||||
TestUtils.Simulate.click(inspectIconNode);
|
|
||||||
|
|
||||||
is(inspectIconClickedValue, grips[0],
|
|
||||||
"onInspectIconClick is called with expected value when inspect icon is clicked");
|
|
||||||
ok(inspectIconClickedEvent !== null && inspectIconClickedEvent.type === "click",
|
|
||||||
"onInspectIconClick forwarded the original event to the callback");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
const stub = getGripStub("testBodyNode");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ElementNode.rep, {
|
|
||||||
object: stub,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(renderedComponent.textContent, `*<body id="body-id" class="body-class">*`,
|
|
||||||
"Element node rep has expected text content for body node when an objectLink is " +
|
|
||||||
"passed as a prop");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(ElementNode.rep, {
|
|
||||||
object: stub, mode: MODE.TINY,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({
|
|
||||||
className: "object-link"
|
|
||||||
}, "*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(tinyRenderedComponent.textContent, `*body#body-id.body-class*`,
|
|
||||||
"Element node rep has expected text content for body node in tiny mode when an " +
|
|
||||||
"objectLink is passed as a prop");
|
|
||||||
}
|
|
||||||
|
|
||||||
function getGripStub(name) {
|
|
||||||
switch (name) {
|
|
||||||
case "testBodyNode":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj30",
|
|
||||||
"class": "HTMLBodyElement",
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "body",
|
|
||||||
"attributes": {
|
|
||||||
"class": "body-class",
|
|
||||||
"id": "body-id"
|
|
||||||
},
|
|
||||||
"attributesLength": 2
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testDocumentElement":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj40",
|
|
||||||
"class": "HTMLHtmlElement",
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "html",
|
|
||||||
"attributes": {
|
|
||||||
"dir": "ltr",
|
|
||||||
"lang": "en-US"
|
|
||||||
},
|
|
||||||
"attributesLength": 2
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testNode":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn2.child1/obj116",
|
|
||||||
"class": "HTMLInputElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "input",
|
|
||||||
"isConnected": true,
|
|
||||||
"attributes": {
|
|
||||||
"id": "newtab-customize-button",
|
|
||||||
"dir": "ltr",
|
|
||||||
"title": "Customize your New Tab page",
|
|
||||||
"class": "bar baz",
|
|
||||||
"value": "foo",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 6
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testDisconnectedNode":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn2.child1/obj116",
|
|
||||||
"class": "HTMLInputElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "input",
|
|
||||||
"isConnected": false,
|
|
||||||
"attributes": {
|
|
||||||
"id": "newtab-customize-button",
|
|
||||||
"dir": "ltr",
|
|
||||||
"title": "Customize your New Tab page",
|
|
||||||
"class": "bar baz",
|
|
||||||
"value": "foo",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 6
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testNodeWithLeadingAndTrailingSpacesClassName":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn3.child1/obj59",
|
|
||||||
"class": "HTMLBodyElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "body",
|
|
||||||
"attributes": {
|
|
||||||
"id": "nightly-whatsnew",
|
|
||||||
"class": " html-ltr "
|
|
||||||
},
|
|
||||||
"attributesLength": 2
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testNodeWithoutAttributes":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj32",
|
|
||||||
"class": "HTMLParagraphElement",
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "p",
|
|
||||||
"attributes": {},
|
|
||||||
"attributesLength": 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testLotsOfAttributes":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn2.child1/obj30",
|
|
||||||
"class": "HTMLParagraphElement",
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "p",
|
|
||||||
"attributes": {
|
|
||||||
"id": "lots-of-attributes",
|
|
||||||
"a": "",
|
|
||||||
"b": "",
|
|
||||||
"c": "",
|
|
||||||
"d": "",
|
|
||||||
"e": "",
|
|
||||||
"f": "",
|
|
||||||
"g": "",
|
|
||||||
"h": "",
|
|
||||||
"i": "",
|
|
||||||
"j": "",
|
|
||||||
"k": "",
|
|
||||||
"l": "",
|
|
||||||
"m": "",
|
|
||||||
"n": ""
|
|
||||||
},
|
|
||||||
"attributesLength": 15
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testSvgNode":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj42",
|
|
||||||
"class": "SVGClipPathElement",
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "clipPath",
|
|
||||||
"attributes": {
|
|
||||||
"id": "clip",
|
|
||||||
"class": "svg-element"
|
|
||||||
},
|
|
||||||
"attributesLength": 0
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testSvgNodeInXHTML":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn3.child1/obj34",
|
|
||||||
"class": "SVGCircleElement",
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "svg:circle",
|
|
||||||
"attributes": {
|
|
||||||
"class": "svg-element",
|
|
||||||
"cx": "0",
|
|
||||||
"cy": "0",
|
|
||||||
"r": "5"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,454 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Error rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Error</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { ErrorRep } = REPS;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Test errors with different properties
|
|
||||||
yield testSimpleError();
|
|
||||||
yield testMultilineStackError();
|
|
||||||
yield testErrorWithoutStacktrace();
|
|
||||||
|
|
||||||
// Test different kind of errors
|
|
||||||
yield testEvalError();
|
|
||||||
yield testInternalError();
|
|
||||||
yield testRangeError();
|
|
||||||
yield testReferenceError();
|
|
||||||
yield testSyntaxError();
|
|
||||||
yield testTypeError();
|
|
||||||
yield testURIError();
|
|
||||||
|
|
||||||
yield testObjectLink();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testSimpleError() {
|
|
||||||
// Test object = `new Error("Error message")`
|
|
||||||
const stub = getGripStub("testSimpleError");
|
|
||||||
is(getRep(stub), ErrorRep.rep, "Rep correctly selects Error Rep for Error object");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"Error: Error message\n" +
|
|
||||||
"Stack trace:\n" +
|
|
||||||
"@debugger eval code:1:13\n",
|
|
||||||
"Error Rep has expected text content for a simple error");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {object: stub, mode: MODE.TINY});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"Error",
|
|
||||||
"Error Rep has expected text content for a simple error in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMultilineStackError() {
|
|
||||||
/*
|
|
||||||
* Test object = `
|
|
||||||
* function errorFoo() {
|
|
||||||
* errorBar();
|
|
||||||
* }
|
|
||||||
* function errorBar() {
|
|
||||||
* console.log(new Error("bar"));
|
|
||||||
* }
|
|
||||||
* errorFoo();`
|
|
||||||
*/
|
|
||||||
const stub = getGripStub("testMultilineStackError");
|
|
||||||
is(getRep(stub), ErrorRep.rep,
|
|
||||||
`Rep correctly selects Error Rep for Error object`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"Error: bar\n" +
|
|
||||||
"Stack trace:\n" +
|
|
||||||
"errorBar@debugger eval code:6:15\n" +
|
|
||||||
"errorFoo@debugger eval code:3:3\n" +
|
|
||||||
"@debugger eval code:8:1\n",
|
|
||||||
"Error Rep has expected text content for an error with a multiple line");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {object: stub, mode: MODE.TINY});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"Error",
|
|
||||||
"Error Rep has expected text content for an error with a multiple line in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testErrorWithoutStacktrace() {
|
|
||||||
const stub = getGripStub("testErrorWithoutStacktrace");
|
|
||||||
is(getRep(stub), ErrorRep.rep,
|
|
||||||
`Rep correctly selects Error Rep for Error object`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"Error: Error message",
|
|
||||||
"Error Rep has expected text content for an error without stacktrace");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {object: stub, mode: MODE.TINY});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"Error",
|
|
||||||
"Error Rep has expected text content for an error without stacktrace in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testEvalError() {
|
|
||||||
// Test object = `new EvalError("EvalError message")`
|
|
||||||
const stub = getGripStub("testEvalError");
|
|
||||||
is(getRep(stub), ErrorRep.rep,
|
|
||||||
`Rep correctly selects Error Rep for EvalError object`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"EvalError: EvalError message\n" +
|
|
||||||
"Stack trace:\n" +
|
|
||||||
"@debugger eval code:10:13\n",
|
|
||||||
"Error Rep has expected text content for an EvalError");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {object: stub, mode: MODE.TINY});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"EvalError",
|
|
||||||
"Error Rep has expected text content for an EvalError in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testInternalError() {
|
|
||||||
// Test object = `new InternalError("InternalError message")`
|
|
||||||
const stub = getGripStub("testInternalError");
|
|
||||||
is(getRep(stub), ErrorRep.rep,
|
|
||||||
`Rep correctly selects Error Rep for InternalError object`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"InternalError: InternalError message\n" +
|
|
||||||
"Stack trace:\n" +
|
|
||||||
"@debugger eval code:11:13\n",
|
|
||||||
"Error Rep has expected text content for an InternalError");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {object: stub, mode: MODE.TINY});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"InternalError",
|
|
||||||
"Error Rep has expected text content for an InternalError in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testRangeError() {
|
|
||||||
// Test object = `new RangeError("RangeError message")`
|
|
||||||
const stub = getGripStub("testRangeError");
|
|
||||||
is(getRep(stub), ErrorRep.rep,
|
|
||||||
`Rep correctly selects Error Rep for RangeError object`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"RangeError: RangeError message\n" +
|
|
||||||
"Stack trace:\n" +
|
|
||||||
"@debugger eval code:12:13\n",
|
|
||||||
"Error Rep has expected text content for RangeError");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {object: stub, mode: MODE.TINY});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"RangeError",
|
|
||||||
"Error Rep has expected text content for RangeError in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testReferenceError() {
|
|
||||||
// Test object = `new ReferenceError("ReferenceError message"`
|
|
||||||
const stub = getGripStub("testReferenceError");
|
|
||||||
is(getRep(stub), ErrorRep.rep,
|
|
||||||
`Rep correctly selects Error Rep for ReferenceError object`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"ReferenceError: ReferenceError message\n" +
|
|
||||||
"Stack trace:\n" +
|
|
||||||
"@debugger eval code:13:13\n",
|
|
||||||
"Error Rep has expected text content for ReferenceError");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {object: stub, mode: MODE.TINY});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"ReferenceError",
|
|
||||||
"Error Rep has expected text content for ReferenceError in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testSyntaxError() {
|
|
||||||
// Test object = `new SyntaxError("SyntaxError message"`
|
|
||||||
const stub = getGripStub("testSyntaxError");
|
|
||||||
is(getRep(stub), ErrorRep.rep,
|
|
||||||
`Rep correctly selects Error Rep for SyntaxError object`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"SyntaxError: SyntaxError message\n" +
|
|
||||||
"Stack trace:\n" +
|
|
||||||
"@debugger eval code:14:13\n",
|
|
||||||
"Error Rep has expected text content for SyntaxError");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {object: stub, mode: MODE.TINY});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"SyntaxError",
|
|
||||||
"SyntaxError Rep has expected text content for SyntaxError in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testTypeError() {
|
|
||||||
// Test object = `new TypeError("TypeError message"`
|
|
||||||
const stub = getGripStub("testTypeError");
|
|
||||||
is(getRep(stub), ErrorRep.rep,
|
|
||||||
`Rep correctly selects Error Rep for TypeError`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"TypeError: TypeError message\n" +
|
|
||||||
"Stack trace:\n" +
|
|
||||||
"@debugger eval code:15:13\n",
|
|
||||||
"Error Rep has expected text content for TypeError");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {object: stub, mode: MODE.TINY});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"TypeError",
|
|
||||||
"Error Rep has expected text content for a TypeError in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testURIError() {
|
|
||||||
// Test object = `new URIError("URIError message")`
|
|
||||||
const stub = getGripStub("testURIError");
|
|
||||||
is(getRep(stub), ErrorRep.rep,
|
|
||||||
`Rep correctly selects Error Rep for URIError object`);
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"URIError: URIError message\n" +
|
|
||||||
"Stack trace:\n" +
|
|
||||||
"@debugger eval code:16:13\n",
|
|
||||||
"Error Rep has expected text content for URIError");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {object: stub, mode: MODE.TINY});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"URIError",
|
|
||||||
"Error Rep has expected text content for URIError in tiny mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
// Test object = `new Error("Error message")`
|
|
||||||
const stub = getGripStub("testSimpleError");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(ErrorRep.rep, {
|
|
||||||
object: stub,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"*Error: Error message\n" +
|
|
||||||
"Stack trace:\n" +
|
|
||||||
"@debugger eval code:1:13\n*",
|
|
||||||
"Error Rep has expected text content when an objectLink is passed as a prop");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(
|
|
||||||
ErrorRep.rep, {
|
|
||||||
object: stub,
|
|
||||||
mode: MODE.TINY,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(tinyRenderedComponent.textContent,
|
|
||||||
"*Error*",
|
|
||||||
"Error Rep has expected text content in tiny mode when an objectLink is passed " +
|
|
||||||
"as a prop");
|
|
||||||
}
|
|
||||||
|
|
||||||
function getGripStub(name) {
|
|
||||||
switch (name) {
|
|
||||||
case "testSimpleError":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj1020",
|
|
||||||
"class": "Error",
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Error",
|
|
||||||
"name": "Error",
|
|
||||||
"message": "Error message",
|
|
||||||
"stack": "@debugger eval code:1:13\n",
|
|
||||||
"fileName": "debugger eval code",
|
|
||||||
"lineNumber": 1,
|
|
||||||
"columnNumber": 13
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testMultilineStackError":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj1021",
|
|
||||||
"class": "Error",
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Error",
|
|
||||||
"name": "Error",
|
|
||||||
"message": "bar",
|
|
||||||
"stack": "errorBar@debugger eval code:6:15\n" +
|
|
||||||
"errorFoo@debugger eval code:3:3\n" +
|
|
||||||
"@debugger eval code:8:1\n",
|
|
||||||
"fileName": "debugger eval code",
|
|
||||||
"lineNumber": 6,
|
|
||||||
"columnNumber": 15
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testErrorWithoutStacktrace":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj1020",
|
|
||||||
"class": "Error",
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Error",
|
|
||||||
"name": "Error",
|
|
||||||
"message": "Error message",
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testEvalError":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj1022",
|
|
||||||
"class": "Error",
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Error",
|
|
||||||
"name": "EvalError",
|
|
||||||
"message": "EvalError message",
|
|
||||||
"stack": "@debugger eval code:10:13\n",
|
|
||||||
"fileName": "debugger eval code",
|
|
||||||
"lineNumber": 10,
|
|
||||||
"columnNumber": 13
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testInternalError":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj1023",
|
|
||||||
"class": "Error",
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Error",
|
|
||||||
"name": "InternalError",
|
|
||||||
"message": "InternalError message",
|
|
||||||
"stack": "@debugger eval code:11:13\n",
|
|
||||||
"fileName": "debugger eval code",
|
|
||||||
"lineNumber": 11,
|
|
||||||
"columnNumber": 13
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testRangeError":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj1024",
|
|
||||||
"class": "Error",
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Error",
|
|
||||||
"name": "RangeError",
|
|
||||||
"message": "RangeError message",
|
|
||||||
"stack": "@debugger eval code:12:13\n",
|
|
||||||
"fileName": "debugger eval code",
|
|
||||||
"lineNumber": 12,
|
|
||||||
"columnNumber": 13
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testReferenceError":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj1025",
|
|
||||||
"class": "Error",
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Error",
|
|
||||||
"name": "ReferenceError",
|
|
||||||
"message": "ReferenceError message",
|
|
||||||
"stack": "@debugger eval code:13:13\n",
|
|
||||||
"fileName": "debugger eval code",
|
|
||||||
"lineNumber": 13,
|
|
||||||
"columnNumber": 13
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testSyntaxError":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj1026",
|
|
||||||
"class": "Error",
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Error",
|
|
||||||
"name": "SyntaxError",
|
|
||||||
"message": "SyntaxError message",
|
|
||||||
"stack": "@debugger eval code:14:13\n",
|
|
||||||
"fileName": "debugger eval code",
|
|
||||||
"lineNumber": 14,
|
|
||||||
"columnNumber": 13
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testTypeError":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj1027",
|
|
||||||
"class": "Error",
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Error",
|
|
||||||
"name": "TypeError",
|
|
||||||
"message": "TypeError message",
|
|
||||||
"stack": "@debugger eval code:15:13\n",
|
|
||||||
"fileName": "debugger eval code",
|
|
||||||
"lineNumber": 15,
|
|
||||||
"columnNumber": 13
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testURIError":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj1028",
|
|
||||||
"class": "Error",
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Error",
|
|
||||||
"name": "URIError",
|
|
||||||
"message": "URIError message",
|
|
||||||
"stack": "@debugger eval code:16:13\n",
|
|
||||||
"fileName": "debugger eval code",
|
|
||||||
"lineNumber": 16,
|
|
||||||
"columnNumber": 13
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,490 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Event rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Event</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
getSelectableInInspectorGrips,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { Event } = REPS;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(getGripStub("testEvent")), Event.rep, "Rep correctly selects Event Rep");
|
|
||||||
|
|
||||||
yield testEvent();
|
|
||||||
yield testMouseEvent();
|
|
||||||
yield testKeyboardEvent();
|
|
||||||
yield testKeyboardEventWithModifiers();
|
|
||||||
yield testMessageEvent();
|
|
||||||
|
|
||||||
yield testOnDomNodeMouseOver();
|
|
||||||
yield testOnDomNodeMouseOut();
|
|
||||||
yield testOnDomNodeInspectIconClick();
|
|
||||||
|
|
||||||
yield testObjectLink();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testEvent() {
|
|
||||||
const renderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: getGripStub("testEvent"),
|
|
||||||
});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"beforeprint { target: Window, isTrusted: true, " +
|
|
||||||
"currentTarget: Window, 8 more… }",
|
|
||||||
"Event rep has expected text content for an event");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMouseEvent() {
|
|
||||||
const renderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: getGripStub("testMouseEvent")
|
|
||||||
});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"click { target: div#test, clientX: 62, clientY: 18, 3 more… }",
|
|
||||||
"Event rep has expected text content for a mouse event");
|
|
||||||
|
|
||||||
const longRenderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: getGripStub("testMouseEvent"),
|
|
||||||
mode: MODE.LONG,
|
|
||||||
});
|
|
||||||
is(longRenderedComponent.textContent,
|
|
||||||
"click { target: div#test, buttons: 0, clientX: 62, clientY: 18, layerX: 0, " +
|
|
||||||
"layerY: 0 }",
|
|
||||||
"Event rep has expected text content for a mouse event in long mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testKeyboardEvent() {
|
|
||||||
const renderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: getGripStub("testKeyboardEvent")
|
|
||||||
});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"keyup { target: body, key: \"Control\", charCode: 0, 1 more… }",
|
|
||||||
"Event rep has expected text content for a keyboard event");
|
|
||||||
|
|
||||||
const longRenderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: getGripStub("testKeyboardEvent"),
|
|
||||||
mode: MODE.LONG,
|
|
||||||
});
|
|
||||||
is(longRenderedComponent.textContent,
|
|
||||||
`keyup { target: body, key: "Control", charCode: 0, keyCode: 17 }`,
|
|
||||||
"Event rep has expected text content for a keyboard event in long mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testKeyboardEventWithModifiers() {
|
|
||||||
const renderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: getGripStub("testKeyboardEventWithModifiers"),
|
|
||||||
mode: MODE.LONG,
|
|
||||||
});
|
|
||||||
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
`keyup Meta-Shift { target: body, key: "M", charCode: 0, keyCode: 77 }`,
|
|
||||||
"Event rep has expected text content for a keyboard event with modifiers " +
|
|
||||||
"in long mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMessageEvent() {
|
|
||||||
const renderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: getGripStub("testMessageEvent")
|
|
||||||
});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
`message { target: Window, isTrusted: false, data: "test data", ` +
|
|
||||||
"8 more… }",
|
|
||||||
"Event rep has expected text content for a message event");
|
|
||||||
|
|
||||||
const longRenderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: getGripStub("testMessageEvent"),
|
|
||||||
mode: MODE.LONG,
|
|
||||||
});
|
|
||||||
is(longRenderedComponent.textContent,
|
|
||||||
`message { target: Window, isTrusted: false, data: "test data", ` +
|
|
||||||
`origin: "null", lastEventId: "", source: Window, ports: Array, ` +
|
|
||||||
`currentTarget: Window, eventPhase: 2, bubbles: false, 1 more… }`,
|
|
||||||
"Event rep has expected text content for a message event in long mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnDomNodeMouseOver() {
|
|
||||||
const stub = getGripStub("testMouseEvent");
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
|
|
||||||
is(grips.length, 1, "the stub has one node grip");
|
|
||||||
|
|
||||||
let mouseOverValue;
|
|
||||||
let onDOMNodeMouseOver = (object) => {
|
|
||||||
mouseOverValue = object;
|
|
||||||
};
|
|
||||||
const renderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: stub,
|
|
||||||
onDOMNodeMouseOver,
|
|
||||||
});
|
|
||||||
|
|
||||||
const node = renderedComponent.querySelector(".objectBox-node");
|
|
||||||
TestUtils.Simulate.mouseOver(node);
|
|
||||||
|
|
||||||
is(mouseOverValue, grips[0], "onDOMNodeMouseOver is called with " +
|
|
||||||
"the expected argument when mouseover is fired on the Rep");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnDomNodeMouseOut() {
|
|
||||||
const stub = getGripStub("testMouseEvent");
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one node grip");
|
|
||||||
|
|
||||||
let called = false;
|
|
||||||
let onDOMNodeMouseOut = (object) => {
|
|
||||||
called = true;
|
|
||||||
};
|
|
||||||
const renderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: stub,
|
|
||||||
onDOMNodeMouseOut,
|
|
||||||
});
|
|
||||||
|
|
||||||
const node = renderedComponent.querySelector(".objectBox-node");
|
|
||||||
TestUtils.Simulate.mouseOut(node);
|
|
||||||
|
|
||||||
is(called, true, "onDOMNodeMouseOut is called when mouseout is fired on the Rep");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnDomNodeInspectIconClick() {
|
|
||||||
const stub = getGripStub("testMouseEvent");
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one node grip");
|
|
||||||
|
|
||||||
let inspectIconClickedValue = null;
|
|
||||||
let onInspectIconClick = (object) => {
|
|
||||||
inspectIconClickedValue = object;
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: stub,
|
|
||||||
onInspectIconClick,
|
|
||||||
});
|
|
||||||
|
|
||||||
const icon = renderedComponent.querySelector(".open-inspector");
|
|
||||||
ok(icon !== null,
|
|
||||||
"There is an inspect icon when the node is connected to the DOM tree");
|
|
||||||
|
|
||||||
TestUtils.Simulate.click(icon);
|
|
||||||
|
|
||||||
is(inspectIconClickedValue, grips[0],
|
|
||||||
"onInspectIconClick is called with the expected argument " +
|
|
||||||
"when the inspect icon is clicked");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
const renderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: getGripStub("testMouseEvent"),
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"*click** { *target: div#test, clientX: 62, clientY: 18, *3 more…** }*",
|
|
||||||
"Event rep has expected text content when an objectLink is passed as a prop");
|
|
||||||
|
|
||||||
const longRenderedComponent = renderComponent(Event.rep, {
|
|
||||||
object: getGripStub("testMouseEvent"),
|
|
||||||
mode: MODE.LONG,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(longRenderedComponent.textContent,
|
|
||||||
"*click** { *target: div#test, buttons: 0, clientX: 62, clientY: 18, layerX: 0, " +
|
|
||||||
"layerY: 0* }*",
|
|
||||||
"Event rep has expected text content in long mode when an objectLink is passed " +
|
|
||||||
"as a prop");
|
|
||||||
}
|
|
||||||
|
|
||||||
function getGripStub(name) {
|
|
||||||
switch (name) {
|
|
||||||
case "testEvent":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Event",
|
|
||||||
"actor": "server1.conn23.obj35",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 1,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMEvent",
|
|
||||||
"type": "beforeprint",
|
|
||||||
"properties": {
|
|
||||||
"isTrusted": true,
|
|
||||||
"currentTarget": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Window",
|
|
||||||
"actor": "server1.conn23.obj37",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 760,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithURL",
|
|
||||||
"url": "http://example.com"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"eventPhase": 2,
|
|
||||||
"bubbles": false,
|
|
||||||
"cancelable": false,
|
|
||||||
"defaultPrevented": false,
|
|
||||||
"timeStamp": 1466780008434005,
|
|
||||||
"originalTarget": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Window",
|
|
||||||
"actor": "server1.conn23.obj38",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 760,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithURL",
|
|
||||||
"url": "http://example.com"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"explicitOriginalTarget": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Window",
|
|
||||||
"actor": "server1.conn23.obj39",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 760,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithURL",
|
|
||||||
"url": "http://example.com"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"NONE": 0
|
|
||||||
},
|
|
||||||
"target": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Window",
|
|
||||||
"actor": "server1.conn23.obj36",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 760,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithURL",
|
|
||||||
"url": "http://example.com"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testMouseEvent":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "MouseEvent",
|
|
||||||
"actor": "server1.conn20.obj39",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 1,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMEvent",
|
|
||||||
"type": "click",
|
|
||||||
"properties": {
|
|
||||||
"buttons": 0,
|
|
||||||
"clientX": 62,
|
|
||||||
"clientY": 18,
|
|
||||||
"layerX": 0,
|
|
||||||
"layerY": 0
|
|
||||||
},
|
|
||||||
"target": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "HTMLDivElement",
|
|
||||||
"actor": "server1.conn20.obj40",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "div",
|
|
||||||
"isConnected": true,
|
|
||||||
"attributes": {
|
|
||||||
"id": "test"
|
|
||||||
},
|
|
||||||
"attributesLength": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testKeyboardEvent":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "KeyboardEvent",
|
|
||||||
"actor": "server1.conn21.obj49",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 1,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMEvent",
|
|
||||||
"type": "keyup",
|
|
||||||
"properties": {
|
|
||||||
"key": "Control",
|
|
||||||
"charCode": 0,
|
|
||||||
"keyCode": 17
|
|
||||||
},
|
|
||||||
"target": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "HTMLBodyElement",
|
|
||||||
"actor": "server1.conn21.obj50",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "body",
|
|
||||||
"attributes": {},
|
|
||||||
"attributesLength": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"eventKind": "key",
|
|
||||||
"modifiers": []
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testKeyboardEventWithModifiers":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "KeyboardEvent",
|
|
||||||
"actor": "server1.conn21.obj49",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 1,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMEvent",
|
|
||||||
"type": "keyup",
|
|
||||||
"properties": {
|
|
||||||
"key": "M",
|
|
||||||
"charCode": 0,
|
|
||||||
"keyCode": 77
|
|
||||||
},
|
|
||||||
"target": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "HTMLBodyElement",
|
|
||||||
"actor": "server1.conn21.obj50",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "body",
|
|
||||||
"attributes": {},
|
|
||||||
"attributesLength": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"eventKind": "key",
|
|
||||||
"modifiers": ["Meta", "Shift"]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testMessageEvent":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "MessageEvent",
|
|
||||||
"actor": "server1.conn3.obj34",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 1,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMEvent",
|
|
||||||
"type": "message",
|
|
||||||
"properties": {
|
|
||||||
"isTrusted": false,
|
|
||||||
"data": "test data",
|
|
||||||
"origin": "null",
|
|
||||||
"lastEventId": "",
|
|
||||||
"source": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Window",
|
|
||||||
"actor": "server1.conn3.obj36",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 760,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithURL",
|
|
||||||
"url": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ports": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Array",
|
|
||||||
"actor": "server1.conn3.obj37",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0
|
|
||||||
},
|
|
||||||
"currentTarget": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Window",
|
|
||||||
"actor": "server1.conn3.obj38",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 760,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithURL",
|
|
||||||
"url": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"eventPhase": 2,
|
|
||||||
"bubbles": false,
|
|
||||||
"cancelable": false
|
|
||||||
},
|
|
||||||
"target": {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Window",
|
|
||||||
"actor": "server1.conn3.obj35",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 760,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithURL",
|
|
||||||
"url": "http://example.com"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,61 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test fallback for rep rendering when a rep fails to render.
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Failure</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
try {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { ArrayRep, RegExp } = REPS;
|
|
||||||
|
|
||||||
// Force the RegExp rep to crash by creating RegExp grip that throws when accessing
|
|
||||||
// the displayString property
|
|
||||||
let gripStub = {
|
|
||||||
"type": "object",
|
|
||||||
"class": "RegExp",
|
|
||||||
"actor": "server1.conn22.obj39",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 1,
|
|
||||||
get displayString() {
|
|
||||||
throw new Error("failure");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen.
|
|
||||||
is(getRep(gripStub), RegExp.rep, "Rep correctly selects RegExp Rep");
|
|
||||||
|
|
||||||
// Test fallback message is displayed when rendering bad rep directly.
|
|
||||||
let renderedComponent = renderComponent(RegExp.rep, { object: gripStub });
|
|
||||||
is(renderedComponent.textContent, "Invalid object", "Fallback rendering has expected text content");
|
|
||||||
|
|
||||||
// Test fallback message is displayed when bad rep is nested in another rep.
|
|
||||||
renderedComponent = renderComponent(ArrayRep.rep, { object: [1, gripStub, 2] });
|
|
||||||
is(renderedComponent.textContent, "[ 1, Invalid object, 2 ]", "Fallback rendering has expected text content");
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,417 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Func rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Func</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { Func } = REPS;
|
|
||||||
|
|
||||||
const componentUnderTest = Func;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
const gripStub = getGripStub("testNamed");
|
|
||||||
is(getRep(gripStub), Func.rep, "Rep correctly selects Func Rep");
|
|
||||||
|
|
||||||
yield testNamed();
|
|
||||||
yield testVarNamed();
|
|
||||||
yield testAnon();
|
|
||||||
yield testLongName();
|
|
||||||
yield testAsyncFunction();
|
|
||||||
yield testAnonAsyncFunction();
|
|
||||||
yield testGeneratorFunction();
|
|
||||||
yield testAnonGeneratorFunction();
|
|
||||||
yield testObjectLink();
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testNamed() {
|
|
||||||
// Test declaration: `function testName() { let innerVar = "foo" }`
|
|
||||||
const testName = "testNamed";
|
|
||||||
|
|
||||||
const defaultOutput = "function testName()";
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testUserNamed() {
|
|
||||||
// Test declaration: `function testName() { let innerVar = "foo" }`
|
|
||||||
const testName = "testUserNamed";
|
|
||||||
|
|
||||||
const defaultOutput = "function testUserName()";
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testVarNamed() {
|
|
||||||
// Test declaration: `let testVarName = function() { }`
|
|
||||||
const testName = "testVarNamed";
|
|
||||||
|
|
||||||
const defaultOutput = "function testVarName()";
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testAnon() {
|
|
||||||
// Test declaration: `() => {}`
|
|
||||||
const testName = "testAnon";
|
|
||||||
|
|
||||||
const defaultOutput = "function ()";
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testLongName() {
|
|
||||||
// Test declaration: `let f = function loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong() { }`
|
|
||||||
const testName = "testLongName";
|
|
||||||
|
|
||||||
const defaultOutput = "function looooooooooooooooooooooooooooooooooooooooooooooooo\u2026ooooooooooooooooooooooooooooooooooooooooooooong()";
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testAsyncFunction() {
|
|
||||||
const testName = "testAsyncFunction";
|
|
||||||
|
|
||||||
const defaultOutput = "async function waitUntil2017()";
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testAnonAsyncFunction() {
|
|
||||||
const testName = "testAnonAsyncFunction";
|
|
||||||
|
|
||||||
const defaultOutput = "async function ()";
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testGeneratorFunction() {
|
|
||||||
const testName = "testGeneratorFunction";
|
|
||||||
|
|
||||||
const defaultOutput = "function* fib()";
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testAnonGeneratorFunction() {
|
|
||||||
const testName = "testAnonGeneratorFunction";
|
|
||||||
|
|
||||||
const defaultOutput = "function* ()";
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
// Test declaration: `function testName() { let innerVar = "foo" }`
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: "*function *testName()",
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(
|
|
||||||
modeTests,
|
|
||||||
"testObjectLink",
|
|
||||||
componentUnderTest,
|
|
||||||
getGripStub("testNamed"),
|
|
||||||
{
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getGripStub(functionName) {
|
|
||||||
switch (functionName) {
|
|
||||||
case "testNamed":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Function",
|
|
||||||
"actor": "server1.conn6.obj35",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"isAsync": false,
|
|
||||||
"isGenerator": false,
|
|
||||||
"name": "testName",
|
|
||||||
"displayName": "testName",
|
|
||||||
"location": {
|
|
||||||
"url": "debugger eval code",
|
|
||||||
"line": 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testUserNamed":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Function",
|
|
||||||
"actor": "server1.conn6.obj35",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"isAsync": false,
|
|
||||||
"isGenerator": false,
|
|
||||||
"name": "testName",
|
|
||||||
"userDisplayName": "testUserName",
|
|
||||||
"displayName": "testName",
|
|
||||||
"location": {
|
|
||||||
"url": "debugger eval code",
|
|
||||||
"line": 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testVarNamed":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Function",
|
|
||||||
"actor": "server1.conn7.obj41",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"isAsync": false,
|
|
||||||
"isGenerator": false,
|
|
||||||
"displayName": "testVarName",
|
|
||||||
"location": {
|
|
||||||
"url": "debugger eval code",
|
|
||||||
"line": 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testAnon":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Function",
|
|
||||||
"actor": "server1.conn7.obj45",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"isAsync": false,
|
|
||||||
"isGenerator": false,
|
|
||||||
"location": {
|
|
||||||
"url": "debugger eval code",
|
|
||||||
"line": 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testLongName":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Function",
|
|
||||||
"actor": "server1.conn7.obj67",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"isAsync": false,
|
|
||||||
"isGenerator": false,
|
|
||||||
"name": "loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong",
|
|
||||||
"displayName": "loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong",
|
|
||||||
"location": {
|
|
||||||
"url": "debugger eval code",
|
|
||||||
"line": 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testAsyncFunction":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Function",
|
|
||||||
"actor": "server1.conn7.obj45",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"isAsync": true,
|
|
||||||
"isGenerator": false,
|
|
||||||
"name": "waitUntil2017",
|
|
||||||
"displayName": "waitUntil2017",
|
|
||||||
"location": {
|
|
||||||
"url": "debugger eval code",
|
|
||||||
"line": 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testAnonAsyncFunction":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Function",
|
|
||||||
"actor": "server1.conn7.obj45",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"isAsync": true,
|
|
||||||
"isGenerator": false,
|
|
||||||
"location": {
|
|
||||||
"url": "debugger eval code",
|
|
||||||
"line": 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testGeneratorFunction":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Function",
|
|
||||||
"actor": "server1.conn7.obj45",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"isAsync": false,
|
|
||||||
"isGenerator": true,
|
|
||||||
"name": "fib",
|
|
||||||
"displayName": "fib",
|
|
||||||
"location": {
|
|
||||||
"url": "debugger eval code",
|
|
||||||
"line": 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testAnonGeneratorFunction":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Function",
|
|
||||||
"actor": "server1.conn7.obj45",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"isAsync": false,
|
|
||||||
"isGenerator": true,
|
|
||||||
"location": {
|
|
||||||
"url": "debugger eval code",
|
|
||||||
"line": 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,859 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test GripMap rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - GripMap</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
getSelectableInInspectorGrips,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { GripMap } = REPS;
|
|
||||||
|
|
||||||
const componentUnderTest = GripMap;
|
|
||||||
|
|
||||||
try {
|
|
||||||
yield testEmptyMap();
|
|
||||||
yield testSymbolKeyedMap();
|
|
||||||
yield testWeakMap();
|
|
||||||
|
|
||||||
// // Test entries iterator
|
|
||||||
yield testMaxEntries();
|
|
||||||
yield testMoreThanMaxEntries();
|
|
||||||
yield testUninterestingEntries();
|
|
||||||
|
|
||||||
yield testOnDomNodeMouseOver();
|
|
||||||
yield testOnDomNodeMouseOut();
|
|
||||||
yield testOnDomNodeInspectIconClick();
|
|
||||||
|
|
||||||
yield testObjectLink();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testEmptyMap() {
|
|
||||||
// Test object: `new Map()`
|
|
||||||
const testName = "testEmptyMap";
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
const gripStub = getGripStub("testEmptyMap");
|
|
||||||
is(getRep(gripStub), GripMap.rep, "Rep correctly selects GripMap Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const defaultOutput = `Map { }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: "Map",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testSymbolKeyedMap() {
|
|
||||||
// Test object:
|
|
||||||
// `new Map([[Symbol("a"), "value-a"], [Symbol("b"), "value-b"]])`
|
|
||||||
const testName = "testSymbolKeyedMap";
|
|
||||||
|
|
||||||
const defaultOutput = `Map { Symbol(a): "value-a", Symbol(b): "value-b" }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: "Map",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testWeakMap() {
|
|
||||||
// Test object: `new WeakMap([[{a: "key-a"}, "value-a"]])`
|
|
||||||
const testName = "testWeakMap";
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
const gripStub = getGripStub("testWeakMap");
|
|
||||||
is(getRep(gripStub), GripMap.rep, "Rep correctly selects GripMap Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const defaultOutput = `WeakMap { Object: "value-a" }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: "WeakMap",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// Check the custom title with nested objects to make sure nested objects are not
|
|
||||||
// displayed with their parent's title.
|
|
||||||
mode: MODE.LONG,
|
|
||||||
title: "CustomTitle",
|
|
||||||
expectedOutput: `CustomTitle { Object: "value-a" }`,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMaxEntries() {
|
|
||||||
// Test object:
|
|
||||||
// `new Map([["key-a","value-a"], ["key-b","value-b"], ["key-c","value-c"]])`
|
|
||||||
const testName = "testMaxEntries";
|
|
||||||
|
|
||||||
const defaultOutput = `Map { "key-a": "value-a", "key-b": "value-b", "key-c": "value-c" }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: "Map",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMoreThanMaxEntries() {
|
|
||||||
// Test object = `new Map(
|
|
||||||
// [["key-0", "value-0"], ["key-1", "value-1"]], …, ["key-100", "value-100"]]}`
|
|
||||||
const testName = "testMoreThanMaxEntries";
|
|
||||||
|
|
||||||
const defaultOutput =
|
|
||||||
`Map { "key-0": "value-0", "key-1": "value-1", "key-2": "value-2", 98 more… }`;
|
|
||||||
|
|
||||||
// Generate string with 101 entries, which is the max limit for 'long' mode.
|
|
||||||
let longString = Array.from({length: 10}).map((_, i) => `"key-${i}": "value-${i}"`);
|
|
||||||
const longOutput = `Map { ${longString.join(", ")}, 91 more… }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Map`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: longOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testUninterestingEntries() {
|
|
||||||
// Test object:
|
|
||||||
// `new Map([["key-a",null], ["key-b",undefined], ["key-c","value-c"], ["key-d",4]])`
|
|
||||||
const testName = "testUninterestingEntries";
|
|
||||||
|
|
||||||
const defaultOutput =
|
|
||||||
`Map { "key-a": null, "key-c": "value-c", "key-d": 4, 1 more… }`;
|
|
||||||
const longOutput =
|
|
||||||
`Map { "key-a": null, "key-b": undefined, "key-c": "value-c", "key-d": 4 }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Map`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: longOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, testName, componentUnderTest, getGripStub(testName));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnDomNodeMouseOver() {
|
|
||||||
const nodeValuedStub = getGripStub("testNodeValuedMap");
|
|
||||||
const nodeKeyedStub = getGripStub("testNodeKeyedMap");
|
|
||||||
|
|
||||||
const valuesGrips = getSelectableInInspectorGrips(nodeValuedStub);
|
|
||||||
is(valuesGrips.length, 3, "the stub has three node grips");
|
|
||||||
|
|
||||||
const keysGrips = getSelectableInInspectorGrips(nodeKeyedStub);
|
|
||||||
is(keysGrips.length, 3, "the stub has three node grips");
|
|
||||||
|
|
||||||
let mouseOverValue;
|
|
||||||
let onDOMNodeMouseOver = (object) => {
|
|
||||||
mouseOverValue = object;
|
|
||||||
};
|
|
||||||
|
|
||||||
info("Testing onDOMNodeMouseOver on node valued Map");
|
|
||||||
const nodeValuedRenderedComponent = renderComponent(GripMap.rep, {
|
|
||||||
object: nodeValuedStub,
|
|
||||||
onDOMNodeMouseOver,
|
|
||||||
});
|
|
||||||
|
|
||||||
let nodes = nodeValuedRenderedComponent.querySelectorAll(".objectBox-node");
|
|
||||||
nodes.forEach((node, index) => {
|
|
||||||
TestUtils.Simulate.mouseOver(node);
|
|
||||||
is(mouseOverValue, valuesGrips[index],
|
|
||||||
"onDOMNodeMouseOver is called with the expected argument " +
|
|
||||||
"when mouseover is fired on the Rep");
|
|
||||||
});
|
|
||||||
|
|
||||||
info("Testing onDOMNodeMouseOver on node keyed Map");
|
|
||||||
const nodeKeyedRenderedComponent = renderComponent(GripMap.rep, {
|
|
||||||
object: nodeKeyedStub,
|
|
||||||
onDOMNodeMouseOver,
|
|
||||||
});
|
|
||||||
|
|
||||||
nodes = nodeKeyedRenderedComponent.querySelectorAll(".objectBox-node");
|
|
||||||
nodes.forEach((node, index) => {
|
|
||||||
TestUtils.Simulate.mouseOver(node);
|
|
||||||
is(mouseOverValue, keysGrips[index],
|
|
||||||
"onDOMNodeMouseOver is called with the expected argument " +
|
|
||||||
"when mouseover is fired on the Rep");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnDomNodeMouseOut() {
|
|
||||||
const nodeValuedStub = getGripStub("testNodeValuedMap");
|
|
||||||
const nodeKeyedStub = getGripStub("testNodeKeyedMap");
|
|
||||||
|
|
||||||
const valuesGrips = getSelectableInInspectorGrips(nodeValuedStub);
|
|
||||||
is(valuesGrips.length, 3, "the stub has three node grips");
|
|
||||||
|
|
||||||
const keysGrips = getSelectableInInspectorGrips(nodeKeyedStub);
|
|
||||||
is(keysGrips.length, 3, "the stub has three node grips");
|
|
||||||
|
|
||||||
let called = 0;
|
|
||||||
let onDOMNodeMouseOut = (object) => {
|
|
||||||
called++;
|
|
||||||
};
|
|
||||||
|
|
||||||
info("Testing onDOMNodeMouseOut on node valued Map");
|
|
||||||
const nodeValuedRenderedComponent = renderComponent(GripMap.rep, {
|
|
||||||
object: nodeValuedStub,
|
|
||||||
onDOMNodeMouseOut,
|
|
||||||
});
|
|
||||||
|
|
||||||
let nodes = nodeValuedRenderedComponent.querySelectorAll(".objectBox-node");
|
|
||||||
info("Simulating mouseout on each value node");
|
|
||||||
nodes.forEach((node, index) => TestUtils.Simulate.mouseOut(node));
|
|
||||||
is(called, 3,
|
|
||||||
"onDOMNodeMouseOut is called when mouseout is fired on each value NodeRep");
|
|
||||||
|
|
||||||
info("Testing onDOMNodeMouseOut on node keyed Map");
|
|
||||||
const nodeKeyedRenderedComponent = renderComponent(GripMap.rep, {
|
|
||||||
object: nodeKeyedStub,
|
|
||||||
onDOMNodeMouseOut,
|
|
||||||
});
|
|
||||||
|
|
||||||
nodes = nodeKeyedRenderedComponent.querySelectorAll(".objectBox-node");
|
|
||||||
// Resets counter
|
|
||||||
called = 0;
|
|
||||||
info("Simulating mouseout on each key node");
|
|
||||||
nodes.forEach((node, index) => TestUtils.Simulate.mouseOut(node));
|
|
||||||
is(called, 3,
|
|
||||||
"onDOMNodeMouseOut is called when mouseout is fired on each key NodeRep");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnDomNodeInspectIconClick() {
|
|
||||||
const nodeValuedStub = getGripStub("testNodeValuedMap");
|
|
||||||
const nodeKeyedStub = getGripStub("testNodeKeyedMap");
|
|
||||||
|
|
||||||
const valuesGrips = getSelectableInInspectorGrips(nodeValuedStub);
|
|
||||||
is(valuesGrips.length, 3, "the stub has three node grips");
|
|
||||||
|
|
||||||
const keysGrips = getSelectableInInspectorGrips(nodeKeyedStub);
|
|
||||||
is(keysGrips.length, 3, "the stub has three node grips");
|
|
||||||
|
|
||||||
let inspectIconClickedValue = null;
|
|
||||||
let onInspectIconClick = (object) => {
|
|
||||||
inspectIconClickedValue = object;
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderedComponentWithoutInspectIcon = renderComponent(GripMap.rep, {
|
|
||||||
object: getGripStub("testDisconnectedNodeValuedMap"),
|
|
||||||
onInspectIconClick,
|
|
||||||
});
|
|
||||||
is(renderedComponentWithoutInspectIcon.querySelector(".open-inspector"), null,
|
|
||||||
"There isn't an inspect icon when nodes are not connected to the DOM tree");
|
|
||||||
|
|
||||||
info("Testing onInspectIconClick on node valued Map");
|
|
||||||
const nodeValuedRenderedComponent = renderComponent(GripMap.rep, {
|
|
||||||
object: nodeValuedStub,
|
|
||||||
onInspectIconClick,
|
|
||||||
});
|
|
||||||
|
|
||||||
let icons = nodeValuedRenderedComponent.querySelectorAll(".open-inspector");
|
|
||||||
is(icons.length, valuesGrips.length,
|
|
||||||
"There is an icon for each node connected to the DOM tree");
|
|
||||||
|
|
||||||
icons.forEach((icon, index) => {
|
|
||||||
TestUtils.Simulate.click(icon);
|
|
||||||
is(inspectIconClickedValue, valuesGrips[index], "onInspectIconClick is called " +
|
|
||||||
"with the expected argument when the inspect icon is clicked");
|
|
||||||
});
|
|
||||||
|
|
||||||
info("Testing onInspectIconClick on node keyed Map");
|
|
||||||
const nodeKeyedRenderedComponent = renderComponent(GripMap.rep, {
|
|
||||||
object: nodeKeyedStub,
|
|
||||||
onInspectIconClick,
|
|
||||||
});
|
|
||||||
|
|
||||||
icons = nodeKeyedRenderedComponent.querySelectorAll(".open-inspector");
|
|
||||||
is(icons.length, keysGrips.length,
|
|
||||||
"There is an icon for each node connected to the DOM tree");
|
|
||||||
|
|
||||||
icons.forEach((icon, index) => {
|
|
||||||
TestUtils.Simulate.click(icon);
|
|
||||||
is(inspectIconClickedValue, keysGrips[index], "onInspectIconClick is called " +
|
|
||||||
"with the expected argument when the inspect icon is clicked");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
// Test object:
|
|
||||||
// `new Map([["key-a",null], ["key-b",undefined], ["key-c","value-c"], ["key-d",4]])`
|
|
||||||
const defaultOutput =
|
|
||||||
`*Map** { *"key-a": null, "key-c": "value-c", "key-d": 4, *1 more…** }*`;
|
|
||||||
const longOutput =
|
|
||||||
`*Map** { *"key-a": null, "key-b": undefined, "key-c": "value-c", "key-d": 4* }*`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `*Map*`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: longOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(
|
|
||||||
modeTests,
|
|
||||||
"testObjectLink",
|
|
||||||
componentUnderTest,
|
|
||||||
getGripStub("testUninterestingEntries"),
|
|
||||||
{
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getGripStub(functionName) {
|
|
||||||
switch (functionName) {
|
|
||||||
case "testEmptyMap":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj97",
|
|
||||||
"class": "Map",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "MapLike",
|
|
||||||
"size": 0,
|
|
||||||
"entries": []
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testSymbolKeyedMap":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj118",
|
|
||||||
"class": "Map",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "MapLike",
|
|
||||||
"size": 2,
|
|
||||||
"entries": [
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"type": "symbol",
|
|
||||||
"name": "a"
|
|
||||||
},
|
|
||||||
"value-a"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"type": "symbol",
|
|
||||||
"name": "b"
|
|
||||||
},
|
|
||||||
"value-b"
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testWeakMap":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj115",
|
|
||||||
"class": "WeakMap",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "MapLike",
|
|
||||||
"size": 1,
|
|
||||||
"entries": [
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj116",
|
|
||||||
"class": "Object",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 1
|
|
||||||
},
|
|
||||||
"value-a"
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testMaxEntries":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj109",
|
|
||||||
"class": "Map",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "MapLike",
|
|
||||||
"size": 3,
|
|
||||||
"entries": [
|
|
||||||
[
|
|
||||||
"key-a",
|
|
||||||
"value-a"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"key-b",
|
|
||||||
"value-b"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"key-c",
|
|
||||||
"value-c"
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testMoreThanMaxEntries": {
|
|
||||||
let entryNb = 101;
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Map",
|
|
||||||
"actor": "server1.conn0.obj332",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "MapLike",
|
|
||||||
"size": entryNb,
|
|
||||||
// Generate 101 entries, which is more that the maximum
|
|
||||||
// limit in case of the 'long' mode.
|
|
||||||
"entries": Array.from({length: entryNb}).map((_, i) => {
|
|
||||||
return [`key-${i}`, `value-${i}`];
|
|
||||||
})
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
case "testUninterestingEntries":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj111",
|
|
||||||
"class": "Map",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "MapLike",
|
|
||||||
"size": 4,
|
|
||||||
"entries": [
|
|
||||||
[
|
|
||||||
"key-a",
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"key-b",
|
|
||||||
{
|
|
||||||
"type": "undefined"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"key-c",
|
|
||||||
"value-c"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"key-d",
|
|
||||||
4
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testDisconnectedNodeValuedMap":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj213",
|
|
||||||
"class": "Map",
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "MapLike",
|
|
||||||
"size": 3,
|
|
||||||
"entries": [
|
|
||||||
[
|
|
||||||
"item-0",
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj214",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": false,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-1",
|
|
||||||
"class": "btn btn-log",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"item-1",
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj215",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": false,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-2",
|
|
||||||
"class": "btn btn-err",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"item-2",
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj216",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": false,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-3",
|
|
||||||
"class": "btn btn-count",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testNodeValuedMap":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj213",
|
|
||||||
"class": "Map",
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "MapLike",
|
|
||||||
"size": 3,
|
|
||||||
"entries": [
|
|
||||||
[
|
|
||||||
"item-0",
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj214",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": true,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-1",
|
|
||||||
"class": "btn btn-log",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"item-1",
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj215",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": true,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-2",
|
|
||||||
"class": "btn btn-err",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"item-2",
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj216",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": true,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-3",
|
|
||||||
"class": "btn btn-count",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testNodeKeyedMap":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj223",
|
|
||||||
"class": "WeakMap",
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "MapLike",
|
|
||||||
"size": 3,
|
|
||||||
"entries": [
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj224",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": true,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-1",
|
|
||||||
"class": "btn btn-log",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"item-0"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj225",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": true,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-3",
|
|
||||||
"class": "btn btn-count",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"item-2"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj226",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": true,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-2",
|
|
||||||
"class": "btn btn-err",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"item-1"
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,72 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Infinity rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Infinity</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { InfinityRep } = REPS;
|
|
||||||
|
|
||||||
try {
|
|
||||||
yield testInfinity();
|
|
||||||
yield testNegativeInfinity();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testInfinity() {
|
|
||||||
const stub = getGripStub("testInfinity");
|
|
||||||
is(getRep(stub), InfinityRep.rep, "Rep correctly selects Infinity Rep");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(InfinityRep.rep, { object: stub });
|
|
||||||
is(renderedComponent.textContent, "Infinity",
|
|
||||||
"Infinity rep has expected text content for Infinity");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testNegativeInfinity() {
|
|
||||||
const stub = getGripStub("testNegativeInfinity");
|
|
||||||
is(getRep(stub), InfinityRep.rep, "Rep correctly selects Infinity Rep");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(InfinityRep.rep, { object: stub });
|
|
||||||
is(renderedComponent.textContent, "-Infinity",
|
|
||||||
"Infinity rep has expected text content for negative Infinity");
|
|
||||||
}
|
|
||||||
|
|
||||||
function getGripStub(name) {
|
|
||||||
switch (name) {
|
|
||||||
case "testInfinity":
|
|
||||||
return {
|
|
||||||
type: "Infinity"
|
|
||||||
};
|
|
||||||
case "testNegativeInfinity":
|
|
||||||
return {
|
|
||||||
type: "-Infinity"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,131 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test LongString rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - LongString</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { LongStringRep } = REPS;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(getGripStub("testMultiline")), LongStringRep.rep,
|
|
||||||
"Rep correctly selects LongString Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
yield testMultiline();
|
|
||||||
yield testMultilineOpen();
|
|
||||||
yield testFullText();
|
|
||||||
yield testMultilineLimit();
|
|
||||||
yield testUseQuotes();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function quoteNewlines(text) {
|
|
||||||
return text.split("\n").join("\\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMultiline() {
|
|
||||||
const stub = getGripStub("testMultiline");
|
|
||||||
const renderedComponent = renderComponent(
|
|
||||||
LongStringRep.rep, { object: stub });
|
|
||||||
|
|
||||||
is(renderedComponent.textContent, quoteNewlines(`"${stub.initial}…"`),
|
|
||||||
"LongString rep has expected text content for multiline string");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMultilineLimit() {
|
|
||||||
const renderedComponent = renderComponent(
|
|
||||||
LongStringRep.rep, { object: getGripStub("testMultiline"), cropLimit: 20 });
|
|
||||||
|
|
||||||
is(
|
|
||||||
renderedComponent.textContent,
|
|
||||||
`"a\\naaaaaaaaaaaaaaaaaa…"`,
|
|
||||||
"LongString rep has expected text content for multiline string " +
|
|
||||||
"with specified number of characters");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMultilineOpen() {
|
|
||||||
const stub = getGripStub("testMultiline");
|
|
||||||
const renderedComponent = renderComponent(
|
|
||||||
LongStringRep.rep, { object: stub, member: {open: true}, cropLimit: 20 });
|
|
||||||
|
|
||||||
is(renderedComponent.textContent, quoteNewlines(`"${stub.initial}…"`),
|
|
||||||
"LongString rep has expected text content for multiline string when open");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testFullText() {
|
|
||||||
const stub = getGripStub("testFullText");
|
|
||||||
const renderedComponentOpen = renderComponent(
|
|
||||||
LongStringRep.rep, { object: stub, member: {open: true}, cropLimit: 20 });
|
|
||||||
|
|
||||||
is(renderedComponentOpen.textContent, quoteNewlines(`"${stub.fullText}"`),
|
|
||||||
"LongString rep has expected text content when grip has a fullText " +
|
|
||||||
"property and is open");
|
|
||||||
|
|
||||||
const renderedComponentNotOpen = renderComponent(
|
|
||||||
LongStringRep.rep, { object: stub, cropLimit: 20 });
|
|
||||||
|
|
||||||
is(renderedComponentNotOpen.textContent,
|
|
||||||
`"a\\naaaaaaaaaaaaaaaaaa…"`,
|
|
||||||
"LongString rep has expected text content when grip has a fullText " +
|
|
||||||
"property and is not open");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testUseQuotes() {
|
|
||||||
const renderedComponent = renderComponent(LongStringRep.rep,
|
|
||||||
{ object: getGripStub("testMultiline"), cropLimit: 20, useQuotes: false });
|
|
||||||
|
|
||||||
is(renderedComponent.textContent,
|
|
||||||
"a\naaaaaaaaaaaaaaaaaa…",
|
|
||||||
"LongString rep was expected to omit quotes");
|
|
||||||
}
|
|
||||||
|
|
||||||
function getGripStub(name) {
|
|
||||||
const multilineFullText = "a\n" + Array(20000).fill("a").join("");
|
|
||||||
const fullTextLength = multilineFullText.length;
|
|
||||||
const initialText = multilineFullText.substring(0, 10000);
|
|
||||||
|
|
||||||
switch (name) {
|
|
||||||
case "testMultiline":
|
|
||||||
return {
|
|
||||||
"type": "longString",
|
|
||||||
"initial": initialText,
|
|
||||||
"length": fullTextLength,
|
|
||||||
"actor": "server1.conn1.child1/longString58"
|
|
||||||
};
|
|
||||||
case "testFullText":
|
|
||||||
return {
|
|
||||||
"type": "longString",
|
|
||||||
"fullText": multilineFullText,
|
|
||||||
"initial": initialText,
|
|
||||||
"length": fullTextLength,
|
|
||||||
"actor": "server1.conn1.child1/longString58"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,49 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test NaN rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - NaN</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { NaNRep } = REPS;
|
|
||||||
|
|
||||||
try {
|
|
||||||
yield testNaN();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testNaN() {
|
|
||||||
const stub = {
|
|
||||||
type: "NaN"
|
|
||||||
};
|
|
||||||
is(getRep(stub), NaNRep.rep, "Rep correctly selects NaN Rep");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(NaNRep.rep, {object: stub});
|
|
||||||
is(renderedComponent.textContent, "NaN", "NaN rep has expected text content");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,46 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Null rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Null</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
try {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { Null } = REPS;
|
|
||||||
|
|
||||||
let gripStub = {
|
|
||||||
"type": "null"
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(gripStub), Null.rep, "Rep correctly selects Null Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(Null.rep, { object: gripStub });
|
|
||||||
is(renderedComponent.textContent, "null", "Null rep has expected text content");
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,97 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Number rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Number</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { Number } = REPS;
|
|
||||||
|
|
||||||
try {
|
|
||||||
yield testInt();
|
|
||||||
yield testBoolean();
|
|
||||||
yield testNegativeZero();
|
|
||||||
yield testUnsafeInt();
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function testInt() {
|
|
||||||
is(getRep(getGripStub("testInt")), Number.rep, "Rep correctly selects Number Rep");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(Number.rep, { object: getGripStub("testInt") });
|
|
||||||
is(renderedComponent.textContent, "5", "Number rep has expected text content for integer");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testBoolean() {
|
|
||||||
is(getRep(getGripStub("testTrue")), Number.rep, "Rep correctly selects Number Rep for boolean value");
|
|
||||||
|
|
||||||
let renderedComponent = renderComponent(Number.rep, { object: getGripStub("testTrue") });
|
|
||||||
is(renderedComponent.textContent, "true", "Number rep has expected text content for boolean true");
|
|
||||||
|
|
||||||
renderedComponent = renderComponent(Number.rep, { object: getGripStub("testFalse") });
|
|
||||||
is(renderedComponent.textContent, "false", "Number rep has expected text content for boolean false");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testNegativeZero() {
|
|
||||||
is(getRep(getGripStub("testNegZeroGrip")), Number.rep, "Rep correctly selects Number Rep for negative zero value");
|
|
||||||
|
|
||||||
let renderedComponent = renderComponent(Number.rep, { object: getGripStub("testNegZeroGrip") });
|
|
||||||
is(renderedComponent.textContent, "-0", "Number rep has expected text content for negative zero grip");
|
|
||||||
|
|
||||||
renderedComponent = renderComponent(Number.rep, { object: getGripStub("testNegZeroValue") });
|
|
||||||
is(renderedComponent.textContent, "-0", "Number rep has expected text content for negative zero value");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testUnsafeInt() {
|
|
||||||
const renderedComponent = renderComponent(Number.rep, { object: getGripStub("testUnsafeInt") });
|
|
||||||
is(renderedComponent.textContent, "900719925474099100", "Number rep has expected text content for a long number");
|
|
||||||
}
|
|
||||||
|
|
||||||
function getGripStub(name) {
|
|
||||||
switch (name) {
|
|
||||||
case "testInt":
|
|
||||||
return 5;
|
|
||||||
|
|
||||||
case "testTrue":
|
|
||||||
return true;
|
|
||||||
|
|
||||||
case "testFalse":
|
|
||||||
return false;
|
|
||||||
|
|
||||||
case "testNegZeroValue":
|
|
||||||
return -0;
|
|
||||||
|
|
||||||
case "testNegZeroGrip":
|
|
||||||
return {
|
|
||||||
"type": "-0"
|
|
||||||
};
|
|
||||||
|
|
||||||
case "testUnsafeInt":
|
|
||||||
return 900719925474099122;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,67 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test ObjectWithText rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - ObjectWithText</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
try {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { ObjectWithText } = REPS;
|
|
||||||
|
|
||||||
let gripStub = {
|
|
||||||
"type": "object",
|
|
||||||
"class": "CSSStyleRule",
|
|
||||||
"actor": "server1.conn3.obj273",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithText",
|
|
||||||
"text": ".Shadow"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(gripStub), ObjectWithText.rep, "Rep correctly selects ObjectWithText Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(ObjectWithText.rep, { object: gripStub });
|
|
||||||
is(renderedComponent.textContent, "\".Shadow\"", "ObjectWithText rep has expected text content");
|
|
||||||
|
|
||||||
// Test rendering with objectLink
|
|
||||||
const objectLinkRenderedComponent = renderComponent(ObjectWithText.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(objectLinkRenderedComponent.textContent,
|
|
||||||
"*CSSStyleRule *\".Shadow\"",
|
|
||||||
"ObjectWithText rep has expected text content when an objectLink is passed as a prop"
|
|
||||||
);
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,74 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test ObjectWithURL rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - ObjectWithURL</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
try {
|
|
||||||
let ReactDOM = browserRequire("devtools/client/shared/vendor/react-dom");
|
|
||||||
let React = browserRequire("devtools/client/shared/vendor/react");
|
|
||||||
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { ObjectWithURL } = REPS;
|
|
||||||
|
|
||||||
let gripStub = {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Location",
|
|
||||||
"actor": "server1.conn2.obj272",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 15,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithURL",
|
|
||||||
"url": "https://www.mozilla.org/en-US/"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(gripStub), ObjectWithURL.rep, "Rep correctly selects ObjectWithURL Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(ObjectWithURL.rep, { object: gripStub });
|
|
||||||
ok(renderedComponent.className.includes("objectBox-Location"), "ObjectWithURL rep has expected class name");
|
|
||||||
const innerNode = renderedComponent.querySelector(".objectPropValue");
|
|
||||||
is(innerNode.textContent, "https://www.mozilla.org/en-US/", "ObjectWithURL rep has expected inner HTML structure and text content");
|
|
||||||
|
|
||||||
// Test rendering with objectLink
|
|
||||||
const objectLinkRenderedComponent = renderComponent(ObjectWithURL.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(objectLinkRenderedComponent.textContent,
|
|
||||||
"*Location *https://www.mozilla.org/en-US/",
|
|
||||||
"ObjectWithURL rep has expected text content when an objectLink is passed as a prop"
|
|
||||||
);
|
|
||||||
|
|
||||||
// @TODO test link once Bug 1245303 has been implemented.
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,338 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Obj rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Obj</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { Obj } = REPS;
|
|
||||||
|
|
||||||
const componentUnderTest = Obj;
|
|
||||||
|
|
||||||
try {
|
|
||||||
yield testBasic();
|
|
||||||
|
|
||||||
// Test property iterator
|
|
||||||
yield testMaxProps();
|
|
||||||
yield testMoreThanMaxProps();
|
|
||||||
yield testUninterestingProps();
|
|
||||||
|
|
||||||
// Test that unusual property names are escaped.
|
|
||||||
yield testEscapedPropertyNames();
|
|
||||||
|
|
||||||
// Test that properties are rendered as expected by PropRep
|
|
||||||
yield testNested();
|
|
||||||
|
|
||||||
// Test that 'more' property doesn't clobber the caption.
|
|
||||||
yield testMoreProp();
|
|
||||||
|
|
||||||
// Test that you can pass a custom title to the Rep
|
|
||||||
yield testCustomTitle();
|
|
||||||
|
|
||||||
// Test that you can pass an objectLink to the Rep
|
|
||||||
yield testCustomTitle();
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testBasic() {
|
|
||||||
const stub = {};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(stub), Obj.rep, "Rep correctly selects Obj Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const defaultOutput = `Object`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testBasic", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMaxProps() {
|
|
||||||
const testName = "testMaxProps";
|
|
||||||
|
|
||||||
const stub = {a: "a", b: "b", c: "c"};
|
|
||||||
const defaultOutput = `Object { a: "a", b: "b", c: "c" }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Object`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testMaxProps", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMoreThanMaxProps() {
|
|
||||||
let stub = {};
|
|
||||||
for (let i = 0; i<100; i++) {
|
|
||||||
stub[`p${i}`] = i
|
|
||||||
}
|
|
||||||
const defaultOutput = `Object { p0: 0, p1: 1, p2: 2, 97 more… }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Object`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testMoreThanMaxProps", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testUninterestingProps() {
|
|
||||||
const stub = {a:undefined, b:undefined, c:"c", d:0};
|
|
||||||
const defaultOutput = `Object { c: "c", d: 0, a: undefined, 1 more… }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Object`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testUninterestingProps", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testEscapedPropertyNames() {
|
|
||||||
const stub = {"":1, "quote-this":2, noquotes:3};
|
|
||||||
const defaultOutput = `Object { "": 1, "quote-this": 2, noquotes: 3 }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Object`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testEscapedPropertyNames", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testNested() {
|
|
||||||
const stub = {
|
|
||||||
objProp: {
|
|
||||||
id: 1,
|
|
||||||
arr: [2]
|
|
||||||
},
|
|
||||||
strProp: "test string",
|
|
||||||
arrProp: [1]
|
|
||||||
};
|
|
||||||
const defaultOutput = `Object { strProp: "test string", objProp: Object, arrProp: [1] }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Object`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testNestedObject", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testMoreProp() {
|
|
||||||
const stub = {
|
|
||||||
a: undefined,
|
|
||||||
b: 1,
|
|
||||||
'more': 2,
|
|
||||||
d: 3
|
|
||||||
};
|
|
||||||
const defaultOutput = `Object { b: 1, more: 2, d: 3, 1 more… }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Object`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testMoreProp", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testCustomTitle() {
|
|
||||||
const customTitle = "MyCustomObject";
|
|
||||||
const stub = {a: "a", b: "b", c: "c"};
|
|
||||||
const defaultOutput = `${customTitle} { a: "a", b: "b", c: "c" }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: customTitle,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(
|
|
||||||
modeTests,
|
|
||||||
"testCustomTitle",
|
|
||||||
componentUnderTest,
|
|
||||||
stub, {
|
|
||||||
title: customTitle
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
const stub = {
|
|
||||||
a: undefined,
|
|
||||||
b: 1,
|
|
||||||
"more": 2,
|
|
||||||
d: 3
|
|
||||||
};
|
|
||||||
const defaultOutput = `*Object **{ *b: 1, more: 2, d: 3, *1 more…** }*`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `*Object*`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(
|
|
||||||
modeTests,
|
|
||||||
"testObjectLink",
|
|
||||||
componentUnderTest,
|
|
||||||
stub,
|
|
||||||
{
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,527 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Promise rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Promise</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
getSelectableInInspectorGrips,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { PromiseRep } = REPS;
|
|
||||||
|
|
||||||
const componentUnderTest = PromiseRep;
|
|
||||||
|
|
||||||
try {
|
|
||||||
yield testPending();
|
|
||||||
yield testFulfilledWithNumber();
|
|
||||||
yield testFulfilledWithString();
|
|
||||||
yield testFulfilledWithObject();
|
|
||||||
yield testFulfilledWithArray();
|
|
||||||
|
|
||||||
yield testOnDomNodeMouseOver();
|
|
||||||
yield testOnDomNodeMouseOut();
|
|
||||||
yield testOnDomNodeInspectIconClick();
|
|
||||||
|
|
||||||
yield testObjectLink();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testPending() {
|
|
||||||
// Test object = `new Promise((resolve, reject) => true)`
|
|
||||||
const stub = getGripStub("testPending");
|
|
||||||
|
|
||||||
// Test that correct rep is chosen.
|
|
||||||
is(getRep(stub), PromiseRep.rep,
|
|
||||||
"Rep correctly selects PromiseRep Rep for pending Promise");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const defaultOutput = `Promise { <state>: "pending" }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Promise { "pending" }`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testPending", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
function testFulfilledWithNumber() {
|
|
||||||
// Test object = `Promise.resolve(42)`
|
|
||||||
const stub = getGripStub("testFulfilledWithNumber");
|
|
||||||
|
|
||||||
// Test that correct rep is chosen.
|
|
||||||
is(getRep(stub), PromiseRep.rep,
|
|
||||||
"Rep correctly selects PromiseRep Rep for Promise fulfilled with a number");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const defaultOutput = `Promise { <state>: "fulfilled", <value>: 42 }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Promise { "fulfilled" }`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testFulfilledWithNumber", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
function testFulfilledWithString() {
|
|
||||||
// Test object = `Promise.resolve("foo")`
|
|
||||||
const stub = getGripStub("testFulfilledWithString");
|
|
||||||
|
|
||||||
// Test that correct rep is chosen.
|
|
||||||
is(getRep(stub), PromiseRep.rep,
|
|
||||||
"Rep correctly selects PromiseRep Rep for Promise fulfilled with a string");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const defaultOutput = `Promise { <state>: "fulfilled", <value>: "foo" }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Promise { "fulfilled" }`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testFulfilledWithString", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testFulfilledWithObject() {
|
|
||||||
// Test object = `Promise.resolve({foo: "bar", baz: "boo"})`
|
|
||||||
const stub = getGripStub("testFulfilledWithObject");
|
|
||||||
|
|
||||||
// Test that correct rep is chosen.
|
|
||||||
is(getRep(stub), PromiseRep.rep,
|
|
||||||
"Rep correctly selects PromiseRep Rep for Promise fulfilled with an object");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const defaultOutput = `Promise { <state>: "fulfilled", <value>: Object }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Promise { "fulfilled" }`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testFulfilledWithObject", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testFulfilledWithArray() {
|
|
||||||
// Test object = `Promise.resolve([1,2,3])`
|
|
||||||
const stub = getGripStub("testFulfilledWithArray");
|
|
||||||
|
|
||||||
// Test that correct rep is chosen.
|
|
||||||
is(getRep(stub), PromiseRep.rep,
|
|
||||||
"Rep correctly selects PromiseRep Rep for Promise fulfilled with an array");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const defaultOutput = `Promise { <state>: "fulfilled", <value>: [3] }`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `Promise { "fulfilled" }`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testFulfilledWithArray", componentUnderTest, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnDomNodeMouseOver() {
|
|
||||||
const stub = getGripStub("testFulfilledWithNode");
|
|
||||||
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one node grip");
|
|
||||||
|
|
||||||
let mouseOverValue;
|
|
||||||
let onDOMNodeMouseOver = (object) => {
|
|
||||||
mouseOverValue = object;
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(PromiseRep.rep, {
|
|
||||||
object: stub,
|
|
||||||
onDOMNodeMouseOver,
|
|
||||||
});
|
|
||||||
|
|
||||||
const node = renderedComponent.querySelector(".objectBox-node");
|
|
||||||
TestUtils.Simulate.mouseOver(node);
|
|
||||||
|
|
||||||
is(mouseOverValue, grips[0], "onDOMNodeMouseOver is called with " +
|
|
||||||
"the expected argument when mouseover is fired on the node element");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnDomNodeMouseOut() {
|
|
||||||
const stub = getGripStub("testFulfilledWithNode");
|
|
||||||
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one node grip");
|
|
||||||
|
|
||||||
let called = false;
|
|
||||||
let onDOMNodeMouseOut = (object) => {
|
|
||||||
called = true;
|
|
||||||
};
|
|
||||||
const renderedComponent = renderComponent(PromiseRep.rep, {
|
|
||||||
object: stub,
|
|
||||||
onDOMNodeMouseOut,
|
|
||||||
});
|
|
||||||
|
|
||||||
const node = renderedComponent.querySelector(".objectBox-node");
|
|
||||||
TestUtils.Simulate.mouseOut(node);
|
|
||||||
|
|
||||||
is(called, true,
|
|
||||||
"onDOMNodeMouseOut is called when mouseout is fired on the node element");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnDomNodeInspectIconClick() {
|
|
||||||
const stub = getGripStub("testFulfilledWithNode");
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one node grip");
|
|
||||||
|
|
||||||
let inspectIconClickedValues = null;
|
|
||||||
let onInspectIconClick = (object) => {
|
|
||||||
inspectIconClickedValues = object;
|
|
||||||
};
|
|
||||||
|
|
||||||
let renderedComponentWithoutInspectIcon = renderComponent(PromiseRep.rep, {
|
|
||||||
object: getGripStub("testFulfilledWithDisconnectedNode"),
|
|
||||||
onInspectIconClick,
|
|
||||||
});
|
|
||||||
is(renderedComponentWithoutInspectIcon.querySelector(".open-inspector"), null,
|
|
||||||
"There isn't an inspect icon when the node is not connected to the DOM tree");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(PromiseRep.rep, {
|
|
||||||
object: stub,
|
|
||||||
onInspectIconClick,
|
|
||||||
});
|
|
||||||
|
|
||||||
const icon = renderedComponent.querySelector(".open-inspector");
|
|
||||||
ok(icon !== null, "There is an inspect icon as expected");
|
|
||||||
|
|
||||||
TestUtils.Simulate.click(icon);
|
|
||||||
is(inspectIconClickedValues, grips[0],
|
|
||||||
"onInspectIconClick is called with the expected argument " +
|
|
||||||
"when the inspect icon is clicked");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
// Test object = `new Promise((resolve, reject) => true)`
|
|
||||||
const stub = getGripStub("testPending");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const defaultOutput = `*Promise** { *<state>: "pending"* }*`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: `*Promise** { *"pending"* }*`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(
|
|
||||||
modeTests,
|
|
||||||
"testObjectLink",
|
|
||||||
componentUnderTest,
|
|
||||||
stub,
|
|
||||||
{
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getGripStub(name) {
|
|
||||||
switch (name) {
|
|
||||||
case "testPending":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj54",
|
|
||||||
"class": "Promise",
|
|
||||||
"promiseState": {
|
|
||||||
"state": "pending",
|
|
||||||
"creationTimestamp": 1477327760242.5752
|
|
||||||
},
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Object",
|
|
||||||
"ownProperties": {},
|
|
||||||
"ownPropertiesLength": 0,
|
|
||||||
"safeGetterValues": {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testFulfilledWithNumber":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj55",
|
|
||||||
"class": "Promise",
|
|
||||||
"promiseState": {
|
|
||||||
"state": "fulfilled",
|
|
||||||
"value": 42,
|
|
||||||
"creationTimestamp": 1477327760242.721,
|
|
||||||
"timeToSettle": 0.018497000000479602
|
|
||||||
},
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Object",
|
|
||||||
"ownProperties": {},
|
|
||||||
"ownPropertiesLength": 0,
|
|
||||||
"safeGetterValues": {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testFulfilledWithString":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj56",
|
|
||||||
"class": "Promise",
|
|
||||||
"promiseState": {
|
|
||||||
"state": "fulfilled",
|
|
||||||
"value": "foo",
|
|
||||||
"creationTimestamp": 1477327760243.2483,
|
|
||||||
"timeToSettle": 0.0019969999998465937
|
|
||||||
},
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Object",
|
|
||||||
"ownProperties": {},
|
|
||||||
"ownPropertiesLength": 0,
|
|
||||||
"safeGetterValues": {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testFulfilledWithObject":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj59",
|
|
||||||
"class": "Promise",
|
|
||||||
"promiseState": {
|
|
||||||
"state": "fulfilled",
|
|
||||||
"value": {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj60",
|
|
||||||
"class": "Object",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 2
|
|
||||||
},
|
|
||||||
"creationTimestamp": 1477327760243.2214,
|
|
||||||
"timeToSettle": 0.002035999999861815
|
|
||||||
},
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Object",
|
|
||||||
"ownProperties": {},
|
|
||||||
"ownPropertiesLength": 0,
|
|
||||||
"safeGetterValues": {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testFulfilledWithArray":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj57",
|
|
||||||
"class": "Promise",
|
|
||||||
"promiseState": {
|
|
||||||
"state": "fulfilled",
|
|
||||||
"value": {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj58",
|
|
||||||
"class": "Array",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 4,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ArrayLike",
|
|
||||||
"length": 3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"creationTimestamp": 1477327760242.9597,
|
|
||||||
"timeToSettle": 0.006158000000141328
|
|
||||||
},
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Object",
|
|
||||||
"ownProperties": {},
|
|
||||||
"ownPropertiesLength": 0,
|
|
||||||
"safeGetterValues": {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testFulfilledWithNode":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj217",
|
|
||||||
"class": "Promise",
|
|
||||||
"promiseState": {
|
|
||||||
"state": "fulfilled",
|
|
||||||
"value": {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj218",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": true,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-1",
|
|
||||||
"class": "btn btn-log",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"creationTimestamp": 1480423091620.3716,
|
|
||||||
"timeToSettle": 0.02842400000372436
|
|
||||||
},
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Object",
|
|
||||||
"ownProperties": {},
|
|
||||||
"ownPropertiesLength": 0,
|
|
||||||
"safeGetterValues": {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
case "testFulfilledWithDisconnectedNode":
|
|
||||||
return {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj217",
|
|
||||||
"class": "Promise",
|
|
||||||
"promiseState": {
|
|
||||||
"state": "fulfilled",
|
|
||||||
"value": {
|
|
||||||
"type": "object",
|
|
||||||
"actor": "server1.conn1.child1/obj218",
|
|
||||||
"class": "HTMLButtonElement",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 1,
|
|
||||||
"nodeName": "button",
|
|
||||||
"isConnected": false,
|
|
||||||
"attributes": {
|
|
||||||
"id": "btn-1",
|
|
||||||
"class": "btn btn-log",
|
|
||||||
"type": "button"
|
|
||||||
},
|
|
||||||
"attributesLength": 3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"creationTimestamp": 1480423091620.3716,
|
|
||||||
"timeToSettle": 0.02842400000372436
|
|
||||||
},
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "Object",
|
|
||||||
"ownProperties": {},
|
|
||||||
"ownPropertiesLength": 0,
|
|
||||||
"safeGetterValues": {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,65 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test RegExp rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - RegExp</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
try {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { RegExp } = REPS;
|
|
||||||
|
|
||||||
let gripStub = {
|
|
||||||
"type": "object",
|
|
||||||
"class": "RegExp",
|
|
||||||
"actor": "server1.conn22.obj39",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 1,
|
|
||||||
"displayString": "/ab+c/i"
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(gripStub), RegExp.rep, "Rep correctly selects RegExp Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(RegExp.rep, { object: gripStub });
|
|
||||||
is(renderedComponent.textContent, "/ab+c/i", "RegExp rep has expected text content");
|
|
||||||
|
|
||||||
// Test rendering with objectLink
|
|
||||||
const objectLinkRenderedComponent = renderComponent(RegExp.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(
|
|
||||||
objectLinkRenderedComponent.textContent,
|
|
||||||
"*/ab+c/i*",
|
|
||||||
"RegExp rep has expected text content when an objectLink is passed as a prop"
|
|
||||||
);
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,110 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test String rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - String</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { StringRep } = REPS;
|
|
||||||
|
|
||||||
const test_cases = [{
|
|
||||||
name: "testMultiline",
|
|
||||||
props: {
|
|
||||||
object: "aaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbb\ncccccccccccccccc\n",
|
|
||||||
},
|
|
||||||
result: "\"aaaaaaaaaaaaaaaaaaaaa\\nbbbbbbbbbbbbbbbbbbb\\ncccccccccccccccc\\n\""
|
|
||||||
}, {
|
|
||||||
name: "testMultilineLimit",
|
|
||||||
props: {
|
|
||||||
object: "aaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbb\ncccccccccccccccc\n",
|
|
||||||
cropLimit: 20
|
|
||||||
},
|
|
||||||
result: "\"aaaaaaaaa…cccccc\\n\""
|
|
||||||
}, {
|
|
||||||
name: "testMultilineOpen",
|
|
||||||
props: {
|
|
||||||
object: "aaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbb\ncccccccccccccccc\n",
|
|
||||||
member: { open: true }
|
|
||||||
},
|
|
||||||
result: "\"aaaaaaaaaaaaaaaaaaaaa\\nbbbbbbbbbbbbbbbbbbb\\ncccccccccccccccc\\n\""
|
|
||||||
}, {
|
|
||||||
name: "testUseQuotes",
|
|
||||||
props: {
|
|
||||||
object: "abc",
|
|
||||||
useQuotes: false
|
|
||||||
},
|
|
||||||
result: "abc"
|
|
||||||
}, {
|
|
||||||
name: "testNonPrintableCharacters",
|
|
||||||
props: {
|
|
||||||
object: "a\x01b",
|
|
||||||
useQuotes: false
|
|
||||||
},
|
|
||||||
result: "a\ufffdb"
|
|
||||||
}, {
|
|
||||||
name: "testQuoting",
|
|
||||||
props: {
|
|
||||||
object: "\t\n\r\"'\\\x1f\x9f\ufeff\ufffe\ud8000\u2063\ufffc\u2028\ueeee",
|
|
||||||
useQuotes: true
|
|
||||||
},
|
|
||||||
result: "\"\\t\\n\\r\\\"'\\\\\\u001f\\u009f\\ufeff\\ufffe\\ud8000\\u2063\\ufffc\\u2028\\ueeee\""
|
|
||||||
}, {
|
|
||||||
name: "testUnpairedSurrogate",
|
|
||||||
props: {
|
|
||||||
object: "\uDC23",
|
|
||||||
useQuotes: true
|
|
||||||
},
|
|
||||||
result: "\"\\udc23\""
|
|
||||||
}, {
|
|
||||||
name: "testValidSurrogate",
|
|
||||||
props: {
|
|
||||||
object: "\ud83d\udeec",
|
|
||||||
useQuotes: true
|
|
||||||
},
|
|
||||||
result: "\"\ud83d\udeec\""
|
|
||||||
}, {
|
|
||||||
name: "testNoEscapeWhitespace",
|
|
||||||
props: {
|
|
||||||
object: "line 1\r\nline 2\n\tline 3",
|
|
||||||
useQuotes: true,
|
|
||||||
escapeWhitespace: false,
|
|
||||||
},
|
|
||||||
result: "\"line 1\r\nline 2\n\tline 3\""
|
|
||||||
}];
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(test_cases[0].props.object), StringRep.rep,
|
|
||||||
"Rep correctly selects String Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
for (let test of test_cases) {
|
|
||||||
const renderedComponent = renderComponent(StringRep.rep, test.props);
|
|
||||||
is(renderedComponent.textContent, test.result, "String rep " + test.name);
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,68 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Stylesheet rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - Stylesheet</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
try {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { StyleSheet } = REPS;
|
|
||||||
|
|
||||||
let gripStub = {
|
|
||||||
"type": "object",
|
|
||||||
"class": "CSSStyleSheet",
|
|
||||||
"actor": "server1.conn2.obj1067",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 0,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithURL",
|
|
||||||
"url": "https://example.com/styles.css"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(gripStub), StyleSheet.rep, "Rep correctly selects StyleSheet Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(StyleSheet.rep, { object: gripStub });
|
|
||||||
is(renderedComponent.textContent, "StyleSheet https://example.com/styles.css", "StyleSheet rep has expected text content");
|
|
||||||
|
|
||||||
// Test rendering with objectLink
|
|
||||||
const objectLinkRenderedComponent = renderComponent(StyleSheet.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(
|
|
||||||
objectLinkRenderedComponent.textContent,
|
|
||||||
"*StyleSheet *https://example.com/styles.css",
|
|
||||||
"StyleSheet rep has expected text content when an objectLink is passed as a prop"
|
|
||||||
);
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,75 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test Symbol rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - String</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
"use strict";
|
|
||||||
/* import-globals-from head.js */
|
|
||||||
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { SymbolRep } = REPS;
|
|
||||||
|
|
||||||
let gripStubs = new Map();
|
|
||||||
gripStubs.set("testSymbolFoo", {
|
|
||||||
type: "symbol",
|
|
||||||
name: "foo"
|
|
||||||
});
|
|
||||||
gripStubs.set("testSymbolWithoutIdentifier", {
|
|
||||||
type: "symbol"
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(gripStubs.get("testSymbolFoo")), SymbolRep.rep,
|
|
||||||
"Rep correctly selects SymbolRep Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
yield testSymbol();
|
|
||||||
yield testSymbolWithoutIdentifier();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testSymbol() {
|
|
||||||
const renderedComponent = renderComponent(
|
|
||||||
SymbolRep.rep,
|
|
||||||
{ object: gripStubs.get("testSymbolFoo") }
|
|
||||||
);
|
|
||||||
|
|
||||||
is(renderedComponent.textContent, "Symbol(foo)",
|
|
||||||
"Symbol rep has expected text content");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testSymbolWithoutIdentifier() {
|
|
||||||
const renderedComponent = renderComponent(
|
|
||||||
SymbolRep.rep,
|
|
||||||
{ object: gripStubs.get("testSymbolWithoutIdentifier") }
|
|
||||||
);
|
|
||||||
|
|
||||||
is(renderedComponent.textContent, "Symbol()",
|
|
||||||
"Symbol rep without identifier has expected text content");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,248 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test text-node rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - text-node</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
getSelectableInInspectorGrips,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { TextNode } = REPS;
|
|
||||||
|
|
||||||
let gripStubs = new Map();
|
|
||||||
gripStubs.set("testRendering", {
|
|
||||||
"class": "Text",
|
|
||||||
"actor": "server1.conn1.child1/obj50",
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 3,
|
|
||||||
"nodeName": "#text",
|
|
||||||
"textContent": "hello world",
|
|
||||||
"isConnected": true,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
gripStubs.set("testRenderingDisconnected", {
|
|
||||||
"class": "Text",
|
|
||||||
"actor": "server1.conn1.child1/obj50",
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 3,
|
|
||||||
"nodeName": "#text",
|
|
||||||
"textContent": "hello world",
|
|
||||||
"isConnected": false,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
gripStubs.set("testRenderingWithEOL", {
|
|
||||||
"class": "Text",
|
|
||||||
"actor": "server1.conn1.child1/obj50",
|
|
||||||
"preview": {
|
|
||||||
"kind": "DOMNode",
|
|
||||||
"nodeType": 3,
|
|
||||||
"nodeName": "#text",
|
|
||||||
"textContent": "hello\nworld"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(gripStubs.get("testRendering")), TextNode.rep,
|
|
||||||
"Rep correctly selects TextNode Rep");
|
|
||||||
|
|
||||||
yield testRendering();
|
|
||||||
yield testRenderingWithEOL();
|
|
||||||
|
|
||||||
yield testOnMouseOver();
|
|
||||||
yield testOnMouseOut();
|
|
||||||
yield testOnInspectIconClick();
|
|
||||||
|
|
||||||
yield testObjectLink();
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testRendering() {
|
|
||||||
const stub = gripStubs.get("testRendering");
|
|
||||||
const defaultOutput = `#text "hello world"`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: "#text",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testRendering", TextNode, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testRenderingWithEOL() {
|
|
||||||
const stub = gripStubs.get("testRenderingWithEOL");
|
|
||||||
const defaultOutput = `#text "hello\nworld"`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: "#text",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(modeTests, "testRenderingWithEOL", TextNode, stub);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnMouseOver() {
|
|
||||||
const stub = gripStubs.get("testRendering");
|
|
||||||
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one text node grip");
|
|
||||||
|
|
||||||
let mouseOverValue;
|
|
||||||
let onDOMNodeMouseOver = (object) => {
|
|
||||||
mouseOverValue = object;
|
|
||||||
};
|
|
||||||
const renderedComponent = renderComponent(TextNode.rep, {
|
|
||||||
object: stub,
|
|
||||||
onDOMNodeMouseOver,
|
|
||||||
});
|
|
||||||
|
|
||||||
TestUtils.Simulate.mouseOver(renderedComponent);
|
|
||||||
is(mouseOverValue, grips[0], "onDOMNodeMouseOver is called " +
|
|
||||||
"with the expected argument when mouseover is fired on the Rep");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnMouseOut() {
|
|
||||||
const stub = gripStubs.get("testRendering");
|
|
||||||
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one text node grip");
|
|
||||||
|
|
||||||
let called = false;
|
|
||||||
let onDOMNodeMouseOut = (object) => {
|
|
||||||
called = true;
|
|
||||||
};
|
|
||||||
const renderedComponent = renderComponent(TextNode.rep, {
|
|
||||||
object: stub,
|
|
||||||
onDOMNodeMouseOut,
|
|
||||||
});
|
|
||||||
|
|
||||||
TestUtils.Simulate.mouseOut(renderedComponent);
|
|
||||||
is(called, true, "onDOMNodeMouseOut is called when mouseout is fired on the Rep");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testOnInspectIconClick() {
|
|
||||||
const stub = gripStubs.get("testRendering");
|
|
||||||
|
|
||||||
const grips = getSelectableInInspectorGrips(stub);
|
|
||||||
is(grips.length, 1, "the stub has one text node grip");
|
|
||||||
|
|
||||||
let inspectIconClickedValue = null;
|
|
||||||
let inspectIconClickedEvent = null;
|
|
||||||
|
|
||||||
let onInspectIconClick = (object, event) => {
|
|
||||||
inspectIconClickedValue = object;
|
|
||||||
inspectIconClickedEvent = event;
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderedComponentWithoutInspectIcon = renderComponent(TextNode.rep, {
|
|
||||||
object: gripStubs.get("testRenderingDisconnected"),
|
|
||||||
onInspectIconClick,
|
|
||||||
});
|
|
||||||
is(renderedComponentWithoutInspectIcon.querySelector(".open-inspector"), null,
|
|
||||||
"There isn't an inspect icon when the node is not connected to the DOM tree");
|
|
||||||
|
|
||||||
const renderedComponent = renderComponent(TextNode.rep, {
|
|
||||||
object: stub,
|
|
||||||
onInspectIconClick,
|
|
||||||
});
|
|
||||||
|
|
||||||
const inspectIconNode = renderedComponent.querySelector(".open-inspector");
|
|
||||||
ok(inspectIconNode !== null, "There is an inspect icon as expected");
|
|
||||||
TestUtils.Simulate.click(inspectIconNode);
|
|
||||||
|
|
||||||
is(inspectIconClickedValue, grips[0],
|
|
||||||
"onInspectIconClick is called with expected value when inspect icon is clicked");
|
|
||||||
ok(inspectIconClickedEvent !== null && inspectIconClickedEvent.type === "click",
|
|
||||||
"onInspectIconClick forwarded the original event to the callback");
|
|
||||||
}
|
|
||||||
|
|
||||||
function testObjectLink() {
|
|
||||||
const stub = gripStubs.get("testRendering");
|
|
||||||
const defaultOutput = `*#text* "hello world"`;
|
|
||||||
|
|
||||||
const modeTests = [
|
|
||||||
{
|
|
||||||
mode: undefined,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.TINY,
|
|
||||||
expectedOutput: "*#text*",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.SHORT,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
mode: MODE.LONG,
|
|
||||||
expectedOutput: defaultOutput,
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
testRepRenderModes(
|
|
||||||
modeTests,
|
|
||||||
"testObjectLink",
|
|
||||||
TextNode,
|
|
||||||
stub,
|
|
||||||
{
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,49 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test undefined rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep test - undefined</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
try {
|
|
||||||
let ReactDOM = browserRequire("devtools/client/shared/vendor/react-dom");
|
|
||||||
let React = browserRequire("devtools/client/shared/vendor/react");
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { Undefined } = REPS;
|
|
||||||
|
|
||||||
let gripStub = {
|
|
||||||
"type": "undefined"
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(gripStub), Undefined.rep, "Rep correctly selects Undefined Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(Undefined.rep, {});
|
|
||||||
is(renderedComponent.className, "objectBox objectBox-undefined", "Undefined rep has expected class names");
|
|
||||||
is(renderedComponent.textContent, "undefined", "Undefined rep has expected text content");
|
|
||||||
} catch(e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,116 +0,0 @@
|
||||||
<!-- 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/. -->
|
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
Test window rep
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Rep tests - window</title>
|
|
||||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<pre id="test">
|
|
||||||
<script src="head.js" type="application/javascript"></script>
|
|
||||||
<script type="application/javascript">
|
|
||||||
window.onload = Task.async(function* () {
|
|
||||||
try {
|
|
||||||
let ReactDOM = browserRequire("devtools/client/shared/vendor/react-dom");
|
|
||||||
let React = browserRequire("devtools/client/shared/vendor/react");
|
|
||||||
|
|
||||||
const {
|
|
||||||
REPS,
|
|
||||||
MODE,
|
|
||||||
getRep,
|
|
||||||
} = browserRequire("devtools/client/shared/components/reps/reps");
|
|
||||||
let { Rep, Window } = REPS;
|
|
||||||
|
|
||||||
let gripStub = {
|
|
||||||
"type": "object",
|
|
||||||
"class": "Window",
|
|
||||||
"actor": "server1.conn3.obj198",
|
|
||||||
"extensible": true,
|
|
||||||
"frozen": false,
|
|
||||||
"sealed": false,
|
|
||||||
"ownPropertyLength": 887,
|
|
||||||
"preview": {
|
|
||||||
"kind": "ObjectWithURL",
|
|
||||||
"url": "about:newtab"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Test that correct rep is chosen
|
|
||||||
is(getRep(gripStub), Window.rep, "Rep correctly selects Window Rep");
|
|
||||||
|
|
||||||
// Test rendering
|
|
||||||
const renderedComponent = renderComponent(Rep, { object: gripStub });
|
|
||||||
ok(renderedComponent.className.includes("objectBox-Window"), "Window rep has expected class name");
|
|
||||||
is(renderedComponent.textContent, "Window about:newtab", "Window rep has expected text content");
|
|
||||||
const innerNode = renderedComponent.querySelector(".objectPropValue");
|
|
||||||
is(innerNode.textContent, "about:newtab", "Window rep has expected inner HTML structure and text content");
|
|
||||||
|
|
||||||
const tinyRenderedComponent = renderComponent(Window.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
mode: MODE.TINY,
|
|
||||||
});
|
|
||||||
is(tinyRenderedComponent.textContent, "Window",
|
|
||||||
"Window rep has expected text content in TINY mode");
|
|
||||||
|
|
||||||
const longRenderedComponent = renderComponent(Window.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
mode: MODE.LONG,
|
|
||||||
});
|
|
||||||
is(longRenderedComponent.textContent, "Window about:newtab",
|
|
||||||
"Window rep has expected text content in LONG mode");
|
|
||||||
|
|
||||||
const displayClassRenderedComponent = renderComponent(Window.rep, {
|
|
||||||
object: Object.assign({}, gripStub, {displayClass : "Custom"}),
|
|
||||||
mode: MODE.TINY,
|
|
||||||
});
|
|
||||||
is(displayClassRenderedComponent.textContent, "Custom",
|
|
||||||
"Window rep has expected text content in TINY mode with Custom display class");
|
|
||||||
|
|
||||||
const displayClassLongRenderedComponent = renderComponent(Window.rep, {
|
|
||||||
object: Object.assign({}, gripStub, {displayClass : "Custom"}),
|
|
||||||
mode: MODE.LONG,
|
|
||||||
title: "Custom"
|
|
||||||
});
|
|
||||||
is(displayClassLongRenderedComponent.textContent, "Custom about:newtab",
|
|
||||||
"Window rep has expected text content in LONG mode with Custom display class");
|
|
||||||
|
|
||||||
const objectLinkTinyRenderedComponent = renderComponent(Window.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
mode: MODE.TINY,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(
|
|
||||||
objectLinkTinyRenderedComponent.textContent,
|
|
||||||
"*Window*",
|
|
||||||
"Window rep has expected text content in TINY mode when an objectLink is passed as a prop"
|
|
||||||
);
|
|
||||||
|
|
||||||
const objectLinkLongRenderedComponent = renderComponent(Window.rep, {
|
|
||||||
object: gripStub,
|
|
||||||
mode: MODE.LONG,
|
|
||||||
objectLink: (props, ...children) => React.DOM.span({},
|
|
||||||
"*", ...children, "*"),
|
|
||||||
});
|
|
||||||
is(
|
|
||||||
objectLinkLongRenderedComponent.textContent,
|
|
||||||
"*Window* about:newtab",
|
|
||||||
"Window rep has expected text content in LONG mode when an objectLink is passed as a prop"
|
|
||||||
);
|
|
||||||
} catch (e) {
|
|
||||||
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
|
|
||||||
} finally {
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Загрузка…
Ссылка в новой задаче