104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * @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
 | |
|  */
 | |
| // Ensure that `$localize` is loaded to the global scope.
 | |
| import '@angular/localize/init';
 | |
| 
 | |
| import {clearTranslations, loadTranslations} from '../localize';
 | |
| import {computeMsgId, MessageId, TargetMessage} from '../src/utils';
 | |
| 
 | |
| describe('$localize tag with translations', () => {
 | |
|   describe('identities', () => {
 | |
|     beforeEach(() => {
 | |
|       loadTranslations(computeIds({
 | |
|         'abc': 'abc',
 | |
|         'abc{$PH}': 'abc{$PH}',
 | |
|         'abc{$PH}def': 'abc{$PH}def',
 | |
|         'abc{$PH}def{$PH_1}': 'abc{$PH}def{$PH_1}',
 | |
|         'Hello, {$PH}!': 'Hello, {$PH}!',
 | |
|       }));
 | |
|     });
 | |
|     afterEach(() => {
 | |
|       clearTranslations();
 | |
|     });
 | |
| 
 | |
|     it('should render template literals as-is', () => {
 | |
|       expect($localize`abc`).toEqual('abc');
 | |
|       expect($localize`abc${1 + 2 + 3}`).toEqual('abc6');
 | |
|       expect($localize`abc${1 + 2 + 3}def`).toEqual('abc6def');
 | |
|       expect($localize`abc${1 + 2 + 3}def${4 + 5 + 6}`).toEqual('abc6def15');
 | |
|       const getName = () => 'World';
 | |
|       expect($localize`Hello, ${getName()}!`).toEqual('Hello, World!');
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('to upper-case messageParts', () => {
 | |
|     beforeEach(() => {
 | |
|       loadTranslations(computeIds({
 | |
|         'abc': 'ABC',
 | |
|         'abc{$PH}': 'ABC{$PH}',
 | |
|         'abc{$PH}def': 'ABC{$PH}DEF',
 | |
|         'abc{$PH}def{$PH_1}': 'ABC{$PH}DEF{$PH_1}',
 | |
|         'Hello, {$PH}!': 'HELLO, {$PH}!',
 | |
|       }));
 | |
|     });
 | |
|     afterEach(() => {
 | |
|       clearTranslations();
 | |
|     });
 | |
| 
 | |
|     it('should render template literals with messages upper-cased', () => {
 | |
|       expect($localize`abc`).toEqual('ABC');
 | |
|       expect($localize`abc${1 + 2 + 3}`).toEqual('ABC6');
 | |
|       expect($localize`abc${1 + 2 + 3}def`).toEqual('ABC6DEF');
 | |
|       expect($localize`abc${1 + 2 + 3}def${4 + 5 + 6}`).toEqual('ABC6DEF15');
 | |
|       const getName = () => 'World';
 | |
|       expect($localize`Hello, ${getName()}!`).toEqual('HELLO, World!');
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('to reverse expressions', () => {
 | |
|     beforeEach(() => {
 | |
|       loadTranslations(computeIds({
 | |
|         'abc{$PH}def{$PH_1} - Hello, {$PH_2}!': 'abc{$PH_2}def{$PH_1} - Hello, {$PH}!',
 | |
|       }));
 | |
|     });
 | |
|     afterEach(() => {
 | |
|       clearTranslations();
 | |
|     });
 | |
| 
 | |
|     it('should render template literals with expressions reversed', () => {
 | |
|       const getName = () => 'World';
 | |
|       expect($localize`abc${1 + 2 + 3}def${4 + 5 + 6} - Hello, ${getName()}!`)
 | |
|           .toEqual('abcWorlddef15 - Hello, 6!');
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('to remove expressions', () => {
 | |
|     beforeEach(() => {
 | |
|       loadTranslations(computeIds({
 | |
|         'abc{$PH}def{$PH_1} - Hello, {$PH_2}!': 'abc{$PH} - Hello, {$PH_2}!',
 | |
|       }));
 | |
|     });
 | |
|     afterEach(() => {
 | |
|       clearTranslations();
 | |
|     });
 | |
| 
 | |
|     it('should render template literals with expressions removed', () => {
 | |
|       const getName = () => 'World';
 | |
|       expect($localize`abc${1 + 2 + 3}def${4 + 5 + 6} - Hello, ${getName()}!`)
 | |
|           .toEqual('abc6 - Hello, World!');
 | |
|     });
 | |
|   });
 | |
| });
 | |
| 
 | |
| function computeIds(translations: Record<MessageId, TargetMessage>):
 | |
|     Record<MessageId, TargetMessage> {
 | |
|   const processed: Record<MessageId, TargetMessage> = {};
 | |
|   Object.keys(translations).forEach(key => processed[computeMsgId(key, '')] = translations[key]);
 | |
|   return processed;
 | |
| }
 |