Moved toHaveClass matcher into core so that it can be used in Karma
- Fixes #1503
This commit is contained in:
committed by
Gregg Van Hove
parent
8326ecf919
commit
11827572d3
@@ -25,7 +25,6 @@ jasmineRequire.html = function(j$) {
|
|||||||
j$.HtmlReporter = jasmineRequire.HtmlReporter(j$);
|
j$.HtmlReporter = jasmineRequire.HtmlReporter(j$);
|
||||||
j$.QueryString = jasmineRequire.QueryString();
|
j$.QueryString = jasmineRequire.QueryString();
|
||||||
j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
|
j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
|
||||||
j$.matchers.toHaveClass = jasmineRequire.toHaveClass(j$);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
jasmineRequire.HtmlReporter = function(j$) {
|
jasmineRequire.HtmlReporter = function(j$) {
|
||||||
@@ -600,37 +599,3 @@ jasmineRequire.QueryString = function() {
|
|||||||
|
|
||||||
return QueryString;
|
return QueryString;
|
||||||
};
|
};
|
||||||
|
|
||||||
jasmineRequire.toHaveClass = function(j$) {
|
|
||||||
/**
|
|
||||||
* {@link expect} the actual value to be a DOM element that has the expected class
|
|
||||||
* @function
|
|
||||||
* @name matchers#toHaveClass
|
|
||||||
* @param {Object} expected - The class name to test for
|
|
||||||
* @example
|
|
||||||
* var el = document.createElement('div');
|
|
||||||
* el.className = 'foo bar baz';
|
|
||||||
* expect(el).toHaveClass('bar');
|
|
||||||
*/
|
|
||||||
function toHaveClass(util, customEqualityTesters) {
|
|
||||||
return {
|
|
||||||
compare: function(actual, expected) {
|
|
||||||
if (!isElement(actual)) {
|
|
||||||
throw new Error(j$.pp(actual) + ' is not a DOM element');
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
pass: actual.classList.contains(expected)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function isElement(maybeEl) {
|
|
||||||
return maybeEl &&
|
|
||||||
maybeEl.classList &&
|
|
||||||
j$.isFunction_(maybeEl.classList.contains);
|
|
||||||
}
|
|
||||||
|
|
||||||
return toHaveClass;
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
|
|||||||
'toHaveBeenCalledBefore',
|
'toHaveBeenCalledBefore',
|
||||||
'toHaveBeenCalledTimes',
|
'toHaveBeenCalledTimes',
|
||||||
'toHaveBeenCalledWith',
|
'toHaveBeenCalledWith',
|
||||||
|
'toHaveClass',
|
||||||
'toMatch',
|
'toMatch',
|
||||||
'toThrow',
|
'toThrow',
|
||||||
'toThrowError',
|
'toThrowError',
|
||||||
@@ -3773,6 +3774,40 @@ getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
|
|||||||
return toHaveBeenCalledWith;
|
return toHaveBeenCalledWith;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
getJasmineRequireObj().toHaveClass = function(j$) {
|
||||||
|
/**
|
||||||
|
* {@link expect} the actual value to be a DOM element that has the expected class
|
||||||
|
* @function
|
||||||
|
* @name matchers#toHaveClass
|
||||||
|
* @param {Object} expected - The class name to test for
|
||||||
|
* @example
|
||||||
|
* var el = document.createElement('div');
|
||||||
|
* el.className = 'foo bar baz';
|
||||||
|
* expect(el).toHaveClass('bar');
|
||||||
|
*/
|
||||||
|
function toHaveClass(util, customEqualityTesters) {
|
||||||
|
return {
|
||||||
|
compare: function(actual, expected) {
|
||||||
|
if (!isElement(actual)) {
|
||||||
|
throw new Error(j$.pp(actual) + ' is not a DOM element');
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
pass: actual.classList.contains(expected)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function isElement(maybeEl) {
|
||||||
|
return maybeEl &&
|
||||||
|
maybeEl.classList &&
|
||||||
|
j$.isFunction_(maybeEl.classList.contains);
|
||||||
|
}
|
||||||
|
|
||||||
|
return toHaveClass;
|
||||||
|
};
|
||||||
|
|
||||||
getJasmineRequireObj().toMatch = function(j$) {
|
getJasmineRequireObj().toMatch = function(j$) {
|
||||||
|
|
||||||
var getErrorMsg = j$.formatErrorMsg('<toMatch>', 'expect(<expectation>).toMatch(<string> || <regexp>)');
|
var getErrorMsg = j$.formatErrorMsg('<toMatch>', 'expect(<expectation>).toMatch(<string> || <regexp>)');
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
"grunt-contrib-concat": "^1.0.1",
|
"grunt-contrib-concat": "^1.0.1",
|
||||||
"grunt-contrib-jshint": "^1.0.0",
|
"grunt-contrib-jshint": "^1.0.0",
|
||||||
"jasmine": "^3.0.0",
|
"jasmine": "^3.0.0",
|
||||||
|
"jsdom": "^9.12.0",
|
||||||
"load-grunt-tasks": "^0.4.0",
|
"load-grunt-tasks": "^0.4.0",
|
||||||
"shelljs": "^0.7.0",
|
"shelljs": "^0.7.0",
|
||||||
"temp": "~0.8.1"
|
"temp": "~0.8.1"
|
||||||
|
|||||||
@@ -1,16 +1,38 @@
|
|||||||
describe('toHaveClass', function() {
|
describe('toHaveClass', function() {
|
||||||
|
beforeEach(function(done) {
|
||||||
|
this.createElementWithClassName = function(className) {
|
||||||
|
var el = this.doc.createElement('div');
|
||||||
|
el.className = className;
|
||||||
|
return el;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof document !== 'undefined') {
|
||||||
|
this.doc = document;
|
||||||
|
done();
|
||||||
|
} else {
|
||||||
|
var jsdom = require('jsdom');
|
||||||
|
var self = this;
|
||||||
|
jsdom.env('', function(err, win) {
|
||||||
|
if (err) {
|
||||||
|
done.fail(err);
|
||||||
|
} else {
|
||||||
|
self.doc = win.document;
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
it('fails for a DOM element that lacks the expected class', function() {
|
it('fails for a DOM element that lacks the expected class', function() {
|
||||||
var matcher = jasmineUnderTest.matchers.toHaveClass(),
|
var matcher = jasmineUnderTest.matchers.toHaveClass(),
|
||||||
result = matcher.compare(document.createElement('div'), 'foo');
|
result = matcher.compare(this.createElementWithClassName(''), 'foo');
|
||||||
|
|
||||||
expect(result.pass).toBe(false);
|
expect(result.pass).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('passes for a DOM element that has the expected class', function() {
|
it('passes for a DOM element that has the expected class', function() {
|
||||||
var matcher = jasmineUnderTest.matchers.toHaveClass(),
|
var matcher = jasmineUnderTest.matchers.toHaveClass(),
|
||||||
el = document.createElement('div');
|
el = this.createElementWithClassName('foo bar baz');
|
||||||
|
|
||||||
el.className = 'foo bar baz';
|
|
||||||
|
|
||||||
expect(matcher.compare(el, 'foo').pass).toBe(true);
|
expect(matcher.compare(el, 'foo').pass).toBe(true);
|
||||||
expect(matcher.compare(el, 'bar').pass).toBe(true);
|
expect(matcher.compare(el, 'bar').pass).toBe(true);
|
||||||
@@ -19,9 +41,7 @@ describe('toHaveClass', function() {
|
|||||||
|
|
||||||
it('fails for a DOM element that only has other classes', function() {
|
it('fails for a DOM element that only has other classes', function() {
|
||||||
var matcher = jasmineUnderTest.matchers.toHaveClass(),
|
var matcher = jasmineUnderTest.matchers.toHaveClass(),
|
||||||
el = document.createElement('div');
|
el = this.createElementWithClassName('foo bar');
|
||||||
|
|
||||||
el.className = 'foo bar';
|
|
||||||
|
|
||||||
expect(matcher.compare(el, 'fo').pass).toBe(false);
|
expect(matcher.compare(el, 'fo').pass).toBe(false);
|
||||||
});
|
});
|
||||||
@@ -37,8 +57,9 @@ describe('toHaveClass', function() {
|
|||||||
matcher.compare(undefined, 'foo');
|
matcher.compare(undefined, 'foo');
|
||||||
}).toThrowError('undefined is not a DOM element');
|
}).toThrowError('undefined is not a DOM element');
|
||||||
|
|
||||||
|
var textNode = this.doc.createTextNode('');
|
||||||
expect(function() {
|
expect(function() {
|
||||||
matcher.compare(document.createTextNode(''), 'foo')
|
matcher.compare(textNode, 'foo')
|
||||||
}).toThrowError('HTMLNode is not a DOM element');
|
}).toThrowError('HTMLNode is not a DOM element');
|
||||||
|
|
||||||
expect(function() {
|
expect(function() {
|
||||||
@@ -21,6 +21,7 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
|
|||||||
'toHaveBeenCalledBefore',
|
'toHaveBeenCalledBefore',
|
||||||
'toHaveBeenCalledTimes',
|
'toHaveBeenCalledTimes',
|
||||||
'toHaveBeenCalledWith',
|
'toHaveBeenCalledWith',
|
||||||
|
'toHaveClass',
|
||||||
'toMatch',
|
'toMatch',
|
||||||
'toThrow',
|
'toThrow',
|
||||||
'toThrowError',
|
'toThrowError',
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
jasmineRequire.toHaveClass = function(j$) {
|
getJasmineRequireObj().toHaveClass = function(j$) {
|
||||||
/**
|
/**
|
||||||
* {@link expect} the actual value to be a DOM element that has the expected class
|
* {@link expect} the actual value to be a DOM element that has the expected class
|
||||||
* @function
|
* @function
|
||||||
@@ -3,5 +3,4 @@ jasmineRequire.html = function(j$) {
|
|||||||
j$.HtmlReporter = jasmineRequire.HtmlReporter(j$);
|
j$.HtmlReporter = jasmineRequire.HtmlReporter(j$);
|
||||||
j$.QueryString = jasmineRequire.QueryString();
|
j$.QueryString = jasmineRequire.QueryString();
|
||||||
j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
|
j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
|
||||||
j$.matchers.toHaveClass = jasmineRequire.toHaveClass(j$);
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user