@maplibre/maplibre-gl-style-spec
Version:
a specification for maplibre styles
76 lines (70 loc) • 2.64 kB
text/typescript
import {validateSky} from './validate_sky';
import {validate} from './validate';
import v8 from '../reference/v8.json' with {type: 'json'};
import {SkySpecification} from '../types.g';
import {describe, test, expect, it} from 'vitest';
describe('Validate sky', () => {
it('Should pass when value is undefined', () => {
const errors = validateSky({
validateSpec: validate,
value: undefined,
styleSpec: v8,
style: {} as any
});
expect(errors).toHaveLength(0);
});
test('Should return error when value is not an object', () => {
const errors = validateSky({
validateSpec: validate,
value: '' as unknown as SkySpecification,
styleSpec: v8,
style: {} as any
});
expect(errors).toHaveLength(1);
expect(errors[0].message).toContain('object');
expect(errors[0].message).toContain('expected');
});
test('Should return error in case of unknown property', () => {
const errors = validateSky({
validateSpec: validate,
value: {a: 1} as any,
styleSpec: v8,
style: {} as any
});
expect(errors).toHaveLength(1);
expect(errors[0].message).toContain('a');
expect(errors[0].message).toContain('unknown');
});
test('Should return errors according to spec violations', () => {
const errors = validateSky({
validateSpec: validate,
value: {
'sky-color': 1 as any,
'fog-color': 2 as any,
'horizon-fog-blend': {} as any,
'fog-ground-blend': 'foo' as any
},
styleSpec: v8,
style: {} as any
});
expect(errors).toHaveLength(4);
expect(errors[0].message).toBe('sky-color: color expected, number found');
expect(errors[1].message).toBe('fog-color: color expected, number found');
expect(errors[2].message).toBe('horizon-fog-blend: missing required property "stops"');
expect(errors[3].message).toBe('fog-ground-blend: number expected, string found');
});
test('Should pass if everything is according to spec', () => {
const errors = validateSky({
validateSpec: validate,
value: {
'sky-color': 'red',
'fog-color': '#123456',
'horizon-fog-blend': 1,
'fog-ground-blend': 0
},
styleSpec: v8,
style: {} as any
});
expect(errors).toHaveLength(0);
});
});