A language-agnostic compliance test suite for validating Fixed Width File (FWF) format implementations across Python, Java, JavaScript, PHP, and more.
Shared test definitions stored in JSON, YAML, and .fwf formats, allowing any programming language to validate its FWF library against a single specification.
Validates basic ASCII parsing, UTF-8 multibyte strings, type-safe column conversions (Char, RightChar, Integer, Decimal, Date, Time, DateTime), header/footer records, and padding edge cases.
Consumable directly via GitHub Release zip archives or Git submodules, facilitating automated testing inside CI/CD pipelines.
| ID | Description | Path |
|---|---|---|
simple |
Basic fixed-width file with ASCII content and a single detail descriptor. | cases/simple |
utf8 |
UTF-8 content with multibyte characters and special symbol alignment. | cases/utf8 |
typed_columns |
Fixed-width file with all supported typed columns (char, right_char, integer, decimal, date, time, datetime). | cases/typed_columns |
header_footer |
File containing explicit Header, Detail, and Footer row types. | cases/header_footer |
padding_and_spaces |
Edge cases for left-aligned, right-aligned, and whitespace-only padding. | cases/padding_and_spaces |
# Download and extract the compliance test suite
FWF_TS_VERSION="v1.0.0"
curl -sL "https://github.com/fixed-width-file/fwf-compliance-tests/archive/refs/heads/main.zip" -o compliance.zip
unzip -q compliance.zip
mkdir -p tests/fwf-compliance
cp -r fwf-compliance-tests-main/cases tests/fwf-compliance/
cp fwf-compliance-tests-main/manifest.json tests/fwf-compliance/
rm -rf compliance.zip fwf-compliance-tests-main
import fs from 'fs';
import path from 'path';
import { FileDescriptor, DetailRowDescriptor, Reader } from '@fixed-width-file/javascript-fwf';
const baseDir = path.join(__dirname, 'fwf-compliance');
const manifest = JSON.parse(fs.readFileSync(path.join(baseDir, 'manifest.json'), 'utf8'));
describe('FWF Compliance Suite', () => {
for (const c of manifest.cases) {
test(`Case: ${c.id}`, () => {
const caseDir = path.join(baseDir, c.path);
const input = fs.readFileSync(path.join(caseDir, 'input.fwf'), 'utf8');
const expected = JSON.parse(fs.readFileSync(path.join(caseDir, 'expected.json'), 'utf8'));
// Perform validation against library reader
// expect(result).toEqual(expected);
});
}
});
import json
from pathlib import Path
import pytest
BASE_DIR = Path(__file__).parent / "fwf-compliance"
def load_cases():
manifest = json.loads((BASE_DIR / "manifest.json").read_text(encoding="utf-8"))
for case in manifest["cases"]:
yield case["id"], BASE_DIR / case["path"]
@pytest.mark.parametrize("case_id,case_dir", load_cases())
def test_fwf_compliance(case_id, case_dir):
input_text = (case_dir / "input.fwf").read_text(encoding="utf-8")
expected = json.loads((case_dir / "expected.json").read_text(encoding="utf-8"))
# assert parse_fwf(input_text) == expected