import {beforeAll, describe, test, expect} from 'vitest'; import {FillExtrusionBucket} from './fill_extrusion_bucket'; import {FillExtrusionStyleLayer} from '../../style/style_layer/fill_extrusion_style_layer'; import {type LayerSpecification} from '@maplibre/maplibre-gl-style-spec'; import {type EvaluationParameters} from '../../style/evaluation_parameters'; import {type ZoomHistory} from '../../style/zoom_history'; import {type BucketParameters} from '../bucket'; import {type CreateBucketParameters, createPopulateOptions, getFeaturesFromLayer, loadVectorTile} from '../../../test/unit/lib/tile'; import {type VectorTileLayerLike} from '@maplibre/vt-pbf'; function createFillExtrusionBucket({id, layout, paint, globalState, availableImages}: CreateBucketParameters): FillExtrusionBucket { const layer = new FillExtrusionStyleLayer({ id, type: 'fill-extrusion', layout, paint } as LayerSpecification, globalState); layer.recalculate({zoom: 0, zoomHistory: {} as ZoomHistory} as EvaluationParameters, availableImages); return new FillExtrusionBucket({layers: [layer]} as BucketParameters); } describe('FillExtrusionBucket', () => { let sourceLayer: VectorTileLayerLike; beforeAll(() => { // Load fill extrusion features from fixture tile. sourceLayer = loadVectorTile().layers.water; }); test('FillExtrusionBucket fill-pattern with global-state', () => { const availableImages = []; const bucket = createFillExtrusionBucket({id: 'test', paint: {'fill-extrusion-pattern': ['coalesce', ['get', 'pattern'], ['global-state', 'pattern']]}, globalState: {pattern: 'test-pattern'}, availableImages }); bucket.populate(getFeaturesFromLayer(sourceLayer), createPopulateOptions(availableImages), undefined); expect(bucket.features.length).toBeGreaterThan(0); expect(bucket.features[0].patterns).toEqual({ test: {min: 'test-pattern', mid: 'test-pattern', max: 'test-pattern'} }); }); });