Fix tests for toEqual diff output in IE

- Merges #1236 from @benchristel
This commit is contained in:
Ben Christel
2016-11-20 12:12:37 -08:00
committed by Gregg Van Hove
parent 54e7a82ef3
commit 41a813521b
4 changed files with 47 additions and 8 deletions

View File

@@ -3270,14 +3270,24 @@ getJasmineRequireObj().matchersUtil = function(j$) {
var aIsElement = a instanceof Element;
var bIsElement = b instanceof Element;
if (aIsElement && bIsElement) {
return a.outerHTML == b.outerHTML;
result = a.outerHTML == b.outerHTML;
if (!result) {
diffBuilder.record(a, b);
}
return result;
}
if (aIsElement || bIsElement) {
diffBuilder.record(a, b);
return false;
}
return a.innerText == b.innerText && a.textContent == b.textContent;
result = a.innerText == b.innerText && a.textContent == b.textContent;
if (!result) {
diffBuilder.record(a, b);
}
return result;
}
if (aIsDomNode || bIsDomNode) {
diffBuilder.record(a, b);
return false;
}
@@ -3444,7 +3454,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
return 'Expected ' +
path + ' to be a kind of ' +
expected.constructor.name +
j$.fnNameFor(expected.constructor) +
', but was ' + j$.pp(actual) + '.';
}

View File

@@ -100,8 +100,8 @@ describe("jasmineUnderTest.pp", function () {
});
it("should print 'null' as the constructor of an object with its own constructor property", function() {
expect(jasmineUnderTest.pp({constructor: function() {}})).toEqual("null({ constructor: Function })");
expect(jasmineUnderTest.pp({constructor: 'foo'})).toEqual("null({ constructor: 'foo' })");
expect(jasmineUnderTest.pp({constructor: function() {}})).toContain("null({");
expect(jasmineUnderTest.pp({constructor: 'foo'})).toContain("null({");
});
it("should not include inherited properties when stringifying an object", function() {

View File

@@ -289,7 +289,22 @@ describe("toEqual", function() {
expect(compareEquals(actual, expected).message).toEqual(message);
});
function constructorIsNotEnumerable() {
// in IE8, the constructor property is not enumerable, even if it is an
// own property of the object.
// Objects that differ only by an own `constructor` property are thus
// considered equal in IE8.
for (var key in {constructor: 1}) {
return false;
}
return true;
}
it("reports mismatches between objects with their own constructor property", function () {
if (constructorIsNotEnumerable()) {
return;
}
function Foo() {}
function Bar() {}
@@ -301,6 +316,10 @@ describe("toEqual", function() {
});
it("reports mismatches between an object with a real constructor and one with its own constructor property", function () {
if (constructorIsNotEnumerable()) {
return;
}
function Foo() {}
function Bar() {}

View File

@@ -189,14 +189,24 @@ getJasmineRequireObj().matchersUtil = function(j$) {
var aIsElement = a instanceof Element;
var bIsElement = b instanceof Element;
if (aIsElement && bIsElement) {
return a.outerHTML == b.outerHTML;
result = a.outerHTML == b.outerHTML;
if (!result) {
diffBuilder.record(a, b);
}
return result;
}
if (aIsElement || bIsElement) {
diffBuilder.record(a, b);
return false;
}
return a.innerText == b.innerText && a.textContent == b.textContent;
result = a.innerText == b.innerText && a.textContent == b.textContent;
if (!result) {
diffBuilder.record(a, b);
}
return result;
}
if (aIsDomNode || bIsDomNode) {
diffBuilder.record(a, b);
return false;
}
@@ -363,7 +373,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
return 'Expected ' +
path + ' to be a kind of ' +
expected.constructor.name +
j$.fnNameFor(expected.constructor) +
', but was ' + j$.pp(actual) + '.';
}