.';
+
+ expect(compareEquals(actual, expected).message).toEqual(message);
+ });
+
+ it('reports 0 attr value as non empty DOM attribute', function () {
+ var nodeA = this.doc.createElement('div'),
+ nodeB = this.doc.createElement('div');
+
+ nodeA.setAttribute('contenteditable', 0);
+
+ expect(nodeA.isEqualNode(nodeB)).toBe(false);
+ var actual = {a: nodeA},
+ expected = {a: nodeB},
+ message = 'Expected $.a =
to equal
.';
+
+ expect(compareEquals(actual, expected).message).toEqual(message);
+ });
+
it("reports mismatches between a DOM node and a bare Object", function() {
var actual = {a: this.doc.createElement('div')},
expected = {a: {}},
diff --git a/src/core/PrettyPrinter.js b/src/core/PrettyPrinter.js
index a5abcdd6..39b85e56 100644
--- a/src/core/PrettyPrinter.js
+++ b/src/core/PrettyPrinter.js
@@ -228,15 +228,29 @@ getJasmineRequireObj().pp = function(j$) {
};
PrettyPrinter.prototype.emitDomElement = function(el) {
- var closingTag = '' + el.tagName.toLowerCase() + '>';
+ var tagName = el.tagName.toLowerCase(),
+ attrs = el.attributes,
+ i,
+ len = attrs.length,
+ out = '<' + tagName,
+ attr;
- if (el.innerHTML === '') {
- this.append(el.outerHTML.replace(closingTag, ''));
- } else {
- var tagEnd = el.outerHTML.indexOf('>');
- this.append(el.outerHTML.substring(0, tagEnd + 1));
- this.append('...' + closingTag);
+ for (i = 0; i < len; i++) {
+ attr = attrs[i];
+ out += ' ' + attr.name;
+
+ if (attr.value !== '') {
+ out += '="' + attr.value + '"';
+ }
}
+
+ out += '>';
+
+ if (el.childElementCount !== 0 || el.textContent !== '') {
+ out += '...' + tagName + '>';
+ }
+
+ this.append(out);
};
PrettyPrinter.prototype.formatProperty = function(obj, property, isGetter) {