@@ -144,6 +144,7 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
|
|||||||
'toBeUndefined',
|
'toBeUndefined',
|
||||||
'toContain',
|
'toContain',
|
||||||
'toEqual',
|
'toEqual',
|
||||||
|
'toHaveSize',
|
||||||
'toHaveBeenCalled',
|
'toHaveBeenCalled',
|
||||||
'toHaveBeenCalledBefore',
|
'toHaveBeenCalledBefore',
|
||||||
'toHaveBeenCalledTimes',
|
'toHaveBeenCalledTimes',
|
||||||
@@ -5862,6 +5863,49 @@ getJasmineRequireObj().toHaveClass = function(j$) {
|
|||||||
return toHaveClass;
|
return toHaveClass;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
getJasmineRequireObj().toHaveSize = function(j$) {
|
||||||
|
/**
|
||||||
|
* {@link expect} the actual size to be equal to the expected, using array-like length or object keys size.
|
||||||
|
* @function
|
||||||
|
* @name matchers#toHaveSize
|
||||||
|
* @since 3.5.1
|
||||||
|
* @param {Object} expected - Expected size
|
||||||
|
* @example
|
||||||
|
* array = [1,2];
|
||||||
|
* expect(array).toHaveSize(2);
|
||||||
|
*/
|
||||||
|
function toHaveSize() {
|
||||||
|
return {
|
||||||
|
compare: function(actual, expected) {
|
||||||
|
var result = {
|
||||||
|
pass: false
|
||||||
|
};
|
||||||
|
|
||||||
|
if (actual instanceof WeakSet || actual instanceof WeakMap || actual instanceof DataView) {
|
||||||
|
throw new Error('Cannot get size of ' + actual + '.');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (actual instanceof Set || actual instanceof Map) {
|
||||||
|
result.pass = actual.size === expected;
|
||||||
|
} else if (isLength(actual.length)) {
|
||||||
|
result.pass = actual.length === expected;
|
||||||
|
} else {
|
||||||
|
result.pass = Object.keys(actual).length === expected;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
|
||||||
|
function isLength(value) {
|
||||||
|
return (typeof value == 'number') && value > -1 && value % 1 === 0 && value <= MAX_SAFE_INTEGER;
|
||||||
|
}
|
||||||
|
|
||||||
|
return toHaveSize;
|
||||||
|
};
|
||||||
|
|
||||||
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>)');
|
||||||
@@ -8724,5 +8768,5 @@ getJasmineRequireObj().UserContext = function(j$) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
getJasmineRequireObj().version = function() {
|
getJasmineRequireObj().version = function() {
|
||||||
return '3.5.0';
|
return '3.5.1';
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "jasmine-core",
|
"name": "jasmine-core",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"version": "3.5.0",
|
"version": "3.5.1",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/jasmine/jasmine.git"
|
"url": "https://github.com/jasmine/jasmine.git"
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ describe('Matchers (Integration)', function() {
|
|||||||
expect(result.failedExpectations[0].message)
|
expect(result.failedExpectations[0].message)
|
||||||
.withContext('Failed with a thrown error rather than a matcher failure')
|
.withContext('Failed with a thrown error rather than a matcher failure')
|
||||||
.not.toMatch(/^Error: /);
|
.not.toMatch(/^Error: /);
|
||||||
|
expect(result.failedExpectations[0].message)
|
||||||
|
.withContext('Failed with a thrown type error rather than a matcher failure')
|
||||||
|
.not.toMatch(/^TypeError: /);
|
||||||
expect(result.failedExpectations[0].matcherName).withContext('Matcher name')
|
expect(result.failedExpectations[0].matcherName).withContext('Matcher name')
|
||||||
.not.toEqual('');
|
.not.toEqual('');
|
||||||
};
|
};
|
||||||
@@ -477,9 +480,9 @@ describe('Matchers (Integration)', function() {
|
|||||||
verifyFailsWithCustomObjectFormatters({
|
verifyFailsWithCustomObjectFormatters({
|
||||||
formatter: function(val) {
|
formatter: function(val) {
|
||||||
if (val === 5) {
|
if (val === 5) {
|
||||||
return "five"
|
return 'five';
|
||||||
} else if (val === 4) {
|
} else if (val === 4) {
|
||||||
return "four"
|
return 'four';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
expectations: function(env) {
|
expectations: function(env) {
|
||||||
@@ -489,6 +492,16 @@ describe('Matchers (Integration)', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('toHaveSize', function() {
|
||||||
|
verifyPasses(function(env) {
|
||||||
|
env.expect(['a','b']).toHaveSize(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
verifyFails(function(env) {
|
||||||
|
env.expect(['a','b']).toHaveSize(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('toHaveBeenCalled', function() {
|
describe('toHaveBeenCalled', function() {
|
||||||
verifyPasses(function(env) {
|
verifyPasses(function(env) {
|
||||||
var spy = env.createSpy('spy');
|
var spy = env.createSpy('spy');
|
||||||
|
|||||||
135
spec/core/matchers/toHaveSizeSpec.js
Normal file
135
spec/core/matchers/toHaveSizeSpec.js
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
describe('toHaveSize', function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
it('passes for an array whose length matches', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare([1, 2], 2);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for an array whose length does not match', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare([1, 2, 3], 2);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('passes for an object with the proper number of keys', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare({a: 1, b: 2}, 2);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for an object with a different number of keys', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare({a: 1, b: 2}, 1);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('passes for an object with an explicit `length` property that matches', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare({a: 1, b: 2, length: 5}, 5);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for an object with an explicit `length` property that does not match', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare({a: 1, b: 2, length: 5}, 1);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('passes for a string whose length matches', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare('ab', 2);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for a string whose length does not match', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare('abc', 2);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('passes for a Map whose length matches', function() {
|
||||||
|
jasmine.getEnv().requireFunctioningMaps();
|
||||||
|
|
||||||
|
var map = new Map();
|
||||||
|
map.set('a',1);
|
||||||
|
map.set('b',2);
|
||||||
|
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare(map, 2);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for a Map whose length does not match', function() {
|
||||||
|
jasmine.getEnv().requireFunctioningMaps();
|
||||||
|
|
||||||
|
var map = new Map();
|
||||||
|
map.set('a',1);
|
||||||
|
map.set('b',2);
|
||||||
|
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare(map, 1);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('passes for a Set whose length matches', function() {
|
||||||
|
jasmine.getEnv().requireFunctioningSets();
|
||||||
|
|
||||||
|
var set = new Set();
|
||||||
|
set.add('a');
|
||||||
|
set.add('b');
|
||||||
|
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare(set, 2);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails for a Set whose length does not match', function() {
|
||||||
|
jasmine.getEnv().requireFunctioningSets();
|
||||||
|
|
||||||
|
var set = new Set();
|
||||||
|
set.add('a');
|
||||||
|
set.add('b');
|
||||||
|
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize(),
|
||||||
|
result = matcher.compare(set, 1);
|
||||||
|
|
||||||
|
expect(result.pass).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error for WeakSet', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize();
|
||||||
|
|
||||||
|
expect(function() {
|
||||||
|
matcher.compare(new WeakSet(), 2);
|
||||||
|
}).toThrowError('Cannot get size of [object WeakSet].');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error for WeakMap', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize();
|
||||||
|
|
||||||
|
expect(function() {
|
||||||
|
matcher.compare(new WeakMap(), 2);
|
||||||
|
}).toThrowError('Cannot get size of [object WeakMap].');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error for DataView', function() {
|
||||||
|
var matcher = jasmineUnderTest.matchers.toHaveSize();
|
||||||
|
|
||||||
|
expect(function() {
|
||||||
|
matcher.compare(new DataView(new ArrayBuffer(128)), 2);
|
||||||
|
}).toThrowError('Cannot get size of [object DataView].');
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -20,6 +20,7 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
|
|||||||
'toBeUndefined',
|
'toBeUndefined',
|
||||||
'toContain',
|
'toContain',
|
||||||
'toEqual',
|
'toEqual',
|
||||||
|
'toHaveSize',
|
||||||
'toHaveBeenCalled',
|
'toHaveBeenCalled',
|
||||||
'toHaveBeenCalledBefore',
|
'toHaveBeenCalledBefore',
|
||||||
'toHaveBeenCalledTimes',
|
'toHaveBeenCalledTimes',
|
||||||
|
|||||||
42
src/core/matchers/toHaveSize.js
Normal file
42
src/core/matchers/toHaveSize.js
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
getJasmineRequireObj().toHaveSize = function(j$) {
|
||||||
|
/**
|
||||||
|
* {@link expect} the actual size to be equal to the expected, using array-like length or object keys size.
|
||||||
|
* @function
|
||||||
|
* @name matchers#toHaveSize
|
||||||
|
* @since 3.5.1
|
||||||
|
* @param {Object} expected - Expected size
|
||||||
|
* @example
|
||||||
|
* array = [1,2];
|
||||||
|
* expect(array).toHaveSize(2);
|
||||||
|
*/
|
||||||
|
function toHaveSize() {
|
||||||
|
return {
|
||||||
|
compare: function(actual, expected) {
|
||||||
|
var result = {
|
||||||
|
pass: false
|
||||||
|
};
|
||||||
|
|
||||||
|
if (actual instanceof WeakSet || actual instanceof WeakMap || actual instanceof DataView) {
|
||||||
|
throw new Error('Cannot get size of ' + actual + '.');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (actual instanceof Set || actual instanceof Map) {
|
||||||
|
result.pass = actual.size === expected;
|
||||||
|
} else if (isLength(actual.length)) {
|
||||||
|
result.pass = actual.length === expected;
|
||||||
|
} else {
|
||||||
|
result.pass = Object.keys(actual).length === expected;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
|
||||||
|
function isLength(value) {
|
||||||
|
return (typeof value == 'number') && value > -1 && value % 1 === 0 && value <= MAX_SAFE_INTEGER;
|
||||||
|
}
|
||||||
|
|
||||||
|
return toHaveSize;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user