Fixed toHaveSize matcher on IE 10 & 11

This commit is contained in:
Steve Gravrock
2020-04-12 13:43:44 -07:00
parent 78c3a007ad
commit 8991b1bba3
7 changed files with 67 additions and 6 deletions
+20 -2
View File
@@ -314,6 +314,24 @@ getJasmineRequireObj().base = function(j$, jasmineGlobal) {
obj.constructor === jasmineGlobal.Set obj.constructor === jasmineGlobal.Set
); );
}; };
j$.isWeakMap = function(obj) {
return (
obj !== null &&
typeof obj !== 'undefined' &&
typeof jasmineGlobal.WeakMap !== 'undefined' &&
obj.constructor === jasmineGlobal.WeakMap
);
};
j$.isDataView = function(obj) {
return (
obj !== null &&
typeof obj !== 'undefined' &&
typeof jasmineGlobal.DataView !== 'undefined' &&
obj.constructor === jasmineGlobal.DataView
);
};
j$.isPromise = function(obj) { j$.isPromise = function(obj) {
return ( return (
@@ -5908,11 +5926,11 @@ getJasmineRequireObj().toHaveSize = function(j$) {
pass: false pass: false
}; };
if (j$.isA_('WeakSet', actual) || j$.isA_('WeakMap', actual) || j$.isA_('DataView', actual)) { if (j$.isA_('WeakSet', actual) || j$.isWeakMap(actual) || j$.isDataView(actual)) {
throw new Error('Cannot get size of ' + actual + '.'); throw new Error('Cannot get size of ' + actual + '.');
} }
if (actual instanceof Set || actual instanceof Map) { if (j$.isSet(actual) || j$.isMap(actual)) {
result.pass = actual.size === expected; result.pass = actual.size === expected;
} else if (isLength(actual.length)) { } else if (isLength(actual.length)) {
result.pass = actual.length === expected; result.pass = actual.length === expected;
+11
View File
@@ -51,4 +51,15 @@ describe('base helpers', function() {
expect(jasmineUnderTest.isAsymmetricEqualityTester_(obj)).toBe(true); expect(jasmineUnderTest.isAsymmetricEqualityTester_(obj)).toBe(true);
}); });
}); });
describe('isSet', function() {
it('returns true when the object is a Set', function() {
jasmine.getEnv().requireFunctioningSets();
expect(jasmineUnderTest.isSet(new Set())).toBe(true);
});
it('returns false when the object is not a Set', function() {
expect(jasmineUnderTest.isSet({})).toBe(false);
});
});
}); });
+4 -2
View File
@@ -110,6 +110,7 @@ describe('toHaveSize', function() {
}); });
it('throws an error for WeakSet', function() { it('throws an error for WeakSet', function() {
jasmine.getEnv().requireWeakSets();
var matcher = jasmineUnderTest.matchers.toHaveSize(); var matcher = jasmineUnderTest.matchers.toHaveSize();
expect(function() { expect(function() {
@@ -118,11 +119,12 @@ describe('toHaveSize', function() {
}); });
it('throws an error for WeakMap', function() { it('throws an error for WeakMap', function() {
jasmine.getEnv().requireWeakMaps();
var matcher = jasmineUnderTest.matchers.toHaveSize(); var matcher = jasmineUnderTest.matchers.toHaveSize();
expect(function() { expect(function() {
matcher.compare(new WeakMap(), 2); matcher.compare(new WeakMap(), 2);
}).toThrowError('Cannot get size of [object WeakMap].'); }).toThrowError(/Cannot get size of \[object (WeakMap|Object)\]\./);
}); });
it('throws an error for DataView', function() { it('throws an error for DataView', function() {
@@ -130,6 +132,6 @@ describe('toHaveSize', function() {
expect(function() { expect(function() {
matcher.compare(new DataView(new ArrayBuffer(128)), 2); matcher.compare(new DataView(new ArrayBuffer(128)), 2);
}).toThrowError('Cannot get size of [object DataView].'); }).toThrowError(/Cannot get size of \[object (DataView|Object)\]\./);
}); });
}); });
+6
View File
@@ -43,4 +43,10 @@
env.pending('Browser has incomplete or missing support for Maps'); env.pending('Browser has incomplete or missing support for Maps');
} }
}; };
env.requireWeakMaps = function() {
if (typeof WeakMap === 'undefined') {
env.pending('Browser does not have support for WeakMap');
}
};
})(jasmine.getEnv()); })(jasmine.getEnv());
+6
View File
@@ -47,4 +47,10 @@
env.pending('Browser has incomplete or missing support for Sets'); env.pending('Browser has incomplete or missing support for Sets');
} }
}; };
env.requireWeakSets = function() {
if (typeof WeakSet === 'undefined') {
env.pending('Browser does not have support for WeakSet');
}
};
})(jasmine.getEnv()); })(jasmine.getEnv());
+18
View File
@@ -148,6 +148,24 @@ getJasmineRequireObj().base = function(j$, jasmineGlobal) {
); );
}; };
j$.isWeakMap = function(obj) {
return (
obj !== null &&
typeof obj !== 'undefined' &&
typeof jasmineGlobal.WeakMap !== 'undefined' &&
obj.constructor === jasmineGlobal.WeakMap
);
};
j$.isDataView = function(obj) {
return (
obj !== null &&
typeof obj !== 'undefined' &&
typeof jasmineGlobal.DataView !== 'undefined' &&
obj.constructor === jasmineGlobal.DataView
);
};
j$.isPromise = function(obj) { j$.isPromise = function(obj) {
return ( return (
typeof jasmineGlobal.Promise !== 'undefined' && typeof jasmineGlobal.Promise !== 'undefined' &&
+2 -2
View File
@@ -16,11 +16,11 @@ getJasmineRequireObj().toHaveSize = function(j$) {
pass: false pass: false
}; };
if (j$.isA_('WeakSet', actual) || j$.isA_('WeakMap', actual) || j$.isA_('DataView', actual)) { if (j$.isA_('WeakSet', actual) || j$.isWeakMap(actual) || j$.isDataView(actual)) {
throw new Error('Cannot get size of ' + actual + '.'); throw new Error('Cannot get size of ' + actual + '.');
} }
if (actual instanceof Set || actual instanceof Map) { if (j$.isSet(actual) || j$.isMap(actual)) {
result.pass = actual.size === expected; result.pass = actual.size === expected;
} else if (isLength(actual.length)) { } else if (isLength(actual.length)) {
result.pass = actual.length === expected; result.pass = actual.length === expected;