test(support): verify support tests results in all tested browsers (#16008)
Closes #16008
This commit is contained in:
committed by
GitHub
parent
aef3ef7b03
commit
b4651e5278
@@ -283,16 +283,16 @@ describe('injector', function() {
|
||||
|
||||
|
||||
describe('es6', function() {
|
||||
if (support.ES6Function) {
|
||||
if (support.shorthandMethods) {
|
||||
// The functions are generated using `eval` as just having the ES6 syntax can break some browsers.
|
||||
it('should be possible to annotate functions that are declared using ES6 syntax', function() {
|
||||
it('should be possible to annotate shorthand methods', function() {
|
||||
// eslint-disable-next-line no-eval
|
||||
expect(annotate(eval('({ fn(x) { return; } })').fn)).toEqual(['x']);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
if (support.fatArrow) {
|
||||
if (support.fatArrows) {
|
||||
it('should create $inject for arrow functions', function() {
|
||||
// eslint-disable-next-line no-eval
|
||||
expect(annotate(eval('(a, b) => a'))).toEqual(['a', 'b']);
|
||||
@@ -300,7 +300,7 @@ describe('injector', function() {
|
||||
}
|
||||
|
||||
|
||||
if (support.fatArrow) {
|
||||
if (support.fatArrows) {
|
||||
it('should create $inject for arrow functions with no parenthesis', function() {
|
||||
// eslint-disable-next-line no-eval
|
||||
expect(annotate(eval('a => a'))).toEqual(['a']);
|
||||
@@ -308,7 +308,7 @@ describe('injector', function() {
|
||||
}
|
||||
|
||||
|
||||
if (support.fatArrow) {
|
||||
if (support.fatArrows) {
|
||||
it('should take args before first arrow', function() {
|
||||
// eslint-disable-next-line no-eval
|
||||
expect(annotate(eval('a => b => b'))).toEqual(['a']);
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
'use strict';
|
||||
|
||||
var supportTests = {
|
||||
classes: '/^class\\b/.test((class C {}).toString())',
|
||||
fatArrows: 'a => a',
|
||||
shorthandMethods: '({ fn(x) { return; } })'
|
||||
};
|
||||
|
||||
var support = {};
|
||||
|
||||
for (var prop in supportTests) {
|
||||
if (supportTests.hasOwnProperty(prop)) {
|
||||
try {
|
||||
// eslint-disable-next-line no-eval
|
||||
support[prop] = !!eval(supportTests[prop]);
|
||||
} catch (e) {
|
||||
support[prop] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
'use strict';
|
||||
|
||||
describe('support test results', function() {
|
||||
var expected, version, testName;
|
||||
var userAgent = window.navigator.userAgent;
|
||||
|
||||
// Support: iOS 8 only
|
||||
if (/iPhone OS 10_1\d(?:_\d+)? /.test(userAgent)) {
|
||||
// iOS 8 official simulators have broken user agent (containing something like `iPhone OS 10_12_5`,
|
||||
// i.e. the macOS version in place of the iOS version) so they'd fall into an incorrect bucket.
|
||||
// Fix the user agent there.
|
||||
// NOTE: Make sure the above check doesn't catch the real iOS 10!
|
||||
userAgent = userAgent.replace(/iPhone OS 10(?:_\d+)+/, 'iPhone OS 8_1');
|
||||
}
|
||||
|
||||
if (/edge\//i.test(userAgent)) {
|
||||
expected = {
|
||||
classes: true,
|
||||
fatArrows: true,
|
||||
shorthandMethods: true
|
||||
};
|
||||
} else if (/msie|trident/i.test(userAgent)) {
|
||||
expected = {
|
||||
classes: false,
|
||||
fatArrows: false,
|
||||
shorthandMethods: false
|
||||
};
|
||||
} else if (/iphone os [78]_/i.test(userAgent)) {
|
||||
expected = {
|
||||
classes: false,
|
||||
fatArrows: false,
|
||||
shorthandMethods: false
|
||||
};
|
||||
} else if (/iphone os 9_/i.test(userAgent)) {
|
||||
expected = {
|
||||
classes: true,
|
||||
fatArrows: false,
|
||||
shorthandMethods: true
|
||||
};
|
||||
} else if (/iphone os/i.test(userAgent)) {
|
||||
expected = {
|
||||
classes: true,
|
||||
fatArrows: true,
|
||||
shorthandMethods: true
|
||||
};
|
||||
} else if (/android 4\.[0-3]/i.test(userAgent)) {
|
||||
expected = {
|
||||
classes: false,
|
||||
fatArrows: false,
|
||||
shorthandMethods: false
|
||||
};
|
||||
} else if (/chrome/i.test(userAgent)) {
|
||||
// Catches Chrome on Android as well (i.e. the default
|
||||
// Android browser on Android >= 4.4).
|
||||
expected = {
|
||||
classes: true,
|
||||
fatArrows: true,
|
||||
shorthandMethods: true
|
||||
};
|
||||
} else if (/firefox/i.test(userAgent)) {
|
||||
version = parseInt(userAgent.match(/firefox\/(\d+)/i)[1], 10);
|
||||
expected = {
|
||||
classes: version >= 55,
|
||||
fatArrows: true,
|
||||
shorthandMethods: true
|
||||
};
|
||||
} else if (/\b8(?:\.\d+)+ safari/i.test(userAgent)) {
|
||||
expected = {
|
||||
classes: false,
|
||||
fatArrows: false,
|
||||
shorthandMethods: false
|
||||
};
|
||||
} else if (/\b9(?:\.\d+)+ safari/i.test(userAgent)) {
|
||||
expected = {
|
||||
classes: true,
|
||||
fatArrows: false,
|
||||
shorthandMethods: true
|
||||
};
|
||||
} else if (/\b\d+(?:\.\d+)+ safari/i.test(userAgent)) {
|
||||
expected = {
|
||||
classes: true,
|
||||
fatArrows: true,
|
||||
shorthandMethods: true
|
||||
};
|
||||
}
|
||||
|
||||
it('should have expected values specified', function() {
|
||||
expect(expected).not.toBe(null);
|
||||
expect(typeof expected).toBe('object');
|
||||
});
|
||||
|
||||
for (testName in expected) {
|
||||
it('should report support.' + testName + ' to be ' + expected[testName], function() {
|
||||
expect(support[testName]).toBe(expected[testName]);
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -3,26 +3,6 @@
|
||||
|
||||
if (window.bindJQuery) bindJQuery();
|
||||
|
||||
var supportTests = {
|
||||
classes: '/^class\\b/.test((class C {}).toString())',
|
||||
fatArrow: 'a => a',
|
||||
ES6Function: '({ fn(x) { return; } })'
|
||||
};
|
||||
|
||||
var support = {};
|
||||
|
||||
for (var prop in supportTests) {
|
||||
if (supportTests.hasOwnProperty(prop)) {
|
||||
try {
|
||||
// eslint-disable-next-line no-eval
|
||||
support[prop] = !!eval(supportTests[prop]);
|
||||
} catch (e) {
|
||||
support[prop] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
beforeEach(function() {
|
||||
|
||||
// all this stuff is not needed for module tests, where jqlite and publishExternalAPI and jqLite are not global vars
|
||||
|
||||
Reference in New Issue
Block a user