robotframework-javagui 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- robotframework_javagui-0.6.0/.github/workflows/ci.yml +194 -0
- robotframework_javagui-0.6.0/.github/workflows/release.yml +255 -0
- robotframework_javagui-0.6.0/.gitignore +148 -0
- robotframework_javagui-0.6.0/.python-version +1 -0
- robotframework_javagui-0.6.0/AGENTS.md +39 -0
- robotframework_javagui-0.6.0/Cargo.lock +1661 -0
- robotframework_javagui-0.6.0/Cargo.toml +81 -0
- robotframework_javagui-0.6.0/LICENSE +201 -0
- robotframework_javagui-0.6.0/PKG-INFO +1140 -0
- robotframework_javagui-0.6.0/README.md +1099 -0
- robotframework_javagui-0.6.0/agent/build-swt-agent.sh +94 -0
- robotframework_javagui-0.6.0/agent/pom.xml +363 -0
- robotframework_javagui-0.6.0/agent/src/disabled/DisplayHelper.java +323 -0
- robotframework_javagui-0.6.0/agent/src/disabled/SwtActionExecutor.java +1573 -0
- robotframework_javagui-0.6.0/agent/src/disabled/SwtAgent.java +133 -0
- robotframework_javagui-0.6.0/agent/src/disabled/SwtRpcServer.java +2244 -0
- robotframework_javagui-0.6.0/agent/src/disabled/WidgetInspector.java +884 -0
- robotframework_javagui-0.6.0/agent/src/disabled/WorkbenchInspector.java +841 -0
- robotframework_javagui-0.6.0/agent/src/disabled/WorkbenchInspector.java.rcp +841 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/UnifiedAgent.java +265 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swing/ActionExecutor.java +1309 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swing/Agent.java +118 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swing/ComponentInspector.java +922 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swing/EdtHelper.java +254 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swing/RpcServer.java +453 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/DisplayHelper.java +323 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/EclipseWorkbenchHelper.java +613 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/RcpComponentInspector.java +638 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/SwtActionExecutor.java +1573 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/SwtAgent.java +133 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/SwtReflectionBridge.java +1598 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/SwtReflectionRpcServer.java +2053 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/SwtRpcServer.java +2265 -0
- robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/WidgetInspector.java +884 -0
- robotframework_javagui-0.6.0/agent/src/main/resources/META-INF/MANIFEST.MF +5 -0
- robotframework_javagui-0.6.0/agent/src/test/java/com/robotframework/swing/ClickRetargetingTest.java +76 -0
- robotframework_javagui-0.6.0/agent/src/test/java/com/robotframework/swing/ComponentTreeBenchmark.java +425 -0
- robotframework_javagui-0.6.0/benches/component_tree_benchmark.rs +528 -0
- robotframework_javagui-0.6.0/benches/element_benchmark.rs +421 -0
- robotframework_javagui-0.6.0/benches/locator_benchmark.rs +294 -0
- robotframework_javagui-0.6.0/benches/rpc_benchmark.rs +387 -0
- robotframework_javagui-0.6.0/benches/tree_depth_benchmark.rs +310 -0
- robotframework_javagui-0.6.0/docs/API_CHANGES_COMPONENT_TREE.md +267 -0
- robotframework_javagui-0.6.0/docs/COMPONENT_TREE_DOCUMENTATION_INDEX.md +199 -0
- robotframework_javagui-0.6.0/docs/COMPONENT_TREE_FILTERING_GUIDE.md +106 -0
- robotframework_javagui-0.6.0/docs/COMPONENT_TREE_QUICK_REFERENCE.md +277 -0
- robotframework_javagui-0.6.0/docs/COMPONENT_TREE_QUICK_START.md +372 -0
- robotframework_javagui-0.6.0/docs/DDD_VISIBILITY_DESIGN.md +995 -0
- robotframework_javagui-0.6.0/docs/DEPLOYMENT_CHECKLIST.md +685 -0
- robotframework_javagui-0.6.0/docs/FEATURE_COMPARISON_CHART.md +425 -0
- robotframework_javagui-0.6.0/docs/FEATURE_COMPARISON_MATRIX.md +642 -0
- robotframework_javagui-0.6.0/docs/FEATURE_PARITY_IMPLEMENTATION_PLAN.md +765 -0
- robotframework_javagui-0.6.0/docs/JAVAGUI_SWING_AUTOMATION_REPORT_v2.md +636 -0
- robotframework_javagui-0.6.0/docs/MIGRATION_GUIDE.md +440 -0
- robotframework_javagui-0.6.0/docs/OUTPUT_FORMATS_GUIDE.md +520 -0
- robotframework_javagui-0.6.0/docs/OUTPUT_FORMATS_QUICK_REFERENCE.md +152 -0
- robotframework_javagui-0.6.0/docs/OUTPUT_FORMAT_QUICK_REFERENCE.md +283 -0
- robotframework_javagui-0.6.0/docs/PERFORMANCE_OPTIMIZATION_GUIDE.md +438 -0
- robotframework_javagui-0.6.0/docs/RCP_COMPONENT_TREE_GUIDE.md +500 -0
- robotframework_javagui-0.6.0/docs/RELEASE_NOTES_v0.4.1.md +26 -0
- robotframework_javagui-0.6.0/docs/RELEASE_NOTES_v0.5.0.md +58 -0
- robotframework_javagui-0.6.0/docs/RELEASE_NOTES_v0.6.0.md +55 -0
- robotframework_javagui-0.6.0/docs/RUNNING_BENCHMARKS.md +523 -0
- robotframework_javagui-0.6.0/docs/SOLUTION_PROPOSAL.md +315 -0
- robotframework_javagui-0.6.0/docs/SOLUTION_PROPOSAL_V2.md +408 -0
- robotframework_javagui-0.6.0/docs/SWT_BACKEND_ANALYSIS.md +310 -0
- robotframework_javagui-0.6.0/docs/SWT_BACKEND_ENABLED.md +340 -0
- robotframework_javagui-0.6.0/docs/SWT_QUICK_START.md +328 -0
- robotframework_javagui-0.6.0/docs/SWT_RUST_INTEGRATION_PLAN.md +457 -0
- robotframework_javagui-0.6.0/docs/TIMING_TESTS_FIX.md +178 -0
- robotframework_javagui-0.6.0/docs/USER_PERFORMANCE_GUIDE.md +493 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-001-DDD-ARCHITECTURE.md +1160 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-001-unified-base-class-architecture.md +309 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-002-locator-syntax-strategy.md +448 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-003-keyword-naming-convention.md +384 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-004-technology-detection-and-mode-selection.md +495 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-005-error-handling-strategy.md +610 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-006-backwards-compatibility-approach.md +622 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-007-UNIFIED-KEYWORD-API.md +934 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-008-security-architecture.md +1464 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-009-implementation-and-migration-plan.md +1545 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-010-ASSERTIONENGINE-INTEGRATION.md +1130 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-011-PYTHON-KEYWORD-LAYER.md +1688 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-012-LOCATOR-ASSERTION-FLOW.md +900 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-013-SECURITY-ASSERTIONENGINE.md +968 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-014-IMPLEMENTATION-PLAN-ASSERTIONENGINE.md +2051 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-015-TIERED-VISIBILITY-STRATEGY.md +1180 -0
- robotframework_javagui-0.6.0/docs/adr/ADR-016-RF-TIMESTRING-SUPPORT.md +529 -0
- robotframework_javagui-0.6.0/docs/adr/README.md +165 -0
- robotframework_javagui-0.6.0/docs/adr/architecture-decision-records.md +929 -0
- robotframework_javagui-0.6.0/docs/api-reference/COMPONENT_TREE_API.md +713 -0
- robotframework_javagui-0.6.0/docs/api-reference/COMPONENT_TREE_OPENAPI.yaml +706 -0
- robotframework_javagui-0.6.0/docs/api-reference/python-api.md +754 -0
- robotframework_javagui-0.6.0/docs/api-reference/robot-keywords.md +1131 -0
- robotframework_javagui-0.6.0/docs/architecture/ASSERTION_ENGINE_INTEGRATION.md +251 -0
- robotframework_javagui-0.6.0/docs/architecture/CASCADED_SELECTOR_ARCHITECTURE_ANALYSIS.md +1524 -0
- robotframework_javagui-0.6.0/docs/architecture/DDD_ARCHITECTURE_DESIGN.md +1010 -0
- robotframework_javagui-0.6.0/docs/architecture/SWT_CLASSLOADER_SOLUTION.md +482 -0
- robotframework_javagui-0.6.0/docs/architecture/SWT_RCP_ASSERTION_ENGINE.md +1015 -0
- robotframework_javagui-0.6.0/docs/architecture/UNIFIED_LIBRARY_ARCHITECTURE.md +1449 -0
- robotframework_javagui-0.6.0/docs/architecture/ui-tree-system.md +2775 -0
- robotframework_javagui-0.6.0/docs/ddd-design-model.md +902 -0
- robotframework_javagui-0.6.0/docs/examples/output_format_examples.md +606 -0
- robotframework_javagui-0.6.0/docs/keywords/Rcp.html +387 -0
- robotframework_javagui-0.6.0/docs/keywords/Swing.html +387 -0
- robotframework_javagui-0.6.0/docs/keywords/Swt.html +387 -0
- robotframework_javagui-0.6.0/docs/performance/COMPONENT_TREE_PERFORMANCE.md +310 -0
- robotframework_javagui-0.6.0/docs/performance/INDEX.md +54 -0
- robotframework_javagui-0.6.0/docs/performance/OPTIMIZATION_RECOMMENDATIONS.md +503 -0
- robotframework_javagui-0.6.0/docs/performance/PROFILING_GUIDE.md +490 -0
- robotframework_javagui-0.6.0/docs/performance/README.md +221 -0
- robotframework_javagui-0.6.0/docs/performance/benchmark_raw_results.txt +184 -0
- robotframework_javagui-0.6.0/docs/research/CODEBASE_ANALYSIS.md +912 -0
- robotframework_javagui-0.6.0/docs/research/DOCSTRING_SPECIFICATION.md +643 -0
- robotframework_javagui-0.6.0/docs/research/HEADER_RENDERING_ISSUE_ANALYSIS.md +556 -0
- robotframework_javagui-0.6.0/docs/research/INTRODUCTION_COMPARISON_ANALYSIS.md +503 -0
- robotframework_javagui-0.6.0/docs/research/README.md +380 -0
- robotframework_javagui-0.6.0/docs/research/ROOT_CAUSE_ANALYSIS_BROWSER_VS_ROBOTFRAMEWORK_SWING.md +1206 -0
- robotframework_javagui-0.6.0/docs/research/Update_Keywords.md +533 -0
- robotframework_javagui-0.6.0/docs/research/docstring_analysis.md +493 -0
- robotframework_javagui-0.6.0/docs/specs/CASCADED_SELECTOR_IMPLEMENTATION_PLAN.md +1668 -0
- robotframework_javagui-0.6.0/docs/specs/CASCADED_SELECTOR_SPECIFICATION.md +1210 -0
- robotframework_javagui-0.6.0/docs/specs/COMPONENT_TREE_INVESTIGATION_OVERVIEW.md +979 -0
- robotframework_javagui-0.6.0/docs/specs/UI_COMPONENT_TREE_IMPLEMENTATION_PLAN.md +1816 -0
- robotframework_javagui-0.6.0/docs/test-plans/CASCADED_SELECTOR_TEST_PLAN.md +773 -0
- robotframework_javagui-0.6.0/docs/test-plans/README.md +180 -0
- robotframework_javagui-0.6.0/docs/test-plans/TEST_EXECUTION_CHECKLIST.md +302 -0
- robotframework_javagui-0.6.0/docs/test_swing_no_headers.html +387 -0
- robotframework_javagui-0.6.0/docs/user-guide/COMPONENT_TREE_GUIDE.md +827 -0
- robotframework_javagui-0.6.0/docs/user-guide/COMPONENT_TREE_MIGRATION_GUIDE.md +616 -0
- robotframework_javagui-0.6.0/docs/user-guide/COMPONENT_TREE_TROUBLESHOOTING.md +747 -0
- robotframework_javagui-0.6.0/docs/user-guide/locator-reference.md +518 -0
- robotframework_javagui-0.6.0/docs/user-guide/migration-guide.md +563 -0
- robotframework_javagui-0.6.0/docs/user-guide/unified-library.md +445 -0
- robotframework_javagui-0.6.0/examples/README.md +283 -0
- robotframework_javagui-0.6.0/examples/component_tree_advanced.robot +232 -0
- robotframework_javagui-0.6.0/examples/component_tree_basic.robot +125 -0
- robotframework_javagui-0.6.0/examples/component_tree_filtering.robot +319 -0
- robotframework_javagui-0.6.0/examples/component_tree_formats.robot +377 -0
- robotframework_javagui-0.6.0/examples/output_formats.robot +251 -0
- robotframework_javagui-0.6.0/examples/verify_bug_fixes.py +173 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/.openspec.yaml +3 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/README.md +3 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/design.md +59 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/proposal.md +29 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/specs/click-retargeting/spec.md +23 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/specs/locator-chain-matching/spec.md +27 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/tasks.md +25 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/.openspec.yaml +4 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/README.md +3 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/design.md +67 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/proposal.md +33 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/specs/showcase-action-proof/spec.md +57 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/tasks.md +34 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/.openspec.yaml +3 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/README.md +3 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/design.md +84 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/proposal.md +32 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/specs/e2e-keyword-coverage/spec.md +26 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/specs/keyword-honesty/spec.md +26 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/specs/rcp-real-eclipse-validation/spec.md +30 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/specs/release-documentation-accuracy/spec.md +30 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/specs/release-repository-hygiene/spec.md +26 -0
- robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/tasks.md +57 -0
- robotframework_javagui-0.6.0/openspec/config.yaml +20 -0
- robotframework_javagui-0.6.0/openspec/specs/click-retargeting/spec.md +27 -0
- robotframework_javagui-0.6.0/openspec/specs/e2e-keyword-coverage/spec.md +30 -0
- robotframework_javagui-0.6.0/openspec/specs/keyword-honesty/spec.md +30 -0
- robotframework_javagui-0.6.0/openspec/specs/locator-chain-matching/spec.md +31 -0
- robotframework_javagui-0.6.0/openspec/specs/rcp-real-eclipse-validation/spec.md +34 -0
- robotframework_javagui-0.6.0/openspec/specs/release-documentation-accuracy/spec.md +34 -0
- robotframework_javagui-0.6.0/openspec/specs/release-repository-hygiene/spec.md +30 -0
- robotframework_javagui-0.6.0/openspec/specs/showcase-action-proof/spec.md +61 -0
- robotframework_javagui-0.6.0/pyproject.toml +96 -0
- robotframework_javagui-0.6.0/python/JavaGui/__init__.py +3631 -0
- robotframework_javagui-0.6.0/python/JavaGui/assertions/__init__.py +242 -0
- robotframework_javagui-0.6.0/python/JavaGui/assertions/formatters.py +56 -0
- robotframework_javagui-0.6.0/python/JavaGui/assertions/security.py +354 -0
- robotframework_javagui-0.6.0/python/JavaGui/deprecation.py +346 -0
- robotframework_javagui-0.6.0/python/JavaGui/keywords/__init__.py +21 -0
- robotframework_javagui-0.6.0/python/JavaGui/keywords/getters.py +438 -0
- robotframework_javagui-0.6.0/python/JavaGui/keywords/rcp_keywords.py +628 -0
- robotframework_javagui-0.6.0/python/JavaGui/keywords/swt_getters.py +498 -0
- robotframework_javagui-0.6.0/python/JavaGui/keywords/swt_tables.py +420 -0
- robotframework_javagui-0.6.0/python/JavaGui/keywords/swt_trees.py +434 -0
- robotframework_javagui-0.6.0/python/JavaGui/keywords/tables.py +844 -0
- robotframework_javagui-0.6.0/python/JavaGui/py.typed +0 -0
- robotframework_javagui-0.6.0/python/JavaGui/validation.py +22 -0
- robotframework_javagui-0.6.0/schemas/ui-tree.schema.json +518 -0
- robotframework_javagui-0.6.0/scripts/analyze_benchmarks.py +209 -0
- robotframework_javagui-0.6.0/scripts/ci/cleanup-test-apps.ps1 +21 -0
- robotframework_javagui-0.6.0/scripts/ci/cleanup-test-apps.sh +14 -0
- robotframework_javagui-0.6.0/scripts/ci/diagnostic-swing.ps1 +56 -0
- robotframework_javagui-0.6.0/scripts/ci/diagnostic-swing.sh +61 -0
- robotframework_javagui-0.6.0/scripts/ci/diagnostic-swt.ps1 +56 -0
- robotframework_javagui-0.6.0/scripts/ci/diagnostic-swt.sh +65 -0
- robotframework_javagui-0.6.0/scripts/ci/win-tools/lsof.cmd +2 -0
- robotframework_javagui-0.6.0/scripts/ci/win-tools/lsof.ps1 +16 -0
- robotframework_javagui-0.6.0/scripts/ci/win-tools/nc.cmd +2 -0
- robotframework_javagui-0.6.0/scripts/ci/win-tools/nc.ps1 +16 -0
- robotframework_javagui-0.6.0/scripts/keyword_coverage.py +113 -0
- robotframework_javagui-0.6.0/scripts/run_performance_benchmarks.py +429 -0
- robotframework_javagui-0.6.0/scripts/run_tests.sh +130 -0
- robotframework_javagui-0.6.0/scripts/validate_benchmarks.sh +56 -0
- robotframework_javagui-0.6.0/scripts/verify_phase6_implementation.sh +226 -0
- robotframework_javagui-0.6.0/src/connection/mod.rs +357 -0
- robotframework_javagui-0.6.0/src/core/backend.rs +477 -0
- robotframework_javagui-0.6.0/src/core/config.rs +850 -0
- robotframework_javagui-0.6.0/src/core/element.rs +1351 -0
- robotframework_javagui-0.6.0/src/core/element_cache.rs +412 -0
- robotframework_javagui-0.6.0/src/core/mod.rs +17 -0
- robotframework_javagui-0.6.0/src/core/tests.rs +941 -0
- robotframework_javagui-0.6.0/src/core/type_mapping.rs +420 -0
- robotframework_javagui-0.6.0/src/error.rs +251 -0
- robotframework_javagui-0.6.0/src/lib.rs +113 -0
- robotframework_javagui-0.6.0/src/locator/ast.rs +515 -0
- robotframework_javagui-0.6.0/src/locator/cache.rs +442 -0
- robotframework_javagui-0.6.0/src/locator/expression.rs +487 -0
- robotframework_javagui-0.6.0/src/locator/grammar.pest +367 -0
- robotframework_javagui-0.6.0/src/locator/matcher.rs +1373 -0
- robotframework_javagui-0.6.0/src/locator/mod.rs +38 -0
- robotframework_javagui-0.6.0/src/locator/parser.rs +1383 -0
- robotframework_javagui-0.6.0/src/locator/swt_matcher.rs +2356 -0
- robotframework_javagui-0.6.0/src/locator/unified.rs +2441 -0
- robotframework_javagui-0.6.0/src/locator/unified_tests.rs +864 -0
- robotframework_javagui-0.6.0/src/model/component.rs +564 -0
- robotframework_javagui-0.6.0/src/model/element.rs +552 -0
- robotframework_javagui-0.6.0/src/model/mod.rs +64 -0
- robotframework_javagui-0.6.0/src/model/rcp.rs +819 -0
- robotframework_javagui-0.6.0/src/model/tree.rs +408 -0
- robotframework_javagui-0.6.0/src/model/widget.rs +2082 -0
- robotframework_javagui-0.6.0/src/protocol/mod.rs +234 -0
- robotframework_javagui-0.6.0/src/python/base_library.rs +1278 -0
- robotframework_javagui-0.6.0/src/python/element.rs +530 -0
- robotframework_javagui-0.6.0/src/python/exceptions.rs +473 -0
- robotframework_javagui-0.6.0/src/python/mod.rs +47 -0
- robotframework_javagui-0.6.0/src/python/rcp_library.rs +2072 -0
- robotframework_javagui-0.6.0/src/python/swing_library.rs +3582 -0
- robotframework_javagui-0.6.0/src/python/swt_element.rs +510 -0
- robotframework_javagui-0.6.0/src/python/swt_library.rs +1707 -0
- robotframework_javagui-0.6.0/src/python/tests.rs +268 -0
- robotframework_javagui-0.6.0/src/python/unified_element.rs +0 -0
- robotframework_javagui-0.6.0/src/python/unified_exceptions.rs +1256 -0
- robotframework_javagui-0.6.0/tasks.py +387 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/build-and-run-real-eclipse.sh +69 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/META-INF/MANIFEST.MF +23 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/build.properties +6 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/plugin.xml +598 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/Activator.java +46 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/Application.java +55 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/ApplicationActionBarAdvisor.java +140 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/ApplicationWorkbenchAdvisor.java +61 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/ApplicationWorkbenchWindowAdvisor.java +60 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/DataPerspective.java +67 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/DebugPerspective.java +76 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/Perspective.java +90 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/editors/FileEditorInput.java +77 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/editors/FormEditor.java +305 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/editors/SimpleTextEditor.java +174 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/editors/XmlEditor.java +213 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/views/ConsoleView.java +202 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/views/NavigatorView.java +250 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/views/OutlineView.java +155 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/views/PropertiesView.java +239 -0
- robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/views/TasksView.java +185 -0
- robotframework_javagui-0.6.0/tests/apps/rcp-mock/pom.xml +145 -0
- robotframework_javagui-0.6.0/tests/apps/rcp-mock/src/main/java/testapp/rcp/MockRcpApplication.java +1541 -0
- robotframework_javagui-0.6.0/tests/apps/swing/pom.xml +147 -0
- robotframework_javagui-0.6.0/tests/apps/swing/src/main/java/testapp/SwingTestApp.java +1144 -0
- robotframework_javagui-0.6.0/tests/apps/swt/pom.xml +273 -0
- robotframework_javagui-0.6.0/tests/apps/swt/src/main/java/testapp/SwtTestApp.java +1811 -0
- robotframework_javagui-0.6.0/tests/python/__init__.py +3 -0
- robotframework_javagui-0.6.0/tests/python/conftest.py +906 -0
- robotframework_javagui-0.6.0/tests/python/pytest.ini +11 -0
- robotframework_javagui-0.6.0/tests/python/test_assertions.py +1263 -0
- robotframework_javagui-0.6.0/tests/python/test_benchmark.py +387 -0
- robotframework_javagui-0.6.0/tests/python/test_component_tree.py +446 -0
- robotframework_javagui-0.6.0/tests/python/test_component_tree_benchmarks.py +652 -0
- robotframework_javagui-0.6.0/tests/python/test_component_tree_filtering.py +530 -0
- robotframework_javagui-0.6.0/tests/python/test_component_tree_unit.py +382 -0
- robotframework_javagui-0.6.0/tests/python/test_errors.py +229 -0
- robotframework_javagui-0.6.0/tests/python/test_formatter_performance.py +276 -0
- robotframework_javagui-0.6.0/tests/python/test_getter_keywords.py +477 -0
- robotframework_javagui-0.6.0/tests/python/test_integration.py +246 -0
- robotframework_javagui-0.6.0/tests/python/test_locators.py +340 -0
- robotframework_javagui-0.6.0/tests/python/test_output_formatters.py +458 -0
- robotframework_javagui-0.6.0/tests/python/test_output_formatters_integration.py +384 -0
- robotframework_javagui-0.6.0/tests/python/test_rcp_assertions.py +1182 -0
- robotframework_javagui-0.6.0/tests/python/test_rcp_component_tree.py +491 -0
- robotframework_javagui-0.6.0/tests/python/test_swing_element.py +278 -0
- robotframework_javagui-0.6.0/tests/python/test_swing_library.py +477 -0
- robotframework_javagui-0.6.0/tests/python/test_swt_assertions.py +965 -0
- robotframework_javagui-0.6.0/tests/python/test_tree_depth_control.py +310 -0
- robotframework_javagui-0.6.0/tests/python/test_utils.py +299 -0
- robotframework_javagui-0.6.0/tests/python/test_wrapper_fix_verification.py +315 -0
- robotframework_javagui-0.6.0/tests/python/test_wrapper_implementation_verification.py +342 -0
- robotframework_javagui-0.6.0/tests/requirements.txt +19 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/01_connection.robot +203 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/02_workbench.robot +140 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/03_perspectives.robot +262 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/04_views.robot +396 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/05_editors.robot +530 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/06_menus.robot +246 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/07_commands.robot +264 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/08_toolbar.robot +178 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/09_preferences.robot +233 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/10_widgets.robot +441 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/11_coverage_editors_views.robot +47 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/real_eclipse/01_real_workbench.robot +67 -0
- robotframework_javagui-0.6.0/tests/robot/rcp/resources/common.resource +388 -0
- robotframework_javagui-0.6.0/tests/robot/showcase/01_smoke.robot +31 -0
- robotframework_javagui-0.6.0/tests/robot/showcase/02_validated_actions.robot +68 -0
- robotframework_javagui-0.6.0/tests/robot/showcase/03_tile_navigation.robot +44 -0
- robotframework_javagui-0.6.0/tests/robot/showcase/README.md +88 -0
- robotframework_javagui-0.6.0/tests/robot/showcase/resources/showcase.resource +127 -0
- robotframework_javagui-0.6.0/tests/robot/swing/01_connection.robot +243 -0
- robotframework_javagui-0.6.0/tests/robot/swing/02_element_finding.robot +366 -0
- robotframework_javagui-0.6.0/tests/robot/swing/03_buttons.robot +367 -0
- robotframework_javagui-0.6.0/tests/robot/swing/04_text_input.robot +383 -0
- robotframework_javagui-0.6.0/tests/robot/swing/05_selection.robot +396 -0
- robotframework_javagui-0.6.0/tests/robot/swing/06_tables.robot +482 -0
- robotframework_javagui-0.6.0/tests/robot/swing/07_trees.robot +415 -0
- robotframework_javagui-0.6.0/tests/robot/swing/08_menus.robot +394 -0
- robotframework_javagui-0.6.0/tests/robot/swing/09_waits.robot +373 -0
- robotframework_javagui-0.6.0/tests/robot/swing/10_verification.robot +501 -0
- robotframework_javagui-0.6.0/tests/robot/swing/11_spinner_slider.robot +139 -0
- robotframework_javagui-0.6.0/tests/robot/swing/12_tabs.robot +148 -0
- robotframework_javagui-0.6.0/tests/robot/swing/13_dialogs.robot +165 -0
- robotframework_javagui-0.6.0/tests/robot/swing/14_progressbar.robot +107 -0
- robotframework_javagui-0.6.0/tests/robot/swing/15_labels.robot +145 -0
- robotframework_javagui-0.6.0/tests/robot/swing/16_cascaded_basic.robot +295 -0
- robotframework_javagui-0.6.0/tests/robot/swing/17_cascaded_engines.robot +628 -0
- robotframework_javagui-0.6.0/tests/robot/swing/18_cascaded_capture.robot +412 -0
- robotframework_javagui-0.6.0/tests/robot/swing/19_cascaded_tables.robot +535 -0
- robotframework_javagui-0.6.0/tests/robot/swing/21_coverage_getters.robot +58 -0
- robotframework_javagui-0.6.0/tests/robot/swing/resources/cascaded_selectors.resource +696 -0
- robotframework_javagui-0.6.0/tests/robot/swing/resources/common.resource +280 -0
- robotframework_javagui-0.6.0/tests/robot/swt/01_connection.robot +216 -0
- robotframework_javagui-0.6.0/tests/robot/swt/02_shells.robot +201 -0
- robotframework_javagui-0.6.0/tests/robot/swt/02_widgets.robot +184 -0
- robotframework_javagui-0.6.0/tests/robot/swt/03_tables.robot +249 -0
- robotframework_javagui-0.6.0/tests/robot/swt/03_widget_finding.robot +299 -0
- robotframework_javagui-0.6.0/tests/robot/swt/04_clicks.robot +303 -0
- robotframework_javagui-0.6.0/tests/robot/swt/04_trees.robot +262 -0
- robotframework_javagui-0.6.0/tests/robot/swt/05_text_input.robot +346 -0
- robotframework_javagui-0.6.0/tests/robot/swt/06_selection.robot +381 -0
- robotframework_javagui-0.6.0/tests/robot/swt/20_coverage_getters.robot +87 -0
- robotframework_javagui-0.6.0/tests/robot/swt/resources/common.resource +957 -0
- robotframework_javagui-0.6.0/tests/scripts/comprehensive_test_report.py +182 -0
- robotframework_javagui-0.6.0/tests/test_empty_locator.py +57 -0
- robotframework_javagui-0.6.0/tests/unit/test_empty_locator_validation.py +211 -0
- robotframework_javagui-0.6.0/tests/unit/test_list_shells_and_retry.py +282 -0
- robotframework_javagui-0.6.0/tests/verify_empty_locator_fix.robot +15 -0
- robotframework_javagui-0.6.0/uv.lock +1718 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
build-test:
|
|
9
|
+
runs-on: ${{ matrix.os }}
|
|
10
|
+
strategy:
|
|
11
|
+
fail-fast: false
|
|
12
|
+
matrix:
|
|
13
|
+
os: [ubuntu-latest, windows-latest, macos-14]
|
|
14
|
+
python: ["3.10", "3.12", "3.14"]
|
|
15
|
+
defaults:
|
|
16
|
+
run:
|
|
17
|
+
shell: bash
|
|
18
|
+
env:
|
|
19
|
+
CARGO_TERM_COLOR: always
|
|
20
|
+
RUST_BACKTRACE: 1
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- name: Setup uv
|
|
27
|
+
uses: astral-sh/setup-uv@v2
|
|
28
|
+
with:
|
|
29
|
+
version: latest
|
|
30
|
+
|
|
31
|
+
- name: Setup Python (primary, via uv)
|
|
32
|
+
id: setup_python_primary
|
|
33
|
+
run: uv python install ${{ matrix.python }}
|
|
34
|
+
continue-on-error: ${{ matrix.python == '3.14' }}
|
|
35
|
+
|
|
36
|
+
- name: Setup Python (fallback to 3.13, via uv)
|
|
37
|
+
if: ${{ matrix.python == '3.14' && steps.setup_python_primary.outcome == 'failure' }}
|
|
38
|
+
run: uv python install 3.13
|
|
39
|
+
|
|
40
|
+
- name: Show uv and Python versions
|
|
41
|
+
run: |
|
|
42
|
+
uv --version
|
|
43
|
+
uv run python --version
|
|
44
|
+
|
|
45
|
+
- name: Setup Java 17
|
|
46
|
+
uses: actions/setup-java@v4
|
|
47
|
+
with:
|
|
48
|
+
distribution: temurin
|
|
49
|
+
java-version: "17"
|
|
50
|
+
cache: maven
|
|
51
|
+
|
|
52
|
+
- name: Setup Rust (stable)
|
|
53
|
+
uses: dtolnay/rust-toolchain@stable
|
|
54
|
+
|
|
55
|
+
- name: Cache Cargo
|
|
56
|
+
uses: actions/cache@v4
|
|
57
|
+
with:
|
|
58
|
+
path: |
|
|
59
|
+
~/.cargo/registry
|
|
60
|
+
~/.cargo/git
|
|
61
|
+
target
|
|
62
|
+
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}
|
|
63
|
+
restore-keys: |
|
|
64
|
+
${{ runner.os }}-cargo-
|
|
65
|
+
|
|
66
|
+
- name: Install dependencies (dev)
|
|
67
|
+
run: uv sync --all-extras --group dev
|
|
68
|
+
|
|
69
|
+
- name: Install build tools
|
|
70
|
+
run: uv tool install maturin
|
|
71
|
+
|
|
72
|
+
- name: Install Linux UI dependencies
|
|
73
|
+
if: runner.os == 'Linux'
|
|
74
|
+
run: |
|
|
75
|
+
sudo apt-get update
|
|
76
|
+
sudo apt-get install -y \
|
|
77
|
+
xvfb \
|
|
78
|
+
libgtk-3-0 \
|
|
79
|
+
libglib2.0-0 \
|
|
80
|
+
libx11-6 \
|
|
81
|
+
libxext6 \
|
|
82
|
+
libxrender1 \
|
|
83
|
+
libxtst6 \
|
|
84
|
+
libxi6 \
|
|
85
|
+
libxrandr2 \
|
|
86
|
+
libxcomposite1 \
|
|
87
|
+
libxdamage1 \
|
|
88
|
+
libxkbcommon0
|
|
89
|
+
sudo apt-get install -y libasound2 || sudo apt-get install -y libasound2t64
|
|
90
|
+
|
|
91
|
+
- name: Start Xvfb
|
|
92
|
+
if: runner.os == 'Linux'
|
|
93
|
+
run: |
|
|
94
|
+
Xvfb :99 -screen 0 1920x1080x24 > /tmp/xvfb.log 2>&1 &
|
|
95
|
+
echo "DISPLAY=:99" >> "$GITHUB_ENV"
|
|
96
|
+
|
|
97
|
+
- name: Build test apps (Swing/SWT/RCP-mock)
|
|
98
|
+
if: runner.os != 'macOS'
|
|
99
|
+
run: |
|
|
100
|
+
cd tests/apps
|
|
101
|
+
(cd swing && mvn clean package)
|
|
102
|
+
(cd swt && mvn clean package)
|
|
103
|
+
(cd rcp-mock && mvn clean package)
|
|
104
|
+
|
|
105
|
+
- name: Build test apps (Swing/SWT/RCP-mock, macOS arm64)
|
|
106
|
+
if: runner.os == 'macOS'
|
|
107
|
+
run: |
|
|
108
|
+
cd tests/apps
|
|
109
|
+
(cd swing && mvn clean package)
|
|
110
|
+
(cd swt && mvn clean package -Pswt-mac-arm64)
|
|
111
|
+
(cd rcp-mock && mvn clean package -Pswt-mac-arm64)
|
|
112
|
+
|
|
113
|
+
- name: Build full package (agent + wheel)
|
|
114
|
+
run: uv run invoke build
|
|
115
|
+
|
|
116
|
+
- name: Add Windows port tools to PATH
|
|
117
|
+
if: runner.os == 'Windows'
|
|
118
|
+
shell: pwsh
|
|
119
|
+
run: |
|
|
120
|
+
Add-Content -Path $env:GITHUB_PATH -Value "$PWD\\scripts\\ci\\win-tools"
|
|
121
|
+
|
|
122
|
+
- name: Diagnostic Swing app startup (Linux/macOS)
|
|
123
|
+
if: runner.os != 'Windows'
|
|
124
|
+
run: bash scripts/ci/diagnostic-swing.sh
|
|
125
|
+
|
|
126
|
+
- name: Diagnostic Swing app startup (Windows)
|
|
127
|
+
if: runner.os == 'Windows'
|
|
128
|
+
shell: pwsh
|
|
129
|
+
run: scripts/ci/diagnostic-swing.ps1
|
|
130
|
+
|
|
131
|
+
- name: Diagnostic SWT app startup (Linux/macOS)
|
|
132
|
+
if: runner.os != 'Windows'
|
|
133
|
+
run: bash scripts/ci/diagnostic-swt.sh
|
|
134
|
+
|
|
135
|
+
- name: Diagnostic SWT app startup (Windows)
|
|
136
|
+
if: runner.os == 'Windows'
|
|
137
|
+
shell: pwsh
|
|
138
|
+
run: scripts/ci/diagnostic-swt.ps1
|
|
139
|
+
|
|
140
|
+
- name: Cleanup test apps (Linux/macOS)
|
|
141
|
+
if: runner.os != 'Windows'
|
|
142
|
+
run: bash scripts/ci/cleanup-test-apps.sh
|
|
143
|
+
|
|
144
|
+
- name: Cleanup test apps (Windows)
|
|
145
|
+
if: runner.os == 'Windows'
|
|
146
|
+
shell: pwsh
|
|
147
|
+
run: scripts/ci/cleanup-test-apps.ps1
|
|
148
|
+
|
|
149
|
+
- name: Smoke Robot Tests (Swing/SWT/RCP)
|
|
150
|
+
if: runner.os != 'macOS'
|
|
151
|
+
run: |
|
|
152
|
+
uv run robot --outputdir tests/robot/output-smoke \
|
|
153
|
+
tests/robot/swing/01_connection.robot \
|
|
154
|
+
tests/robot/swt/01_connection.robot \
|
|
155
|
+
tests/robot/rcp/01_connection.robot
|
|
156
|
+
|
|
157
|
+
- name: Smoke Robot Tests (macOS only, no RCP)
|
|
158
|
+
if: runner.os == 'macOS'
|
|
159
|
+
run: |
|
|
160
|
+
uv run robot --outputdir tests/robot/output-smoke \
|
|
161
|
+
tests/robot/swing/01_connection.robot \
|
|
162
|
+
tests/robot/swt/01_connection.robot
|
|
163
|
+
|
|
164
|
+
- name: Run Robot Framework tests (incl. Swing/SWT/RCP)
|
|
165
|
+
if: runner.os != 'macOS'
|
|
166
|
+
run: uv run robot --outputdir tests/robot/output tests/robot/
|
|
167
|
+
|
|
168
|
+
- name: Run Robot Framework tests (macOS only, no RCP)
|
|
169
|
+
if: runner.os == 'macOS'
|
|
170
|
+
run: uv run robot --outputdir tests/robot/output tests/robot/swing tests/robot/swt
|
|
171
|
+
|
|
172
|
+
- name: Run Python tests
|
|
173
|
+
run: uv run pytest tests/python/
|
|
174
|
+
|
|
175
|
+
- name: Upload Robot logs
|
|
176
|
+
if: always()
|
|
177
|
+
uses: actions/upload-artifact@v4
|
|
178
|
+
with:
|
|
179
|
+
name: robot-logs-${{ matrix.os }}-py${{ matrix.python }}
|
|
180
|
+
path: |
|
|
181
|
+
tests/robot/output-smoke/**
|
|
182
|
+
tests/robot/output/**
|
|
183
|
+
if-no-files-found: warn
|
|
184
|
+
|
|
185
|
+
- name: Upload build artifacts
|
|
186
|
+
if: always()
|
|
187
|
+
uses: actions/upload-artifact@v4
|
|
188
|
+
with:
|
|
189
|
+
name: build-${{ matrix.os }}-py${{ matrix.python }}
|
|
190
|
+
path: |
|
|
191
|
+
target/wheels/*.whl
|
|
192
|
+
agent/target/*.jar
|
|
193
|
+
python/JavaGui/jars/*.jar
|
|
194
|
+
if-no-files-found: warn
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
tag:
|
|
7
|
+
description: "Tag to release (e.g. v0.1.0)"
|
|
8
|
+
required: true
|
|
9
|
+
version:
|
|
10
|
+
description: "Package version (optional, defaults to tag without 'v' prefix)"
|
|
11
|
+
required: false
|
|
12
|
+
publish_pypi:
|
|
13
|
+
description: "Publish to PyPI"
|
|
14
|
+
required: false
|
|
15
|
+
default: "false"
|
|
16
|
+
type: boolean
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
# =============================================================================
|
|
20
|
+
# Build Java Agent (single build, shared across all platforms)
|
|
21
|
+
# =============================================================================
|
|
22
|
+
build-agent:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
steps:
|
|
25
|
+
- name: Checkout
|
|
26
|
+
uses: actions/checkout@v4
|
|
27
|
+
|
|
28
|
+
- name: Setup Java 17
|
|
29
|
+
uses: actions/setup-java@v4
|
|
30
|
+
with:
|
|
31
|
+
distribution: temurin
|
|
32
|
+
java-version: "17"
|
|
33
|
+
cache: maven
|
|
34
|
+
|
|
35
|
+
- name: Build Java Agent
|
|
36
|
+
run: |
|
|
37
|
+
cd agent
|
|
38
|
+
mvn clean package -DskipTests
|
|
39
|
+
ls -la target/*.jar
|
|
40
|
+
|
|
41
|
+
- name: Upload Java Agent
|
|
42
|
+
uses: actions/upload-artifact@v4
|
|
43
|
+
with:
|
|
44
|
+
name: java-agent
|
|
45
|
+
path: agent/target/javagui-agent.jar
|
|
46
|
+
if-no-files-found: error
|
|
47
|
+
|
|
48
|
+
# =============================================================================
|
|
49
|
+
# Build Python Wheels (ABI3 - one wheel per OS works for all Python versions)
|
|
50
|
+
# Uses manylinux containers on Linux for broad glibc compatibility
|
|
51
|
+
# =============================================================================
|
|
52
|
+
build-wheels:
|
|
53
|
+
needs: build-agent
|
|
54
|
+
runs-on: ${{ matrix.os }}
|
|
55
|
+
strategy:
|
|
56
|
+
fail-fast: false
|
|
57
|
+
matrix:
|
|
58
|
+
include:
|
|
59
|
+
- os: ubuntu-latest
|
|
60
|
+
target: x86_64-unknown-linux-gnu
|
|
61
|
+
manylinux: "2_17"
|
|
62
|
+
- os: windows-latest
|
|
63
|
+
target: x86_64-pc-windows-msvc
|
|
64
|
+
- os: macos-14
|
|
65
|
+
target: aarch64-apple-darwin
|
|
66
|
+
defaults:
|
|
67
|
+
run:
|
|
68
|
+
shell: bash
|
|
69
|
+
env:
|
|
70
|
+
CARGO_TERM_COLOR: always
|
|
71
|
+
RUST_BACKTRACE: 1
|
|
72
|
+
|
|
73
|
+
steps:
|
|
74
|
+
- name: Checkout
|
|
75
|
+
uses: actions/checkout@v4
|
|
76
|
+
|
|
77
|
+
- name: Download Java Agent
|
|
78
|
+
uses: actions/download-artifact@v4
|
|
79
|
+
with:
|
|
80
|
+
name: java-agent
|
|
81
|
+
path: agent/target/
|
|
82
|
+
|
|
83
|
+
- name: Copy agent JAR to package
|
|
84
|
+
run: |
|
|
85
|
+
mkdir -p python/JavaGui/jars
|
|
86
|
+
cp agent/target/javagui-agent.jar python/JavaGui/jars/javagui-agent.jar
|
|
87
|
+
ls -la python/JavaGui/jars/
|
|
88
|
+
|
|
89
|
+
- name: Build wheel (Linux - manylinux container)
|
|
90
|
+
if: runner.os == 'Linux'
|
|
91
|
+
uses: PyO3/maturin-action@v1
|
|
92
|
+
with:
|
|
93
|
+
target: ${{ matrix.target }}
|
|
94
|
+
manylinux: ${{ matrix.manylinux }}
|
|
95
|
+
args: --release --strip
|
|
96
|
+
|
|
97
|
+
- name: Build wheel (non-Linux)
|
|
98
|
+
if: runner.os != 'Linux'
|
|
99
|
+
uses: PyO3/maturin-action@v1
|
|
100
|
+
with:
|
|
101
|
+
target: ${{ matrix.target }}
|
|
102
|
+
args: --release --strip
|
|
103
|
+
|
|
104
|
+
- name: Verify wheel
|
|
105
|
+
run: |
|
|
106
|
+
ls -la target/wheels/
|
|
107
|
+
echo "ABI3 wheel works for all Python versions 3.8+"
|
|
108
|
+
|
|
109
|
+
# Verify only one wheel was built (ABI3)
|
|
110
|
+
WHEEL_COUNT=$(ls -1 target/wheels/*.whl 2>/dev/null | wc -l)
|
|
111
|
+
if [ "$WHEEL_COUNT" -ne 1 ]; then
|
|
112
|
+
echo "ERROR: Expected 1 ABI3 wheel, found $WHEEL_COUNT"
|
|
113
|
+
ls -la target/wheels/
|
|
114
|
+
exit 1
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
- name: Upload wheel
|
|
118
|
+
uses: actions/upload-artifact@v4
|
|
119
|
+
with:
|
|
120
|
+
name: wheel-${{ matrix.os }}
|
|
121
|
+
path: target/wheels/*.whl
|
|
122
|
+
if-no-files-found: error
|
|
123
|
+
|
|
124
|
+
# =============================================================================
|
|
125
|
+
# Create Draft GitHub Release
|
|
126
|
+
# =============================================================================
|
|
127
|
+
release:
|
|
128
|
+
runs-on: ubuntu-latest
|
|
129
|
+
needs: [build-agent, build-wheels]
|
|
130
|
+
permissions:
|
|
131
|
+
contents: write
|
|
132
|
+
|
|
133
|
+
steps:
|
|
134
|
+
- name: Download all artifacts
|
|
135
|
+
uses: actions/download-artifact@v4
|
|
136
|
+
with:
|
|
137
|
+
path: dist-artifacts
|
|
138
|
+
|
|
139
|
+
- name: Organize release files
|
|
140
|
+
run: |
|
|
141
|
+
mkdir -p release-files/wheels
|
|
142
|
+
mkdir -p release-files/agent
|
|
143
|
+
|
|
144
|
+
# Collect all wheels
|
|
145
|
+
find dist-artifacts -name "*.whl" -exec cp {} release-files/wheels/ \;
|
|
146
|
+
|
|
147
|
+
# Collect agent JAR
|
|
148
|
+
find dist-artifacts -name "*.jar" -exec cp {} release-files/agent/ \;
|
|
149
|
+
|
|
150
|
+
echo "=== Wheels ==="
|
|
151
|
+
ls -la release-files/wheels/
|
|
152
|
+
echo "=== Agent ==="
|
|
153
|
+
ls -la release-files/agent/
|
|
154
|
+
|
|
155
|
+
# Verify exactly 3 ABI3 wheels (one per platform)
|
|
156
|
+
WHEEL_COUNT=$(ls -1 release-files/wheels/*.whl 2>/dev/null | wc -l)
|
|
157
|
+
ABI3_COUNT=$(ls -1 release-files/wheels/*-cp38-abi3-*.whl 2>/dev/null | wc -l)
|
|
158
|
+
echo "Total wheels: $WHEEL_COUNT (expected: 3)"
|
|
159
|
+
echo "ABI3 wheels: $ABI3_COUNT (expected: 3)"
|
|
160
|
+
|
|
161
|
+
if [ "$WHEEL_COUNT" -ne 3 ] || [ "$ABI3_COUNT" -ne 3 ]; then
|
|
162
|
+
echo "ERROR: Expected exactly 3 ABI3 wheels (one per platform)"
|
|
163
|
+
echo "Found $WHEEL_COUNT total wheels, $ABI3_COUNT ABI3 wheels"
|
|
164
|
+
exit 1
|
|
165
|
+
fi
|
|
166
|
+
|
|
167
|
+
- name: Determine version
|
|
168
|
+
id: version
|
|
169
|
+
run: |
|
|
170
|
+
if [ -n "${{ inputs.version }}" ]; then
|
|
171
|
+
echo "version=${{ inputs.version }}" >> $GITHUB_OUTPUT
|
|
172
|
+
else
|
|
173
|
+
# Strip 'v' prefix from tag
|
|
174
|
+
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
|
175
|
+
fi
|
|
176
|
+
env:
|
|
177
|
+
TAG: ${{ inputs.tag }}
|
|
178
|
+
|
|
179
|
+
- name: Create draft GitHub Release
|
|
180
|
+
uses: softprops/action-gh-release@v2
|
|
181
|
+
with:
|
|
182
|
+
draft: true
|
|
183
|
+
tag_name: ${{ inputs.tag }}
|
|
184
|
+
name: "Release ${{ inputs.tag }}"
|
|
185
|
+
generate_release_notes: true
|
|
186
|
+
body: |
|
|
187
|
+
## robotframework-javagui ${{ steps.version.outputs.version }}
|
|
188
|
+
|
|
189
|
+
### Installation
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
pip install robotframework-javagui==${{ steps.version.outputs.version }}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Downloads
|
|
196
|
+
|
|
197
|
+
- **Python Wheels**: ABI3 wheels compatible with Python 3.8+ (one per platform)
|
|
198
|
+
- **Java Agent**: `javagui-agent.jar`
|
|
199
|
+
|
|
200
|
+
### Changes
|
|
201
|
+
|
|
202
|
+
See below for auto-generated release notes.
|
|
203
|
+
files: |
|
|
204
|
+
release-files/wheels/*.whl
|
|
205
|
+
release-files/agent/*.jar
|
|
206
|
+
|
|
207
|
+
# =============================================================================
|
|
208
|
+
# Publish to PyPI (optional, triggered by input)
|
|
209
|
+
# =============================================================================
|
|
210
|
+
publish-pypi:
|
|
211
|
+
runs-on: ubuntu-latest
|
|
212
|
+
needs: [build-wheels]
|
|
213
|
+
if: ${{ inputs.publish_pypi == true }}
|
|
214
|
+
environment: release # GitHub Environment for trusted publishing
|
|
215
|
+
permissions:
|
|
216
|
+
id-token: write # Required for trusted publishing
|
|
217
|
+
|
|
218
|
+
steps:
|
|
219
|
+
- name: Download wheel artifacts
|
|
220
|
+
uses: actions/download-artifact@v4
|
|
221
|
+
with:
|
|
222
|
+
pattern: wheel-*
|
|
223
|
+
path: dist-artifacts
|
|
224
|
+
merge-multiple: true
|
|
225
|
+
|
|
226
|
+
- name: Collect wheels for PyPI
|
|
227
|
+
run: |
|
|
228
|
+
mkdir -p dist/pypi
|
|
229
|
+
find dist-artifacts -name "*.whl" -exec cp {} dist/pypi/ \;
|
|
230
|
+
|
|
231
|
+
echo "=== Wheels to publish ==="
|
|
232
|
+
ls -la dist/pypi/
|
|
233
|
+
|
|
234
|
+
# Verify exactly 3 ABI3 wheels (one per platform)
|
|
235
|
+
WHEEL_COUNT=$(ls -1 dist/pypi/*.whl 2>/dev/null | wc -l)
|
|
236
|
+
ABI3_COUNT=$(ls -1 dist/pypi/*-cp38-abi3-*.whl 2>/dev/null | wc -l)
|
|
237
|
+
echo "Total wheels: $WHEEL_COUNT (expected: 3)"
|
|
238
|
+
echo "ABI3 wheels: $ABI3_COUNT (expected: 3)"
|
|
239
|
+
|
|
240
|
+
if [ "$WHEEL_COUNT" -ne 3 ] || [ "$ABI3_COUNT" -ne 3 ]; then
|
|
241
|
+
echo "ERROR: Expected exactly 3 ABI3 wheels for PyPI upload"
|
|
242
|
+
echo "Found $WHEEL_COUNT total wheels, $ABI3_COUNT ABI3 wheels"
|
|
243
|
+
exit 1
|
|
244
|
+
fi
|
|
245
|
+
|
|
246
|
+
- name: Publish to PyPI (Trusted Publishing)
|
|
247
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
248
|
+
with:
|
|
249
|
+
packages-dir: dist/pypi/
|
|
250
|
+
# No password needed - uses OIDC trusted publishing
|
|
251
|
+
# Requires PyPI trusted publisher configured for:
|
|
252
|
+
# - Owner: manykarim
|
|
253
|
+
# - Repo: robotframework-javaui
|
|
254
|
+
# - Workflow: release.yml
|
|
255
|
+
# - Environment: release
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# Rust
|
|
3
|
+
# =============================================================================
|
|
4
|
+
/target/
|
|
5
|
+
**/*.rs.bk
|
|
6
|
+
|
|
7
|
+
# =============================================================================
|
|
8
|
+
# Python
|
|
9
|
+
# =============================================================================
|
|
10
|
+
__pycache__/
|
|
11
|
+
*.py[cod]
|
|
12
|
+
*$py.class
|
|
13
|
+
*.so
|
|
14
|
+
*.dylib
|
|
15
|
+
*.dll
|
|
16
|
+
.Python
|
|
17
|
+
build/
|
|
18
|
+
develop-eggs/
|
|
19
|
+
dist/
|
|
20
|
+
downloads/
|
|
21
|
+
eggs/
|
|
22
|
+
.eggs/
|
|
23
|
+
lib/
|
|
24
|
+
lib64/
|
|
25
|
+
parts/
|
|
26
|
+
sdist/
|
|
27
|
+
var/
|
|
28
|
+
wheels/
|
|
29
|
+
*.egg-info/
|
|
30
|
+
.installed.cfg
|
|
31
|
+
*.egg
|
|
32
|
+
MANIFEST
|
|
33
|
+
|
|
34
|
+
# Virtual environments
|
|
35
|
+
.venv/
|
|
36
|
+
venv/
|
|
37
|
+
ENV/
|
|
38
|
+
env/
|
|
39
|
+
|
|
40
|
+
# Type checkers
|
|
41
|
+
.mypy_cache/
|
|
42
|
+
.dmypy.json
|
|
43
|
+
dmypy.json
|
|
44
|
+
|
|
45
|
+
# =============================================================================
|
|
46
|
+
# Java
|
|
47
|
+
# =============================================================================
|
|
48
|
+
agent/target/
|
|
49
|
+
agent/build/
|
|
50
|
+
agent/.gradle/
|
|
51
|
+
demo/target/
|
|
52
|
+
demo/build/
|
|
53
|
+
demo/.gradle/
|
|
54
|
+
tests/apps/*/target/
|
|
55
|
+
tests/apps/*/dependency-reduced-pom.xml
|
|
56
|
+
*.class
|
|
57
|
+
|
|
58
|
+
# =============================================================================
|
|
59
|
+
# Node.js
|
|
60
|
+
# =============================================================================
|
|
61
|
+
node_modules/
|
|
62
|
+
package-lock.json
|
|
63
|
+
package.json
|
|
64
|
+
|
|
65
|
+
# =============================================================================
|
|
66
|
+
# Demo Applications (large binary files)
|
|
67
|
+
# =============================================================================
|
|
68
|
+
demo/*.jar
|
|
69
|
+
demo/*.tar.gz
|
|
70
|
+
demo/dbeaver/
|
|
71
|
+
demo/jdk-*/
|
|
72
|
+
!demo/src/
|
|
73
|
+
|
|
74
|
+
# =============================================================================
|
|
75
|
+
# Test Output
|
|
76
|
+
# =============================================================================
|
|
77
|
+
**/results/
|
|
78
|
+
**/output/
|
|
79
|
+
output.xml
|
|
80
|
+
log.html
|
|
81
|
+
report.html
|
|
82
|
+
screenshot*.png
|
|
83
|
+
custom_screenshot.png
|
|
84
|
+
|
|
85
|
+
# Pytest
|
|
86
|
+
.pytest_cache/
|
|
87
|
+
.coverage
|
|
88
|
+
htmlcov/
|
|
89
|
+
.tox/
|
|
90
|
+
.nox/
|
|
91
|
+
|
|
92
|
+
# =============================================================================
|
|
93
|
+
# IDE / Editor
|
|
94
|
+
# =============================================================================
|
|
95
|
+
.idea/
|
|
96
|
+
.vscode/
|
|
97
|
+
*.swp
|
|
98
|
+
*.swo
|
|
99
|
+
*~
|
|
100
|
+
.project
|
|
101
|
+
.classpath
|
|
102
|
+
.settings/
|
|
103
|
+
*.iml
|
|
104
|
+
|
|
105
|
+
# OS
|
|
106
|
+
.DS_Store
|
|
107
|
+
Thumbs.db
|
|
108
|
+
|
|
109
|
+
# =============================================================================
|
|
110
|
+
# Claude Code / Flow
|
|
111
|
+
# =============================================================================
|
|
112
|
+
.claude/
|
|
113
|
+
.claude-flow/
|
|
114
|
+
.hive-mind/
|
|
115
|
+
.swarm/
|
|
116
|
+
.mcp.json
|
|
117
|
+
CLAUDE.md
|
|
118
|
+
PIPE
|
|
119
|
+
agents/
|
|
120
|
+
memory/
|
|
121
|
+
|
|
122
|
+
# =============================================================================
|
|
123
|
+
# Database files
|
|
124
|
+
# =============================================================================
|
|
125
|
+
*.db
|
|
126
|
+
*.db-journal
|
|
127
|
+
*.db-wal
|
|
128
|
+
*.db-shm
|
|
129
|
+
*.sqlite
|
|
130
|
+
*.sqlite-journal
|
|
131
|
+
*.sqlite-wal
|
|
132
|
+
|
|
133
|
+
# =============================================================================
|
|
134
|
+
# Temporary / Generated Files
|
|
135
|
+
# =============================================================================
|
|
136
|
+
*.tmp
|
|
137
|
+
*.temp
|
|
138
|
+
*.bak
|
|
139
|
+
*.log
|
|
140
|
+
runswttests.txt
|
|
141
|
+
hive-mind-prompt-*.txt
|
|
142
|
+
claude-flow
|
|
143
|
+
|
|
144
|
+
# Bundled JARs (copied from agent/target during build)
|
|
145
|
+
python/JavaGui/jars/
|
|
146
|
+
|
|
147
|
+
# Third-party demo/showcase binaries used for manual exploration (do not ship)
|
|
148
|
+
example-apps/*.jar
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.11.7
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Repository Guidelines
|
|
2
|
+
|
|
3
|
+
## Project Structure & Module Organization
|
|
4
|
+
- `src/`: Rust core (PyO3 bindings, locator parsing, RPC/connection logic).
|
|
5
|
+
- `python/JavaGui/`: Python package that exposes Swing/Swt/Rcp keywords; bundled JARs live in `python/JavaGui/jars/`.
|
|
6
|
+
- `agent/`: Java agent (Maven project; built JARs in `agent/target/`).
|
|
7
|
+
- `tests/robot/`: Robot Framework suites (numbered `NN_*.robot`), plus toolkit-specific folders.
|
|
8
|
+
- `tests/python/` and `tests/unit/`: Pytest suites for Python bindings and smaller unit checks.
|
|
9
|
+
- `docs/`, `schemas/`, `scripts/`: supporting docs, schemas, and helper scripts.
|
|
10
|
+
|
|
11
|
+
## Build, Test, and Development Commands
|
|
12
|
+
- `uv pip install -e ".[dev]"`: install dev dependencies (project uses `uv`).
|
|
13
|
+
- `invoke build-dev`: build the Java agent (fat JAR), copy it into the Python package, and compile the Rust extension for local use.
|
|
14
|
+
- `invoke build`: full build (agent + wheel) for distribution.
|
|
15
|
+
- `cd tests/apps && mvn package`: build the Swing/SWT/RCP test applications used by Robot suites.
|
|
16
|
+
- `uv run robot tests/robot/`: run all Robot suites (outputs under `tests/robot/output/`).
|
|
17
|
+
- `uv run robot tests/robot/02_locators.robot`: run a specific Robot suite.
|
|
18
|
+
- `uv run pytest tests/python/`: run Python tests (pytest config lives in `pyproject.toml`).
|
|
19
|
+
- `invoke lint`: run `ruff` on Python and `cargo clippy -D warnings` on Rust.
|
|
20
|
+
- `invoke format-all`: format Python (`ruff format`) and Rust (`cargo fmt`).
|
|
21
|
+
|
|
22
|
+
## Coding Style & Naming Conventions
|
|
23
|
+
- Python: 4-space indentation, 100-char lines, formatted with `ruff format`, linted by `ruff`, typed with `mypy`.
|
|
24
|
+
- Rust: use `cargo fmt`; keep clippy clean (`cargo clippy -D warnings`).
|
|
25
|
+
- Robot: `.robot` files use numeric prefixes (`01_connection.robot`) and readable test-case names.
|
|
26
|
+
|
|
27
|
+
## Testing Guidelines
|
|
28
|
+
- Build the test apps in `tests/apps/` before running Robot suites (they exercise Swing/SWT/RCP UIs).
|
|
29
|
+
- Robot Framework tests live in `tests/robot/`; run via `uv run robot ...`, outputs default to `tests/robot/output/`.
|
|
30
|
+
- Pytest files follow `test_*.py` naming, with tests named `test_*` (see `tests/python/pytest.ini`).
|
|
31
|
+
- Add coverage for new keywords/locators with both Robot suites and focused pytest unit tests where possible.
|
|
32
|
+
|
|
33
|
+
## Commit & Pull Request Guidelines
|
|
34
|
+
- Commit messages follow a conventional prefix (examples in history: `fix:`, `docs:`). Use `type: summary`.
|
|
35
|
+
- PRs should describe behavior changes, list test commands run, and link related issues when applicable.
|
|
36
|
+
|
|
37
|
+
## Configuration Notes
|
|
38
|
+
- Build metadata is in `Cargo.toml` and `pyproject.toml`; update both if you change versioning.
|
|
39
|
+
- Java agent artifact is expected at `agent/target/javagui-agent.jar`.
|