UNPKG

knockout-switch-case

Version:

Powerful control flow bindings for Knockout

71 lines (62 loc) 3.13 kB
jasmine.Matchers.prototype.toEqualOneOf = function (expectedPossibilities) { for (var i = 0; i < expectedPossibilities.length; i++) { if (this.env.equals_(this.actual, expectedPossibilities[i])) { return true; } } return false; }; jasmine.Matchers.prototype.toContainHtml = function (expectedHtml) { var cleanedHtml = this.actual.innerHTML.toLowerCase().replace(/\r\n/g, ""); // IE < 9 strips whitespace immediately following comment nodes. Normalize by doing the same on all browsers. cleanedHtml = cleanedHtml.replace(/(<!--.*?-->)\s*/g, "$1"); expectedHtml = expectedHtml.replace(/(<!--.*?-->)\s*/g, "$1"); // Also remove __ko__ expando properties (for DOM data) - most browsers hide these anyway but IE < 9 includes them in innerHTML cleanedHtml = cleanedHtml.replace(/ __ko__\d+=\"(ko\d+|null)\"/g, ""); this.actual = cleanedHtml; // Fix explanatory message return cleanedHtml === expectedHtml; }; jasmine.nodeText = function(node) { return 'textContent' in node ? node.textContent : node.innerText; } jasmine.Matchers.prototype.toContainText = function (expectedText) { var actualText = jasmine.nodeText(this.actual); var cleanedActualText = actualText.replace(/\r\n/g, "\n"); this.actual = cleanedActualText; // Fix explanatory message return cleanedActualText === expectedText; }; jasmine.Matchers.prototype.toHaveOwnProperties = function (expectedProperties) { var ownProperties = []; for (var prop in this.actual) { if (this.actual.hasOwnProperty(prop)) { ownProperties.push(prop); } } return this.env.equals_(ownProperties, expectedProperties); }; jasmine.Matchers.prototype.toHaveTexts = function (expectedTexts) { var texts = ko.utils.arrayMap(this.actual.childNodes, jasmine.nodeText); this.actual = texts; // Fix explanatory message return this.env.equals_(texts, expectedTexts); }; jasmine.Matchers.prototype.toHaveValues = function (expectedValues) { var values = ko.utils.arrayMap(this.actual.childNodes, function (node) { return node.value; }); this.actual = values; // Fix explanatory message return this.env.equals_(values, expectedValues); }; jasmine.Matchers.prototype.toHaveSelectedValues = function (expectedValues) { var selectedNodes = ko.utils.arrayFilter(this.actual.childNodes, function (node) { return node.selected; }), selectedValues = ko.utils.arrayMap(selectedNodes, function (node) { return ko.selectExtensions.readValue(node); }); this.actual = selectedValues; // Fix explanatory message return this.env.equals_(selectedValues, expectedValues); }; jasmine.prepareTestNode = function() { // The bindings specs make frequent use of this utility function to set up // a clean new DOM node they can execute code against var existingNode = document.getElementById("testNode"); if (existingNode != null) existingNode.parentNode.removeChild(existingNode); testNode = document.createElement("div"); testNode.id = "testNode"; document.body.appendChild(testNode); };