/** * @license * Copyright Google Inc. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import {Xliff} from '@angular/compiler/src/i18n/serializers/xliff'; import {beforeEach, describe, expect, it} from '@angular/core/testing/testing_internal'; import {MessageBundle} from '../../../src/i18n/message_bundle'; import {HtmlParser} from '../../../src/ml_parser/html_parser'; import {DEFAULT_INTERPOLATION_CONFIG} from '../../../src/ml_parser/interpolation_config'; import {serializeNodes} from '../../ml_parser/ast_serializer_spec'; const HTML = `

not translatable

translatable element with placeholders {{ interpolation}}

foo

`; const WRITE_XLIFF = ` translatable attribute translatable element with placeholders foo d m `; const LOAD_XLIFF = ` translatable attribute etubirtta elbatalsnart translatable element with placeholders footnemele elbatalsnart sredlohecalp htiw foo oof d m `; export function main(): void { let serializer: Xliff; let htmlParser: HtmlParser; function toXliff(html: string): string { let catalog = new MessageBundle(new HtmlParser, [], {}); catalog.updateFromTemplate(html, '', DEFAULT_INTERPOLATION_CONFIG); return catalog.write(serializer); } function loadAsText(template: string, xliff: string): {[id: string]: string} { let messageBundle = new MessageBundle(htmlParser, [], {}); messageBundle.updateFromTemplate(template, 'url', DEFAULT_INTERPOLATION_CONFIG); const asAst = serializer.load(xliff, 'url', messageBundle); let asText: {[id: string]: string} = {}; Object.keys(asAst).forEach(id => { asText[id] = serializeNodes(asAst[id]).join(''); }); return asText; } describe('XLIFF serializer', () => { beforeEach(() => { htmlParser = new HtmlParser(); serializer = new Xliff(htmlParser, DEFAULT_INTERPOLATION_CONFIG); }); describe('write', () => { it('should write a valid xliff file', () => { expect(toXliff(HTML)).toEqual(WRITE_XLIFF); }); }); describe('load', () => { it('should load XLIFF files', () => { expect(loadAsText(HTML, LOAD_XLIFF)).toEqual({ '983775b9a51ce14b036be72d4cfd65d68d64e231': 'etubirtta elbatalsnart', 'ec1d033f2436133c14ab038286c4f5df4697484a': '{{ interpolation}} footnemele elbatalsnart sredlohecalp htiw', 'db3e0a6a5a96481f60aec61d98c3eecddef5ac23': 'oof', }); }); }); }); }