fix(compiler): use the other case by default in ICU messages

This commit is contained in:
Victor Berchet 2016-11-04 14:52:02 -07:00 committed by vikerman
parent 4708b248d5
commit 55dc0e4a5f
3 changed files with 18 additions and 8 deletions

View File

@ -106,6 +106,13 @@ function _expandDefaultForm(ast: html.Expansion, errors: ParseError[]): html.Ele
const expansionResult = expandNodes(c.expression);
errors.push(...expansionResult.errors);
if (c.value === 'other') {
// other is the default case when no values match
return new html.Element(
`template`, [new html.Attribute('ngSwitchDefault', '', c.valueSourceSpan)],
expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);
}
return new html.Element(
`template`, [new html.Attribute('ngSwitchCase', `${c.value}`, c.valueSourceSpan)],
expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);

View File

@ -82,14 +82,17 @@ export function main() {
});
it('should handle other special forms', () => {
const res = expand(`{person.gender, gender,=male {m}}`);
const res = expand(`{person.gender, select, male {m} other {default}}`);
expect(humanizeNodes(res.nodes)).toEqual([
[html.Element, 'ng-container', 0],
[html.Attribute, '[ngSwitch]', 'person.gender'],
[html.Element, 'template', 1],
[html.Attribute, 'ngSwitchCase', '=male'],
[html.Attribute, 'ngSwitchCase', 'male'],
[html.Text, 'm', 2],
[html.Element, 'template', 1],
[html.Attribute, 'ngSwitchDefault', ''],
[html.Text, 'default', 2],
]);
});

View File

@ -1787,18 +1787,18 @@ The pipe 'test' could not be found ("[ERROR ->]{{a | test}}"): TestComp@0:0`);
const shortForm = '{ count, plural, =0 {small} many {big} }';
const expandedForm = '<ng-container [ngPlural]="count">' +
'<template ngPluralCase="=0">small</template>' +
'<template ngPluralCase="many">big</template>' +
'</ng-container>';
'<template ngPluralCase="many">big</template>' + i
'</ng-container>';
expect(humanizeTplAst(parse(shortForm, [
]))).toEqual(humanizeTplAst(parse(expandedForm, [])));
});
it('should expand other messages', () => {
const shortForm = '{ sex, gender, =f {foo} other {bar} }';
it('should expand select messages', () => {
const shortForm = '{ sex, select, female {foo} other {bar} }';
const expandedForm = '<ng-container [ngSwitch]="sex">' +
'<template ngSwitchCase="=f">foo</template>' +
'<template ngSwitchCase="other">bar</template>' +
'<template ngSwitchCase="female">foo</template>' +
'<template ngSwitchDefault>bar</template>' +
'</ng-container>';
expect(humanizeTplAst(parse(shortForm, [