mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-30 18:46:00 +00:00
649735726f
On a GL map (Mapbox Standard) the basemap labels fell back to the browser/OS locale, so place and country names showed stacked in several scripts (e.g. 'India / भारत / India') regardless of the chosen language. Pin Mapbox Standard's basemap label language to the user's UI language via the basemap 'language' config property, mapping the few TREK codes that differ (br->pt, gr->el, zh/zhTw->zh-Hans/zh-Hant). Applies to both the trip map and the journey map; classic and MapLibre styles are left unchanged.
73 lines
3.2 KiB
TypeScript
73 lines
3.2 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
MAPBOX_DEFAULT_STYLE,
|
|
OPENFREEMAP_DEFAULT_STYLE,
|
|
isOpenFreeMapStyle,
|
|
normalizeStyleForProvider,
|
|
styleForActiveProvider,
|
|
basemapLanguage,
|
|
} from './glProviders'
|
|
|
|
describe('glProviders', () => {
|
|
it('keeps OpenFreeMap styles for MapLibre', () => {
|
|
const style = 'https://tiles.openfreemap.org/styles/bright'
|
|
|
|
expect(normalizeStyleForProvider('maplibre-gl', style)).toBe(style)
|
|
})
|
|
|
|
it('falls back to OpenFreeMap for MapLibre styles outside the CSP allowlist', () => {
|
|
expect(normalizeStyleForProvider('maplibre-gl', 'https://demotiles.maplibre.org/style.json')).toBe(
|
|
OPENFREEMAP_DEFAULT_STYLE,
|
|
)
|
|
expect(normalizeStyleForProvider('maplibre-gl', MAPBOX_DEFAULT_STYLE)).toBe(OPENFREEMAP_DEFAULT_STYLE)
|
|
})
|
|
|
|
it('leaves Mapbox styles unchanged for Mapbox GL', () => {
|
|
expect(normalizeStyleForProvider('mapbox-gl', MAPBOX_DEFAULT_STYLE)).toBe(MAPBOX_DEFAULT_STYLE)
|
|
})
|
|
|
|
it('matches the OpenFreeMap CSP host', () => {
|
|
expect(isOpenFreeMapStyle('https://tiles.openfreemap.org/styles/liberty')).toBe(true)
|
|
expect(isOpenFreeMapStyle('https://demotiles.maplibre.org/style.json')).toBe(false)
|
|
})
|
|
|
|
it('rejects host/userinfo spoofing and http downgrade', () => {
|
|
expect(isOpenFreeMapStyle('https://tiles.openfreemap.org.evil.com/styles/x')).toBe(false)
|
|
expect(isOpenFreeMapStyle('https://evil.com/@tiles.openfreemap.org/styles/x')).toBe(false)
|
|
expect(isOpenFreeMapStyle('http://tiles.openfreemap.org/styles/liberty')).toBe(false)
|
|
expect(isOpenFreeMapStyle(' https://tiles.openfreemap.org/styles/liberty ')).toBe(true)
|
|
})
|
|
|
|
it('falls back to provider defaults for empty/whitespace styles', () => {
|
|
expect(normalizeStyleForProvider('maplibre-gl', '')).toBe(OPENFREEMAP_DEFAULT_STYLE)
|
|
expect(normalizeStyleForProvider('maplibre-gl', ' ')).toBe(OPENFREEMAP_DEFAULT_STYLE)
|
|
expect(normalizeStyleForProvider('mapbox-gl', '')).toBe(MAPBOX_DEFAULT_STYLE)
|
|
expect(normalizeStyleForProvider('mapbox-gl', null)).toBe(MAPBOX_DEFAULT_STYLE)
|
|
})
|
|
|
|
it('styleForActiveProvider reads each provider\'s own style slot', () => {
|
|
const mb = 'mapbox://styles/me/custom'
|
|
const ofm = 'https://tiles.openfreemap.org/styles/bright'
|
|
expect(styleForActiveProvider('mapbox-gl', mb, ofm)).toBe(mb)
|
|
expect(styleForActiveProvider('maplibre-gl', mb, ofm)).toBe(ofm)
|
|
// An empty MapLibre slot falls back to the OpenFreeMap default, leaving mapbox untouched.
|
|
expect(styleForActiveProvider('maplibre-gl', mb, '')).toBe(OPENFREEMAP_DEFAULT_STYLE)
|
|
})
|
|
|
|
it('basemapLanguage maps TREK UI codes to basemap label codes (#1299)', () => {
|
|
// Pass-through for plain ISO 639-1 codes.
|
|
expect(basemapLanguage('en')).toBe('en')
|
|
expect(basemapLanguage('de')).toBe('de')
|
|
expect(basemapLanguage('fr')).toBe('fr')
|
|
// TREK-specific overrides.
|
|
expect(basemapLanguage('br')).toBe('pt')
|
|
expect(basemapLanguage('gr')).toBe('el')
|
|
expect(basemapLanguage('zh')).toBe('zh-Hans')
|
|
expect(basemapLanguage('zhTw')).toBe('zh-Hant')
|
|
expect(basemapLanguage('zh-TW')).toBe('zh-Hant')
|
|
// Falls back to English when unset.
|
|
expect(basemapLanguage(undefined)).toBe('en')
|
|
expect(basemapLanguage('')).toBe('en')
|
|
})
|
|
})
|