3cab735754
Updated various components to utilize parseAppDecimal and formatAppDecimal for consistent decimal parsing and formatting. This change enhances the handling of numeric inputs across the application, ensuring better accuracy and user experience in forms and displays.
46 lines
1.8 KiB
TypeScript
46 lines
1.8 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
formatAppCoordinate,
|
|
formatAppDecimal,
|
|
formatGpsAccuracyMeters,
|
|
formatTankLiters,
|
|
getNumberFormatSymbols,
|
|
parseAppDecimal,
|
|
resolveDeviceLocale
|
|
} from './numberFormat.js'
|
|
|
|
describe('numberFormat (device locale)', () => {
|
|
it('resolveDeviceLocale returns a non-empty BCP 47 tag', () => {
|
|
expect(resolveDeviceLocale().length).toBeGreaterThan(0)
|
|
})
|
|
|
|
it('reads decimal separator from Intl for de-DE and en-US', () => {
|
|
expect(getNumberFormatSymbols('de-DE').decimal).toBe(',')
|
|
expect(getNumberFormatSymbols('en-US').decimal).toBe('.')
|
|
})
|
|
|
|
it('formats decimals per locale without grouping', () => {
|
|
expect(formatAppDecimal(12.5, { maximumFractionDigits: 1, locale: 'de-DE' })).toBe('12,5')
|
|
expect(formatAppDecimal(12.5, { maximumFractionDigits: 1, locale: 'en-US' })).toBe('12.5')
|
|
expect(formatAppDecimal(1234.5, { maximumFractionDigits: 1, locale: 'de-DE' })).toBe('1234,5')
|
|
})
|
|
|
|
it('parses device-locale decimals and tolerates the other separator', () => {
|
|
expect(parseAppDecimal('12,5', 'de-DE')).toBe(12.5)
|
|
expect(parseAppDecimal('12.5', 'en-US')).toBe(12.5)
|
|
expect(parseAppDecimal('12,5', 'en-US')).toBe(12.5)
|
|
expect(parseAppDecimal('1.234,5', 'de-DE')).toBe(1234.5)
|
|
expect(parseAppDecimal('', 'de-DE')).toBeNull()
|
|
})
|
|
|
|
it('formats coordinates for form display', () => {
|
|
expect(formatAppCoordinate(59.912345, 'de-DE')).toBe('59,912345')
|
|
expect(formatTankLiters(12.5)).toBe(formatAppDecimal(12.5, { minimumFractionDigits: 1, maximumFractionDigits: 1 }))
|
|
})
|
|
|
|
it('formats GPS accuracy with coarse step from 100 m', () => {
|
|
expect(formatGpsAccuracyMeters(12.4)).toBe(formatAppDecimal(12, { maximumFractionDigits: 0 }))
|
|
expect(formatGpsAccuracyMeters(105)).toBe(formatAppDecimal(110, { maximumFractionDigits: 0 }))
|
|
})
|
|
})
|