117 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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';
 | |
| 
 | |
| export function main() {
 | |
|   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 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");
 | |
|         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({});
 | |
|       });
 | |
| 
 | |
|       it("should parse an non-empty bundle", () => {
 | |
|         let mb = `
 | |
|           <message-bundle>
 | |
|             <msg id="id1" desc="description1">content1</msg>
 | |
|             <msg id="id2">content2</msg>
 | |
|           </message-bundle>
 | |
|         `;
 | |
| 
 | |
|         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", () => {
 | |
|         let mb = `
 | |
|           <message-bundle>
 | |
|             <msg id="id1" desc="description1">content
 | |
|           </message-bundle>
 | |
|         `;
 | |
| 
 | |
|         let res = deserializeXmb(mb, "url");
 | |
|         expect(_serializeErrors(res.errors)).toEqual(['Unexpected closing tag "message-bundle"']);
 | |
|       });
 | |
| 
 | |
|       it("should error when cannot find the id attribute", () => {
 | |
|         let mb = `
 | |
|           <message-bundle>
 | |
|             <msg>content</msg>
 | |
|           </message-bundle>
 | |
|         `;
 | |
| 
 | |
|         let res = deserializeXmb(mb, "url");
 | |
|         expect(_serializeErrors(res.errors)).toEqual(['"id" attribute is missing']);
 | |
|       });
 | |
| 
 | |
|       it("should error on empty content", () => {
 | |
|         let mb = ``;
 | |
|         let res = deserializeXmb(mb, "url");
 | |
|         expect(_serializeErrors(res.errors)).toEqual(['Missing element "message-bundle"']);
 | |
|       });
 | |
| 
 | |
|       it("should error on an invalid element", () => {
 | |
|         let mb = `
 | |
|           <message-bundle>
 | |
|             <invalid>content</invalid>
 | |
|           </message-bundle>
 | |
|         `;
 | |
| 
 | |
|         let res = deserializeXmb(mb, "url");
 | |
|         expect(_serializeErrors(res.errors)).toEqual(['Unexpected element "invalid"']);
 | |
|       });
 | |
| 
 | |
|       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");
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| }
 | |
| 
 | |
| function _serialize(nodes: HtmlAst[]): string {
 | |
|   return (<any>nodes[0]).value;
 | |
| }
 | |
| 
 | |
| function _serializeErrors(errors: ParseError[]): string[] {
 | |
|   return errors.map(e => e.msg);
 | |
| }
 |