123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- 'use strict'
- jasmine.JQuery = function() {}
- jasmine.JQuery.browserTagCaseIndependentHtml = function(html) {
- var div = document.createElement('div')
- div.innerHTML = html
- return div.innerHTML
- }
- jasmine.JQuery.elementToString = function(element) {
- if (element instanceof HTMLElement) {
- return element.outerHTML
- } else {
- return element.html()
- }
- }
- jasmine.JQuery.matchersClass = {}
- var jQueryMatchers = {
- toHaveClass: function(className) {
- if (this.actual instanceof HTMLElement) {
- return this.actual.classList.contains(className)
- } else {
- return this.actual.hasClass(className)
- }
- },
- toBeVisible: function() {
- if (this.actual instanceof HTMLElement) {
- return this.actual.offsetWidth !== 0 || this.actual.offsetHeight !== 0
- } else {
- return this.actual.is(':visible')
- }
- },
- toBeHidden: function() {
- if (this.actual instanceof HTMLElement) {
- return this.actual.offsetWidth === 0 && this.actual.offsetHeight === 0
- } else {
- return this.actual.is(':hidden')
- }
- },
- toBeSelected: function() {
- if (this.actual instanceof HTMLElement) {
- return this.actual.selected
- } else {
- return this.actual.is(':selected')
- }
- },
- toBeChecked: function() {
- if (this.actual instanceof HTMLElement) {
- return this.actual.checked
- } else {
- return this.actual.is(':checked')
- }
- },
- toBeEmpty: function() {
- if (this.actual instanceof HTMLElement) {
- return this.actual.innerHTML === ''
- } else {
- return this.actual.is(':empty')
- }
- },
- toExist: function() {
- if (this.actual instanceof HTMLElement) {
- return true
- } else if (this.actual) {
- return this.actual.size() > 0
- } else {
- return false
- }
- },
- toHaveAttr: function(attributeName, expectedAttributeValue) {
- var actualAttributeValue
- if (this.actual instanceof HTMLElement) {
- actualAttributeValue = this.actual.getAttribute(attributeName)
- } else {
- actualAttributeValue = this.actual.attr(attributeName)
- }
- return hasProperty(actualAttributeValue, expectedAttributeValue)
- },
- toHaveId: function(id) {
- if (this.actual instanceof HTMLElement) {
- return this.actual.getAttribute('id') == id
- } else {
- return this.actual.attr('id') == id
- }
- },
- toHaveHtml: function(html) {
- var actualHTML
- if (this.actual instanceof HTMLElement) {
- actualHTML = this.actual.innerHTML
- } else {
- actualHTML = this.actual.html()
- }
- return actualHTML == jasmine.JQuery.browserTagCaseIndependentHtml(html)
- },
- toHaveText: function(text) {
- var actualText
- if (this.actual instanceof HTMLElement) {
- actualText = this.actual.textContent
- } else {
- actualText = this.actual.text()
- }
- if (text && typeof text.test === 'function') {
- return text.test(actualText)
- } else {
- return actualText == text
- }
- },
- toHaveValue: function(value) {
- if (this.actual instanceof HTMLElement) {
- return this.actual.value == value
- } else {
- return this.actual.val() == value
- }
- },
- toHaveData: function(key, expectedValue) {
- if (this.actual instanceof HTMLElement) {
- var camelCaseKey
- for (var part of key.split('-')) {
- if (camelCaseKey) {
- camelCaseKey += part[0].toUpperCase() + part.substring(1)
- } else {
- camelCaseKey = part
- }
- }
- return hasProperty(this.actual.dataset[camelCaseKey], expectedValue)
- } else {
- return hasProperty(this.actual.data(key), expectedValue)
- }
- },
- toMatchSelector: function(selector) {
- if (this.actual instanceof HTMLElement) {
- return this.actual.matches(selector)
- } else {
- return this.actual.is(selector)
- }
- },
- toContain: function(contained) {
- if (this.actual instanceof HTMLElement) {
- if (typeof contained === 'string') {
- return this.actual.querySelector(contained)
- } else {
- return this.actual.contains(contained)
- }
- } else {
- return this.actual.find(contained).size() > 0
- }
- },
- toBeDisabled: function(selector){
- if (this.actual instanceof HTMLElement) {
- return this.actual.disabled
- } else {
- return this.actual.is(':disabled')
- }
- },
- // tests the existence of a specific event binding
- toHandle: function(eventName) {
- var events = this.actual.data("events")
- return events && events[eventName].length > 0
- },
- // tests the existence of a specific event binding + handler
- toHandleWith: function(eventName, eventHandler) {
- var stack = this.actual.data("events")[eventName]
- var i
- for (i = 0; i < stack.length; i++) {
- if (stack[i].handler == eventHandler) {
- return true
- }
- }
- return false
- }
- }
- var hasProperty = function(actualValue, expectedValue) {
- if (expectedValue === undefined) {
- return actualValue !== undefined
- }
- return actualValue == expectedValue
- }
- var bindMatcher = function(methodName) {
- var builtInMatcher = jasmine.Matchers.prototype[methodName]
- jasmine.JQuery.matchersClass[methodName] = function() {
- if (this.actual && this.actual.jquery || this.actual instanceof HTMLElement) {
- var result = jQueryMatchers[methodName].apply(this, arguments)
- this.actual = jasmine.JQuery.elementToString(this.actual)
- return result
- }
- if (builtInMatcher) {
- return builtInMatcher.apply(this, arguments)
- }
- return false
- }
- }
- for(var methodName in jQueryMatchers) {
- bindMatcher(methodName)
- }
- beforeEach(function() {
- this.addMatchers(jasmine.JQuery.matchersClass)
- })
|