test: add Intl polyfill and run Intl tests in all browsers (#10471)

This commit is contained in:
Marc Laval
2016-09-01 00:55:13 +02:00
committed by Martin Probst
parent 562c8263dc
commit 1b5e2b5129
5 changed files with 196 additions and 129 deletions

View File

@ -23,7 +23,8 @@ export function main() {
isWebkit: true,
isIOS7: false,
isSlow: false,
isChromeDesktop: true
isChromeDesktop: true,
isOldChrome: false
},
{
name: 'Chrome mobile',
@ -35,7 +36,8 @@ export function main() {
isWebkit: true,
isIOS7: false,
isSlow: false,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'Firefox',
@ -47,7 +49,8 @@ export function main() {
isWebkit: false,
isIOS7: false,
isSlow: false,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'IE9',
@ -59,7 +62,8 @@ export function main() {
isWebkit: false,
isIOS7: false,
isSlow: true,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'IE10',
@ -71,7 +75,8 @@ export function main() {
isWebkit: false,
isIOS7: false,
isSlow: true,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'IE11',
@ -83,7 +88,8 @@ export function main() {
isWebkit: false,
isIOS7: false,
isSlow: true,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'IEMobile',
@ -95,7 +101,8 @@ export function main() {
isWebkit: false,
isIOS7: false,
isSlow: true,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'Edge',
@ -107,7 +114,8 @@ export function main() {
isWebkit: false,
isIOS7: false,
isSlow: false,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'Android4.1',
@ -119,7 +127,8 @@ export function main() {
isWebkit: true,
isIOS7: false,
isSlow: true,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'Android4.2',
@ -131,7 +140,8 @@ export function main() {
isWebkit: true,
isIOS7: false,
isSlow: true,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'Android4.3',
@ -143,7 +153,8 @@ export function main() {
isWebkit: true,
isIOS7: false,
isSlow: true,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'Android4.4',
@ -155,7 +166,8 @@ export function main() {
isWebkit: true,
isIOS7: false,
isSlow: false,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: true
},
{
name: 'Safari7',
@ -167,7 +179,8 @@ export function main() {
isWebkit: true,
isIOS7: false,
isSlow: false,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'Safari8',
@ -179,7 +192,8 @@ export function main() {
isWebkit: true,
isIOS7: false,
isSlow: false,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'iOS7',
@ -191,7 +205,8 @@ export function main() {
isWebkit: true,
isIOS7: true,
isSlow: true,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
},
{
name: 'iOS8',
@ -203,7 +218,8 @@ export function main() {
isWebkit: true,
isIOS7: false,
isSlow: false,
isChromeDesktop: false
isChromeDesktop: false,
isOldChrome: false
}
];
@ -218,6 +234,7 @@ export function main() {
expect(bd.isIOS7).toBe(StringMapWrapper.get(browser, 'isIOS7'));
expect(bd.isSlow).toBe(StringMapWrapper.get(browser, 'isSlow'));
expect(bd.isChromeDesktop).toBe(StringMapWrapper.get(browser, 'isChromeDesktop'));
expect(bd.isOldChrome).toBe(StringMapWrapper.get(browser, 'isOldChrome'));
});
});
});

View File

@ -50,15 +50,25 @@ export class BrowserDetection {
get isSlow(): boolean { return this.isAndroid || this.isIE || this.isIOS7; }
// The Intl API is only properly supported in recent Chrome and Opera.
// Note: Edge is disguised as Chrome 42, so checking the "Edge" part is needed,
// see https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx
get supportsIntlApi(): boolean { return !!(<any>global).Intl; }
// The Intl API is only natively supported in Chrome, Firefox, IE11 and Edge.
// This detector is needed in tests to make the difference between:
// 1) IE11/Edge: they have a native Intl API, but with some discrepancies
// 2) IE9/IE10: they use the polyfill, and so no discrepancies
get supportsNativeIntlApi(): boolean {
return !!(<any>global).Intl && (<any>global).Intl !== (<any>global).IntlPolyfill;
}
get isChromeDesktop(): boolean {
return this._ua.indexOf('Chrome') > -1 && this._ua.indexOf('Mobile Safari') == -1 &&
this._ua.indexOf('Edge') == -1;
}
// "Old Chrome" means Chrome 3X, where there are some discrepancies in the Intl API.
// Android 4.4 and 5.X have such browsers by default (respectively 30 and 39).
get isOldChrome(): boolean {
return this._ua.indexOf('Chrome') > -1 && this._ua.indexOf('Chrome/3') > -1 &&
this._ua.indexOf('Edge') == -1;
}
}
BrowserDetection.setup();