maplibre-gl
Version:
BSD licensed community fork of mapbox-gl, a WebGL interactive maps library
47 lines (40 loc) • 2.11 kB
text/typescript
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<FillExtrusionStyleLayer>);
}
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'}
});
});
});