@elastic/ems-client
Version:
JavaScript client library for the Elastic Maps Service
123 lines (101 loc) • 3.47 kB
text/typescript
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { LayerSpecification } from 'maplibre-gl';
import { TMSService } from '../src';
import { mlLayerTypes } from './ems_client_util';
describe('Support for languages', () => {
it('should return undefined for non symbol layers', () => {
mlLayerTypes
.filter((l) => l !== 'symbol')
.forEach((type) => {
const layer = {
id: 'aLayer',
type,
} as LayerSpecification;
expect(TMSService.transformLanguageProperty(layer, 'en')).toBeUndefined();
});
});
it('should return undefined for non layers without a layout', () => {
const layer = {
id: 'aLayer',
type: 'symbol',
} as LayerSpecification;
expect(TMSService.transformLanguageProperty(layer, 'en')).toBeUndefined();
});
it('should return nothing for inexistent languages', () => {
const enDashLayer = {
id: 'sampLayer',
type: 'symbol',
layout: {
'text-field': '{name_en}',
},
} as LayerSpecification;
const invalidLang = 'I_DONT_EXIST';
expect(TMSService.transformLanguageProperty(enDashLayer, invalidLang)).toBeUndefined();
});
it('should handle {name_XX} and {name:XX} definitions', () => {
const enDashLayer = {
id: 'sampLayer',
type: 'symbol',
layout: {
'text-field': '{name_en}',
},
} as LayerSpecification;
const transformLangEn = TMSService.transformLanguageProperty(enDashLayer, 'en');
expect(transformLangEn).toEqual(['coalesce', ['get', 'name:en'], ['get', 'name_en']]);
const enColonLayer = {
id: 'sampLayer',
type: 'symbol',
layout: {
'text-field': '{name:en}',
},
} as LayerSpecification;
const transformLangJa = TMSService.transformLanguageProperty(enColonLayer, 'ja-jp');
expect(transformLangJa).toEqual(['coalesce', ['get', 'name:ja'], ['get', 'name:en']]);
});
it('should handle {name:latin}\\n{name:nonlatin} definitions', () => {
const layer = {
id: 'sampLayer',
type: 'symbol',
layout: {
'text-field': '{name:latin}\n{name:nonlatin}',
},
} as LayerSpecification;
const transform = TMSService.transformLanguageProperty(layer, 'ja-jp');
expect(transform).toEqual([
'coalesce',
['get', 'name:ja'],
['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']],
]);
});
it('should handle {name:latin} {name:nonlatin} definitions', () => {
const layer = {
id: 'sampLayer',
type: 'symbol',
layout: {
'text-field': '{name:latin} {name:nonlatin}',
},
} as LayerSpecification;
const transform = TMSService.transformLanguageProperty(layer, 'ja-jp');
expect(transform).toEqual([
'coalesce',
['get', 'name:ja'],
['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']],
]);
});
it('should handle text field properties that are not translated', () => {
const layer = {
id: 'sampLayer',
type: 'symbol',
layout: {
'text-field': '{ref}',
},
} as LayerSpecification;
const transform = TMSService.transformLanguageProperty(layer, 'ja-jp');
expect(transform).toBe('{ref}');
});
});