@accounter/shaam-uniform-format-generator
Version:
Fully typed application that generates, parses, and validates SHAAM uniform format tax reports (INI.TXT and BKMVDATA.TXT).
81 lines (66 loc) • 3.07 kB
text/typescript
import { describe, expect, it } from 'vitest';
import { encodeFixedWidth, formatField } from '../../src/generator/format/encoder.js';
describe('Encoder utilities', () => {
describe('formatField', () => {
it('should left-align by default with space padding', () => {
expect(formatField('test', 8, 'left')).toBe('test ');
expect(formatField('hello', 10, 'left')).toBe('hello ');
});
it('should right-align with space padding', () => {
expect(formatField('test', 8, 'right')).toBe(' test');
expect(formatField('hello', 10, 'right')).toBe(' hello');
});
it('should use custom padding character for left alignment', () => {
expect(formatField('123', 6, 'left', '0')).toBe('123000');
expect(formatField('abc', 5, 'left', '-')).toBe('abc--');
});
it('should use custom padding character for right alignment', () => {
expect(formatField('123', 6, 'right', '0')).toBe('000123');
expect(formatField('abc', 5, 'right', '-')).toBe('--abc');
});
it('should truncate if value is longer than width', () => {
expect(formatField('verylongstring', 5, 'left')).toBe('veryl');
expect(formatField('verylongstring', 5, 'right')).toBe('veryl');
});
it('should handle empty string', () => {
expect(formatField('', 3, 'left')).toBe(' ');
expect(formatField('', 3, 'right')).toBe(' ');
expect(formatField('', 3, 'left', 'x')).toBe('xxx');
expect(formatField('', 3, 'right', 'x')).toBe('xxx');
});
it('should handle zero width', () => {
expect(formatField('test', 0, 'left')).toBe('');
expect(formatField('test', 0, 'right')).toBe('');
});
});
describe('encodeFixedWidth', () => {
it('should encode string values with left alignment by default', () => {
expect(encodeFixedWidth('test', 8)).toBe('test ');
expect(encodeFixedWidth('hello', 10)).toBe('hello ');
});
it('should encode number values', () => {
expect(encodeFixedWidth(123, 6)).toBe('123 ');
expect(encodeFixedWidth(45.67, 8)).toBe('45.67 ');
});
it('should support right alignment', () => {
expect(encodeFixedWidth('test', 8, ' ', 'right')).toBe(' test');
expect(encodeFixedWidth(123, 6, ' ', 'right')).toBe(' 123');
});
it('should support custom padding characters', () => {
expect(encodeFixedWidth('123', 6, '0')).toBe('123000');
expect(encodeFixedWidth('123', 6, '0', 'right')).toBe('000123');
});
it('should handle boolean values', () => {
expect(encodeFixedWidth('true', 6)).toBe('true ');
expect(encodeFixedWidth('false', 6)).toBe('false ');
});
it('should handle special string values', () => {
expect(encodeFixedWidth('null', 6)).toBe('null ');
expect(encodeFixedWidth('undefined', 10)).toBe('undefined ');
});
it('should truncate long values', () => {
expect(encodeFixedWidth('verylongstring', 5)).toBe('veryl');
expect(encodeFixedWidth(1_234_567, 4)).toBe('1234');
});
});
});