The files in
test/fixtures/conformance/
are
the shared executable contract for Flutter and Kotlin Core MVP implementations.
core_mvp.schema.jsondefines the fixture envelope.core_mvp_cases.jsoncontains deterministic inputs and expected outputs.flutter_report.jsonis the machine-readable Flutter conformance report.sampling_vectors.jsoncontains the complete Unicode FNV-1a vectors used by both SDKs.
Fixture case IDs are stable within a fixture major version. Adding a backward-compatible case increments the fixture minor version. Changing an existing input or expected result increments the fixture major version.
The Android repository MUST copy or consume the fixture files without rewriting their values. Its runner MUST:
- Reject an unsupported
specVersionor fixture major version. - Validate the fixture envelope against
core_mvp.schema.json. - Execute every case according to its
behaviorvalue. - Compare ordered arrays exactly; tracker ordering is observable.
- Use UTF-8 and unsigned 32-bit FNV-1a for sampling cases.
- Avoid wall-clock time, random identifiers, network calls, and Android device state while evaluating fixtures.
- Emit a JSON report with
specVersion,fixtureVersion,implementation,total,passed,failed, and orderedcaseIds. - Exit unsuccessfully when schema validation or any case fails.
Example Kotlin report:
{
"specVersion": "1.0.0",
"fixtureVersion": "1.0.0",
"implementation": "kotlin",
"total": 8,
"passed": 8,
"failed": 0,
"caseIds": ["routing.priority-overlap"]
}The abbreviated caseIds above is illustrative; a real passing report MUST
contain every fixture ID in fixture order.
The MVP suite covers priority overlap, same-tier merging, fallback, missing general consent, missing PII consent, Unicode sampling, enrichment identity and property precedence, and the debug dispatch decision. Later capabilities such as offline queues and retry are intentionally excluded until their contracts are versioned.
Run the Flutter suite with:
flutter test test/contract