@@ -383,6 +383,24 @@ export function main() {
383
383
const HTML = `<div>before<p i18n="m|d">foo</p><!-- comment --></div>` ;
384
384
expect ( fakeTranslate ( HTML ) ) . toEqual ( '<div>before<p>**foo**</p></div>' ) ;
385
385
} ) ;
386
+
387
+ it ( 'should merge empty messages' , ( ) => {
388
+ const HTML = `<div i18n>some element</div>` ;
389
+ const htmlNodes : html . Node [ ] = parseHtml ( HTML ) ;
390
+ const messages : i18n . Message [ ] =
391
+ extractMessages ( htmlNodes , DEFAULT_INTERPOLATION_CONFIG , [ ] , { } ) . messages ;
392
+
393
+ expect ( messages . length ) . toEqual ( 1 ) ;
394
+ const i18nMsgMap : { [ id : string ] : i18n . Node [ ] } = { } ;
395
+ i18nMsgMap [ digest ( messages [ 0 ] ) ] = [ ] ;
396
+ const translations = new TranslationBundle ( i18nMsgMap , digest ) ;
397
+
398
+ const output =
399
+ mergeTranslations ( htmlNodes , translations , DEFAULT_INTERPOLATION_CONFIG , [ ] , { } ) ;
400
+ expect ( output . errors ) . toEqual ( [ ] ) ;
401
+
402
+ expect ( serializeHtmlNodes ( output . rootNodes ) . join ( '' ) ) . toEqual ( `<div></div>` ) ;
403
+ } ) ;
386
404
} ) ;
387
405
388
406
describe ( 'blocks' , ( ) => {
@@ -422,6 +440,25 @@ export function main() {
422
440
const HTML = `<p i18n-title="m|d" title=""></p>` ;
423
441
expect ( fakeTranslate ( HTML ) ) . toEqual ( '<p title=""></p>' ) ;
424
442
} ) ;
443
+
444
+ it ( 'should merge empty attributes' , ( ) => {
445
+ const HTML = `<div i18n-title title="some attribute">some element</div>` ;
446
+ const htmlNodes : html . Node [ ] = parseHtml ( HTML ) ;
447
+ const messages : i18n . Message [ ] =
448
+ extractMessages ( htmlNodes , DEFAULT_INTERPOLATION_CONFIG , [ ] , { } ) . messages ;
449
+
450
+ expect ( messages . length ) . toEqual ( 1 ) ;
451
+ const i18nMsgMap : { [ id : string ] : i18n . Node [ ] } = { } ;
452
+ i18nMsgMap [ digest ( messages [ 0 ] ) ] = [ ] ;
453
+ const translations = new TranslationBundle ( i18nMsgMap , digest ) ;
454
+
455
+ const output =
456
+ mergeTranslations ( htmlNodes , translations , DEFAULT_INTERPOLATION_CONFIG , [ ] , { } ) ;
457
+ expect ( output . errors ) . toEqual ( [ ] ) ;
458
+
459
+ expect ( serializeHtmlNodes ( output . rootNodes ) . join ( '' ) )
460
+ . toEqual ( `<div title="">some element</div>` ) ;
461
+ } ) ;
425
462
} ) ;
426
463
} ) ;
427
464
}
@@ -453,12 +490,11 @@ function fakeTranslate(
453
490
454
491
const translations = new TranslationBundle ( i18nMsgMap , digest ) ;
455
492
456
- const translatedNodes =
457
- mergeTranslations (
458
- htmlNodes , translations , DEFAULT_INTERPOLATION_CONFIG , implicitTags , implicitAttrs )
459
- . rootNodes ;
493
+ const output = mergeTranslations (
494
+ htmlNodes , translations , DEFAULT_INTERPOLATION_CONFIG , implicitTags , implicitAttrs ) ;
495
+ expect ( output . errors ) . toEqual ( [ ] ) ;
460
496
461
- return serializeHtmlNodes ( translatedNodes ) . join ( '' ) ;
497
+ return serializeHtmlNodes ( output . rootNodes ) . join ( '' ) ;
462
498
}
463
499
464
500
function extract (
0 commit comments