style(lint): re-format modules/@angular
This commit is contained in:
@ -1,59 +1,66 @@
|
||||
import {describe, expect, it, iit, ddescribe} from "@angular/core/testing/testing_internal";
|
||||
import {I18nHtmlParser} from "@angular/compiler/src/i18n/i18n_html_parser";
|
||||
import {Message, id} from "@angular/compiler/src/i18n/message";
|
||||
import {Parser} from "@angular/compiler/src/expression_parser/parser";
|
||||
import {Lexer} from "@angular/compiler/src/expression_parser/lexer";
|
||||
import {StringMapWrapper} from "../../src/facade/collection";
|
||||
import {HtmlParser, HtmlParseTreeResult} from "@angular/compiler/src/html_parser";
|
||||
import {HtmlElementAst, HtmlAttrAst, HtmlTextAst} from "@angular/compiler/src/html_ast";
|
||||
import {deserializeXmb} from "@angular/compiler/src/i18n/xmb_serializer";
|
||||
import {ParseError} from "@angular/compiler/src/parse_util";
|
||||
import {humanizeDom} from "@angular/compiler/test/html_ast_spec_utils";
|
||||
import {Lexer} from '@angular/compiler/src/expression_parser/lexer';
|
||||
import {Parser} from '@angular/compiler/src/expression_parser/parser';
|
||||
import {HtmlAttrAst, HtmlElementAst, HtmlTextAst} from '@angular/compiler/src/html_ast';
|
||||
import {HtmlParseTreeResult, HtmlParser} from '@angular/compiler/src/html_parser';
|
||||
import {I18nHtmlParser} from '@angular/compiler/src/i18n/i18n_html_parser';
|
||||
import {Message, id} from '@angular/compiler/src/i18n/message';
|
||||
import {deserializeXmb} from '@angular/compiler/src/i18n/xmb_serializer';
|
||||
import {ParseError} from '@angular/compiler/src/parse_util';
|
||||
import {humanizeDom} from '@angular/compiler/test/html_ast_spec_utils';
|
||||
import {ddescribe, describe, expect, iit, it} from '@angular/core/testing/testing_internal';
|
||||
|
||||
import {StringMapWrapper} from '../../src/facade/collection';
|
||||
|
||||
export function main() {
|
||||
describe('I18nHtmlParser', () => {
|
||||
function parse(template: string, messages: {[key: string]: string}, implicitTags: string[] = [],
|
||||
implicitAttrs: {[k: string]: string[]} = {}): HtmlParseTreeResult {
|
||||
function parse(
|
||||
template: string, messages: {[key: string]: string}, implicitTags: string[] = [],
|
||||
implicitAttrs: {[k: string]: string[]} = {}): HtmlParseTreeResult {
|
||||
var parser = new Parser(new Lexer());
|
||||
let htmlParser = new HtmlParser();
|
||||
|
||||
let msgs = '';
|
||||
StringMapWrapper.forEach(messages, (v: any /** TODO #9100 */, k: any /** TODO #9100 */) => msgs += `<msg id="${k}">${v}</msg>`);
|
||||
StringMapWrapper.forEach(
|
||||
messages, (v: any /** TODO #9100 */, k: any /** TODO #9100 */) => msgs +=
|
||||
`<msg id="${k}">${v}</msg>`);
|
||||
let res = deserializeXmb(`<message-bundle>${msgs}</message-bundle>`, 'someUrl');
|
||||
|
||||
return new I18nHtmlParser(htmlParser, parser, res.content, res.messages, implicitTags,
|
||||
implicitAttrs)
|
||||
.parse(template, "someurl", true);
|
||||
return new I18nHtmlParser(
|
||||
htmlParser, parser, res.content, res.messages, implicitTags, implicitAttrs)
|
||||
.parse(template, 'someurl', true);
|
||||
}
|
||||
|
||||
it("should delegate to the provided parser when no i18n", () => {
|
||||
expect(humanizeDom(parse('<div>a</div>', {})))
|
||||
.toEqual([[HtmlElementAst, 'div', 0], [HtmlTextAst, 'a', 1]]);
|
||||
it('should delegate to the provided parser when no i18n', () => {
|
||||
expect(humanizeDom(parse('<div>a</div>', {}))).toEqual([
|
||||
[HtmlElementAst, 'div', 0], [HtmlTextAst, 'a', 1]
|
||||
]);
|
||||
});
|
||||
|
||||
it("should replace attributes", () => {
|
||||
it('should replace attributes', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message("some message", "meaning", null))] = "another message";
|
||||
translations[id(new Message('some message', 'meaning', null))] = 'another message';
|
||||
|
||||
expect(humanizeDom(parse("<div value='some message' i18n-value='meaning|comment'></div>",
|
||||
translations)))
|
||||
expect(
|
||||
humanizeDom(parse(
|
||||
'<div value=\'some message\' i18n-value=\'meaning|comment\'></div>', translations)))
|
||||
.toEqual([[HtmlElementAst, 'div', 0], [HtmlAttrAst, 'value', 'another message']]);
|
||||
});
|
||||
|
||||
it("should replace elements with the i18n attr", () => {
|
||||
it('should replace elements with the i18n attr', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message("message", "meaning", null))] = "another message";
|
||||
translations[id(new Message('message', 'meaning', null))] = 'another message';
|
||||
|
||||
expect(humanizeDom(parse("<div i18n='meaning|desc'>message</div>", translations)))
|
||||
.toEqual([[HtmlElementAst, 'div', 0], [HtmlTextAst, 'another message', 1]]);
|
||||
expect(humanizeDom(parse('<div i18n=\'meaning|desc\'>message</div>', translations))).toEqual([
|
||||
[HtmlElementAst, 'div', 0], [HtmlTextAst, 'another message', 1]
|
||||
]);
|
||||
});
|
||||
|
||||
it("should handle interpolation", () => {
|
||||
it('should handle interpolation', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('<ph name="0"/> and <ph name="1"/>', null, null))] =
|
||||
'<ph name="1"/> or <ph name="0"/>';
|
||||
|
||||
expect(humanizeDom(parse("<div value='{{a}} and {{b}}' i18n-value></div>", translations)))
|
||||
expect(humanizeDom(parse('<div value=\'{{a}} and {{b}}\' i18n-value></div>', translations)))
|
||||
.toEqual([[HtmlElementAst, 'div', 0], [HtmlAttrAst, 'value', '{{b}} or {{a}}']]);
|
||||
});
|
||||
|
||||
@ -87,37 +94,35 @@ export function main() {
|
||||
]);
|
||||
});
|
||||
|
||||
it("should handle nested html", () => {
|
||||
it('should handle nested html', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('<ph name="e0">a</ph><ph name="e2">b</ph>', null, null))] =
|
||||
'<ph name="e2">B</ph><ph name="e0">A</ph>';
|
||||
|
||||
expect(humanizeDom(parse('<div i18n><a>a</a><b>b</b></div>', translations)))
|
||||
.toEqual([
|
||||
[HtmlElementAst, 'div', 0],
|
||||
[HtmlElementAst, 'b', 1],
|
||||
[HtmlTextAst, 'B', 2],
|
||||
[HtmlElementAst, 'a', 1],
|
||||
[HtmlTextAst, 'A', 2],
|
||||
]);
|
||||
expect(humanizeDom(parse('<div i18n><a>a</a><b>b</b></div>', translations))).toEqual([
|
||||
[HtmlElementAst, 'div', 0],
|
||||
[HtmlElementAst, 'b', 1],
|
||||
[HtmlTextAst, 'B', 2],
|
||||
[HtmlElementAst, 'a', 1],
|
||||
[HtmlTextAst, 'A', 2],
|
||||
]);
|
||||
});
|
||||
|
||||
it("should support interpolation", () => {
|
||||
it('should support interpolation', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message(
|
||||
'<ph name="e0">a</ph><ph name="e2"><ph name="t3">b<ph name="0"/></ph></ph>', null,
|
||||
null))] = '<ph name="e2"><ph name="t3"><ph name="0"/>B</ph></ph><ph name="e0">A</ph>';
|
||||
expect(humanizeDom(parse('<div i18n><a>a</a><b>b{{i}}</b></div>', translations)))
|
||||
.toEqual([
|
||||
[HtmlElementAst, 'div', 0],
|
||||
[HtmlElementAst, 'b', 1],
|
||||
[HtmlTextAst, '{{i}}B', 2],
|
||||
[HtmlElementAst, 'a', 1],
|
||||
[HtmlTextAst, 'A', 2],
|
||||
]);
|
||||
expect(humanizeDom(parse('<div i18n><a>a</a><b>b{{i}}</b></div>', translations))).toEqual([
|
||||
[HtmlElementAst, 'div', 0],
|
||||
[HtmlElementAst, 'b', 1],
|
||||
[HtmlTextAst, '{{i}}B', 2],
|
||||
[HtmlElementAst, 'a', 1],
|
||||
[HtmlTextAst, 'A', 2],
|
||||
]);
|
||||
});
|
||||
|
||||
it("should i18n attributes of placeholder elements", () => {
|
||||
it('should i18n attributes of placeholder elements', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('<ph name="e0">a</ph>', null, null))] = '<ph name="e0">A</ph>';
|
||||
translations[id(new Message('b', null, null))] = 'B';
|
||||
@ -126,21 +131,19 @@ export function main() {
|
||||
.toEqual([
|
||||
[HtmlElementAst, 'div', 0],
|
||||
[HtmlElementAst, 'a', 1],
|
||||
[HtmlAttrAst, 'value', "B"],
|
||||
[HtmlAttrAst, 'value', 'B'],
|
||||
[HtmlTextAst, 'A', 2],
|
||||
]);
|
||||
});
|
||||
|
||||
it("should preserve non-i18n attributes", () => {
|
||||
it('should preserve non-i18n attributes', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('message', null, null))] = 'another message';
|
||||
|
||||
expect(humanizeDom(parse('<div i18n value="b">message</div>', translations)))
|
||||
.toEqual([
|
||||
[HtmlElementAst, 'div', 0],
|
||||
[HtmlAttrAst, 'value', "b"],
|
||||
[HtmlTextAst, 'another message', 1]
|
||||
]);
|
||||
expect(humanizeDom(parse('<div i18n value="b">message</div>', translations))).toEqual([
|
||||
[HtmlElementAst, 'div', 0], [HtmlAttrAst, 'value', 'b'],
|
||||
[HtmlTextAst, 'another message', 1]
|
||||
]);
|
||||
});
|
||||
|
||||
it('should extract from partitions', () => {
|
||||
@ -148,16 +151,17 @@ export function main() {
|
||||
translations[id(new Message('message1', 'meaning1', null))] = 'another message1';
|
||||
translations[id(new Message('message2', 'meaning2', null))] = 'another message2';
|
||||
|
||||
let res = parse(`<!-- i18n: meaning1|desc1 -->message1<!-- /i18n --><!-- i18n: meaning2|desc2 -->message2<!-- /i18n -->`, translations);
|
||||
let res = parse(
|
||||
`<!-- i18n: meaning1|desc1 -->message1<!-- /i18n --><!-- i18n: meaning2|desc2 -->message2<!-- /i18n -->`,
|
||||
translations);
|
||||
|
||||
expect(humanizeDom(res))
|
||||
.toEqual([
|
||||
[HtmlTextAst, 'another message1', 0],
|
||||
[HtmlTextAst, 'another message2', 0],
|
||||
]);
|
||||
expect(humanizeDom(res)).toEqual([
|
||||
[HtmlTextAst, 'another message1', 0],
|
||||
[HtmlTextAst, 'another message2', 0],
|
||||
]);
|
||||
});
|
||||
|
||||
it("should preserve original positions", () => {
|
||||
it('should preserve original positions', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('<ph name="e0">a</ph><ph name="e2">b</ph>', null, null))] =
|
||||
'<ph name="e2">B</ph><ph name="e0">A</ph>';
|
||||
@ -169,54 +173,43 @@ export function main() {
|
||||
expect(res[1].sourceSpan.start.offset).toEqual(10);
|
||||
});
|
||||
|
||||
it("should handle the plural expansion form", () => {
|
||||
it('should handle the plural expansion form', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('zero<ph name="e1">bold</ph>', "plural_0", null))] =
|
||||
translations[id(new Message('zero<ph name="e1">bold</ph>', 'plural_0', null))] =
|
||||
'ZERO<ph name="e1">BOLD</ph>';
|
||||
|
||||
let res = parse(`{messages.length, plural,=0 {zero<b>bold</b>}}`, translations);
|
||||
|
||||
expect(humanizeDom(res))
|
||||
.toEqual([
|
||||
[HtmlElementAst, 'ul', 0],
|
||||
[HtmlAttrAst, '[ngPlural]', 'messages.length'],
|
||||
[HtmlElementAst, 'template', 1],
|
||||
[HtmlAttrAst, 'ngPluralCase', '0'],
|
||||
[HtmlElementAst, 'li', 2],
|
||||
[HtmlTextAst, 'ZERO', 3],
|
||||
[HtmlElementAst, 'b', 3],
|
||||
[HtmlTextAst, 'BOLD', 4]
|
||||
]);
|
||||
expect(humanizeDom(res)).toEqual([
|
||||
[HtmlElementAst, 'ul', 0], [HtmlAttrAst, '[ngPlural]', 'messages.length'],
|
||||
[HtmlElementAst, 'template', 1], [HtmlAttrAst, 'ngPluralCase', '0'],
|
||||
[HtmlElementAst, 'li', 2], [HtmlTextAst, 'ZERO', 3], [HtmlElementAst, 'b', 3],
|
||||
[HtmlTextAst, 'BOLD', 4]
|
||||
]);
|
||||
});
|
||||
|
||||
it("should handle nested expansion forms", () => {
|
||||
it('should handle nested expansion forms', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('m', "gender_m", null))] = 'M';
|
||||
translations[id(new Message('m', 'gender_m', null))] = 'M';
|
||||
|
||||
let res = parse(`{messages.length, plural, =0 { {p.gender, gender, =m {m}} }}`, translations);
|
||||
|
||||
expect(humanizeDom(res))
|
||||
.toEqual([
|
||||
[HtmlElementAst, 'ul', 0],
|
||||
[HtmlAttrAst, '[ngPlural]', 'messages.length'],
|
||||
[HtmlElementAst, 'template', 1],
|
||||
[HtmlAttrAst, 'ngPluralCase', '0'],
|
||||
[HtmlElementAst, 'li', 2],
|
||||
expect(humanizeDom(res)).toEqual([
|
||||
[HtmlElementAst, 'ul', 0], [HtmlAttrAst, '[ngPlural]', 'messages.length'],
|
||||
[HtmlElementAst, 'template', 1], [HtmlAttrAst, 'ngPluralCase', '0'],
|
||||
[HtmlElementAst, 'li', 2],
|
||||
|
||||
[HtmlElementAst, 'ul', 3],
|
||||
[HtmlAttrAst, '[ngSwitch]', 'p.gender'],
|
||||
[HtmlElementAst, 'template', 4],
|
||||
[HtmlAttrAst, 'ngSwitchWhen', 'm'],
|
||||
[HtmlElementAst, 'li', 5],
|
||||
[HtmlTextAst, 'M', 6],
|
||||
[HtmlElementAst, 'ul', 3], [HtmlAttrAst, '[ngSwitch]', 'p.gender'],
|
||||
[HtmlElementAst, 'template', 4], [HtmlAttrAst, 'ngSwitchWhen', 'm'],
|
||||
[HtmlElementAst, 'li', 5], [HtmlTextAst, 'M', 6],
|
||||
|
||||
[HtmlTextAst, ' ', 3]
|
||||
]);
|
||||
[HtmlTextAst, ' ', 3]
|
||||
]);
|
||||
});
|
||||
|
||||
it("should correctly set source code positions", () => {
|
||||
it('should correctly set source code positions', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('<ph name="e0">bold</ph>', "plural_0", null))] =
|
||||
translations[id(new Message('<ph name="e0">bold</ph>', 'plural_0', null))] =
|
||||
'<ph name="e0">BOLD</ph>';
|
||||
|
||||
let nodes = parse(`{messages.length, plural,=0 {<b>bold</b>}}`, translations).rootNodes;
|
||||
@ -253,101 +246,106 @@ export function main() {
|
||||
expect(b.sourceSpan.end.col).toEqual(32);
|
||||
});
|
||||
|
||||
it("should handle other special forms", () => {
|
||||
it('should handle other special forms', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('m', "gender_male", null))] = 'M';
|
||||
translations[id(new Message('m', 'gender_male', null))] = 'M';
|
||||
|
||||
let res = parse(`{person.gender, gender,=male {m}}`, translations);
|
||||
|
||||
expect(humanizeDom(res))
|
||||
.toEqual([
|
||||
[HtmlElementAst, 'ul', 0],
|
||||
[HtmlAttrAst, '[ngSwitch]', 'person.gender'],
|
||||
[HtmlElementAst, 'template', 1],
|
||||
[HtmlAttrAst, 'ngSwitchWhen', 'male'],
|
||||
[HtmlElementAst, 'li', 2],
|
||||
[HtmlTextAst, 'M', 3],
|
||||
]);
|
||||
expect(humanizeDom(res)).toEqual([
|
||||
[HtmlElementAst, 'ul', 0],
|
||||
[HtmlAttrAst, '[ngSwitch]', 'person.gender'],
|
||||
[HtmlElementAst, 'template', 1],
|
||||
[HtmlAttrAst, 'ngSwitchWhen', 'male'],
|
||||
[HtmlElementAst, 'li', 2],
|
||||
[HtmlTextAst, 'M', 3],
|
||||
]);
|
||||
});
|
||||
|
||||
describe("errors", () => {
|
||||
it("should error when giving an invalid template", () => {
|
||||
expect(humanizeErrors(parse("<a>a</b>", {}).errors))
|
||||
.toEqual(['Unexpected closing tag "b"']);
|
||||
describe('errors', () => {
|
||||
it('should error when giving an invalid template', () => {
|
||||
expect(humanizeErrors(parse('<a>a</b>', {}).errors)).toEqual([
|
||||
'Unexpected closing tag "b"'
|
||||
]);
|
||||
});
|
||||
|
||||
it("should error when no matching message (attr)", () => {
|
||||
let mid = id(new Message("some message", null, null));
|
||||
expect(humanizeErrors(parse("<div value='some message' i18n-value></div>", {}).errors))
|
||||
it('should error when no matching message (attr)', () => {
|
||||
let mid = id(new Message('some message', null, null));
|
||||
expect(humanizeErrors(parse('<div value=\'some message\' i18n-value></div>', {}).errors))
|
||||
.toEqual([`Cannot find message for id '${mid}', content 'some message'.`]);
|
||||
});
|
||||
|
||||
it("should error when no matching message (text)", () => {
|
||||
let mid = id(new Message("some message", null, null));
|
||||
expect(humanizeErrors(parse("<div i18n>some message</div>", {}).errors))
|
||||
.toEqual([`Cannot find message for id '${mid}', content 'some message'.`]);
|
||||
it('should error when no matching message (text)', () => {
|
||||
let mid = id(new Message('some message', null, null));
|
||||
expect(humanizeErrors(parse('<div i18n>some message</div>', {}).errors)).toEqual([
|
||||
`Cannot find message for id '${mid}', content 'some message'.`
|
||||
]);
|
||||
});
|
||||
|
||||
it("should error when a non-placeholder element appears in translation", () => {
|
||||
it('should error when a non-placeholder element appears in translation', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message("some message", null, null))] = "<a>a</a>";
|
||||
translations[id(new Message('some message', null, null))] = '<a>a</a>';
|
||||
|
||||
expect(humanizeErrors(parse("<div i18n>some message</div>", translations).errors))
|
||||
.toEqual([`Unexpected tag "a". Only "ph" tags are allowed.`]);
|
||||
expect(humanizeErrors(parse('<div i18n>some message</div>', translations).errors)).toEqual([
|
||||
`Unexpected tag "a". Only "ph" tags are allowed.`
|
||||
]);
|
||||
});
|
||||
|
||||
it("should error when a placeholder element does not have the name attribute", () => {
|
||||
it('should error when a placeholder element does not have the name attribute', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message("some message", null, null))] = "<ph>a</ph>";
|
||||
translations[id(new Message('some message', null, null))] = '<ph>a</ph>';
|
||||
|
||||
expect(humanizeErrors(parse("<div i18n>some message</div>", translations).errors))
|
||||
.toEqual([`Missing "name" attribute.`]);
|
||||
expect(humanizeErrors(parse('<div i18n>some message</div>', translations).errors)).toEqual([
|
||||
`Missing "name" attribute.`
|
||||
]);
|
||||
});
|
||||
|
||||
it("should error when the translation refers to an invalid expression", () => {
|
||||
it('should error when the translation refers to an invalid expression', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('hi <ph name="0"/>', null, null))] = 'hi <ph name="99"/>';
|
||||
|
||||
expect(
|
||||
humanizeErrors(parse("<div value='hi {{a}}' i18n-value></div>", translations).errors))
|
||||
.toEqual(["Invalid interpolation name '99'"]);
|
||||
humanizeErrors(parse('<div value=\'hi {{a}}\' i18n-value></div>', translations).errors))
|
||||
.toEqual(['Invalid interpolation name \'99\'']);
|
||||
});
|
||||
|
||||
describe('implicit translation', () => {
|
||||
it("should support attributes", () => {
|
||||
it('should support attributes', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message("some message", null, null))] = "another message";
|
||||
translations[id(new Message('some message', null, null))] = 'another message';
|
||||
|
||||
expect(humanizeDom(parse("<i18n-el value='some message'></i18n-el>", translations, [],
|
||||
{'i18n-el': ['value']})))
|
||||
expect(humanizeDom(parse('<i18n-el value=\'some message\'></i18n-el>', translations, [], {
|
||||
'i18n-el': ['value']
|
||||
}))).toEqual([[HtmlElementAst, 'i18n-el', 0], [HtmlAttrAst, 'value', 'another message']]);
|
||||
});
|
||||
|
||||
it('should support attributes with meaning and description', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message('some message', 'meaning', 'description'))] =
|
||||
'another message';
|
||||
|
||||
expect(
|
||||
humanizeDom(parse(
|
||||
'<i18n-el value=\'some message\' i18n-value=\'meaning|description\'></i18n-el>',
|
||||
translations, [], {'i18n-el': ['value']})))
|
||||
.toEqual([[HtmlElementAst, 'i18n-el', 0], [HtmlAttrAst, 'value', 'another message']]);
|
||||
});
|
||||
|
||||
it("should support attributes with meaning and description", () => {
|
||||
it('should support elements', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message("some message", "meaning", "description"))] =
|
||||
"another message";
|
||||
translations[id(new Message('message', null, null))] = 'another message';
|
||||
|
||||
expect(humanizeDom(parse(
|
||||
"<i18n-el value='some message' i18n-value='meaning|description'></i18n-el>",
|
||||
translations, [], {'i18n-el': ['value']})))
|
||||
.toEqual([[HtmlElementAst, 'i18n-el', 0], [HtmlAttrAst, 'value', 'another message']]);
|
||||
});
|
||||
|
||||
it("should support elements", () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message("message", null, null))] = "another message";
|
||||
|
||||
expect(humanizeDom(parse("<i18n-el>message</i18n-el>", translations, ['i18n-el'])))
|
||||
expect(humanizeDom(parse('<i18n-el>message</i18n-el>', translations, ['i18n-el'])))
|
||||
.toEqual([[HtmlElementAst, 'i18n-el', 0], [HtmlTextAst, 'another message', 1]]);
|
||||
});
|
||||
|
||||
it("should support elements with meaning and description", () => {
|
||||
it('should support elements with meaning and description', () => {
|
||||
let translations: {[key: string]: string} = {};
|
||||
translations[id(new Message("message", "meaning", "description"))] = "another message";
|
||||
translations[id(new Message('message', 'meaning', 'description'))] = 'another message';
|
||||
|
||||
expect(humanizeDom(parse("<i18n-el i18n='meaning|description'>message</i18n-el>",
|
||||
translations, ['i18n-el'])))
|
||||
expect(humanizeDom(parse(
|
||||
'<i18n-el i18n=\'meaning|description\'>message</i18n-el>', translations,
|
||||
['i18n-el'])))
|
||||
.toEqual([[HtmlElementAst, 'i18n-el', 0], [HtmlTextAst, 'another message', 1]]);
|
||||
});
|
||||
});
|
||||
|
@ -1,20 +1,9 @@
|
||||
import {
|
||||
beforeEach,
|
||||
describe,
|
||||
ddescribe,
|
||||
expect,
|
||||
iit,
|
||||
inject,
|
||||
it,
|
||||
xdescribe,
|
||||
xit
|
||||
} from '@angular/core/testing/testing_internal';
|
||||
|
||||
import {HtmlParser} from '@angular/compiler/src/html_parser';
|
||||
import {MessageExtractor, removeDuplicates} from '@angular/compiler/src/i18n/message_extractor';
|
||||
import {Message} from '@angular/compiler/src/i18n/message';
|
||||
import {Parser} from '@angular/compiler/src/expression_parser/parser';
|
||||
import {Lexer} from '@angular/compiler/src/expression_parser/lexer';
|
||||
import {Parser} from '@angular/compiler/src/expression_parser/parser';
|
||||
import {HtmlParser} from '@angular/compiler/src/html_parser';
|
||||
import {Message} from '@angular/compiler/src/i18n/message';
|
||||
import {MessageExtractor, removeDuplicates} from '@angular/compiler/src/i18n/message_extractor';
|
||||
import {beforeEach, ddescribe, describe, expect, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
|
||||
|
||||
export function main() {
|
||||
describe('MessageExtractor', () => {
|
||||
@ -27,156 +16,144 @@ export function main() {
|
||||
});
|
||||
|
||||
it('should extract from elements with the i18n attr', () => {
|
||||
let res = extractor.extract("<div i18n='meaning|desc'>message</div>", "someurl");
|
||||
expect(res.messages).toEqual([new Message("message", 'meaning', 'desc')]);
|
||||
let res = extractor.extract('<div i18n=\'meaning|desc\'>message</div>', 'someurl');
|
||||
expect(res.messages).toEqual([new Message('message', 'meaning', 'desc')]);
|
||||
});
|
||||
|
||||
it('should extract from elements with the i18n attr without a desc', () => {
|
||||
let res = extractor.extract("<div i18n='meaning'>message</div>", "someurl");
|
||||
expect(res.messages).toEqual([new Message("message", 'meaning', null)]);
|
||||
let res = extractor.extract('<div i18n=\'meaning\'>message</div>', 'someurl');
|
||||
expect(res.messages).toEqual([new Message('message', 'meaning', null)]);
|
||||
});
|
||||
|
||||
it('should extract from elements with the i18n attr without a meaning', () => {
|
||||
let res = extractor.extract("<div i18n>message</div>", "someurl");
|
||||
expect(res.messages).toEqual([new Message("message", null, null)]);
|
||||
let res = extractor.extract('<div i18n>message</div>', 'someurl');
|
||||
expect(res.messages).toEqual([new Message('message', null, null)]);
|
||||
});
|
||||
|
||||
it('should extract from attributes', () => {
|
||||
let res = extractor.extract(`
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<div
|
||||
title1='message1' i18n-title1='meaning1|desc1'
|
||||
title2='message2' i18n-title2='meaning2|desc2'>
|
||||
</div>
|
||||
`,
|
||||
"someurl");
|
||||
'someurl');
|
||||
|
||||
expect(res.messages)
|
||||
.toEqual([
|
||||
new Message("message1", "meaning1", "desc1"),
|
||||
new Message("message2", "meaning2", "desc2")
|
||||
]);
|
||||
expect(res.messages).toEqual([
|
||||
new Message('message1', 'meaning1', 'desc1'), new Message('message2', 'meaning2', 'desc2')
|
||||
]);
|
||||
});
|
||||
|
||||
it('should extract from partitions', () => {
|
||||
let res = extractor.extract(`
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<!-- i18n: meaning1|desc1 -->message1<!-- /i18n -->
|
||||
<!-- i18n: meaning2|desc2 -->message2<!-- /i18n -->`,
|
||||
"someUrl");
|
||||
'someUrl');
|
||||
|
||||
expect(res.messages)
|
||||
.toEqual([
|
||||
new Message("message1", "meaning1", "desc1"),
|
||||
new Message("message2", "meaning2", "desc2")
|
||||
]);
|
||||
expect(res.messages).toEqual([
|
||||
new Message('message1', 'meaning1', 'desc1'), new Message('message2', 'meaning2', 'desc2')
|
||||
]);
|
||||
});
|
||||
|
||||
it('should ignore other comments', () => {
|
||||
let res = extractor.extract(`
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<!-- i18n: meaning1|desc1 --><!-- other -->message1<!-- /i18n -->`,
|
||||
"someUrl");
|
||||
'someUrl');
|
||||
|
||||
expect(res.messages).toEqual([new Message("message1", "meaning1", "desc1")]);
|
||||
expect(res.messages).toEqual([new Message('message1', 'meaning1', 'desc1')]);
|
||||
});
|
||||
|
||||
it('should replace interpolation with placeholders (text nodes)', () => {
|
||||
let res = extractor.extract("<div i18n>Hi {{one}} and {{two}}</div>", "someurl");
|
||||
expect(res.messages)
|
||||
.toEqual(
|
||||
[new Message('<ph name="t0">Hi <ph name="0"/> and <ph name="1"/></ph>', null, null)]);
|
||||
let res = extractor.extract('<div i18n>Hi {{one}} and {{two}}</div>', 'someurl');
|
||||
expect(res.messages).toEqual([new Message(
|
||||
'<ph name="t0">Hi <ph name="0"/> and <ph name="1"/></ph>', null, null)]);
|
||||
});
|
||||
|
||||
it('should replace interpolation with placeholders (attributes)', () => {
|
||||
let res =
|
||||
extractor.extract("<div title='Hi {{one}} and {{two}}' i18n-title></div>", "someurl");
|
||||
expect(res.messages)
|
||||
.toEqual([new Message('Hi <ph name="0"/> and <ph name="1"/>', null, null)]);
|
||||
extractor.extract('<div title=\'Hi {{one}} and {{two}}\' i18n-title></div>', 'someurl');
|
||||
expect(res.messages).toEqual([new Message(
|
||||
'Hi <ph name="0"/> and <ph name="1"/>', null, null)]);
|
||||
});
|
||||
|
||||
it('should replace interpolation with named placeholders if provided (text nodes)', () => {
|
||||
let res = extractor.extract(`
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<div i18n>Hi {{one //i18n(ph="FIRST")}} and {{two //i18n(ph="SECOND")}}</div>`,
|
||||
'someurl');
|
||||
expect(res.messages)
|
||||
.toEqual([
|
||||
new Message('<ph name="t0">Hi <ph name="FIRST"/> and <ph name="SECOND"/></ph>', null,
|
||||
null)
|
||||
]);
|
||||
'someurl');
|
||||
expect(res.messages).toEqual([new Message(
|
||||
'<ph name="t0">Hi <ph name="FIRST"/> and <ph name="SECOND"/></ph>', null, null)]);
|
||||
});
|
||||
|
||||
it('should replace interpolation with named placeholders if provided (attributes)', () => {
|
||||
let res = extractor.extract(`
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<div title='Hi {{one //i18n(ph="FIRST")}} and {{two //i18n(ph="SECOND")}}'
|
||||
i18n-title></div>`,
|
||||
'someurl');
|
||||
expect(res.messages)
|
||||
.toEqual([new Message('Hi <ph name="FIRST"/> and <ph name="SECOND"/>', null, null)]);
|
||||
'someurl');
|
||||
expect(res.messages).toEqual([new Message(
|
||||
'Hi <ph name="FIRST"/> and <ph name="SECOND"/>', null, null)]);
|
||||
});
|
||||
|
||||
it('should match named placeholders with extra spacing', () => {
|
||||
let res = extractor.extract(`
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<div title='Hi {{one // i18n ( ph = "FIRST" )}} and {{two // i18n ( ph = "SECOND" )}}'
|
||||
i18n-title></div>`,
|
||||
'someurl');
|
||||
expect(res.messages)
|
||||
.toEqual([new Message('Hi <ph name="FIRST"/> and <ph name="SECOND"/>', null, null)]);
|
||||
'someurl');
|
||||
expect(res.messages).toEqual([new Message(
|
||||
'Hi <ph name="FIRST"/> and <ph name="SECOND"/>', null, null)]);
|
||||
});
|
||||
|
||||
it('should suffix duplicate placeholder names with numbers', () => {
|
||||
let res = extractor.extract(`
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<div title='Hi {{one //i18n(ph="FIRST")}} and {{two //i18n(ph="FIRST")}} and {{three //i18n(ph="FIRST")}}'
|
||||
i18n-title></div>`,
|
||||
'someurl');
|
||||
expect(res.messages)
|
||||
.toEqual([
|
||||
new Message('Hi <ph name="FIRST"/> and <ph name="FIRST_1"/> and <ph name="FIRST_2"/>',
|
||||
null, null)
|
||||
]);
|
||||
'someurl');
|
||||
expect(res.messages).toEqual([new Message(
|
||||
'Hi <ph name="FIRST"/> and <ph name="FIRST_1"/> and <ph name="FIRST_2"/>', null, null)]);
|
||||
});
|
||||
|
||||
it("should handle html content", () => {
|
||||
it('should handle html content', () => {
|
||||
let res = extractor.extract(
|
||||
'<div i18n><div attr="value">zero<div>one</div></div><div>two</div></div>', "someurl");
|
||||
expect(res.messages)
|
||||
.toEqual([
|
||||
new Message('<ph name="e0">zero<ph name="e2">one</ph></ph><ph name="e4">two</ph>', null,
|
||||
null)
|
||||
]);
|
||||
'<div i18n><div attr="value">zero<div>one</div></div><div>two</div></div>', 'someurl');
|
||||
expect(res.messages).toEqual([new Message(
|
||||
'<ph name="e0">zero<ph name="e2">one</ph></ph><ph name="e4">two</ph>', null, null)]);
|
||||
});
|
||||
|
||||
it("should handle html content with interpolation", () => {
|
||||
it('should handle html content with interpolation', () => {
|
||||
let res =
|
||||
extractor.extract('<div i18n><div>zero{{a}}<div>{{b}}</div></div></div>', "someurl");
|
||||
expect(res.messages)
|
||||
.toEqual([
|
||||
new Message(
|
||||
'<ph name="e0"><ph name="t1">zero<ph name="0"/></ph><ph name="e2"><ph name="t3"><ph name="0"/></ph></ph></ph>',
|
||||
null, null)
|
||||
]);
|
||||
extractor.extract('<div i18n><div>zero{{a}}<div>{{b}}</div></div></div>', 'someurl');
|
||||
expect(res.messages).toEqual([new Message(
|
||||
'<ph name="e0"><ph name="t1">zero<ph name="0"/></ph><ph name="e2"><ph name="t3"><ph name="0"/></ph></ph></ph>',
|
||||
null, null)]);
|
||||
});
|
||||
|
||||
it("should extract from nested elements", () => {
|
||||
it('should extract from nested elements', () => {
|
||||
let res = extractor.extract(
|
||||
'<div title="message1" i18n-title="meaning1|desc1"><div i18n="meaning2|desc2">message2</div></div>',
|
||||
"someurl");
|
||||
expect(res.messages)
|
||||
.toEqual([
|
||||
new Message("message2", "meaning2", "desc2"),
|
||||
new Message("message1", "meaning1", "desc1")
|
||||
]);
|
||||
'someurl');
|
||||
expect(res.messages).toEqual([
|
||||
new Message('message2', 'meaning2', 'desc2'), new Message('message1', 'meaning1', 'desc1')
|
||||
]);
|
||||
});
|
||||
|
||||
it("should extract messages from attributes in i18n blocks", () => {
|
||||
it('should extract messages from attributes in i18n blocks', () => {
|
||||
let res = extractor.extract(
|
||||
'<div i18n><div attr="value" i18n-attr="meaning|desc">message</div></div>', "someurl");
|
||||
expect(res.messages)
|
||||
.toEqual([
|
||||
new Message('<ph name="e0">message</ph>', null, null),
|
||||
new Message('value', "meaning", "desc")
|
||||
]);
|
||||
'<div i18n><div attr="value" i18n-attr="meaning|desc">message</div></div>', 'someurl');
|
||||
expect(res.messages).toEqual([
|
||||
new Message('<ph name="e0">message</ph>', null, null),
|
||||
new Message('value', 'meaning', 'desc')
|
||||
]);
|
||||
});
|
||||
|
||||
it("should extract messages from special forms", () => {
|
||||
let res = extractor.extract(`
|
||||
it('should extract messages from special forms', () => {
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<div>
|
||||
{messages.length, plural,
|
||||
=0 {You have <b>no</b> messages}
|
||||
@ -184,75 +161,76 @@ export function main() {
|
||||
}
|
||||
</div>
|
||||
`,
|
||||
"someurl");
|
||||
'someurl');
|
||||
|
||||
expect(res.messages)
|
||||
.toEqual([
|
||||
new Message('You have <ph name="e1">no</ph> messages', "plural_0", null),
|
||||
new Message('You have one message', "plural_1", null)
|
||||
]);
|
||||
expect(res.messages).toEqual([
|
||||
new Message('You have <ph name="e1">no</ph> messages', 'plural_0', null),
|
||||
new Message('You have one message', 'plural_1', null)
|
||||
]);
|
||||
});
|
||||
|
||||
it("should remove duplicate messages", () => {
|
||||
let res = extractor.extract(`
|
||||
it('should remove duplicate messages', () => {
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<!-- i18n: meaning|desc1 -->message<!-- /i18n -->
|
||||
<!-- i18n: meaning|desc2 -->message<!-- /i18n -->`,
|
||||
"someUrl");
|
||||
'someUrl');
|
||||
|
||||
expect(removeDuplicates(res.messages))
|
||||
.toEqual([
|
||||
new Message("message", "meaning", "desc1"),
|
||||
]);
|
||||
expect(removeDuplicates(res.messages)).toEqual([
|
||||
new Message('message', 'meaning', 'desc1'),
|
||||
]);
|
||||
});
|
||||
|
||||
describe('implicit translation', () => {
|
||||
it('should extract from elements', () => {
|
||||
let res = extractor.extract("<i18n-tag>message</i18n-tag>", "someurl");
|
||||
expect(res.messages).toEqual([new Message("message", null, null)]);
|
||||
let res = extractor.extract('<i18n-tag>message</i18n-tag>', 'someurl');
|
||||
expect(res.messages).toEqual([new Message('message', null, null)]);
|
||||
});
|
||||
|
||||
it('should extract meaning and description from elements when present', () => {
|
||||
let res =
|
||||
extractor.extract("<i18n-tag i18n='meaning|description'>message</i18n-tag>", "someurl");
|
||||
expect(res.messages).toEqual([new Message("message", "meaning", "description")]);
|
||||
let res = extractor.extract(
|
||||
'<i18n-tag i18n=\'meaning|description\'>message</i18n-tag>', 'someurl');
|
||||
expect(res.messages).toEqual([new Message('message', 'meaning', 'description')]);
|
||||
});
|
||||
|
||||
it('should extract from attributes', () => {
|
||||
let res = extractor.extract(`<i18n-el trans='message'></i18n-el>`, "someurl");
|
||||
expect(res.messages).toEqual([new Message("message", null, null)]);
|
||||
let res = extractor.extract(`<i18n-el trans='message'></i18n-el>`, 'someurl');
|
||||
expect(res.messages).toEqual([new Message('message', null, null)]);
|
||||
});
|
||||
|
||||
it('should extract meaning and description from attributes when present', () => {
|
||||
let res = extractor.extract(`<i18n-el trans='message' i18n-trans="meaning|desc"></i18n-el>`,
|
||||
"someurl");
|
||||
expect(res.messages).toEqual([new Message("message", "meaning", "desc")]);
|
||||
let res = extractor.extract(
|
||||
`<i18n-el trans='message' i18n-trans="meaning|desc"></i18n-el>`, 'someurl');
|
||||
expect(res.messages).toEqual([new Message('message', 'meaning', 'desc')]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("errors", () => {
|
||||
describe('errors', () => {
|
||||
it('should error on i18n attributes without matching "real" attributes', () => {
|
||||
let res = extractor.extract(`
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<div
|
||||
title1='message1' i18n-title1='meaning1|desc1' i18n-title2='meaning2|desc2'>
|
||||
</div>
|
||||
`,
|
||||
"someurl");
|
||||
'someurl');
|
||||
|
||||
expect(res.errors.length).toEqual(1);
|
||||
expect(res.errors[0].msg).toEqual("Missing attribute 'title2'.");
|
||||
expect(res.errors[0].msg).toEqual('Missing attribute \'title2\'.');
|
||||
});
|
||||
|
||||
it('should error when cannot find a matching desc', () => {
|
||||
let res = extractor.extract(`
|
||||
let res = extractor.extract(
|
||||
`
|
||||
<!-- i18n: meaning1|desc1 -->message1`,
|
||||
"someUrl");
|
||||
'someUrl');
|
||||
|
||||
expect(res.errors.length).toEqual(1);
|
||||
expect(res.errors[0].msg).toEqual("Missing closing 'i18n' comment.");
|
||||
expect(res.errors[0].msg).toEqual('Missing closing \'i18n\' comment.');
|
||||
});
|
||||
|
||||
it("should return parse errors when the template is invalid", () => {
|
||||
let res = extractor.extract("<input&#Besfs", "someurl");
|
||||
it('should return parse errors when the template is invalid', () => {
|
||||
let res = extractor.extract('<input&#Besfs', 'someurl');
|
||||
expect(res.errors.length).toEqual(1);
|
||||
expect(res.errors[0].msg).toEqual('Unexpected character "s"');
|
||||
});
|
||||
|
@ -1,23 +1,12 @@
|
||||
import {
|
||||
beforeEach,
|
||||
ddescribe,
|
||||
describe,
|
||||
expect,
|
||||
iit,
|
||||
inject,
|
||||
it,
|
||||
xdescribe,
|
||||
xit
|
||||
} from '@angular/core/testing/testing_internal';
|
||||
|
||||
import {Message, id} from '@angular/compiler/src/i18n/message';
|
||||
import {beforeEach, ddescribe, describe, expect, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
|
||||
|
||||
export function main() {
|
||||
describe('Message', () => {
|
||||
describe("id", () => {
|
||||
it("should return a different id for messages with and without the meaning", () => {
|
||||
let m1 = new Message("content", "meaning", null);
|
||||
let m2 = new Message("content", null, null);
|
||||
describe('id', () => {
|
||||
it('should return a different id for messages with and without the meaning', () => {
|
||||
let m1 = new Message('content', 'meaning', null);
|
||||
let m2 = new Message('content', null, null);
|
||||
expect(id(m1)).toEqual(id(m1));
|
||||
expect(id(m1)).not.toEqual(id(m2));
|
||||
});
|
||||
|
@ -1,47 +1,36 @@
|
||||
import {
|
||||
beforeEach,
|
||||
ddescribe,
|
||||
describe,
|
||||
expect,
|
||||
iit,
|
||||
inject,
|
||||
it,
|
||||
xdescribe,
|
||||
xit
|
||||
} from '@angular/core/testing/testing_internal';
|
||||
|
||||
import {HtmlAst} from '@angular/compiler/src/html_ast';
|
||||
import {Message, id} from '@angular/compiler/src/i18n/message';
|
||||
import {serializeXmb, deserializeXmb} from '@angular/compiler/src/i18n/xmb_serializer';
|
||||
import {ParseSourceSpan, ParseError} from '@angular/compiler/src/parse_util';
|
||||
import {deserializeXmb, serializeXmb} from '@angular/compiler/src/i18n/xmb_serializer';
|
||||
import {ParseError, ParseSourceSpan} from '@angular/compiler/src/parse_util';
|
||||
import {beforeEach, ddescribe, describe, expect, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
|
||||
|
||||
export function main() {
|
||||
describe("Xmb", () => {
|
||||
describe('Xmb', () => {
|
||||
describe('Xmb Serialization', () => {
|
||||
it("should return an empty message bundle for an empty list of messages",
|
||||
() => { expect(serializeXmb([])).toEqual("<message-bundle></message-bundle>"); });
|
||||
it('should return an empty message bundle for an empty list of messages',
|
||||
() => { expect(serializeXmb([])).toEqual('<message-bundle></message-bundle>'); });
|
||||
|
||||
it("should serializeXmb messages without desc", () => {
|
||||
let m = new Message("content", "meaning", null);
|
||||
it('should serializeXmb messages without desc', () => {
|
||||
let m = new Message('content', 'meaning', null);
|
||||
let expected = `<message-bundle><msg id='${id(m)}'>content</msg></message-bundle>`;
|
||||
expect(serializeXmb([m])).toEqual(expected);
|
||||
});
|
||||
|
||||
it("should serializeXmb messages with desc", () => {
|
||||
let m = new Message("content", "meaning", "description");
|
||||
it('should serializeXmb messages with desc', () => {
|
||||
let m = new Message('content', 'meaning', 'description');
|
||||
let expected =
|
||||
`<message-bundle><msg id='${id(m)}' desc='description'>content</msg></message-bundle>`;
|
||||
expect(serializeXmb([m])).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe("Xmb Deserialization", () => {
|
||||
it("should parse an empty bundle", () => {
|
||||
let mb = "<message-bundle></message-bundle>";
|
||||
expect(deserializeXmb(mb, "url").messages).toEqual({});
|
||||
describe('Xmb Deserialization', () => {
|
||||
it('should parse an empty bundle', () => {
|
||||
let mb = '<message-bundle></message-bundle>';
|
||||
expect(deserializeXmb(mb, 'url').messages).toEqual({});
|
||||
});
|
||||
|
||||
it("should parse an non-empty bundle", () => {
|
||||
it('should parse an non-empty bundle', () => {
|
||||
let mb = `
|
||||
<message-bundle>
|
||||
<msg id="id1" desc="description1">content1</msg>
|
||||
@ -49,59 +38,59 @@ export function main() {
|
||||
</message-bundle>
|
||||
`;
|
||||
|
||||
let parsed = deserializeXmb(mb, "url").messages;
|
||||
expect(_serialize(parsed["id1"])).toEqual("content1");
|
||||
expect(_serialize(parsed["id2"])).toEqual("content2");
|
||||
let parsed = deserializeXmb(mb, 'url').messages;
|
||||
expect(_serialize(parsed['id1'])).toEqual('content1');
|
||||
expect(_serialize(parsed['id2'])).toEqual('content2');
|
||||
});
|
||||
|
||||
it("should error when cannot parse the content", () => {
|
||||
it('should error when cannot parse the content', () => {
|
||||
let mb = `
|
||||
<message-bundle>
|
||||
<msg id="id1" desc="description1">content
|
||||
</message-bundle>
|
||||
`;
|
||||
|
||||
let res = deserializeXmb(mb, "url");
|
||||
let res = deserializeXmb(mb, 'url');
|
||||
expect(_serializeErrors(res.errors)).toEqual(['Unexpected closing tag "message-bundle"']);
|
||||
});
|
||||
|
||||
it("should error when cannot find the id attribute", () => {
|
||||
it('should error when cannot find the id attribute', () => {
|
||||
let mb = `
|
||||
<message-bundle>
|
||||
<msg>content</msg>
|
||||
</message-bundle>
|
||||
`;
|
||||
|
||||
let res = deserializeXmb(mb, "url");
|
||||
let res = deserializeXmb(mb, 'url');
|
||||
expect(_serializeErrors(res.errors)).toEqual(['"id" attribute is missing']);
|
||||
});
|
||||
|
||||
it("should error on empty content", () => {
|
||||
it('should error on empty content', () => {
|
||||
let mb = ``;
|
||||
let res = deserializeXmb(mb, "url");
|
||||
let res = deserializeXmb(mb, 'url');
|
||||
expect(_serializeErrors(res.errors)).toEqual(['Missing element "message-bundle"']);
|
||||
});
|
||||
|
||||
it("should error on an invalid element", () => {
|
||||
it('should error on an invalid element', () => {
|
||||
let mb = `
|
||||
<message-bundle>
|
||||
<invalid>content</invalid>
|
||||
</message-bundle>
|
||||
`;
|
||||
|
||||
let res = deserializeXmb(mb, "url");
|
||||
let res = deserializeXmb(mb, 'url');
|
||||
expect(_serializeErrors(res.errors)).toEqual(['Unexpected element "invalid"']);
|
||||
});
|
||||
|
||||
it("should expand 'ph' elements", () => {
|
||||
it('should expand \'ph\' elements', () => {
|
||||
let mb = `
|
||||
<message-bundle>
|
||||
<msg id="id1">a<ph name="i0"/></msg>
|
||||
</message-bundle>
|
||||
`;
|
||||
|
||||
let res = deserializeXmb(mb, "url").messages["id1"];
|
||||
expect((<any>res[1]).name).toEqual("ph");
|
||||
let res = deserializeXmb(mb, 'url').messages['id1'];
|
||||
expect((<any>res[1]).name).toEqual('ph');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
Reference in New Issue
Block a user