From 802f6aea4e27e64b31604be3f4755d48f7b1d405 Mon Sep 17 00:00:00 2001 From: Brandon Liu Date: Sun, 12 Mar 2023 13:30:57 +0800 Subject: [PATCH] run prettier on js/test; add prettier check to CI --- .github/workflows/actions.yml | 1 + js/package.json | 3 +- js/test/index.test.ts | 4 +- js/test/v2.test.ts | 226 ++++++------- js/test/v3.test.ts | 580 +++++++++++++++++----------------- 5 files changed, 414 insertions(+), 400 deletions(-) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index b3547ed..29b4029 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -44,6 +44,7 @@ jobs: node-version: 18.x - run: python .github/check_examples.py - run: cd js && npm install && npm test + - run: cd js && npm prettier-check - run: cd python && python -m unittest test/test_* - run: cd cpp && make - run: cd serverless/cloudflare && npm install && npm test diff --git a/js/package.json b/js/package.json index afe9e46..f0c4367 100644 --- a/js/package.json +++ b/js/package.json @@ -18,7 +18,8 @@ "build": "npm run build-iife && npm run build-esm && npm run build-cjs && npm run build-tsc", "test": "node -r esbuild-runner/register test/index.test.ts", "tsc": "tsc --noEmit --watch", - "prettier": "prettier --write *.ts" + "prettier": "prettier --write *.ts test/*.ts", + "prettier-check": "prettier --check *.ts test/*.ts" }, "homepage": "https://github.com/protomaps/pmtiles", "author": "Brandon Liu", diff --git a/js/test/index.test.ts b/js/test/index.test.ts index e537865..5feac38 100644 --- a/js/test/index.test.ts +++ b/js/test/index.test.ts @@ -1,2 +1,2 @@ -import './v2.test'; -import './v3.test'; \ No newline at end of file +import "./v2.test"; +import "./v3.test"; diff --git a/js/test/v2.test.ts b/js/test/v2.test.ts index a4ba97b..111ca74 100644 --- a/js/test/v2.test.ts +++ b/js/test/v2.test.ts @@ -14,137 +14,149 @@ import { } from "../v2"; test("stub data", () => { - let dataview = new DataView(createDirectory([ - { z: 5, x: 1000, y: 2000, offset: 1000, length: 2000, is_dir: false }, - { - z: 14, - x: 16383, - y: 16383, - offset: 999999, - length: 999, - is_dir: false, - }, - ])); + let dataview = new DataView( + createDirectory([ + { z: 5, x: 1000, y: 2000, offset: 1000, length: 2000, is_dir: false }, + { + z: 14, + x: 16383, + y: 16383, + offset: 999999, + length: 999, + is_dir: false, + }, + ]) + ); var z_raw = dataview.getUint8(17 + 0); var x = getUint24(dataview, 17 + 1); var y = getUint24(dataview, 17 + 4); var offset = getUint48(dataview, 17 + 7); var length = dataview.getUint32(17 + 13, true); - assert.strictEqual(z_raw,14); - assert.strictEqual(x,16383); - assert.strictEqual(y,16383); + assert.strictEqual(z_raw, 14); + assert.strictEqual(x, 16383); + assert.strictEqual(y, 16383); }); test("get entry", () => { - let view = new DataView(createDirectory([ - { z: 5, x: 1000, y: 2000, offset: 1000, length: 2000, is_dir: false }, - { - z: 14, - x: 16383, - y: 16383, - offset: 999999, - length: 999, - is_dir: false, - }, - ])); + let view = new DataView( + createDirectory([ + { z: 5, x: 1000, y: 2000, offset: 1000, length: 2000, is_dir: false }, + { + z: 14, + x: 16383, + y: 16383, + offset: 999999, + length: 999, + is_dir: false, + }, + ]) + ); let entry = queryTile(view, 14, 16383, 16383); - assert.strictEqual(entry!.z,14); - assert.strictEqual(entry!.x,16383); - assert.strictEqual(entry!.y,16383); - assert.strictEqual(entry!.offset,999999); - assert.strictEqual(entry!.length,999); - assert.strictEqual(entry!.is_dir,false); - assert.strictEqual(queryLeafdir(view, 14, 16383, 16383),null); + assert.strictEqual(entry!.z, 14); + assert.strictEqual(entry!.x, 16383); + assert.strictEqual(entry!.y, 16383); + assert.strictEqual(entry!.offset, 999999); + assert.strictEqual(entry!.length, 999); + assert.strictEqual(entry!.is_dir, false); + assert.strictEqual(queryLeafdir(view, 14, 16383, 16383), null); }); test("get leafdir", () => { - let view = new DataView(createDirectory([ - { - z: 14, - x: 16383, - y: 16383, - offset: 999999, - length: 999, - is_dir: true, - }, - ])); + let view = new DataView( + createDirectory([ + { + z: 14, + x: 16383, + y: 16383, + offset: 999999, + length: 999, + is_dir: true, + }, + ]) + ); let entry = queryLeafdir(view, 14, 16383, 16383); - assert.strictEqual(entry!.z,14); - assert.strictEqual(entry!.x,16383); - assert.strictEqual(entry!.y,16383); - assert.strictEqual(entry!.offset,999999); - assert.strictEqual(entry!.length,999); - assert.strictEqual(entry!.is_dir,true); - assert.strictEqual(queryTile(view, 14, 16383, 16383),null); + assert.strictEqual(entry!.z, 14); + assert.strictEqual(entry!.x, 16383); + assert.strictEqual(entry!.y, 16383); + assert.strictEqual(entry!.offset, 999999); + assert.strictEqual(entry!.length, 999); + assert.strictEqual(entry!.is_dir, true); + assert.strictEqual(queryTile(view, 14, 16383, 16383), null); }); test("derive the leaf level", () => { - let view = new DataView(createDirectory([ - { - z: 6, - x: 3, - y: 3, - offset: 0, - length: 0, - is_dir: true, - }, - ])); - let leaf = deriveLeaf(view,{z:7,x:6,y:6}); - assert.strictEqual(leaf!.z,6); - assert.strictEqual(leaf!.x,3); - assert.strictEqual(leaf!.y,3); - view = new DataView(createDirectory([ - { - z: 6, - x: 3, - y: 3, - offset: 0, - length: 0, - is_dir: false, - }, - ])); - leaf = deriveLeaf(view,{z:7,x:6,y:6}); - assert.strictEqual(leaf,null); + let view = new DataView( + createDirectory([ + { + z: 6, + x: 3, + y: 3, + offset: 0, + length: 0, + is_dir: true, + }, + ]) + ); + let leaf = deriveLeaf(view, { z: 7, x: 6, y: 6 }); + assert.strictEqual(leaf!.z, 6); + assert.strictEqual(leaf!.x, 3); + assert.strictEqual(leaf!.y, 3); + view = new DataView( + createDirectory([ + { + z: 6, + x: 3, + y: 3, + offset: 0, + length: 0, + is_dir: false, + }, + ]) + ); + leaf = deriveLeaf(view, { z: 7, x: 6, y: 6 }); + assert.strictEqual(leaf, null); }); test("convert spec v1 directory to spec v2 directory", () => { - let view = new DataView(createDirectory([ - { - z: 7, - x: 3, - y: 3, - offset: 3, - length: 3, - is_dir: true, - }, - { - z: 6, - x: 2, - y: 2, - offset: 2, - length: 2, - is_dir: false, - }, - { - z: 6, - x: 2, - y: 1, - offset: 1, - length: 1, - is_dir: false, - }, - ])); + let view = new DataView( + createDirectory([ + { + z: 7, + x: 3, + y: 3, + offset: 3, + length: 3, + is_dir: true, + }, + { + z: 6, + x: 2, + y: 2, + offset: 2, + length: 2, + is_dir: false, + }, + { + z: 6, + x: 2, + y: 1, + offset: 1, + length: 1, + is_dir: false, + }, + ]) + ); let entry = queryLeafdir(view, 7, 3, 3); - assert.strictEqual(entry!.offset,3); + assert.strictEqual(entry!.offset, 3); entry = queryTile(view, 6, 2, 2); - assert.strictEqual(entry!.offset,2); + assert.strictEqual(entry!.offset, 2); entry = queryTile(view, 6, 2, 1); - assert.strictEqual(entry!.offset,1); + assert.strictEqual(entry!.offset, 1); entry = parseEntry(view, 0); - assert.strictEqual(entry!.offset,1); + assert.strictEqual(entry!.offset, 1); entry = parseEntry(view, 1); - assert.strictEqual(entry!.offset,2); + assert.strictEqual(entry!.offset, 2); entry = parseEntry(view, 2); - assert.strictEqual(entry!.offset,3); + assert.strictEqual(entry!.offset, 3); }); diff --git a/js/test/v3.test.ts b/js/test/v3.test.ts index 03d0af8..b63e804 100644 --- a/js/test/v3.test.ts +++ b/js/test/v3.test.ts @@ -3,389 +3,389 @@ import assert from "node:assert"; import fs from "fs"; import { - Entry, - zxyToTileId, - tileIdToZxy, - findTile, - readVarint, - SharedPromiseCache, - BufferPosition, - Source, - RangeResponse, - EtagMismatch, - PMTiles, - getUint64, + Entry, + zxyToTileId, + tileIdToZxy, + findTile, + readVarint, + SharedPromiseCache, + BufferPosition, + Source, + RangeResponse, + EtagMismatch, + PMTiles, + getUint64, } from "../index"; test("varint", () => { - let b: BufferPosition = { - buf: new Uint8Array([0, 1, 127, 0xe5, 0x8e, 0x26]), - pos: 0, - }; - assert.strictEqual(readVarint(b), 0); - assert.strictEqual(readVarint(b), 1); - assert.strictEqual(readVarint(b), 127); - assert.strictEqual(readVarint(b), 624485); - b = { - buf: new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f]), - pos: 0, - }; - assert.strictEqual(readVarint(b), 9007199254740991); + let b: BufferPosition = { + buf: new Uint8Array([0, 1, 127, 0xe5, 0x8e, 0x26]), + pos: 0, + }; + assert.strictEqual(readVarint(b), 0); + assert.strictEqual(readVarint(b), 1); + assert.strictEqual(readVarint(b), 127); + assert.strictEqual(readVarint(b), 624485); + b = { + buf: new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f]), + pos: 0, + }; + assert.strictEqual(readVarint(b), 9007199254740991); }); test("zxy to tile id", () => { - assert.strictEqual(zxyToTileId(0, 0, 0), 0); - assert.strictEqual(zxyToTileId(1, 0, 0), 1); - assert.strictEqual(zxyToTileId(1, 0, 1), 2); - assert.strictEqual(zxyToTileId(1, 1, 1), 3); - assert.strictEqual(zxyToTileId(1, 1, 0), 4); - assert.strictEqual(zxyToTileId(2, 0, 0), 5); + assert.strictEqual(zxyToTileId(0, 0, 0), 0); + assert.strictEqual(zxyToTileId(1, 0, 0), 1); + assert.strictEqual(zxyToTileId(1, 0, 1), 2); + assert.strictEqual(zxyToTileId(1, 1, 1), 3); + assert.strictEqual(zxyToTileId(1, 1, 0), 4); + assert.strictEqual(zxyToTileId(2, 0, 0), 5); }); test("tile id to zxy", () => { - assert.deepEqual(tileIdToZxy(0), [0, 0, 0]); - assert.deepEqual(tileIdToZxy(1), [1, 0, 0]); - assert.deepEqual(tileIdToZxy(2), [1, 0, 1]); - assert.deepEqual(tileIdToZxy(3), [1, 1, 1]); - assert.deepEqual(tileIdToZxy(4), [1, 1, 0]); - assert.deepEqual(tileIdToZxy(5), [2, 0, 0]); + assert.deepEqual(tileIdToZxy(0), [0, 0, 0]); + assert.deepEqual(tileIdToZxy(1), [1, 0, 0]); + assert.deepEqual(tileIdToZxy(2), [1, 0, 1]); + assert.deepEqual(tileIdToZxy(3), [1, 1, 1]); + assert.deepEqual(tileIdToZxy(4), [1, 1, 0]); + assert.deepEqual(tileIdToZxy(5), [2, 0, 0]); }); test("a lot of tiles", () => { - for (let z = 0; z < 9; z++) { - for (let x = 0; x < 1 << z; x++) { - for (let y = 0; y < 1 << z; y++) { - const result = tileIdToZxy(zxyToTileId(z, x, y)); - if (result[0] !== z || result[1] !== x || result[2] !== y) { - assert.fail("roundtrip failed"); - } - } - } - } + for (let z = 0; z < 9; z++) { + for (let x = 0; x < 1 << z; x++) { + for (let y = 0; y < 1 << z; y++) { + const result = tileIdToZxy(zxyToTileId(z, x, y)); + if (result[0] !== z || result[1] !== x || result[2] !== y) { + assert.fail("roundtrip failed"); + } + } + } + } }); test("tile extremes", () => { - for (var z = 0; z < 27; z++) { - const dim = Math.pow(2, z) - 1; - const tl = tileIdToZxy(zxyToTileId(z, 0, 0)); - assert.deepEqual([z, 0, 0], tl); - const tr = tileIdToZxy(zxyToTileId(z, dim, 0)); - assert.deepEqual([z, dim, 0], tr); - const bl = tileIdToZxy(zxyToTileId(z, 0, dim)); - assert.deepEqual([z, 0, dim], bl); - const br = tileIdToZxy(zxyToTileId(z, dim, dim)); - assert.deepEqual([z, dim, dim], br); - } + for (var z = 0; z < 27; z++) { + const dim = Math.pow(2, z) - 1; + const tl = tileIdToZxy(zxyToTileId(z, 0, 0)); + assert.deepEqual([z, 0, 0], tl); + const tr = tileIdToZxy(zxyToTileId(z, dim, 0)); + assert.deepEqual([z, dim, 0], tr); + const bl = tileIdToZxy(zxyToTileId(z, 0, dim)); + assert.deepEqual([z, 0, dim], bl); + const br = tileIdToZxy(zxyToTileId(z, dim, dim)); + assert.deepEqual([z, dim, dim], br); + } }); test("invalid tiles", () => { - assert.throws(() => { - tileIdToZxy(Number.MAX_SAFE_INTEGER); - }); + assert.throws(() => { + tileIdToZxy(Number.MAX_SAFE_INTEGER); + }); - assert.throws(() => { - zxyToTileId(27,0,0); - }); + assert.throws(() => { + zxyToTileId(27, 0, 0); + }); - assert.throws(() => { - zxyToTileId(0,1,1); - }); + assert.throws(() => { + zxyToTileId(0, 1, 1); + }); }); test("tile search for missing entry", () => { - const entries: Entry[] = []; - assert.strictEqual(findTile(entries, 101), null); + const entries: Entry[] = []; + assert.strictEqual(findTile(entries, 101), null); }); test("tile search for first entry == id", () => { - const entries: Entry[] = [ - { tileId: 100, offset: 1, length: 1, runLength: 1 }, - ]; - const entry = findTile(entries, 100)!; - assert.strictEqual(entry.offset, 1); - assert.strictEqual(entry.length, 1); - assert.strictEqual(findTile(entries, 101), null); + const entries: Entry[] = [ + { tileId: 100, offset: 1, length: 1, runLength: 1 }, + ]; + const entry = findTile(entries, 100)!; + assert.strictEqual(entry.offset, 1); + assert.strictEqual(entry.length, 1); + assert.strictEqual(findTile(entries, 101), null); }); test("tile search with runlength", () => { - const entries: Entry[] = [ - { tileId: 3, offset: 3, length: 1, runLength: 2 }, - { tileId: 5, offset: 5, length: 1, runLength: 2 }, - ]; - const entry = findTile(entries, 4)!; - assert.strictEqual(entry.offset, 3); + const entries: Entry[] = [ + { tileId: 3, offset: 3, length: 1, runLength: 2 }, + { tileId: 5, offset: 5, length: 1, runLength: 2 }, + ]; + const entry = findTile(entries, 4)!; + assert.strictEqual(entry.offset, 3); }); test("tile search with multiple tile entries", () => { - let entries: Entry[] = [{ tileId: 100, offset: 1, length: 1, runLength: 2 }]; - let entry = findTile(entries, 101)!; - assert.strictEqual(entry.offset, 1); - assert.strictEqual(entry.length, 1); + let entries: Entry[] = [{ tileId: 100, offset: 1, length: 1, runLength: 2 }]; + let entry = findTile(entries, 101)!; + assert.strictEqual(entry.offset, 1); + assert.strictEqual(entry.length, 1); - entries = [ - { tileId: 100, offset: 1, length: 1, runLength: 1 }, - { tileId: 150, offset: 2, length: 2, runLength: 2 }, - ]; - entry = findTile(entries, 151)!; - assert.strictEqual(entry.offset, 2); - assert.strictEqual(entry.length, 2); + entries = [ + { tileId: 100, offset: 1, length: 1, runLength: 1 }, + { tileId: 150, offset: 2, length: 2, runLength: 2 }, + ]; + entry = findTile(entries, 151)!; + assert.strictEqual(entry.offset, 2); + assert.strictEqual(entry.length, 2); - entries = [ - { tileId: 50, offset: 1, length: 1, runLength: 2 }, - { tileId: 100, offset: 2, length: 2, runLength: 1 }, - { tileId: 150, offset: 3, length: 3, runLength: 1 }, - ]; - entry = findTile(entries, 51)!; - assert.strictEqual(entry.offset, 1); - assert.strictEqual(entry.length, 1); + entries = [ + { tileId: 50, offset: 1, length: 1, runLength: 2 }, + { tileId: 100, offset: 2, length: 2, runLength: 1 }, + { tileId: 150, offset: 3, length: 3, runLength: 1 }, + ]; + entry = findTile(entries, 51)!; + assert.strictEqual(entry.offset, 1); + assert.strictEqual(entry.length, 1); }); test("leaf search", () => { - const entries: Entry[] = [ - { tileId: 100, offset: 1, length: 1, runLength: 0 }, - ]; - const entry = findTile(entries, 150); - assert.strictEqual(entry!.offset, 1); - assert.strictEqual(entry!.length, 1); + const entries: Entry[] = [ + { tileId: 100, offset: 1, length: 1, runLength: 0 }, + ]; + const entry = findTile(entries, 150); + assert.strictEqual(entry!.offset, 1); + assert.strictEqual(entry!.length, 1); }); // inefficient method only for testing class TestNodeFileSource implements Source { - buffer: ArrayBuffer; - path: string; - key: string; - etag?: string; + buffer: ArrayBuffer; + path: string; + key: string; + etag?: string; - constructor(path: string, key: string) { - this.path = path; - this.buffer = fs.readFileSync(path); - this.key = key; - } + constructor(path: string, key: string) { + this.path = path; + this.buffer = fs.readFileSync(path); + this.key = key; + } - getKey() { - return this.key; - } + getKey() { + return this.key; + } - replaceData(path: string) { - this.path = path; - this.buffer = fs.readFileSync(path); - } + replaceData(path: string) { + this.path = path; + this.buffer = fs.readFileSync(path); + } - async getBytes(offset: number, length: number): Promise { - const slice = new Uint8Array(this.buffer.slice(offset, offset + length)) - .buffer; - return { data: slice, etag: this.etag }; - } + async getBytes(offset: number, length: number): Promise { + const slice = new Uint8Array(this.buffer.slice(offset, offset + length)) + .buffer; + return { data: slice, etag: this.etag }; + } } // echo '{"type":"Polygon","coordinates":[[[0,0],[0,1],[1,1],[1,0],[0,0]]]}' | ./tippecanoe -zg -o test_fixture_1.pmtiles test("cache getHeader", async () => { - const source = new TestNodeFileSource( - "test/data/test_fixture_1.pmtiles", - "1" - ); - const cache = new SharedPromiseCache(); - const header = await cache.getHeader(source); - assert.strictEqual(header.rootDirectoryOffset, 127); - assert.strictEqual(header.rootDirectoryLength, 25); - assert.strictEqual(header.jsonMetadataOffset, 152); - assert.strictEqual(header.jsonMetadataLength, 247); - assert.strictEqual(header.leafDirectoryOffset, 0); - assert.strictEqual(header.leafDirectoryLength, 0); - assert.strictEqual(header.tileDataOffset, 399); - assert.strictEqual(header.tileDataLength, 69); - assert.strictEqual(header.numAddressedTiles, 1); - assert.strictEqual(header.numTileEntries, 1); - assert.strictEqual(header.numTileContents, 1); - assert.strictEqual(header.clustered, false); - assert.strictEqual(header.internalCompression, 2); - assert.strictEqual(header.tileCompression, 2); - assert.strictEqual(header.tileType, 1); - assert.strictEqual(header.minZoom, 0); - assert.strictEqual(header.maxZoom, 0); - assert.strictEqual(header.minLon, 0); - assert.strictEqual(header.minLat, 0); - // assert.strictEqual(header.maxLon,1); // TODO fix me - assert.strictEqual(header.maxLat, 1); + const source = new TestNodeFileSource( + "test/data/test_fixture_1.pmtiles", + "1" + ); + const cache = new SharedPromiseCache(); + const header = await cache.getHeader(source); + assert.strictEqual(header.rootDirectoryOffset, 127); + assert.strictEqual(header.rootDirectoryLength, 25); + assert.strictEqual(header.jsonMetadataOffset, 152); + assert.strictEqual(header.jsonMetadataLength, 247); + assert.strictEqual(header.leafDirectoryOffset, 0); + assert.strictEqual(header.leafDirectoryLength, 0); + assert.strictEqual(header.tileDataOffset, 399); + assert.strictEqual(header.tileDataLength, 69); + assert.strictEqual(header.numAddressedTiles, 1); + assert.strictEqual(header.numTileEntries, 1); + assert.strictEqual(header.numTileContents, 1); + assert.strictEqual(header.clustered, false); + assert.strictEqual(header.internalCompression, 2); + assert.strictEqual(header.tileCompression, 2); + assert.strictEqual(header.tileType, 1); + assert.strictEqual(header.minZoom, 0); + assert.strictEqual(header.maxZoom, 0); + assert.strictEqual(header.minLon, 0); + assert.strictEqual(header.minLat, 0); + // assert.strictEqual(header.maxLon,1); // TODO fix me + assert.strictEqual(header.maxLat, 1); }); test("getUint64", async () => { - const view = new DataView(new ArrayBuffer(8)); - view.setBigUint64(0, 0n, true); - assert.strictEqual(getUint64(view, 0), 0); - view.setBigUint64(0, 1n, true); - assert.strictEqual(getUint64(view, 0), 1); - view.setBigUint64(0, 9007199254740991n, true); - assert.strictEqual(getUint64(view, 0), 9007199254740991); + const view = new DataView(new ArrayBuffer(8)); + view.setBigUint64(0, 0n, true); + assert.strictEqual(getUint64(view, 0), 0); + view.setBigUint64(0, 1n, true); + assert.strictEqual(getUint64(view, 0), 1); + view.setBigUint64(0, 9007199254740991n, true); + assert.strictEqual(getUint64(view, 0), 9007199254740991); }); test("cache check against empty", async () => { - const source = new TestNodeFileSource("test/data/empty.pmtiles", "1"); - const cache = new SharedPromiseCache(); - assert.rejects(async () => { - await cache.getHeader(source); - }); + const source = new TestNodeFileSource("test/data/empty.pmtiles", "1"); + const cache = new SharedPromiseCache(); + assert.rejects(async () => { + await cache.getHeader(source); + }); }); test("cache check magic number", async () => { - const source = new TestNodeFileSource("test/data/invalid.pmtiles", "1"); - const cache = new SharedPromiseCache(); - assert.rejects(async () => { - await cache.getHeader(source); - }); + const source = new TestNodeFileSource("test/data/invalid.pmtiles", "1"); + const cache = new SharedPromiseCache(); + assert.rejects(async () => { + await cache.getHeader(source); + }); }); test("cache check future spec version", async () => { - const source = new TestNodeFileSource("test/data/invalid_v4.pmtiles", "1"); - const cache = new SharedPromiseCache(); - assert.rejects(async () => { - await cache.getHeader(source); - }); + const source = new TestNodeFileSource("test/data/invalid_v4.pmtiles", "1"); + const cache = new SharedPromiseCache(); + assert.rejects(async () => { + await cache.getHeader(source); + }); }); test("cache getDirectory", async () => { - const source = new TestNodeFileSource( - "test/data/test_fixture_1.pmtiles", - "1" - ); + const source = new TestNodeFileSource( + "test/data/test_fixture_1.pmtiles", + "1" + ); - let cache = new SharedPromiseCache(6400, false); - let header = await cache.getHeader(source); - assert.strictEqual(cache.cache.size, 1); + let cache = new SharedPromiseCache(6400, false); + let header = await cache.getHeader(source); + assert.strictEqual(cache.cache.size, 1); - cache = new SharedPromiseCache(6400, true); - header = await cache.getHeader(source); + cache = new SharedPromiseCache(6400, true); + header = await cache.getHeader(source); - // prepopulates the root directory - assert.strictEqual(cache.cache.size, 2); + // prepopulates the root directory + assert.strictEqual(cache.cache.size, 2); - const directory = await cache.getDirectory( - source, - header.rootDirectoryOffset, - header.rootDirectoryLength, - header - ); - assert.strictEqual(directory.length, 1); - assert.strictEqual(directory[0].tileId, 0); - assert.strictEqual(directory[0].offset, 0); - assert.strictEqual(directory[0].length, 69); - assert.strictEqual(directory[0].runLength, 1); + const directory = await cache.getDirectory( + source, + header.rootDirectoryOffset, + header.rootDirectoryLength, + header + ); + assert.strictEqual(directory.length, 1); + assert.strictEqual(directory[0].tileId, 0); + assert.strictEqual(directory[0].offset, 0); + assert.strictEqual(directory[0].length, 69); + assert.strictEqual(directory[0].runLength, 1); - for (const v of cache.cache.values()) { - assert.ok(v.lastUsed > 0); - } + for (const v of cache.cache.values()) { + assert.ok(v.lastUsed > 0); + } }); test("multiple sources in a single cache", async () => { - const cache = new SharedPromiseCache(); - const source1 = new TestNodeFileSource( - "test/data/test_fixture_1.pmtiles", - "1" - ); - const source2 = new TestNodeFileSource( - "test/data/test_fixture_1.pmtiles", - "2" - ); - await cache.getHeader(source1); - assert.strictEqual(cache.cache.size, 2); - await cache.getHeader(source2); - assert.strictEqual(cache.cache.size, 4); + const cache = new SharedPromiseCache(); + const source1 = new TestNodeFileSource( + "test/data/test_fixture_1.pmtiles", + "1" + ); + const source2 = new TestNodeFileSource( + "test/data/test_fixture_1.pmtiles", + "2" + ); + await cache.getHeader(source1); + assert.strictEqual(cache.cache.size, 2); + await cache.getHeader(source2); + assert.strictEqual(cache.cache.size, 4); }); test("etags are part of key", async () => { - const cache = new SharedPromiseCache(6400, false); - const source = new TestNodeFileSource( - "test/data/test_fixture_1.pmtiles", - "1" - ); - source.etag = "etag_1"; - let header = await cache.getHeader(source); - assert.strictEqual(header.etag, "etag_1"); + const cache = new SharedPromiseCache(6400, false); + const source = new TestNodeFileSource( + "test/data/test_fixture_1.pmtiles", + "1" + ); + source.etag = "etag_1"; + let header = await cache.getHeader(source); + assert.strictEqual(header.etag, "etag_1"); - source.etag = "etag_2"; + source.etag = "etag_2"; - assert.rejects(async () => { - await cache.getDirectory( - source, - header.rootDirectoryOffset, - header.rootDirectoryLength, - header - ); - }) + assert.rejects(async () => { + await cache.getDirectory( + source, + header.rootDirectoryOffset, + header.rootDirectoryLength, + header + ); + }); - cache.invalidate(source, "etag_2"); - header = await cache.getHeader(source); - assert.ok( - await cache.getDirectory( - source, - header.rootDirectoryOffset, - header.rootDirectoryLength, - header - ) - ); + cache.invalidate(source, "etag_2"); + header = await cache.getHeader(source); + assert.ok( + await cache.getDirectory( + source, + header.rootDirectoryOffset, + header.rootDirectoryLength, + header + ) + ); }); test("soft failure on etag weirdness", async () => { - const cache = new SharedPromiseCache(6400, false); - const source = new TestNodeFileSource( - "test/data/test_fixture_1.pmtiles", - "1" - ); - source.etag = "etag_1"; - let header = await cache.getHeader(source); - assert.strictEqual(header.etag, "etag_1"); + const cache = new SharedPromiseCache(6400, false); + const source = new TestNodeFileSource( + "test/data/test_fixture_1.pmtiles", + "1" + ); + source.etag = "etag_1"; + let header = await cache.getHeader(source); + assert.strictEqual(header.etag, "etag_1"); - source.etag = "etag_2"; + source.etag = "etag_2"; - assert.rejects(async () => { - await cache.getDirectory( - source, - header.rootDirectoryOffset, - header.rootDirectoryLength, - header - ); - }) + assert.rejects(async () => { + await cache.getDirectory( + source, + header.rootDirectoryOffset, + header.rootDirectoryLength, + header + ); + }); - source.etag = "etag_1"; - cache.invalidate(source, "etag_2"); + source.etag = "etag_1"; + cache.invalidate(source, "etag_2"); - header = await cache.getHeader(source); - assert.strictEqual(header.etag, undefined); + header = await cache.getHeader(source); + assert.strictEqual(header.etag, undefined); }); test("cache pruning by byte size", async () => { - const cache = new SharedPromiseCache(2, false); - cache.cache.set("0", { lastUsed: 0, data: Promise.resolve([]) }); - cache.cache.set("1", { lastUsed: 1, data: Promise.resolve([]) }); - cache.cache.set("2", { lastUsed: 2, data: Promise.resolve([]) }); - cache.prune(); - assert.strictEqual(cache.cache.size, 2); - assert.ok(cache.cache.get("2")); - assert.ok(cache.cache.get("1")); - assert.ok(!cache.cache.get("0")); + const cache = new SharedPromiseCache(2, false); + cache.cache.set("0", { lastUsed: 0, data: Promise.resolve([]) }); + cache.cache.set("1", { lastUsed: 1, data: Promise.resolve([]) }); + cache.cache.set("2", { lastUsed: 2, data: Promise.resolve([]) }); + cache.prune(); + assert.strictEqual(cache.cache.size, 2); + assert.ok(cache.cache.get("2")); + assert.ok(cache.cache.get("1")); + assert.ok(!cache.cache.get("0")); }); test("pmtiles get metadata", async () => { - const source = new TestNodeFileSource( - "test/data/test_fixture_1.pmtiles", - "1" - ); - const p = new PMTiles(source); - const metadata = await p.getMetadata(); - assert.ok(metadata.name); + const source = new TestNodeFileSource( + "test/data/test_fixture_1.pmtiles", + "1" + ); + const p = new PMTiles(source); + const metadata = await p.getMetadata(); + assert.ok(metadata.name); }); // echo '{"type":"Polygon","coordinates":[[[0,0],[0,1],[1,0],[0,0]]]}' | ./tippecanoe -zg -o test_fixture_2.pmtiles test("pmtiles handle retries", async () => { - const source = new TestNodeFileSource( - "test/data/test_fixture_1.pmtiles", - "1" - ); - source.etag = "1"; - const p = new PMTiles(source); - const metadata = await p.getMetadata(); - assert.ok(metadata.name); - source.etag = "2"; - source.replaceData("test/data/test_fixture_2.pmtiles"); - assert.ok(await p.getZxy(0, 0, 0)); + const source = new TestNodeFileSource( + "test/data/test_fixture_1.pmtiles", + "1" + ); + source.etag = "1"; + const p = new PMTiles(source); + const metadata = await p.getMetadata(); + assert.ok(metadata.name); + source.etag = "2"; + source.replaceData("test/data/test_fixture_2.pmtiles"); + assert.ok(await p.getZxy(0, 0, 0)); });