Skip to content

test(e2e): add agent-half and native renderer-half E2E scenario runners - #3879

Closed
gspencergoog wants to merge 69 commits into
a2ui-project:mainfrom
gspencergoog:test/e2e-scenario-runners-agent-and-native
Closed

gspencergoog wants to merge 69 commits into
a2ui-project:mainfrom
gspencergoog:test/e2e-scenario-runners-agent-and-native

Conversation

@gspencergoog

Copy link
Copy Markdown
Collaborator

Summary

Adds golden-transcript E2E scenario conformance runners across the Python, TypeScript, and Dart agent SDKs (--corpus e2e for python-agent, ts-agent, and dart-agent) as well as the Flutter and SwiftUI renderer adapters (--corpus e2e for flutter and swiftui).

  • Python Agent SDK (python/a2ui_agent/tests/conformance/test_e2e_conformance.py): Replays each scenario turn's agent.input through Catalog.from_json and A2uiRequestProcessor, validates emitted messages against expectServerMessages, and writes .e2e-outcome.json when A2UI_E2E_OUTCOME_OUT is set.
  • TypeScript Agent SDK (typescript/agents/a2ui_agent/tests/conformance/e2e-scenarios.test.ts): Replays each scenario turn's agent.input through Catalog.fromJson and A2uiRequestProcessor, validates emitted messages against expectServerMessages, and writes .e2e-outcome.json when A2UI_E2E_OUTCOME_OUT is set.
  • Dart Agent SDK (dart/a2ui_agent/test/conformance/e2e_scenarios_conformance_test.dart): Replays each scenario turn's agent.input through Catalog.fromJson and A2uiRequestProcessor, validates emitted messages against expectServerMessages, and writes .e2e-outcome.json when A2UI_E2E_OUTCOME_OUT is set.
  • Flutter Adapter (dart/a2ui_flutter/test/e2e_scenarios_test.dart): Replays each scenario turn's expectServerMessages through Catalog.fromJson, MessageProcessor, and A2uiSurfaceView, checks expectRendered and simulate steps, and validates outbound wire envelopes against expectOutbound.
  • SwiftUI Adapter (swift/swiftui/Tests/A2UISwiftUITests/E2EScenarioTests.swift): Replays each scenario turn's expectServerMessages through HostedViewDriver, checks expectRendered and simulate steps, and validates outbound wire envelopes against expectOutbound.

Testing

  • pytest python/a2ui_agent/tests/conformance/test_e2e_conformance.py -q
  • vitest run tests/conformance/e2e-scenarios.test.ts
  • dart test test/conformance/e2e_scenarios_conformance_test.dart
  • flutter test test/e2e_scenarios_test.dart
  • python3 conformance/scripts/check_executed_cases.py --corpus e2e (python-agent, ts-agent, dart-agent, flutter)

… dispatch

Add suite_registry.dart and suite_registry_test.dart to map every conformance/core/*.yaml suite and action to its test file, record executed cases to A2UI_CONFORMANCE_MANIFEST_DIR, enforce known-key checks across all Dart core conformance harnesses, default matchesErrorFields onUnassertedField to fail, and verify the manifest in Flutter CI.
…ispatch

Have the Python core conformance harness emit executed-case manifest records when A2UI_CONFORMANCE_MANIFEST_DIR is set, validate every case and expectation block against known-key tables, verify that UNRUNNABLE_SUITES, UNSUPPORTED, and EXPECTED_FAILURES entries match loaded cases, and check the manifest in Python CI.
…it scaling and skip tables

Re-raise UnknownConformanceKeyError from expected-failure wrappers in Python, Dart, and Swift so YAML schema drift is not recorded as xfailed. Verify SKIP_TEST_NAMES in TypeScript verifyHarnessInvariants, add key validation and manifest recording to Swift MessageProcessorScalingConformanceTests, and update the Swift CI exclude reason.
Allow the payload key in Dart message_processor_scaling_conformance_test, handle .integer in ConformanceTestHelper.fromJSONValue, isolate ConformanceManifest.runAsync to MainActor, and unwrap optional action string interpolation in ValidatorConformanceTests.
…rrors

Wrap captured RendererError values in a reference box in ExpressionsConformanceTests so outboundListener does not mutate a local array while assertValidateStepError holds an active reference.
Add DataError case to ValidatorConformanceTests.assertErrorCategory so test_error_response_update_data_model_prototype_pollution verifies A2UIDataError.
Why: Wireit cached test:conformance with an empty output list, skipping conformance_test.mjs on cache hits and leaving A2UI_CONFORMANCE_MANIFEST_DIR empty when CI runs check_executed_cases.py.
What: Remove the files and output properties from the test:conformance Wireit script so it runs on every test invocation like test and test:timing.
…esses

Add strict key/action dispatch, an executed-case manifest writer, reasoned skip records for unsupported and performance-tagged agent suites, and the CI manifest check for dart/a2ui_agent.
…rnesses

- Remove duplicate recordCase call from skipVerdict in the TypeScript agent conformance loader and drop the redundant recordedSkipped deduplication set in manifest.ts.
- Assert context.add_activated_extension invocations in the Python A2A try_activate_a2ui_extension conformance runner.
- Document the Python A2A and ADK extension conformance harnesses in the harness implementation guide.
…n Python agent harnesses

Add a pytest hookwrapper in python/a2ui_agent/tests/conformance/conftest.py to write executed-case manifest records for the python-agent harness, emit explicit skip marks with reasons for skipped cases, performance-only scaling tests, and unsupported YAML suites, enforce strict expectation key allowlists across the Python agent conformance runners, and verify the python-agent manifest in Python CI.
…ties.json

Validate that get_a2ui_agent_extension emits v1.0 AgentCard extension parameters matching the inner v1.0 object schema in specification/v1_0/json/agent_capabilities.json and remains flat without a redundant version key.
…derer-conformance-manifests

# Conflicts:
#	typescript/renderers/angular/karma.conf.js
#	typescript/renderers/angular/src/adapter_conformance.spec.ts
…ftui-hosted-view-driver

# Conflicts:
#	typescript/renderers/angular/karma.conf.js
#	typescript/renderers/angular/src/adapter_conformance.spec.ts
…pter-conformance-expect-outbound

# Conflicts:
#	typescript/renderers/angular/karma.conf.js
#	typescript/renderers/angular/src/adapter_conformance.spec.ts
…rmance-manifests

# Conflicts:
#	typescript/renderers/lit/src/tests/adapter_conformance.test.ts
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@github-project-automation github-project-automation Bot moved this to Todo in A2UI Nov 3, 2026
@gspencergoog

Copy link
Copy Markdown
Collaborator Author

Consolidated into #3918.

🤖 Agent-generated

@github-project-automation github-project-automation Bot moved this from Todo to Done in A2UI Nov 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant