@@ -11,25 +11,107 @@ import {
1111 xit
1212} from 'angular2/testing_internal' ;
1313
14+ import { HtmlAst } from 'angular2/src/compiler/html_ast' ;
1415import { Message , id } from 'angular2/src/i18n/message' ;
15- import { serializeXmb } from 'angular2/src/i18n/xmb_serializer' ;
16+ import { serializeXmb , deserializeXmb } from 'angular2/src/i18n/xmb_serializer' ;
17+ import { ParseSourceSpan , ParseError } from 'angular2/src/compiler/parse_util' ;
1618
1719export function main ( ) {
18- describe ( 'Xmb Serialization' , ( ) => {
19- it ( "should return an empty message bundle for an empty list of messages" ,
20- ( ) => { expect ( serializeXmb ( [ ] ) ) . toEqual ( "<message-bundle></message-bundle>" ) ; } ) ;
21-
22- it ( "should serializeXmb messages without desc" , ( ) => {
23- let m = new Message ( "content" , "meaning" , null ) ;
24- let expected = `<message-bundle><msg id='${ id ( m ) } '>content</msg></message-bundle>` ;
25- expect ( serializeXmb ( [ m ] ) ) . toEqual ( expected ) ;
20+ describe ( "Xmb" , ( ) => {
21+ describe ( 'Xmb Serialization' , ( ) => {
22+ it ( "should return an empty message bundle for an empty list of messages" ,
23+ ( ) => { expect ( serializeXmb ( [ ] ) ) . toEqual ( "<message-bundle></message-bundle>" ) ; } ) ;
24+
25+ it ( "should serializeXmb messages without desc" , ( ) => {
26+ let m = new Message ( "content" , "meaning" , null ) ;
27+ let expected = `<message-bundle><msg id='${ id ( m ) } '>content</msg></message-bundle>` ;
28+ expect ( serializeXmb ( [ m ] ) ) . toEqual ( expected ) ;
29+ } ) ;
30+
31+ it ( "should serializeXmb messages with desc" , ( ) => {
32+ let m = new Message ( "content" , "meaning" , "description" ) ;
33+ let expected =
34+ `<message-bundle><msg id='${ id ( m ) } ' desc='description'>content</msg></message-bundle>` ;
35+ expect ( serializeXmb ( [ m ] ) ) . toEqual ( expected ) ;
36+ } ) ;
2637 } ) ;
2738
28- it ( "should serializeXmb messages with desc" , ( ) => {
29- let m = new Message ( "content" , "meaning" , "description" ) ;
30- let expected =
31- `<message-bundle><msg id='${ id ( m ) } ' desc='description'>content</msg></message-bundle>` ;
32- expect ( serializeXmb ( [ m ] ) ) . toEqual ( expected ) ;
39+ describe ( "Xmb Deserialization" , ( ) => {
40+ it ( "should parse an empty bundle" , ( ) => {
41+ let mb = "<message-bundle></message-bundle>" ;
42+ expect ( deserializeXmb ( mb , "url" ) . messages ) . toEqual ( { } ) ;
43+ } ) ;
44+
45+ it ( "should parse an non-empty bundle" , ( ) => {
46+ let mb = `
47+ <message-bundle>
48+ <msg id="id1" desc="description1">content1</msg>
49+ <msg id="id2">content2</msg>
50+ </message-bundle>
51+ ` ;
52+
53+ let parsed = deserializeXmb ( mb , "url" ) . messages ;
54+ expect ( _serialize ( parsed [ "id1" ] ) ) . toEqual ( "content1" ) ;
55+ expect ( _serialize ( parsed [ "id2" ] ) ) . toEqual ( "content2" ) ;
56+ } ) ;
57+
58+ it ( "should error when cannot parse the content" , ( ) => {
59+ let mb = `
60+ <message-bundle>
61+ <msg id="id1" desc="description1">content
62+ </message-bundle>
63+ ` ;
64+
65+ let res = deserializeXmb ( mb , "url" ) ;
66+ expect ( _serializeErrors ( res . errors ) ) . toEqual ( [ 'Unexpected closing tag "message-bundle"' ] ) ;
67+ } ) ;
68+
69+ it ( "should error when cannot find the id attribute" , ( ) => {
70+ let mb = `
71+ <message-bundle>
72+ <msg>content</msg>
73+ </message-bundle>
74+ ` ;
75+
76+ let res = deserializeXmb ( mb , "url" ) ;
77+ expect ( _serializeErrors ( res . errors ) ) . toEqual ( [ '"id" attribute is missing' ] ) ;
78+ } ) ;
79+
80+ it ( "should error on empty content" , ( ) => {
81+ let mb = `` ;
82+ let res = deserializeXmb ( mb , "url" ) ;
83+ expect ( _serializeErrors ( res . errors ) ) . toEqual ( [ 'Missing element "message-bundle"' ] ) ;
84+ } ) ;
85+
86+ it ( "should error on an invalid element" , ( ) => {
87+ let mb = `
88+ <message-bundle>
89+ <invalid>content</invalid>
90+ </message-bundle>
91+ ` ;
92+
93+ let res = deserializeXmb ( mb , "url" ) ;
94+ expect ( _serializeErrors ( res . errors ) ) . toEqual ( [ 'Unexpected element "invalid"' ] ) ;
95+ } ) ;
96+
97+ it ( "should expand 'ph' elements" , ( ) => {
98+ let mb = `
99+ <message-bundle>
100+ <msg id="id1">a<ph name="i0"/></msg>
101+ </message-bundle>
102+ ` ;
103+
104+ let res = deserializeXmb ( mb , "url" ) . messages [ "id1" ] ;
105+ expect ( ( < any > res [ 1 ] ) . name ) . toEqual ( "ph" ) ;
106+ } ) ;
33107 } ) ;
34108 } ) ;
35109}
110+
111+ function _serialize ( nodes : HtmlAst [ ] ) : string {
112+ return ( < any > nodes [ 0 ] ) . value ;
113+ }
114+
115+ function _serializeErrors ( errors : ParseError [ ] ) : string [ ] {
116+ return errors . map ( e => e . msg ) ;
117+ }
0 commit comments