|
| 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 | +}) |
0 commit comments