@maplibre/maplibre-gl-style-spec
Version:
a specification for maplibre styles
109 lines (96 loc) • 4.34 kB
text/typescript
import {validate} from './validate';
import {validateNumberArray} from './validate_number_array';
import {describe, test, expect} from 'vitest';
describe('Validate NumberArray', () => {
test('Should return error if type is not number or array', () => {
let errors = validateNumberArray({
validateSpec: validate,
key: 'numberArray',
value: '3'
});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('numberArray: number expected, string found');
errors = validateNumberArray({validateSpec: validate, key: 'numberArray', value: true});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('numberArray: number expected, boolean found');
errors = validateNumberArray({validateSpec: validate, key: 'numberArray', value: null});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('numberArray: number expected, null found');
errors = validateNumberArray({
validateSpec: validate,
key: 'numberArray',
value: {x: 1, y: 1}
});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('numberArray: number expected, object found');
errors = validateNumberArray({validateSpec: validate, key: 'numberArray', value: NaN});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('numberArray: number expected, NaN found');
});
test('Should pass if type is number', () => {
const errors = validateNumberArray({
validateSpec: validate,
key: 'numberArray',
value: 1
});
expect(errors).toHaveLength(0);
});
test('Should return error if array contains non-numeric values', () => {
let errors = validateNumberArray({
validateSpec: validate,
key: 'numberArray',
value: ['1']
});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('numberArray[0]: number expected, string found');
errors = validateNumberArray({validateSpec: validate, key: 'numberArray', value: [true]});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('numberArray[0]: number expected, boolean found');
errors = validateNumberArray({validateSpec: validate, key: 'numberArray', value: [NaN]});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('numberArray[0]: number expected, NaN found');
errors = validateNumberArray({
validateSpec: validate,
key: 'numberArray',
value: [{x: 1}]
});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('numberArray[0]: number expected, object found');
errors = validateNumberArray({
validateSpec: validate,
key: 'numberArray',
value: [1, 3, false]
});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe('numberArray[2]: number expected, boolean found');
errors = validateNumberArray({
validateSpec: validate,
key: 'numberArray',
value: ['1', 3, false]
});
expect(errors).toHaveLength(2);
expect(errors[0].message).toBe('numberArray[0]: number expected, string found');
expect(errors[1].message).toBe('numberArray[2]: number expected, boolean found');
});
test('Should pass if type is numeric array', () => {
let errors = validateNumberArray({validateSpec: validate, key: 'numberArray', value: []});
expect(errors).toHaveLength(1);
expect(errors[0].message).toBe(
'numberArray: array length at least 1 expected, length 0 found'
);
errors = validateNumberArray({validateSpec: validate, key: 'numberArray', value: [1]});
expect(errors).toHaveLength(0);
errors = validateNumberArray({
validateSpec: validate,
key: 'numberArray',
value: [1, 1, 1]
});
expect(errors).toHaveLength(0);
errors = validateNumberArray({
validateSpec: validate,
key: 'numberArray',
value: [1, 1, 1, 1, 1, 1, 1, 1]
});
expect(errors).toHaveLength(0);
});
});