Skip to content

Import RFC 3339 date-time test vectors from battle-tested parsers across SDKs #111

@EfeDurmaz16

Description

@EfeDurmaz16

Filed from PR #102 review thread (Ludo inline #102 (comment)).

Scope

Import battle-tested RFC 3339 (date-time) test vectors from an established parser's test corpus. Apply the same corpus to every SDK with an expires parser so ACCEPT and REJECT outcomes are mechanically aligned cross-SDK.

Authoritative sources to research

  1. RFC 3339 itself (Klyne / Newman): https://datatracker.ietf.org/doc/html/rfc3339
    • Section 5.8: explicit examples (1985-04-12T23:20:50.52Z, 1996-12-19T16:39:57-08:00, etc).
    • Section 5.6: grammar (date-time = full-date "T" full-time).
    • Section 5.7: leap seconds (sec = 60 accepted).
  2. ISO 8601:2004 (RFC 3339 is a profile): https://www.iso.org/iso-8601-date-and-time-format.html
  3. Battle-tested parsers with their own test corpora:
  4. ICU (International Components for Unicode): https://unicode-org.github.io/icu/userguide/format_parse/datetime/

Edge cases the corpus MUST cover

  • Leap second (sec=60) at 23:59:60Z (RFC 3339 sec 5.7).
  • Lowercase t/z separators (RFC 3339 sec 5.6 allows both; ISO 8601 strict requires uppercase).
  • Sub-microsecond fractional precision (7, 8, 9 fractional digits; PHP's %u format only accepts 6).
  • Timezone offsets at boundary: +00:00, -00:00, +14:00 (max), -12:00 (min).
  • Year 9999 + year 10000 (some parsers explode).
  • Calendar validation: Feb 30, Sep 31, year 2000 leap, year 1900 non-leap.
  • Month / hour / minute boundary: 00:00:00, 23:59:59 (without leap), 23:59:60 (with leap).

Current parsers to harmonize

Cross-SDK scope

Tests should assert ACCEPT and REJECT outcomes match across SDKs for each vector. Single PR that touches every language's RFC 3339 test file.

Out of scope

Do NOT propose fabricated vectors. Label as `m2-followup`.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions