Properly skip Set tests in browsers that don't really support it

This commit is contained in:
Gregg Van Hove
2016-09-27 15:36:01 -07:00
parent 05097b3e42
commit bad9c63bf7
3 changed files with 26 additions and 8 deletions

View File

@@ -15,13 +15,13 @@ describe("jasmineUnderTest.pp", function () {
}); });
describe('stringify sets', function() { describe('stringify sets', function() {
if (typeof Set === 'undefined') { return; }
it("should stringify sets properly", function() { it("should stringify sets properly", function() {
jasmine.getEnv().requireFunctioningSets();
expect(jasmineUnderTest.pp(new Set([1, 2]))).toEqual("Set( 1, 2 )"); expect(jasmineUnderTest.pp(new Set([1, 2]))).toEqual("Set( 1, 2 )");
}); });
it("should truncate sets with more elments than jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH", function() { it("should truncate sets with more elments than jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH", function() {
jasmine.getEnv().requireFunctioningSets();
var originalMaxSize = jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH; var originalMaxSize = jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH;
try { try {

View File

@@ -369,12 +369,12 @@ describe("matchersUtil", function() {
}); });
it("passes when comparing two empty sets", function() { it("passes when comparing two empty sets", function() {
if (typeof Set === 'undefined') { return; } jasmine.getEnv().requireFunctioningSets();
expect(jasmineUnderTest.matchersUtil.equals(new Set(), new Set())).toBe(true); expect(jasmineUnderTest.matchersUtil.equals(new Set(), new Set())).toBe(true);
}); });
it("passes when comparing identical sets", function() { it("passes when comparing identical sets", function() {
if (typeof Set === 'undefined') { return; } jasmine.getEnv().requireFunctioningSets();
var setA = new Set([6, 5]); var setA = new Set([6, 5]);
var setB = new Set(); var setB = new Set();
setB.add(6); setB.add(6);
@@ -383,26 +383,25 @@ describe("matchersUtil", function() {
}); });
it("fails for sets with different elements", function() { it("fails for sets with different elements", function() {
if (typeof Set === 'undefined') { return; } jasmine.getEnv().requireFunctioningSets();
var setA = new Set([6, 3, 5]); var setA = new Set([6, 3, 5]);
var setB = new Set([6, 4, 5]); var setB = new Set([6, 4, 5]);
expect(jasmineUnderTest.matchersUtil.equals(setA, setB)).toBe(false); expect(jasmineUnderTest.matchersUtil.equals(setA, setB)).toBe(false);
}); });
it("fails for sets of different size", function() { it("fails for sets of different size", function() {
if (typeof Set === 'undefined') { return; } jasmine.getEnv().requireFunctioningSets();
var setA = new Set([6, 3]); var setA = new Set([6, 3]);
var setB = new Set([6, 4, 5]); var setB = new Set([6, 4, 5]);
expect(jasmineUnderTest.matchersUtil.equals(setA, setB)).toBe(false); expect(jasmineUnderTest.matchersUtil.equals(setA, setB)).toBe(false);
}); });
it("fails for sets with different insertion order", function() { it("fails for sets with different insertion order", function() {
if (typeof Set === 'undefined') { return; } jasmine.getEnv().requireFunctioningSets();
var setA = new Set([3, 6]); var setA = new Set([3, 6]);
var setB = new Set([6, 3]); var setB = new Set([6, 3]);
expect(jasmineUnderTest.matchersUtil.equals(setA, setB)).toBe(false); expect(jasmineUnderTest.matchersUtil.equals(setA, setB)).toBe(false);
}); });
}); });
describe("contains", function() { describe("contains", function() {

View File

@@ -20,4 +20,23 @@
return /Firefox\/([0-9]{0,})/.exec(userAgent); return /Firefox\/([0-9]{0,})/.exec(userAgent);
}); });
function hasFunctioningSets() {
if (typeof Set !== 'undefined') { return false; }
try {
var s = new Set([4]);
if (s.size !== 1) { return false; }
if (s.values().next().value !== 4) { return false; }
return true;
} catch(e) {
return false;
}
}
env.requireFunctioningSets = function() {
if (!hasFunctioningSets()) {
pending("Browser has incomplete or missing support for Sets");
}
};
})(jasmine.getEnv()); })(jasmine.getEnv());