chore(test): disable tests based on Intl API in non-Chrome browsers

Closes #3692
This commit is contained in:
Marc Laval 2015-08-18 16:16:30 +02:00
parent f0e7f13f30
commit 873b6da120
5 changed files with 120 additions and 73 deletions

View File

@ -21,6 +21,9 @@ import {Pipe} from '../core/metadata';
var defaultLocale: string = 'en-US'; var defaultLocale: string = 'en-US';
/** /**
* WARNING: this pipe uses the Internationalization API.
* Therefore it is only reliable in Chrome and Opera browsers.
*
* Formats a date value to a string based on the requested format. * Formats a date value to a string based on the requested format.
* *
* # Usage * # Usage

View File

@ -57,6 +57,9 @@ export class NumberPipe {
} }
/** /**
* WARNING: this pipe uses the Internationalization API.
* Therefore it is only reliable in Chrome and Opera browsers.
*
* Formats a number as local text. i.e. group sizing and seperator and other locale-specific * Formats a number as local text. i.e. group sizing and seperator and other locale-specific
* configurations are based on the active locale. * configurations are based on the active locale.
* *
@ -92,6 +95,9 @@ export class DecimalPipe extends NumberPipe implements PipeTransform {
} }
/** /**
* WARNING: this pipe uses the Internationalization API.
* Therefore it is only reliable in Chrome and Opera browsers.
*
* Formats a number as local percent. * Formats a number as local percent.
* *
* # Usage * # Usage
@ -111,6 +117,9 @@ export class PercentPipe extends NumberPipe implements PipeTransform {
} }
/** /**
* WARNING: this pipe uses the Internationalization API.
* Therefore it is only reliable in Chrome and Opera browsers.
*
* Formats a number as local currency. * Formats a number as local currency.
* *
* # Usage * # Usage

View File

@ -85,3 +85,10 @@ export function stringifyElement(el): string {
return result; return result;
} }
// The Intl API is only properly supported in 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
export function supportsIntlApi(): boolean {
return DOM.getUserAgent().indexOf('Chrome') > -1 && DOM.getUserAgent().indexOf('Edge') == -1;
}

View File

@ -1,4 +1,14 @@
import {ddescribe, describe, it, iit, xit, expect, beforeEach, afterEach} from 'angular2/test_lib'; import {
ddescribe,
describe,
it,
iit,
xit,
expect,
beforeEach,
afterEach,
supportsIntlApi
} from 'angular2/test_lib';
import {DatePipe} from 'angular2/pipes'; import {DatePipe} from 'angular2/pipes';
import {DateWrapper} from 'angular2/src/facade/lang'; import {DateWrapper} from 'angular2/src/facade/lang';
@ -23,42 +33,46 @@ export function main() {
}); });
}); });
describe("transform", () => { // TODO(mlaval): enable tests when Intl API is no longer used, see
it('should format each component correctly', () => { // https://github.com/angular/angular/issues/3333
expect(pipe.transform(date, ['y'])).toEqual('2015'); if (supportsIntlApi()) {
expect(pipe.transform(date, ['yy'])).toEqual('15'); describe("transform", () => {
expect(pipe.transform(date, ['M'])).toEqual('6'); it('should format each component correctly', () => {
expect(pipe.transform(date, ['MM'])).toEqual('06'); expect(pipe.transform(date, ['y'])).toEqual('2015');
expect(pipe.transform(date, ['MMM'])).toEqual('Jun'); expect(pipe.transform(date, ['yy'])).toEqual('15');
expect(pipe.transform(date, ['MMMM'])).toEqual('June'); expect(pipe.transform(date, ['M'])).toEqual('6');
expect(pipe.transform(date, ['d'])).toEqual('15'); expect(pipe.transform(date, ['MM'])).toEqual('06');
expect(pipe.transform(date, ['E'])).toEqual('Mon'); expect(pipe.transform(date, ['MMM'])).toEqual('Jun');
expect(pipe.transform(date, ['EEEE'])).toEqual('Monday'); expect(pipe.transform(date, ['MMMM'])).toEqual('June');
expect(pipe.transform(date, ['H'])).toEqual('21'); expect(pipe.transform(date, ['d'])).toEqual('15');
expect(pipe.transform(date, ['j'])).toEqual('9 PM'); expect(pipe.transform(date, ['E'])).toEqual('Mon');
expect(pipe.transform(date, ['m'])).toEqual('43'); expect(pipe.transform(date, ['EEEE'])).toEqual('Monday');
expect(pipe.transform(date, ['s'])).toEqual('11'); expect(pipe.transform(date, ['H'])).toEqual('21');
}); expect(pipe.transform(date, ['j'])).toEqual('9 PM');
expect(pipe.transform(date, ['m'])).toEqual('43');
expect(pipe.transform(date, ['s'])).toEqual('11');
});
it('should format common multi component patterns', () => { it('should format common multi component patterns', () => {
expect(pipe.transform(date, ['yMEd'])).toEqual('Mon, 6/15/2015'); expect(pipe.transform(date, ['yMEd'])).toEqual('Mon, 6/15/2015');
expect(pipe.transform(date, ['MEd'])).toEqual('Mon, 6/15'); expect(pipe.transform(date, ['MEd'])).toEqual('Mon, 6/15');
expect(pipe.transform(date, ['MMMd'])).toEqual('Jun 15'); expect(pipe.transform(date, ['MMMd'])).toEqual('Jun 15');
expect(pipe.transform(date, ['yMMMMEEEEd'])).toEqual('Monday, June 15, 2015'); expect(pipe.transform(date, ['yMMMMEEEEd'])).toEqual('Monday, June 15, 2015');
expect(pipe.transform(date, ['jms'])).toEqual('9:43:11 PM'); expect(pipe.transform(date, ['jms'])).toEqual('9:43:11 PM');
expect(pipe.transform(date, ['ms'])).toEqual('43:11'); expect(pipe.transform(date, ['ms'])).toEqual('43:11');
}); });
it('should format with pattern aliases', () => { it('should format with pattern aliases', () => {
expect(pipe.transform(date, ['medium'])).toEqual('Jun 15, 2015, 9:43:11 PM'); expect(pipe.transform(date, ['medium'])).toEqual('Jun 15, 2015, 9:43:11 PM');
expect(pipe.transform(date, ['short'])).toEqual('6/15/2015, 9:43 PM'); expect(pipe.transform(date, ['short'])).toEqual('6/15/2015, 9:43 PM');
expect(pipe.transform(date, ['fullDate'])).toEqual('Monday, June 15, 2015'); expect(pipe.transform(date, ['fullDate'])).toEqual('Monday, June 15, 2015');
expect(pipe.transform(date, ['longDate'])).toEqual('June 15, 2015'); expect(pipe.transform(date, ['longDate'])).toEqual('June 15, 2015');
expect(pipe.transform(date, ['mediumDate'])).toEqual('Jun 15, 2015'); expect(pipe.transform(date, ['mediumDate'])).toEqual('Jun 15, 2015');
expect(pipe.transform(date, ['shortDate'])).toEqual('6/15/2015'); expect(pipe.transform(date, ['shortDate'])).toEqual('6/15/2015');
expect(pipe.transform(date, ['mediumTime'])).toEqual('9:43:11 PM'); expect(pipe.transform(date, ['mediumTime'])).toEqual('9:43:11 PM');
expect(pipe.transform(date, ['shortTime'])).toEqual('9:43 PM'); expect(pipe.transform(date, ['shortTime'])).toEqual('9:43 PM');
});
}); });
}); }
}); });
} }

View File

@ -1,58 +1,72 @@
import {ddescribe, describe, it, iit, xit, expect, beforeEach, afterEach} from 'angular2/test_lib'; import {
ddescribe,
describe,
it,
iit,
xit,
expect,
beforeEach,
afterEach,
supportsIntlApi
} from 'angular2/test_lib';
import {DecimalPipe, PercentPipe, CurrencyPipe} from 'angular2/pipes'; import {DecimalPipe, PercentPipe, CurrencyPipe} from 'angular2/pipes';
export function main() { export function main() {
describe("DecimalPipe", () => { // TODO(mlaval): enable tests when Intl API is no longer used, see
var pipe; // https://github.com/angular/angular/issues/3333
if (supportsIntlApi()) {
describe("DecimalPipe", () => {
var pipe;
beforeEach(() => { pipe = new DecimalPipe(); }); beforeEach(() => { pipe = new DecimalPipe(); });
describe("transform", () => { describe("transform", () => {
it('should return correct value for numbers', () => { it('should return correct value for numbers', () => {
expect(pipe.transform(12345, [])).toEqual('12,345'); expect(pipe.transform(12345, [])).toEqual('12,345');
expect(pipe.transform(123, ['.2'])).toEqual('123.00'); expect(pipe.transform(123, ['.2'])).toEqual('123.00');
expect(pipe.transform(1, ['3.'])).toEqual('001'); expect(pipe.transform(1, ['3.'])).toEqual('001');
expect(pipe.transform(1.1, ['3.4-5'])).toEqual('001.1000'); expect(pipe.transform(1.1, ['3.4-5'])).toEqual('001.1000');
expect(pipe.transform(1.123456, ['3.4-5'])).toEqual('001.12346'); expect(pipe.transform(1.123456, ['3.4-5'])).toEqual('001.12346');
expect(pipe.transform(1.1234, [])).toEqual('1.123'); expect(pipe.transform(1.1234, [])).toEqual('1.123');
});
it("should not support other objects",
() => { expect(() => pipe.transform(new Object(), [])).toThrowError(); });
}); });
it("should not support other objects",
() => { expect(() => pipe.transform(new Object(), [])).toThrowError(); });
}); });
});
describe("PercentPipe", () => { describe("PercentPipe", () => {
var pipe; var pipe;
beforeEach(() => { pipe = new PercentPipe(); }); beforeEach(() => { pipe = new PercentPipe(); });
describe("transform", () => { describe("transform", () => {
it('should return correct value for numbers', () => { it('should return correct value for numbers', () => {
expect(pipe.transform(1.23, [])).toEqual('123%'); expect(pipe.transform(1.23, [])).toEqual('123%');
expect(pipe.transform(1.2, ['.2'])).toEqual('120.00%'); expect(pipe.transform(1.2, ['.2'])).toEqual('120.00%');
});
it("should not support other objects",
() => { expect(() => pipe.transform(new Object(), [])).toThrowError(); });
}); });
it("should not support other objects",
() => { expect(() => pipe.transform(new Object(), [])).toThrowError(); });
}); });
});
describe("CurrencyPipe", () => { describe("CurrencyPipe", () => {
var pipe; var pipe;
beforeEach(() => { pipe = new CurrencyPipe(); }); beforeEach(() => { pipe = new CurrencyPipe(); });
describe("transform", () => { describe("transform", () => {
it('should return correct value for numbers', () => { it('should return correct value for numbers', () => {
expect(pipe.transform(123, [])).toEqual('USD123'); expect(pipe.transform(123, [])).toEqual('USD123');
expect(pipe.transform(12, ['EUR', false, '.2'])).toEqual('EUR12.00'); expect(pipe.transform(12, ['EUR', false, '.2'])).toEqual('EUR12.00');
});
it("should not support other objects",
() => { expect(() => pipe.transform(new Object(), [])).toThrowError(); });
}); });
it("should not support other objects",
() => { expect(() => pipe.transform(new Object(), [])).toThrowError(); });
}); });
}); }
} }