Files
Aislo/node_modules/@maplibre/maplibre-gl-style-spec/src/expression/visibility.test.ts
T
2026-07-05 14:05:22 +09:00

141 lines
5.1 KiB
TypeScript

import createVisibilityExpression from './visibility';
import {describe, test, expect, vi} from 'vitest';
describe('create visibility expression', () => {
test('throws Error for invalid function', () => {
expect(() => createVisibilityExpression(['bla'] as any, {})).toThrowError(
'Unknown expression "bla". If you wanted a literal array, use ["literal", [...]].'
);
});
});
describe('evaluate visibility expression', () => {
test('literal value none', () => {
vi.spyOn(console, 'warn').mockImplementation(() => {});
const value = createVisibilityExpression('none', {});
expect(value.evaluate()).toBe('none');
expect(value.getGlobalStateRefs().size).toBe(0);
expect(console.warn).not.toHaveBeenCalled();
});
test('literal value visible', () => {
vi.spyOn(console, 'warn').mockImplementation(() => {});
const value = createVisibilityExpression('visible', {});
expect(value.evaluate()).toBe('visible');
expect(value.getGlobalStateRefs().size).toBe(0);
expect(console.warn).not.toHaveBeenCalled();
});
test('global state property set to none', () => {
const globalState: Record<string, any> = {};
const value = createVisibilityExpression(['global-state', 'x'], globalState);
vi.spyOn(console, 'warn').mockImplementation(() => {});
globalState.x = 'none';
expect(value.evaluate()).toBe('none');
expect(value.getGlobalStateRefs().has('x')).toBe(true);
expect(console.warn).not.toHaveBeenCalled();
});
test('global state property set to visible', () => {
const globalState: Record<string, any> = {};
const value = createVisibilityExpression(['global-state', 'x'], globalState);
vi.spyOn(console, 'warn').mockImplementation(() => {});
globalState.x = 'visible';
expect(value.evaluate()).toBe('visible');
expect(value.getGlobalStateRefs().has('x')).toBe(true);
expect(console.warn).not.toHaveBeenCalled();
});
test('global state flag set to false', () => {
const globalState: Record<string, any> = {};
const value = createVisibilityExpression(
['case', ['global-state', 'x'], 'visible', 'none'],
globalState
);
vi.spyOn(console, 'warn').mockImplementation(() => {});
globalState.x = false;
expect(value.evaluate()).toBe('none');
expect(value.getGlobalStateRefs().has('x')).toBe(true);
expect(console.warn).not.toHaveBeenCalled();
});
test('global state flag set to true', () => {
const globalState: Record<string, any> = {};
const value = createVisibilityExpression(
['case', ['global-state', 'x'], 'visible', 'none'],
globalState
);
vi.spyOn(console, 'warn').mockImplementation(() => {});
globalState.x = true;
expect(value.evaluate()).toBe('visible');
expect(value.getGlobalStateRefs().has('x')).toBe(true);
expect(console.warn).not.toHaveBeenCalled();
});
test('falls back to default for invalid expression with zoom', () => {
const value = createVisibilityExpression(
['case', ['==', ['zoom'], 5], 'none', 'visible'],
{}
);
vi.spyOn(console, 'warn').mockImplementation(() => {});
expect(value.evaluate()).toBe('visible');
expect(console.warn).not.toHaveBeenCalled();
});
test('warns and falls back to default for invalid expression with feature', () => {
const value = createVisibilityExpression(['get', 'x'], {});
vi.spyOn(console, 'warn').mockImplementation(() => {});
expect(value.evaluate()).toBe('visible');
expect(console.warn).toHaveBeenCalledWith(
'Expected value to be of type string, but found null instead.'
);
});
test('warns and falls back to default for invalid expression with feature state', () => {
const value = createVisibilityExpression(['feature-state', 'x'], {});
vi.spyOn(console, 'warn').mockImplementation(() => {});
expect(value.evaluate()).toBe('visible');
expect(console.warn).toHaveBeenCalledWith(
'Expected value to be of type string, but found null instead.'
);
});
test('warns and falls back to default for missing global property', () => {
const value = createVisibilityExpression(['global-state', 'x'], {});
vi.spyOn(console, 'warn').mockImplementation(() => {});
expect(value.evaluate()).toBe('visible');
expect(console.warn).toHaveBeenCalledWith(
'Expected value to be of type string, but found null instead.'
);
});
test('warns and falls back to default for invalid global property', () => {
const value = createVisibilityExpression(['global-state', 'x'], {x: 'invalid'});
vi.spyOn(console, 'warn').mockImplementation(() => {});
expect(value.evaluate()).toBe('visible');
expect(console.warn).toHaveBeenCalledWith(
'Expected value to be one of "visible", "none", but found "invalid" instead.'
);
});
});