fwf-compliance-tests

A language-agnostic compliance test suite for validating Fixed Width File (FWF) format implementations across Python, Java, JavaScript, PHP, and more.

Suite Version v1.0.0 5 Test Cases Language-Agnostic Semantic Versioning

๐Ÿงช Language-Agnostic

Shared test definitions stored in JSON, YAML, and .fwf formats, allowing any programming language to validate its FWF library against a single specification.

๐Ÿ“œ Standardized Specifications

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.

๐Ÿ“ฆ Portable Release Bundles

Consumable directly via GitHub Release zip archives or Git submodules, facilitating automated testing inside CI/CD pipelines.

Official Compliance Test Cases (v1.0.0)

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

Consuming Test Suite in CI / Test Runners

1. Downloading via GitHub Release Zip

# 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

2. Example: JavaScript (Vitest / Jest)

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);
    });
  }
});

3. Example: Python (pytest)

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