@maplibre/maplibre-gl-style-spec
Version:
a specification for maplibre styles
112 lines (97 loc) • 4.67 kB
text/typescript
import {validateSprite} from './validate_sprite';
import {validate} from './validate';
import {describe, test, expect} from 'vitest';
describe('Validate Sprite', () => {
test('Should return error if type is not string or array', () => {
let errors = validateSprite({validateSpec: validate, key: 'sprite', value: 3});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('sprite: string expected, number found');
errors = validateSprite({validateSpec: validate, key: 'sprite', value: true});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('sprite: string expected, boolean found');
errors = validateSprite({validateSpec: validate, key: 'sprite', value: null});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('sprite: string expected, null found');
errors = validateSprite({validateSpec: validate, key: 'sprite', value: {x: 1, y: 1}});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('sprite: string expected, object found');
});
test('Should pass if type is string', () => {
const errors = validateSprite({validateSpec: validate, key: 'sprite', value: 'url'});
expect(errors).toHaveLength(0);
});
test('Should return error if array contains non-object values', () => {
let errors = validateSprite({validateSpec: validate, key: 'sprite', value: ['1']});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('sprite[0]: object expected, string found');
errors = validateSprite({validateSpec: validate, key: 'sprite', value: [true]});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('sprite[0]: object expected, boolean found');
errors = validateSprite({validateSpec: validate, key: 'sprite', value: [3]});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('sprite[0]: object expected, number found');
errors = validateSprite({
validateSpec: validate,
key: 'sprite',
value: [{id: 'id1', url: 'url1'}, {id: 'id2', url: 'url2'}, false]
});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('sprite[2]: object expected, boolean found');
errors = validateSprite({
validateSpec: validate,
key: 'sprite',
value: ['string', {id: 'id1', url: 'url1'}, {id: 'id2', url: 'url2'}, false]
});
expect(errors).toHaveLength(2);
expect(errors[0].message).toBe('sprite[0]: object expected, string found');
expect(errors[1].message).toBe('sprite[3]: object expected, boolean found');
});
test("Should return error if array's objects are not of form {id: string, url: string}", () => {
let errors = validateSprite({
validateSpec: validate,
key: 'sprite',
value: [{id: 2, url: 2}]
});
expect(errors).toHaveLength(2);
expect(errors[0].message).toBe('sprite[0].id: string expected, number found');
expect(errors[1].message).toBe('sprite[0].url: string expected, number found');
errors = validateSprite({
validateSpec: validate,
key: 'sprite',
value: [{test: 'string'}]
});
expect(errors).toHaveLength(3);
expect(errors[0].message).toBe('sprite[0]: unknown property "test"');
expect(errors[1].message).toBe('sprite[0]: missing required property "id"');
expect(errors[2].message).toBe('sprite[0]: missing required property "url"');
});
test("Should return error if array's objects contain duplicated IDs or URLs", () => {
const errors = validateSprite({
validateSpec: validate,
key: 'sprite',
value: [
{id: 'id1', url: 'url1'},
{id: 'id1', url: 'url1'}
]
});
expect(errors).toHaveLength(2);
expect(errors[0].message).toBe(
"sprite: all the sprites' ids must be unique, but id1 is duplicated"
);
expect(errors[1].message).toBe(
"sprite: all the sprites' URLs must be unique, but url1 is duplicated"
);
});
test('Should pass if correct array of objects', () => {
const errors = validateSprite({
validateSpec: validate,
key: 'sprite',
value: [
{id: 'id1', url: 'url1'},
{id: 'id2', url: 'url2'},
{id: 'id3', url: 'url3'}
]
});
expect(errors).toHaveLength(0);
});
});