UNPKG

ngx-translate-testing

Version:

A library of utilities for testing with the ngx-translate i18n Angular library

1 lines 13.8 kB
{"version":3,"file":"ngx-translate-testing.mjs","sources":["../../../projects/testing/src/lib/test-translate-loader.service.ts","../../../projects/testing/src/lib/testing.module.ts","../../../projects/testing/src/public_api.ts","../../../projects/testing/src/ngx-translate-testing.ts"],"sourcesContent":["import { TranslateLoader } from '@ngx-translate/core';\r\n\r\nimport { Observable, of as observableOf } from 'rxjs';\r\n\r\nimport { Translations, LanguageTranslations } from './translations.model';\r\n\r\n/**\r\n * The TestTranslateLoader class provides a simple loader that loads translations\r\n * from a {Translations} object, which maps language codes to translations.\r\n *\r\n * @example\r\n * const loader = new TestTranslateLoader({\r\n * en: {\r\n * greeting: 'Hello'\r\n * },\r\n * es: {\r\n * greeting: 'Hola'\r\n * }\r\n * } as Translations);\r\n */\r\nexport class TestTranslateLoader extends TranslateLoader {\r\n constructor(private _translations: Translations = {}) {\r\n super();\r\n }\r\n\r\n /**\r\n * Returns an {Observable} of translations for the specified language. If the\r\n * language is not recognized, an empty translations object will be returned.\r\n *\r\n * @param language the language for which the translations should be retrieved.\r\n * @returns the translations for the specified\r\n * language or an empty set of translations if the language is not recognized.\r\n */\r\n public getTranslation(language: string): Observable<LanguageTranslations> {\r\n return observableOf(this._translations[language] || {});\r\n }\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\n\r\nimport {\r\n FakeMissingTranslationHandler,\r\n TranslateDefaultParser,\r\n TranslateFakeCompiler,\r\n TranslateModule,\r\n TranslateService,\r\n TranslateCompiler\r\n} from '@ngx-translate/core';\r\n\r\nimport { TestTranslateLoader } from './test-translate-loader.service';\r\nimport { LanguageTranslations, Translations } from './translations.model';\r\n\r\n/**\r\n * The TranslateTestingModule provides the {TranslateModule} as well as a\r\n * {TranslateService} configured to return translations specific for the\r\n * test environment.\r\n *\r\n * @export\r\n */\r\n@NgModule({\r\n imports: [TranslateModule],\r\n exports: [TranslateModule]\r\n})\r\nexport class TranslateTestingModule implements ModuleWithProviders<TranslateTestingModule> {\r\n private _translations: Translations = {};\r\n\r\n private _defaultLanguage: string;\r\n\r\n private _compiler: TranslateCompiler;\r\n\r\n private _parser: TranslateDefaultParser;\r\n\r\n /**\r\n * Creates a new instance of the {TranslateTestingModule} with translations for the specified language.\r\n *\r\n * @example\r\n *\r\n * const ENGLISH_TRANSLATIONS = { greeting: 'Hello' };\r\n * const translateModule = TranslateTestingModule.withTranslations('en', ENGLISH_TRANSLATIONS);\r\n *\r\n * @example\r\n *\r\n * TranslateTestingModule.withTranslations('en', require('../../assets/i18n/en.json'));\r\n *\r\n * @static\r\n * @param {string} language the language for the translations.\r\n * @param {Translations} translations the translations to be used in the tests.\r\n * @returns the new instance that can be used to chain additional configuration.\r\n * @memberof TranslateTestingModule\r\n */\r\n public static withTranslations(\r\n language: string,\r\n translations: LanguageTranslations\r\n ): TranslateTestingModule;\r\n\r\n /**\r\n * Creates a new instance of the {TranslateTestingModule} with the provided translations.\r\n *\r\n * @example\r\n *\r\n * const TRANSLATIONS = { en: { greeting: 'Hello' }, es: { greeting: 'Hola' } };\r\n * const translateModule = TranslateTestingModule.withTranslations(TRANSLATIONS);\r\n *\r\n * @example\r\n *\r\n * TranslateTestingModule.withTranslations(require('./test.i18n.json'));\r\n *\r\n * @static\r\n * @param {Translations} the language translations the translations to be used in the tests.\r\n * @returns the new instance that can be used to chain additional configuration.\r\n * @memberof TranslateTestingModule\r\n */\r\n public static withTranslations(translations: Translations): TranslateTestingModule;\r\n\r\n public static withTranslations(\r\n languageOrTranslations: string | Translations,\r\n translations?: LanguageTranslations\r\n ): TranslateTestingModule {\r\n const translateTestingModule = new TranslateTestingModule();\r\n\r\n if (typeof languageOrTranslations === 'string') {\r\n return translateTestingModule.withTranslations(<string>languageOrTranslations, translations);\r\n }\r\n\r\n return translateTestingModule.withTranslations(languageOrTranslations);\r\n }\r\n\r\n public get ngModule() {\r\n return TranslateTestingModule;\r\n }\r\n\r\n public get providers() {\r\n const translateService = new TranslateService(\r\n null,\r\n new TestTranslateLoader(this._translations),\r\n this._compiler || new TranslateFakeCompiler(),\r\n this._parser || new TranslateDefaultParser(),\r\n new FakeMissingTranslationHandler(),\r\n true,\r\n true,\r\n false,\r\n this._defaultLanguage\r\n );\r\n\r\n return [\r\n {\r\n provide: TranslateService,\r\n useValue: translateService\r\n }\r\n ];\r\n }\r\n\r\n /**\r\n * Updates the {TranslateTestingModule} instance with additional translations. The\r\n * translations will be shallowly merged with any existing translations.\r\n *\r\n * @example\r\n *\r\n * const ENGLISH_TRANSLATIONS = { en: { greeting: 'Hello' } };\r\n * const SPANISH_TRANSLATIONS = { en: { greeting: 'Hola' } };\r\n * const translateModule = TranslateTestingModule.withTranslations(ENGLISH_TRANSLATIONS)\r\n * .withTranslations(SPANISH_TRANSLATIONS);\r\n *\r\n * @param {Translations} translations the additional translations to add to the testing service.\r\n * @returns the instance that can be used to chain additional configuration.\r\n * @memberof TranslateTestingModule\r\n */\r\n public withTranslations(translations: Translations): TranslateTestingModule;\r\n\r\n /**\r\n * Updates the {TranslateTestingModule} instance with additional translations for a\r\n * specified language. The translations will be shallowly merged with any existing translations.\r\n *\r\n * @example\r\n *\r\n * const ENGLISH_TRANSLATIONS = { greeting: 'Hello' };\r\n * const SPANISH_TRANSLATIONS = { greeting: 'Hola' };\r\n * const translateModule = TranslateTestingModule.withTranslations('en', ENGLISH_TRANSLATIONS)\r\n * .withTranslations('es', SPANISH_TRANSLATIONS);\r\n *\r\n * @example\r\n *\r\n * TranslateTestingModule.withTranslations('en', require('../../assets/i18n/en.json'))\r\n * .withTranslations('es', require('../../assets/i18n/es.json'));\r\n *\r\n * @param {string} language the language for which the new translations are being added.\r\n * @param {LanguageTranslations} translations the translations for the specified language.\r\n * @returns the instance that can be used to chain additional configuration.\r\n * @memberof TranslateTestingModule\r\n */\r\n public withTranslations(\r\n language: string,\r\n translations: LanguageTranslations\r\n ): TranslateTestingModule;\r\n\r\n public withTranslations(\r\n languageOrTranslations: string | Translations,\r\n translations?: LanguageTranslations\r\n ): TranslateTestingModule {\r\n if (typeof languageOrTranslations === 'string' && translations) {\r\n this.addTranslations(languageOrTranslations, translations);\r\n this._defaultLanguage = languageOrTranslations;\r\n } else if (languageOrTranslations) {\r\n Object.keys(languageOrTranslations).forEach(language =>\r\n this.addTranslations(language, languageOrTranslations[language])\r\n );\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Updates the {TranslationTestingModule} to provide a {TranslateService} that will\r\n * use the provided {TranslateCompiler} to translate the test translations.\r\n *\r\n * @example\r\n *\r\n * TranslateTestingModule.withTranslations('en', {people: '{gender, select, male{He is} female{She is} other{They are}} {how})'})\r\n * .withCompiler(new TranslateMessageFormatCompiler());\r\n *\r\n * @param compiler the compiler to use to compile the test translations.\r\n * @returns the instance that can be used to chain additional configuration.\r\n * @memberof TranslateTestingModule\r\n */\r\n public withCompiler(compiler: TranslateCompiler): TranslateTestingModule {\r\n this._compiler = compiler;\r\n return this;\r\n }\r\n\r\n /**\r\n * Updates the {TranslateTestingModule} to provide a {TranslateService} that will\r\n * use the provided {TranslateParser} to parse the test translations.\r\n *\r\n * @example\r\n *\r\n * TranslateTestingModule.withTranslations('en', {key: 'content'})\r\n * .withParser(new CustomTranslateDefaultParser());\r\n *\r\n * @param parser the parser to use to parse the test translations.\r\n * @returns the instance that can be used to chain additional configuration.\r\n * @memberof TranslateTestingModule\r\n */\r\n public withParser(parser: TranslateDefaultParser): TranslateTestingModule {\r\n this._parser = parser;\r\n return this;\r\n }\r\n\r\n /**\r\n * Updates the {TranslateTestingModule} to use the provided language as the default language.\r\n * By default, the default language will be set to the first language provided.\r\n *\r\n * @example\r\n *\r\n * TranslateTestingModule.withTranslations('es', SPANISH_TRANSLATIONS)\r\n * .withTranslations('en', ENGLISH_TRANSLATIONS)\r\n * .withDefaultLanguage('en');\r\n *\r\n * @param language the new default language for translations.\r\n * @returns the instance that can be used to chain additional configuration.\r\n * @memberof TranslateTestingModule\r\n */\r\n public withDefaultLanguage(language: string): TranslateTestingModule {\r\n this._defaultLanguage = language || this._defaultLanguage;\r\n return this;\r\n }\r\n\r\n private addTranslations(language: string, translations: LanguageTranslations) {\r\n if (!this._defaultLanguage) {\r\n this._defaultLanguage = language;\r\n }\r\n\r\n if (this._translations[language]) {\r\n this._translations[language] = {\r\n ...this._translations[language],\r\n ...translations\r\n };\r\n } else {\r\n this._translations[language] = translations;\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of testing\r\n */\r\n\r\nexport * from './lib/translations.model';\r\nexport * from './lib/test-translate-loader.service';\r\nexport * from './lib/testing.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["observableOf"],"mappings":"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"}