@maplibre/maplibre-gl-style-spec
Version:
a specification for maplibre styles
102 lines (85 loc) • 3.98 kB
text/typescript
import {validate} from './validate';
import {validateColorArray} from './validate_color_array';
import {describe, test, expect} from 'vitest';
describe('Validate ColorArray', () => {
test('Should return error if type is not color or array', () => {
let errors = validateColorArray({validateSpec: validate, key: 'colorArray', value: 3});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('colorArray: color expected, number found');
errors = validateColorArray({validateSpec: validate, key: 'colorArray', value: true});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('colorArray: color expected, boolean found');
errors = validateColorArray({validateSpec: validate, key: 'colorArray', value: null});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('colorArray: color expected, null found');
errors = validateColorArray({
validateSpec: validate,
key: 'colorArray',
value: {x: 1, y: 1}
});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('colorArray: color expected, object found');
errors = validateColorArray({validateSpec: validate, key: 'colorArray', value: NaN});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('colorArray: color expected, number found');
});
test('Should return error if it contains a value that does not parse to color', () => {
let errors = validateColorArray({validateSpec: validate, key: 'colorArray', value: '3'});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('colorArray: color expected, "3" found');
errors = validateColorArray({
validateSpec: validate,
key: 'colorArray',
value: ['3', 'words']
});
expect(errors).toHaveLength(2);
expect(errors[0].message).toBe('colorArray[0]: color expected, "3" found');
expect(errors[1].message).toBe('colorArray[1]: color expected, "words" found');
errors = validateColorArray({
validateSpec: validate,
key: 'colorArray',
value: ['#012', 'words']
});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('colorArray[1]: color expected, "words" found');
});
test('Should pass if type is color', () => {
let errors = validateColorArray({
validateSpec: validate,
key: 'colorArray',
value: '#987654'
});
expect(errors).toHaveLength(0);
errors = validateColorArray({validateSpec: validate, key: 'colorArray', value: 'red'});
expect(errors).toHaveLength(0);
errors = validateColorArray({
validateSpec: validate,
key: 'colorArray',
value: '#987654ff'
});
expect(errors).toHaveLength(0);
errors = validateColorArray({validateSpec: validate, key: 'colorArray', value: '#987'});
expect(errors).toHaveLength(0);
});
test('Should pass if type is array of colors', () => {
let errors = validateColorArray({validateSpec: validate, key: 'colorArray', value: []});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe(
'colorArray: array length at least 1 expected, length 0 found'
);
errors = validateColorArray({validateSpec: validate, key: 'colorArray', value: ['red']});
expect(errors).toHaveLength(0);
errors = validateColorArray({
validateSpec: validate,
key: 'colorArray',
value: ['red', 'blue']
});
expect(errors).toHaveLength(0);
errors = validateColorArray({
validateSpec: validate,
key: 'colorArray',
value: ['red', 'blue', '#012', '#12345678', '#012345']
});
expect(errors).toHaveLength(0);
});
});