Prepare IDE beta 6 with Turkish native dialogs and map errors
This commit is contained in:
1 parent
7724d65e92
commit
75afd01b4b
15 files changed
+265
-57
No files matched your search
@@ -1,8 +1,10 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import { EN_SURFACES } from '@/i18n/en-surfaces'
|
||||
import { TR_SURFACES } from '@/i18n/tr-surfaces'
|
||||
import type { StarmapGraph } from '@/types/hermes'
|
||||
|
||||
import { decodeShareCode, encodeShareCode, ShareCodeError } from './share-code'
|
||||
import { decodeShareCode, encodeShareCode, ShareCodeError, shareCodeErrorText } from './share-code'
|
||||
|
||||
function sampleGraph(): StarmapGraph {
|
||||
return {
|
||||
@@ -154,6 +156,36 @@ describe('share-code', () => {
|
||||
expect(() => decodeShareCode('')).toThrow(ShareCodeError)
|
||||
})
|
||||
|
||||
it('formats real decoding failures in the selected language without changing valid codes', () => {
|
||||
const graph = sampleGraph()
|
||||
const valid = encodeShareCode(graph)
|
||||
|
||||
const capture = (code: string): unknown => {
|
||||
try { decodeShareCode(code) } catch (error) { return error }
|
||||
throw new Error('Expected a decoding failure')
|
||||
}
|
||||
|
||||
const invalid = capture('not a real code !!!')
|
||||
expect(shareCodeErrorText(invalid, TR_SURFACES.mapErrors)).toBe('Bu metin bir harita koduna benzemiyor.')
|
||||
expect(shareCodeErrorText(invalid, EN_SURFACES.mapErrors)).toBe("That doesn't look like a map code.")
|
||||
|
||||
const raw = atob(valid.slice(3).replace(/-/g, '+').replace(/_/g, '/'))
|
||||
const expected = raw.charCodeAt(0)
|
||||
const actual = (expected + 1) % 256
|
||||
|
||||
const otherVersion = 'HML' + btoa(String.fromCharCode(actual) + raw.slice(1))
|
||||
.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')
|
||||
|
||||
expect(shareCodeErrorText(capture(otherVersion), TR_SURFACES.mapErrors))
|
||||
.toBe(TR_SURFACES.mapErrors.version(actual, expected))
|
||||
const middle = Math.floor(valid.length / 2)
|
||||
const corrupted = valid.slice(0, middle) + (valid[middle] === 'A' ? 'B' : 'A') + valid.slice(middle + 1)
|
||||
expect(shareCodeErrorText(capture(corrupted), TR_SURFACES.mapErrors)).toBe(TR_SURFACES.mapErrors.corrupted)
|
||||
expect(shareCodeErrorText(new Error('internal details'), TR_SURFACES.mapErrors)).toBe('Harita kodu okunamadı.')
|
||||
expect(encodeShareCode(graph)).toBe(valid)
|
||||
expect(decodeShareCode(valid).nodes).toHaveLength(graph.nodes.length)
|
||||
})
|
||||
|
||||
it('rejects a corrupted (bit-flipped) code', () => {
|
||||
const code = encodeShareCode(sampleGraph())
|
||||
// Flip a mid-payload char (trailing base64 bits can be dropped on decode).
|
||||
|
||||
Reference in new issue
Block a user