Bug 1283522 - Reps: support -0 grip in number rep. r=linclark
MozReview-Commit-ID: BWvMlbNdckG
--- a/devtools/client/shared/components/reps/number.js
+++ b/devtools/client/shared/components/reps/number.js
@@ -15,31 +15,36 @@ define(function (require, exports, modul
/**
* Renders a number
*/
const Number = React.createClass({
displayName: "Number",
stringify: function (object) {
- return (Object.is(object, -0) ? "-0" : String(object));
+ let isNegativeZero = Object.is(object, -0) ||
+ (object.type && object.type == "-0");
+
+ return (isNegativeZero ? "-0" : String(object));
},
render: function () {
let value = this.props.object;
+
return (
ObjectBox({className: "number"},
this.stringify(value)
)
);
}
});
function supportsObject(object, type) {
- return type == "boolean" || type == "number";
+ return type == "boolean" || type == "number" ||
+ (type == "object" && object.type == "-0");
}
// Exports from this module
exports.Number = {
rep: Number,
supportsObject: supportsObject
};
--- a/devtools/client/shared/components/test/mochitest/test_reps_number.html
+++ b/devtools/client/shared/components/test/mochitest/test_reps_number.html
@@ -16,16 +16,17 @@ Test Number rep
<script type="application/javascript;version=1.8">
window.onload = Task.async(function* () {
let { Rep } = browserRequire("devtools/client/shared/components/reps/rep");
let { Number } = browserRequire("devtools/client/shared/components/reps/number");
try {
yield testInt();
yield testBoolean();
+ yield testNegativeZero();
yield testUnsafeInt();
} catch(e) {
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
} finally {
SimpleTest.finish();
}
@@ -43,32 +44,51 @@ window.onload = Task.async(function* ()
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() {
+ const renderedRep = shallowRenderComponent(Rep, { object: getGripStub("testNegZeroGrip") });
+ is(renderedRep.type, Number.rep, `Rep correctly selects ${Number.rep.displayName} 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>