From de44e909f2ddbd491c7aee4dfe0a44b710140a4f Mon Sep 17 00:00:00 2001 From: Steve Gravrock Date: Tue, 7 Oct 2025 19:34:23 -0700 Subject: [PATCH] Ignore HtmlReporter's createElement and createTextNode options Injected DOM wrappers were a nice idea in theory but everyone just passes wrappers around document.createElement/document.createTextNode. That includes HtmlReporter's unit tests and karma-jasmine-html-reporter, the only known 5.x-compatible library that constructs an HtmlReporter. --- lib/jasmine-core/boot1.js | 6 - lib/jasmine-core/jasmine-html.js | 20 +- spec/html/HtmlReporterSpec.js | 340 ++++--------------------------- src/boot/boot1.js | 6 - src/html/DomContext.js | 13 +- src/html/HtmlReporter.js | 7 +- 6 files changed, 46 insertions(+), 346 deletions(-) diff --git a/lib/jasmine-core/boot1.js b/lib/jasmine-core/boot1.js index 4f19bd7f..c804eb46 100644 --- a/lib/jasmine-core/boot1.js +++ b/lib/jasmine-core/boot1.js @@ -88,12 +88,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. getContainer: function() { return document.body; }, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - }, timer: new jasmine.Timer(), filterSpecs: filterSpecs }); diff --git a/lib/jasmine-core/jasmine-html.js b/lib/jasmine-core/jasmine-html.js index 22eba1cb..0fb03251 100644 --- a/lib/jasmine-core/jasmine-html.js +++ b/lib/jasmine-core/jasmine-html.js @@ -139,10 +139,7 @@ jasmineRequire.HtmlReporter = function(j$) { this.#env = options.env; this.#getContainer = options.getContainer; - this.#domContext = new j$.private.DomContext({ - createElement: options.createElement, - createTextNode: options.createTextNode - }); + this.#domContext = new j$.private.DomContext(); this.#navigateWithNewParam = options.navigateWithNewParam || function() {}; this.#urlBuilder = new UrlBuilder( @@ -887,7 +884,7 @@ jasmineRequire.HtmlReporter = function(j$) { while (suite && suite.parent) { wrapper.insertBefore( - this.#domContext.createTextNode(' > '), + document.createTextNode(' > '), wrapper.firstChild ); suiteLink = this.#domContext.create( @@ -1129,17 +1126,8 @@ jasmineRequire.DomContext = function(j$) { //TODO maybe rename class DomContext { - #createElement; - - constructor(options = {}) { - this.#createElement = - options.createElement || document.createElement.bind(document); - this.createTextNode = - options.createTextNode || document.createTextNode.bind(document); - } - create(type, attrs, childrenArrayOrVarArgs) { - const el = this.#createElement(type); + const el = document.createElement(type); let children; if (j$.private.isArray(childrenArrayOrVarArgs)) { @@ -1156,7 +1144,7 @@ jasmineRequire.DomContext = function(j$) { const child = children[i]; if (typeof child === 'string') { - el.appendChild(this.createTextNode(child)); + el.appendChild(document.createTextNode(child)); } else { if (child) { el.appendChild(child); diff --git a/spec/html/HtmlReporterSpec.js b/spec/html/HtmlReporterSpec.js index 54c09bd1..ad5367f6 100644 --- a/spec/html/HtmlReporterSpec.js +++ b/spec/html/HtmlReporterSpec.js @@ -16,13 +16,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -52,13 +46,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); reporter.initialize(); @@ -79,12 +67,6 @@ describe('HtmlReporter', function() { env: env, getContainer: function() { return container; - }, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); } }); @@ -132,13 +114,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); reporter.specDone({ @@ -164,13 +140,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -193,13 +163,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -223,13 +187,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -255,13 +213,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -310,13 +262,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -360,13 +306,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -393,13 +333,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -434,13 +368,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); spyOn(console, 'error'); @@ -478,13 +406,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -507,12 +429,6 @@ describe('HtmlReporter', function() { reporter = new jasmineUnderTest.HtmlReporter({ env: env, getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - }, addToExistingQueryString: function(key, value) { return '?foo=bar&' + key + '=' + value; } @@ -629,13 +545,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -667,13 +577,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -713,13 +617,7 @@ describe('HtmlReporter', function() { }; const reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -757,13 +655,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -799,13 +691,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -822,13 +708,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); env.configure({ stopOnSpecFailure: true }); @@ -849,13 +729,7 @@ describe('HtmlReporter', function() { reporter = new jasmineUnderTest.HtmlReporter({ env: env, navigateWithNewParam: navigationHandler, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -879,13 +753,7 @@ describe('HtmlReporter', function() { reporter = new jasmineUnderTest.HtmlReporter({ env: env, navigateWithNewParam: navigationHandler, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); env.configure({ stopOnSpecFailure: true }); @@ -911,13 +779,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -936,13 +798,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); env.configure({ stopSpecOnExpectationFailure: true }); @@ -965,13 +821,7 @@ describe('HtmlReporter', function() { reporter = new jasmineUnderTest.HtmlReporter({ env: env, getContainer: getContainer, - navigateWithNewParam: navigateHandler, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + navigateWithNewParam: navigateHandler }); reporter.initialize(); @@ -997,13 +847,7 @@ describe('HtmlReporter', function() { reporter = new jasmineUnderTest.HtmlReporter({ env: env, getContainer: getContainer, - navigateWithNewParam: navigateHandler, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + navigateWithNewParam: navigateHandler }); env.configure({ stopSpecOnExpectationFailure: true }); @@ -1030,13 +874,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); env.configure({ hideDisabled: false }); @@ -1054,13 +892,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); env.configure({ hideDisabled: true }); @@ -1078,13 +910,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); env.configure({ hideDisabled: true }); @@ -1111,13 +937,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); env.configure({ random: false }); @@ -1135,13 +955,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); env.configure({ random: true }); @@ -1161,13 +975,7 @@ describe('HtmlReporter', function() { reporter = new jasmineUnderTest.HtmlReporter({ env: env, getContainer: getContainer, - navigateWithNewParam: navigateHandler, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + navigateWithNewParam: navigateHandler }); env.configure({ random: false }); @@ -1189,13 +997,7 @@ describe('HtmlReporter', function() { reporter = new jasmineUnderTest.HtmlReporter({ env: env, getContainer: getContainer, - navigateWithNewParam: navigateHandler, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + navigateWithNewParam: navigateHandler }); env.configure({ random: true }); @@ -1215,13 +1017,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -1245,13 +1041,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -1268,12 +1058,6 @@ describe('HtmlReporter', function() { getContainer: function() { return container; }, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - }, addToExistingQueryString: function(key, value) { return '?foo=bar&' + key + '=' + value; } @@ -1298,13 +1082,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -1359,12 +1137,6 @@ describe('HtmlReporter', function() { env: env, getContainer: function() { return container; - }, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); } }; specStatus = { @@ -1441,13 +1213,7 @@ describe('HtmlReporter', function() { }; reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -1508,12 +1274,6 @@ describe('HtmlReporter', function() { reporter = new jasmineUnderTest.HtmlReporter({ env: env, getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - }, addToExistingQueryString: function(key, value) { return '?foo=bar&' + key + '=' + value; } @@ -1703,12 +1463,6 @@ describe('HtmlReporter', function() { const reporter = new jasmineUnderTest.HtmlReporter({ env: env, getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - }, addToExistingQueryString: function(key, value) { return '?' + key + '=' + value; } @@ -1760,13 +1514,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -1790,13 +1538,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); @@ -1820,13 +1562,7 @@ describe('HtmlReporter', function() { }, reporter = new jasmineUnderTest.HtmlReporter({ env: env, - getContainer: getContainer, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - } + getContainer: getContainer }); reporter.initialize(); diff --git a/src/boot/boot1.js b/src/boot/boot1.js index e4d8b356..8a5e2ae0 100644 --- a/src/boot/boot1.js +++ b/src/boot/boot1.js @@ -64,12 +64,6 @@ getContainer: function() { return document.body; }, - createElement: function() { - return document.createElement.apply(document, arguments); - }, - createTextNode: function() { - return document.createTextNode.apply(document, arguments); - }, timer: new jasmine.Timer(), filterSpecs: filterSpecs }); diff --git a/src/html/DomContext.js b/src/html/DomContext.js index 19ea1af6..b4b205ae 100644 --- a/src/html/DomContext.js +++ b/src/html/DomContext.js @@ -3,17 +3,8 @@ jasmineRequire.DomContext = function(j$) { //TODO maybe rename class DomContext { - #createElement; - - constructor(options = {}) { - this.#createElement = - options.createElement || document.createElement.bind(document); - this.createTextNode = - options.createTextNode || document.createTextNode.bind(document); - } - create(type, attrs, childrenArrayOrVarArgs) { - const el = this.#createElement(type); + const el = document.createElement(type); let children; if (j$.private.isArray(childrenArrayOrVarArgs)) { @@ -30,7 +21,7 @@ jasmineRequire.DomContext = function(j$) { const child = children[i]; if (typeof child === 'string') { - el.appendChild(this.createTextNode(child)); + el.appendChild(document.createTextNode(child)); } else { if (child) { el.appendChild(child); diff --git a/src/html/HtmlReporter.js b/src/html/HtmlReporter.js index 5c0fc14d..369f3194 100644 --- a/src/html/HtmlReporter.js +++ b/src/html/HtmlReporter.js @@ -104,10 +104,7 @@ jasmineRequire.HtmlReporter = function(j$) { this.#env = options.env; this.#getContainer = options.getContainer; - this.#domContext = new j$.private.DomContext({ - createElement: options.createElement, - createTextNode: options.createTextNode - }); + this.#domContext = new j$.private.DomContext(); this.#navigateWithNewParam = options.navigateWithNewParam || function() {}; this.#urlBuilder = new UrlBuilder( @@ -852,7 +849,7 @@ jasmineRequire.HtmlReporter = function(j$) { while (suite && suite.parent) { wrapper.insertBefore( - this.#domContext.createTextNode(' > '), + document.createTextNode(' > '), wrapper.firstChild ); suiteLink = this.#domContext.create(