Skip to content

Commit 952af9e

Browse files
committed
test: migrate tests to bun
1 parent c6ba837 commit 952af9e

File tree

13 files changed

+251
-271
lines changed

13 files changed

+251
-271
lines changed

bun.lockb

-21.9 KB
Binary file not shown.

package.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818
"postinstall": "bun build-icons.js",
1919
"lint": "prettier . --check",
2020
"lint:fix": "prettier . --write",
21-
"test": "vitest run",
22-
"test:watch": "vitest",
23-
"test:cov": "vitest run --coverage",
21+
"test": "bun test",
22+
"test:cov": "bun test --coverage",
2423
"dev": "run-p -rl build:dev serve",
2524
"build": "vite build",
2625
"build:dev": "vite build --watch --mode development --minify false",
@@ -32,15 +31,13 @@
3231
"@types/leaflet": "^1.9.12",
3332
"@types/leaflet-fullscreen": "^1.0.9",
3433
"@types/webextension-polyfill": "^0.10.7",
35-
"@vitest/coverage-v8": "^1.6.0",
3634
"npm-run-all": "^4.1.5",
3735
"oslllo-svg2": "^2.0.2",
3836
"prettier": "^3.3.2",
3937
"release-it": "^17.4.0",
4038
"release-it-changelogen": "^0.1.0",
4139
"vite": "^5.3.2",
4240
"vite-plugin-static-copy": "^1.0.5",
43-
"vitest": "^1.6.0",
4441
"web-ext": "^8.2.0",
4542
"webextension-polyfill": "^0.12.0"
4643
},

src/map/utils/parsePB.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ function convertType(item) {
4747
val = tileTypes[tileIndex < tileTypes.length && tileIndex >= 0 ? tileIndex : 0]
4848
break
4949
case 'z': // base64 encoded coords
50-
val = atob(item).replace(/[^\d\s\-\.\'\"SNWE]/g, '')
50+
val = Buffer.from(item, 'base64').toString('utf-8')
5151
}
5252

5353
return [val, type === 'm']

src/map/utils/read.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { TileType, parsePB, tileTypes } from './parsePB'
1+
import { parsePB, tileTypes } from './parsePB'
22
import { parseDMS } from './parseDMS'
33
import { getMapZoom } from './zoom'
44

src/test/parseDMS.test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { test, expect } from 'bun:test'
2+
import { parseDMS } from '../map/utils/parseDMS'
3+
4+
5+
test('Parse Degrees Minutes Seconds Direction: Example', () => {
6+
const res = parseDMS(`10°60'36.0"N 10°60'36.0"E`)
7+
8+
expect(res).toStrictEqual([11.01, 11.01])
9+
})
10+
11+
test('Parse Degrees Minutes Seconds Direction: Negative Example', () => {
12+
const res = parseDMS(`10°60'36.0"S 10°60'36.0"W`)
13+
14+
expect(res).toStrictEqual([-11.01, -11.01])
15+
})

src/test/parsePB.test.js

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import { test, expect } from 'bun:test'
2+
import { parsePB, tileTypes } from '../map/utils/parsePB'
3+
4+
test('Parse PB: empty list', () => {
5+
const res = parsePB([])
6+
7+
expect(res).empty
8+
expect(res).toEqual([])
9+
})
10+
11+
test('Parse PB: contains empty list', () => {
12+
const res = parsePB(['1m0'])
13+
14+
expect(res).toStrictEqual([[]])
15+
})
16+
17+
test('Parse PB: double', () => {
18+
const res = parsePB(['1d1.1'])
19+
20+
expect(res[0]).toBeTypeOf('number')
21+
expect(res).toContain(1.1)
22+
})
23+
24+
test('Parse PB: float', () => {
25+
const res = parsePB(['1f1.1'])
26+
27+
expect(res[0]).toBeTypeOf('number')
28+
expect(res).toContain(1.1)
29+
})
30+
31+
test('Parse PB: int', () => {
32+
const res = parsePB(['1i1'])
33+
34+
expect(res[0]).toBeTypeOf('number')
35+
expect(res).toContain(1)
36+
})
37+
38+
test('Parse PB: enum roadmap', () => {
39+
const res = parsePB(['1e0'])[0]
40+
41+
expect(res[0]).toBeTypeOf('string')
42+
expect(res).toContain('roadmap')
43+
expect(res).toContain(tileTypes[0])
44+
})
45+
46+
test('Parse PB: enum satellite', () => {
47+
const res = parsePB(['1e1'])
48+
49+
expect(res[0]).toBeTypeOf('string')
50+
expect(res).toContain('satellite')
51+
expect(res).toContain(tileTypes[1])
52+
})
53+
54+
test('Parse PB: enum empty', () => {
55+
const res = parsePB(['1e'])
56+
57+
expect(res[0]).toBeTypeOf('string')
58+
expect(res).toContain('roadmap')
59+
expect(res).toContain(tileTypes[0])
60+
})
61+
62+
test('Parse PB: enum >1', () => {
63+
const res = parsePB(['1e2'])
64+
65+
expect(res[0]).toBeTypeOf('string')
66+
expect(res).toContain('roadmap')
67+
expect(res).toContain(tileTypes[0])
68+
})
69+
70+
test('Parse PB: base64 encoded coordinates', () => {
71+
const res = parsePB(['1zMTHCsDExJzExLjEiTiAxMcKwMTEnMTEuMSJF'])[0]
72+
73+
expect(res).toBeTypeOf('string')
74+
expect(res).toBe(`11°11'11.1"N 11°11'11.1"E`)
75+
})
76+
77+
test('Parse PB: "real" world example', () => {
78+
const splitted =
79+
'!1m14!1m12!1m3!1d1.1!2d1.1!3d1.1!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!5e0!3m2!1sde!2sde!4v1680097499131!5m2!1sde!2sde'
80+
.split('!')
81+
.slice(1)
82+
const res = parsePB(splitted)
83+
84+
expect(res).toStrictEqual([
85+
[[[1.1, 1.1, 1.1], [0, 0, 0], [1024, 768], 13.1], 'roadmap'],
86+
['de', 'de'],
87+
'1680097499131',
88+
['de', 'de'],
89+
])
90+
})

src/test/read.test.js

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
import { test, expect, mock } from 'bun:test'
2+
import { readPB, readQ, nominatimQ } from '../map/utils/read'
3+
4+
globalThis.fetch = mock()
5+
6+
const input = 'test position'
7+
const result = [{ lat: '1.1', lon: '1.1' }]
8+
9+
/**
10+
*
11+
* @param {{lat: string; lon: string}} data
12+
* @param {boolean} status
13+
* @returns {Response}
14+
*/
15+
function mockNominatimResponse(data, status) {
16+
return { ok: status, json: () => new Promise((resolve) => resolve(data)) }
17+
}
18+
19+
test('read pb: read example', async () => {
20+
const res = await readPB(
21+
'!1m14!1m12!1m3!1d1.1!2d1.1!3d1.1!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!5e0!3m2!1sde!2sde!4v1680097499131!5m2!1sde!2sde'
22+
)
23+
24+
expect(res).toStrictEqual({
25+
area: {
26+
lat: 1.1,
27+
lon: 1.1,
28+
},
29+
markers: [],
30+
tile: 'roadmap',
31+
zoom: 19,
32+
})
33+
})
34+
35+
test('read pb: pb base64 marker', async () => {
36+
const res = await readPB(
37+
'!1m17!1m12!1m3!1d1.1!2d1.1!3d1.1!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m2!1m1!1zMTDCsDYwJzM2LjAiTiAxMMKwNjAnMzYuMCJF!5e0!3m2!1sde!2sde!4v1557583694739!5m2!1sde!2sde'
38+
)
39+
40+
expect(res).toStrictEqual({
41+
area: {
42+
lat: 1.1,
43+
lon: 1.1,
44+
},
45+
markers: [
46+
{
47+
label: '11.01 11.01',
48+
lat: 11.01,
49+
lon: 11.01,
50+
},
51+
],
52+
tile: 'roadmap',
53+
zoom: 19,
54+
})
55+
})
56+
57+
test('read pb: pb id marker', async () => {
58+
const res = await readPB(
59+
'!1m17!1m12!1m3!1d1.1!2d1.1!3d1.1!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m2!1m1!1s0x0:0x0!5e0!3m2!1sde!2sde!4v1557583694739!5m2!1sde!2sde'
60+
)
61+
62+
expect(res).toStrictEqual({
63+
area: {
64+
lat: 1.1,
65+
lon: 1.1,
66+
},
67+
markers: [],
68+
tile: 'roadmap',
69+
zoom: 19,
70+
})
71+
})
72+
73+
test('read pb: pb markers to readQ', async () => {
74+
// @ts-ignore
75+
fetch.mockResolvedValue(mockNominatimResponse(result, true))
76+
77+
const res = await readPB(
78+
`!1m17!1m12!1m3!1d1.1!2d1.1!3d1.1!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m2!1m1!1s${input}!5e0!3m2!1sde!2sde!4v1557583694739!5m2!1sde!2sde`
79+
)
80+
81+
expect(res).toStrictEqual({
82+
area: {
83+
lat: 1.1,
84+
lon: 1.1,
85+
},
86+
markers: [
87+
{
88+
label: input,
89+
lat: parseFloat(result[0].lat),
90+
lon: parseFloat(result[0].lon),
91+
},
92+
],
93+
tile: 'roadmap',
94+
zoom: 19,
95+
})
96+
})
97+
98+
test('read query: nominatim request', async () => {
99+
// @ts-ignore
100+
fetch.mockResolvedValue(mockNominatimResponse(result, true))
101+
102+
const res = await readQ(input) // TODO: Mocking requests
103+
104+
expect(fetch).toBeCalledWith(encodeURI(nominatimQ + input))
105+
106+
expect(res).toStrictEqual({
107+
label: input,
108+
lat: parseFloat(result[0].lat),
109+
lon: parseFloat(result[0].lon),
110+
})
111+
})
112+
113+
test('read query: failing nominatim request', async () => {
114+
// @ts-ignore-next
115+
fetch.mockResolvedValue(mockNominatimResponse(result, false))
116+
117+
const res = await readQ(input)
118+
119+
expect(res).null
120+
})

src/test/zoom.test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { test, expect } from 'bun:test'
2+
import { getMapZoom } from '../map/utils/zoom'
3+
4+
test('Zoom levels: zoom > 19', () => {
5+
const res = getMapZoom(1)
6+
7+
expect(res).toBeTypeOf('number')
8+
expect(res).toBe(19)
9+
})
10+
11+
test('Zoom levels: zoom < 0', () => {
12+
const res = getMapZoom(100000000)
13+
14+
expect(res).toBeTypeOf('number')
15+
expect(res).toBe(0)
16+
})
17+
18+
test('Zoom levels: specific zoom', () => {
19+
const res = getMapZoom(1000)
20+
21+
expect(res).toBe(18.5)
22+
})

test/map/utils/parseDMS.test.js

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)