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.
Files changed (354) hide show
  1. robotframework_javagui-0.6.0/.github/workflows/ci.yml +194 -0
  2. robotframework_javagui-0.6.0/.github/workflows/release.yml +255 -0
  3. robotframework_javagui-0.6.0/.gitignore +148 -0
  4. robotframework_javagui-0.6.0/.python-version +1 -0
  5. robotframework_javagui-0.6.0/AGENTS.md +39 -0
  6. robotframework_javagui-0.6.0/Cargo.lock +1661 -0
  7. robotframework_javagui-0.6.0/Cargo.toml +81 -0
  8. robotframework_javagui-0.6.0/LICENSE +201 -0
  9. robotframework_javagui-0.6.0/PKG-INFO +1140 -0
  10. robotframework_javagui-0.6.0/README.md +1099 -0
  11. robotframework_javagui-0.6.0/agent/build-swt-agent.sh +94 -0
  12. robotframework_javagui-0.6.0/agent/pom.xml +363 -0
  13. robotframework_javagui-0.6.0/agent/src/disabled/DisplayHelper.java +323 -0
  14. robotframework_javagui-0.6.0/agent/src/disabled/SwtActionExecutor.java +1573 -0
  15. robotframework_javagui-0.6.0/agent/src/disabled/SwtAgent.java +133 -0
  16. robotframework_javagui-0.6.0/agent/src/disabled/SwtRpcServer.java +2244 -0
  17. robotframework_javagui-0.6.0/agent/src/disabled/WidgetInspector.java +884 -0
  18. robotframework_javagui-0.6.0/agent/src/disabled/WorkbenchInspector.java +841 -0
  19. robotframework_javagui-0.6.0/agent/src/disabled/WorkbenchInspector.java.rcp +841 -0
  20. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/UnifiedAgent.java +265 -0
  21. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swing/ActionExecutor.java +1309 -0
  22. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swing/Agent.java +118 -0
  23. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swing/ComponentInspector.java +922 -0
  24. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swing/EdtHelper.java +254 -0
  25. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swing/RpcServer.java +453 -0
  26. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/DisplayHelper.java +323 -0
  27. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/EclipseWorkbenchHelper.java +613 -0
  28. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/RcpComponentInspector.java +638 -0
  29. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/SwtActionExecutor.java +1573 -0
  30. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/SwtAgent.java +133 -0
  31. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/SwtReflectionBridge.java +1598 -0
  32. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/SwtReflectionRpcServer.java +2053 -0
  33. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/SwtRpcServer.java +2265 -0
  34. robotframework_javagui-0.6.0/agent/src/main/java/com/robotframework/swt/WidgetInspector.java +884 -0
  35. robotframework_javagui-0.6.0/agent/src/main/resources/META-INF/MANIFEST.MF +5 -0
  36. robotframework_javagui-0.6.0/agent/src/test/java/com/robotframework/swing/ClickRetargetingTest.java +76 -0
  37. robotframework_javagui-0.6.0/agent/src/test/java/com/robotframework/swing/ComponentTreeBenchmark.java +425 -0
  38. robotframework_javagui-0.6.0/benches/component_tree_benchmark.rs +528 -0
  39. robotframework_javagui-0.6.0/benches/element_benchmark.rs +421 -0
  40. robotframework_javagui-0.6.0/benches/locator_benchmark.rs +294 -0
  41. robotframework_javagui-0.6.0/benches/rpc_benchmark.rs +387 -0
  42. robotframework_javagui-0.6.0/benches/tree_depth_benchmark.rs +310 -0
  43. robotframework_javagui-0.6.0/docs/API_CHANGES_COMPONENT_TREE.md +267 -0
  44. robotframework_javagui-0.6.0/docs/COMPONENT_TREE_DOCUMENTATION_INDEX.md +199 -0
  45. robotframework_javagui-0.6.0/docs/COMPONENT_TREE_FILTERING_GUIDE.md +106 -0
  46. robotframework_javagui-0.6.0/docs/COMPONENT_TREE_QUICK_REFERENCE.md +277 -0
  47. robotframework_javagui-0.6.0/docs/COMPONENT_TREE_QUICK_START.md +372 -0
  48. robotframework_javagui-0.6.0/docs/DDD_VISIBILITY_DESIGN.md +995 -0
  49. robotframework_javagui-0.6.0/docs/DEPLOYMENT_CHECKLIST.md +685 -0
  50. robotframework_javagui-0.6.0/docs/FEATURE_COMPARISON_CHART.md +425 -0
  51. robotframework_javagui-0.6.0/docs/FEATURE_COMPARISON_MATRIX.md +642 -0
  52. robotframework_javagui-0.6.0/docs/FEATURE_PARITY_IMPLEMENTATION_PLAN.md +765 -0
  53. robotframework_javagui-0.6.0/docs/JAVAGUI_SWING_AUTOMATION_REPORT_v2.md +636 -0
  54. robotframework_javagui-0.6.0/docs/MIGRATION_GUIDE.md +440 -0
  55. robotframework_javagui-0.6.0/docs/OUTPUT_FORMATS_GUIDE.md +520 -0
  56. robotframework_javagui-0.6.0/docs/OUTPUT_FORMATS_QUICK_REFERENCE.md +152 -0
  57. robotframework_javagui-0.6.0/docs/OUTPUT_FORMAT_QUICK_REFERENCE.md +283 -0
  58. robotframework_javagui-0.6.0/docs/PERFORMANCE_OPTIMIZATION_GUIDE.md +438 -0
  59. robotframework_javagui-0.6.0/docs/RCP_COMPONENT_TREE_GUIDE.md +500 -0
  60. robotframework_javagui-0.6.0/docs/RELEASE_NOTES_v0.4.1.md +26 -0
  61. robotframework_javagui-0.6.0/docs/RELEASE_NOTES_v0.5.0.md +58 -0
  62. robotframework_javagui-0.6.0/docs/RELEASE_NOTES_v0.6.0.md +55 -0
  63. robotframework_javagui-0.6.0/docs/RUNNING_BENCHMARKS.md +523 -0
  64. robotframework_javagui-0.6.0/docs/SOLUTION_PROPOSAL.md +315 -0
  65. robotframework_javagui-0.6.0/docs/SOLUTION_PROPOSAL_V2.md +408 -0
  66. robotframework_javagui-0.6.0/docs/SWT_BACKEND_ANALYSIS.md +310 -0
  67. robotframework_javagui-0.6.0/docs/SWT_BACKEND_ENABLED.md +340 -0
  68. robotframework_javagui-0.6.0/docs/SWT_QUICK_START.md +328 -0
  69. robotframework_javagui-0.6.0/docs/SWT_RUST_INTEGRATION_PLAN.md +457 -0
  70. robotframework_javagui-0.6.0/docs/TIMING_TESTS_FIX.md +178 -0
  71. robotframework_javagui-0.6.0/docs/USER_PERFORMANCE_GUIDE.md +493 -0
  72. robotframework_javagui-0.6.0/docs/adr/ADR-001-DDD-ARCHITECTURE.md +1160 -0
  73. robotframework_javagui-0.6.0/docs/adr/ADR-001-unified-base-class-architecture.md +309 -0
  74. robotframework_javagui-0.6.0/docs/adr/ADR-002-locator-syntax-strategy.md +448 -0
  75. robotframework_javagui-0.6.0/docs/adr/ADR-003-keyword-naming-convention.md +384 -0
  76. robotframework_javagui-0.6.0/docs/adr/ADR-004-technology-detection-and-mode-selection.md +495 -0
  77. robotframework_javagui-0.6.0/docs/adr/ADR-005-error-handling-strategy.md +610 -0
  78. robotframework_javagui-0.6.0/docs/adr/ADR-006-backwards-compatibility-approach.md +622 -0
  79. robotframework_javagui-0.6.0/docs/adr/ADR-007-UNIFIED-KEYWORD-API.md +934 -0
  80. robotframework_javagui-0.6.0/docs/adr/ADR-008-security-architecture.md +1464 -0
  81. robotframework_javagui-0.6.0/docs/adr/ADR-009-implementation-and-migration-plan.md +1545 -0
  82. robotframework_javagui-0.6.0/docs/adr/ADR-010-ASSERTIONENGINE-INTEGRATION.md +1130 -0
  83. robotframework_javagui-0.6.0/docs/adr/ADR-011-PYTHON-KEYWORD-LAYER.md +1688 -0
  84. robotframework_javagui-0.6.0/docs/adr/ADR-012-LOCATOR-ASSERTION-FLOW.md +900 -0
  85. robotframework_javagui-0.6.0/docs/adr/ADR-013-SECURITY-ASSERTIONENGINE.md +968 -0
  86. robotframework_javagui-0.6.0/docs/adr/ADR-014-IMPLEMENTATION-PLAN-ASSERTIONENGINE.md +2051 -0
  87. robotframework_javagui-0.6.0/docs/adr/ADR-015-TIERED-VISIBILITY-STRATEGY.md +1180 -0
  88. robotframework_javagui-0.6.0/docs/adr/ADR-016-RF-TIMESTRING-SUPPORT.md +529 -0
  89. robotframework_javagui-0.6.0/docs/adr/README.md +165 -0
  90. robotframework_javagui-0.6.0/docs/adr/architecture-decision-records.md +929 -0
  91. robotframework_javagui-0.6.0/docs/api-reference/COMPONENT_TREE_API.md +713 -0
  92. robotframework_javagui-0.6.0/docs/api-reference/COMPONENT_TREE_OPENAPI.yaml +706 -0
  93. robotframework_javagui-0.6.0/docs/api-reference/python-api.md +754 -0
  94. robotframework_javagui-0.6.0/docs/api-reference/robot-keywords.md +1131 -0
  95. robotframework_javagui-0.6.0/docs/architecture/ASSERTION_ENGINE_INTEGRATION.md +251 -0
  96. robotframework_javagui-0.6.0/docs/architecture/CASCADED_SELECTOR_ARCHITECTURE_ANALYSIS.md +1524 -0
  97. robotframework_javagui-0.6.0/docs/architecture/DDD_ARCHITECTURE_DESIGN.md +1010 -0
  98. robotframework_javagui-0.6.0/docs/architecture/SWT_CLASSLOADER_SOLUTION.md +482 -0
  99. robotframework_javagui-0.6.0/docs/architecture/SWT_RCP_ASSERTION_ENGINE.md +1015 -0
  100. robotframework_javagui-0.6.0/docs/architecture/UNIFIED_LIBRARY_ARCHITECTURE.md +1449 -0
  101. robotframework_javagui-0.6.0/docs/architecture/ui-tree-system.md +2775 -0
  102. robotframework_javagui-0.6.0/docs/ddd-design-model.md +902 -0
  103. robotframework_javagui-0.6.0/docs/examples/output_format_examples.md +606 -0
  104. robotframework_javagui-0.6.0/docs/keywords/Rcp.html +387 -0
  105. robotframework_javagui-0.6.0/docs/keywords/Swing.html +387 -0
  106. robotframework_javagui-0.6.0/docs/keywords/Swt.html +387 -0
  107. robotframework_javagui-0.6.0/docs/performance/COMPONENT_TREE_PERFORMANCE.md +310 -0
  108. robotframework_javagui-0.6.0/docs/performance/INDEX.md +54 -0
  109. robotframework_javagui-0.6.0/docs/performance/OPTIMIZATION_RECOMMENDATIONS.md +503 -0
  110. robotframework_javagui-0.6.0/docs/performance/PROFILING_GUIDE.md +490 -0
  111. robotframework_javagui-0.6.0/docs/performance/README.md +221 -0
  112. robotframework_javagui-0.6.0/docs/performance/benchmark_raw_results.txt +184 -0
  113. robotframework_javagui-0.6.0/docs/research/CODEBASE_ANALYSIS.md +912 -0
  114. robotframework_javagui-0.6.0/docs/research/DOCSTRING_SPECIFICATION.md +643 -0
  115. robotframework_javagui-0.6.0/docs/research/HEADER_RENDERING_ISSUE_ANALYSIS.md +556 -0
  116. robotframework_javagui-0.6.0/docs/research/INTRODUCTION_COMPARISON_ANALYSIS.md +503 -0
  117. robotframework_javagui-0.6.0/docs/research/README.md +380 -0
  118. robotframework_javagui-0.6.0/docs/research/ROOT_CAUSE_ANALYSIS_BROWSER_VS_ROBOTFRAMEWORK_SWING.md +1206 -0
  119. robotframework_javagui-0.6.0/docs/research/Update_Keywords.md +533 -0
  120. robotframework_javagui-0.6.0/docs/research/docstring_analysis.md +493 -0
  121. robotframework_javagui-0.6.0/docs/specs/CASCADED_SELECTOR_IMPLEMENTATION_PLAN.md +1668 -0
  122. robotframework_javagui-0.6.0/docs/specs/CASCADED_SELECTOR_SPECIFICATION.md +1210 -0
  123. robotframework_javagui-0.6.0/docs/specs/COMPONENT_TREE_INVESTIGATION_OVERVIEW.md +979 -0
  124. robotframework_javagui-0.6.0/docs/specs/UI_COMPONENT_TREE_IMPLEMENTATION_PLAN.md +1816 -0
  125. robotframework_javagui-0.6.0/docs/test-plans/CASCADED_SELECTOR_TEST_PLAN.md +773 -0
  126. robotframework_javagui-0.6.0/docs/test-plans/README.md +180 -0
  127. robotframework_javagui-0.6.0/docs/test-plans/TEST_EXECUTION_CHECKLIST.md +302 -0
  128. robotframework_javagui-0.6.0/docs/test_swing_no_headers.html +387 -0
  129. robotframework_javagui-0.6.0/docs/user-guide/COMPONENT_TREE_GUIDE.md +827 -0
  130. robotframework_javagui-0.6.0/docs/user-guide/COMPONENT_TREE_MIGRATION_GUIDE.md +616 -0
  131. robotframework_javagui-0.6.0/docs/user-guide/COMPONENT_TREE_TROUBLESHOOTING.md +747 -0
  132. robotframework_javagui-0.6.0/docs/user-guide/locator-reference.md +518 -0
  133. robotframework_javagui-0.6.0/docs/user-guide/migration-guide.md +563 -0
  134. robotframework_javagui-0.6.0/docs/user-guide/unified-library.md +445 -0
  135. robotframework_javagui-0.6.0/examples/README.md +283 -0
  136. robotframework_javagui-0.6.0/examples/component_tree_advanced.robot +232 -0
  137. robotframework_javagui-0.6.0/examples/component_tree_basic.robot +125 -0
  138. robotframework_javagui-0.6.0/examples/component_tree_filtering.robot +319 -0
  139. robotframework_javagui-0.6.0/examples/component_tree_formats.robot +377 -0
  140. robotframework_javagui-0.6.0/examples/output_formats.robot +251 -0
  141. robotframework_javagui-0.6.0/examples/verify_bug_fixes.py +173 -0
  142. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/.openspec.yaml +3 -0
  143. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/README.md +3 -0
  144. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/design.md +59 -0
  145. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/proposal.md +29 -0
  146. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/specs/click-retargeting/spec.md +23 -0
  147. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/specs/locator-chain-matching/spec.md +27 -0
  148. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-click-retargeting-and-locator-fixes/tasks.md +25 -0
  149. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/.openspec.yaml +4 -0
  150. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/README.md +3 -0
  151. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/design.md +67 -0
  152. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/proposal.md +33 -0
  153. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/specs/showcase-action-proof/spec.md +57 -0
  154. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-prove-actions-on-showcase/tasks.md +34 -0
  155. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/.openspec.yaml +3 -0
  156. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/README.md +3 -0
  157. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/design.md +84 -0
  158. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/proposal.md +32 -0
  159. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/specs/e2e-keyword-coverage/spec.md +26 -0
  160. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/specs/keyword-honesty/spec.md +26 -0
  161. 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
  162. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/specs/release-documentation-accuracy/spec.md +30 -0
  163. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/specs/release-repository-hygiene/spec.md +26 -0
  164. robotframework_javagui-0.6.0/openspec/changes/archive/2026-07-09-release-ready-0-5-0/tasks.md +57 -0
  165. robotframework_javagui-0.6.0/openspec/config.yaml +20 -0
  166. robotframework_javagui-0.6.0/openspec/specs/click-retargeting/spec.md +27 -0
  167. robotframework_javagui-0.6.0/openspec/specs/e2e-keyword-coverage/spec.md +30 -0
  168. robotframework_javagui-0.6.0/openspec/specs/keyword-honesty/spec.md +30 -0
  169. robotframework_javagui-0.6.0/openspec/specs/locator-chain-matching/spec.md +31 -0
  170. robotframework_javagui-0.6.0/openspec/specs/rcp-real-eclipse-validation/spec.md +34 -0
  171. robotframework_javagui-0.6.0/openspec/specs/release-documentation-accuracy/spec.md +34 -0
  172. robotframework_javagui-0.6.0/openspec/specs/release-repository-hygiene/spec.md +30 -0
  173. robotframework_javagui-0.6.0/openspec/specs/showcase-action-proof/spec.md +61 -0
  174. robotframework_javagui-0.6.0/pyproject.toml +96 -0
  175. robotframework_javagui-0.6.0/python/JavaGui/__init__.py +3631 -0
  176. robotframework_javagui-0.6.0/python/JavaGui/assertions/__init__.py +242 -0
  177. robotframework_javagui-0.6.0/python/JavaGui/assertions/formatters.py +56 -0
  178. robotframework_javagui-0.6.0/python/JavaGui/assertions/security.py +354 -0
  179. robotframework_javagui-0.6.0/python/JavaGui/deprecation.py +346 -0
  180. robotframework_javagui-0.6.0/python/JavaGui/keywords/__init__.py +21 -0
  181. robotframework_javagui-0.6.0/python/JavaGui/keywords/getters.py +438 -0
  182. robotframework_javagui-0.6.0/python/JavaGui/keywords/rcp_keywords.py +628 -0
  183. robotframework_javagui-0.6.0/python/JavaGui/keywords/swt_getters.py +498 -0
  184. robotframework_javagui-0.6.0/python/JavaGui/keywords/swt_tables.py +420 -0
  185. robotframework_javagui-0.6.0/python/JavaGui/keywords/swt_trees.py +434 -0
  186. robotframework_javagui-0.6.0/python/JavaGui/keywords/tables.py +844 -0
  187. robotframework_javagui-0.6.0/python/JavaGui/py.typed +0 -0
  188. robotframework_javagui-0.6.0/python/JavaGui/validation.py +22 -0
  189. robotframework_javagui-0.6.0/schemas/ui-tree.schema.json +518 -0
  190. robotframework_javagui-0.6.0/scripts/analyze_benchmarks.py +209 -0
  191. robotframework_javagui-0.6.0/scripts/ci/cleanup-test-apps.ps1 +21 -0
  192. robotframework_javagui-0.6.0/scripts/ci/cleanup-test-apps.sh +14 -0
  193. robotframework_javagui-0.6.0/scripts/ci/diagnostic-swing.ps1 +56 -0
  194. robotframework_javagui-0.6.0/scripts/ci/diagnostic-swing.sh +61 -0
  195. robotframework_javagui-0.6.0/scripts/ci/diagnostic-swt.ps1 +56 -0
  196. robotframework_javagui-0.6.0/scripts/ci/diagnostic-swt.sh +65 -0
  197. robotframework_javagui-0.6.0/scripts/ci/win-tools/lsof.cmd +2 -0
  198. robotframework_javagui-0.6.0/scripts/ci/win-tools/lsof.ps1 +16 -0
  199. robotframework_javagui-0.6.0/scripts/ci/win-tools/nc.cmd +2 -0
  200. robotframework_javagui-0.6.0/scripts/ci/win-tools/nc.ps1 +16 -0
  201. robotframework_javagui-0.6.0/scripts/keyword_coverage.py +113 -0
  202. robotframework_javagui-0.6.0/scripts/run_performance_benchmarks.py +429 -0
  203. robotframework_javagui-0.6.0/scripts/run_tests.sh +130 -0
  204. robotframework_javagui-0.6.0/scripts/validate_benchmarks.sh +56 -0
  205. robotframework_javagui-0.6.0/scripts/verify_phase6_implementation.sh +226 -0
  206. robotframework_javagui-0.6.0/src/connection/mod.rs +357 -0
  207. robotframework_javagui-0.6.0/src/core/backend.rs +477 -0
  208. robotframework_javagui-0.6.0/src/core/config.rs +850 -0
  209. robotframework_javagui-0.6.0/src/core/element.rs +1351 -0
  210. robotframework_javagui-0.6.0/src/core/element_cache.rs +412 -0
  211. robotframework_javagui-0.6.0/src/core/mod.rs +17 -0
  212. robotframework_javagui-0.6.0/src/core/tests.rs +941 -0
  213. robotframework_javagui-0.6.0/src/core/type_mapping.rs +420 -0
  214. robotframework_javagui-0.6.0/src/error.rs +251 -0
  215. robotframework_javagui-0.6.0/src/lib.rs +113 -0
  216. robotframework_javagui-0.6.0/src/locator/ast.rs +515 -0
  217. robotframework_javagui-0.6.0/src/locator/cache.rs +442 -0
  218. robotframework_javagui-0.6.0/src/locator/expression.rs +487 -0
  219. robotframework_javagui-0.6.0/src/locator/grammar.pest +367 -0
  220. robotframework_javagui-0.6.0/src/locator/matcher.rs +1373 -0
  221. robotframework_javagui-0.6.0/src/locator/mod.rs +38 -0
  222. robotframework_javagui-0.6.0/src/locator/parser.rs +1383 -0
  223. robotframework_javagui-0.6.0/src/locator/swt_matcher.rs +2356 -0
  224. robotframework_javagui-0.6.0/src/locator/unified.rs +2441 -0
  225. robotframework_javagui-0.6.0/src/locator/unified_tests.rs +864 -0
  226. robotframework_javagui-0.6.0/src/model/component.rs +564 -0
  227. robotframework_javagui-0.6.0/src/model/element.rs +552 -0
  228. robotframework_javagui-0.6.0/src/model/mod.rs +64 -0
  229. robotframework_javagui-0.6.0/src/model/rcp.rs +819 -0
  230. robotframework_javagui-0.6.0/src/model/tree.rs +408 -0
  231. robotframework_javagui-0.6.0/src/model/widget.rs +2082 -0
  232. robotframework_javagui-0.6.0/src/protocol/mod.rs +234 -0
  233. robotframework_javagui-0.6.0/src/python/base_library.rs +1278 -0
  234. robotframework_javagui-0.6.0/src/python/element.rs +530 -0
  235. robotframework_javagui-0.6.0/src/python/exceptions.rs +473 -0
  236. robotframework_javagui-0.6.0/src/python/mod.rs +47 -0
  237. robotframework_javagui-0.6.0/src/python/rcp_library.rs +2072 -0
  238. robotframework_javagui-0.6.0/src/python/swing_library.rs +3582 -0
  239. robotframework_javagui-0.6.0/src/python/swt_element.rs +510 -0
  240. robotframework_javagui-0.6.0/src/python/swt_library.rs +1707 -0
  241. robotframework_javagui-0.6.0/src/python/tests.rs +268 -0
  242. robotframework_javagui-0.6.0/src/python/unified_element.rs +0 -0
  243. robotframework_javagui-0.6.0/src/python/unified_exceptions.rs +1256 -0
  244. robotframework_javagui-0.6.0/tasks.py +387 -0
  245. robotframework_javagui-0.6.0/tests/apps/rcp/build-and-run-real-eclipse.sh +69 -0
  246. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/META-INF/MANIFEST.MF +23 -0
  247. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/build.properties +6 -0
  248. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/plugin.xml +598 -0
  249. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/Activator.java +46 -0
  250. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/Application.java +55 -0
  251. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/ApplicationActionBarAdvisor.java +140 -0
  252. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/ApplicationWorkbenchAdvisor.java +61 -0
  253. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/ApplicationWorkbenchWindowAdvisor.java +60 -0
  254. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/DataPerspective.java +67 -0
  255. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/DebugPerspective.java +76 -0
  256. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/Perspective.java +90 -0
  257. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/editors/FileEditorInput.java +77 -0
  258. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/editors/FormEditor.java +305 -0
  259. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/editors/SimpleTextEditor.java +174 -0
  260. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/editors/XmlEditor.java +213 -0
  261. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/views/ConsoleView.java +202 -0
  262. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/views/NavigatorView.java +250 -0
  263. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/views/OutlineView.java +155 -0
  264. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/views/PropertiesView.java +239 -0
  265. robotframework_javagui-0.6.0/tests/apps/rcp/plugins/com.testapp.rcp/src/com/testapp/rcp/views/TasksView.java +185 -0
  266. robotframework_javagui-0.6.0/tests/apps/rcp-mock/pom.xml +145 -0
  267. robotframework_javagui-0.6.0/tests/apps/rcp-mock/src/main/java/testapp/rcp/MockRcpApplication.java +1541 -0
  268. robotframework_javagui-0.6.0/tests/apps/swing/pom.xml +147 -0
  269. robotframework_javagui-0.6.0/tests/apps/swing/src/main/java/testapp/SwingTestApp.java +1144 -0
  270. robotframework_javagui-0.6.0/tests/apps/swt/pom.xml +273 -0
  271. robotframework_javagui-0.6.0/tests/apps/swt/src/main/java/testapp/SwtTestApp.java +1811 -0
  272. robotframework_javagui-0.6.0/tests/python/__init__.py +3 -0
  273. robotframework_javagui-0.6.0/tests/python/conftest.py +906 -0
  274. robotframework_javagui-0.6.0/tests/python/pytest.ini +11 -0
  275. robotframework_javagui-0.6.0/tests/python/test_assertions.py +1263 -0
  276. robotframework_javagui-0.6.0/tests/python/test_benchmark.py +387 -0
  277. robotframework_javagui-0.6.0/tests/python/test_component_tree.py +446 -0
  278. robotframework_javagui-0.6.0/tests/python/test_component_tree_benchmarks.py +652 -0
  279. robotframework_javagui-0.6.0/tests/python/test_component_tree_filtering.py +530 -0
  280. robotframework_javagui-0.6.0/tests/python/test_component_tree_unit.py +382 -0
  281. robotframework_javagui-0.6.0/tests/python/test_errors.py +229 -0
  282. robotframework_javagui-0.6.0/tests/python/test_formatter_performance.py +276 -0
  283. robotframework_javagui-0.6.0/tests/python/test_getter_keywords.py +477 -0
  284. robotframework_javagui-0.6.0/tests/python/test_integration.py +246 -0
  285. robotframework_javagui-0.6.0/tests/python/test_locators.py +340 -0
  286. robotframework_javagui-0.6.0/tests/python/test_output_formatters.py +458 -0
  287. robotframework_javagui-0.6.0/tests/python/test_output_formatters_integration.py +384 -0
  288. robotframework_javagui-0.6.0/tests/python/test_rcp_assertions.py +1182 -0
  289. robotframework_javagui-0.6.0/tests/python/test_rcp_component_tree.py +491 -0
  290. robotframework_javagui-0.6.0/tests/python/test_swing_element.py +278 -0
  291. robotframework_javagui-0.6.0/tests/python/test_swing_library.py +477 -0
  292. robotframework_javagui-0.6.0/tests/python/test_swt_assertions.py +965 -0
  293. robotframework_javagui-0.6.0/tests/python/test_tree_depth_control.py +310 -0
  294. robotframework_javagui-0.6.0/tests/python/test_utils.py +299 -0
  295. robotframework_javagui-0.6.0/tests/python/test_wrapper_fix_verification.py +315 -0
  296. robotframework_javagui-0.6.0/tests/python/test_wrapper_implementation_verification.py +342 -0
  297. robotframework_javagui-0.6.0/tests/requirements.txt +19 -0
  298. robotframework_javagui-0.6.0/tests/robot/rcp/01_connection.robot +203 -0
  299. robotframework_javagui-0.6.0/tests/robot/rcp/02_workbench.robot +140 -0
  300. robotframework_javagui-0.6.0/tests/robot/rcp/03_perspectives.robot +262 -0
  301. robotframework_javagui-0.6.0/tests/robot/rcp/04_views.robot +396 -0
  302. robotframework_javagui-0.6.0/tests/robot/rcp/05_editors.robot +530 -0
  303. robotframework_javagui-0.6.0/tests/robot/rcp/06_menus.robot +246 -0
  304. robotframework_javagui-0.6.0/tests/robot/rcp/07_commands.robot +264 -0
  305. robotframework_javagui-0.6.0/tests/robot/rcp/08_toolbar.robot +178 -0
  306. robotframework_javagui-0.6.0/tests/robot/rcp/09_preferences.robot +233 -0
  307. robotframework_javagui-0.6.0/tests/robot/rcp/10_widgets.robot +441 -0
  308. robotframework_javagui-0.6.0/tests/robot/rcp/11_coverage_editors_views.robot +47 -0
  309. robotframework_javagui-0.6.0/tests/robot/rcp/real_eclipse/01_real_workbench.robot +67 -0
  310. robotframework_javagui-0.6.0/tests/robot/rcp/resources/common.resource +388 -0
  311. robotframework_javagui-0.6.0/tests/robot/showcase/01_smoke.robot +31 -0
  312. robotframework_javagui-0.6.0/tests/robot/showcase/02_validated_actions.robot +68 -0
  313. robotframework_javagui-0.6.0/tests/robot/showcase/03_tile_navigation.robot +44 -0
  314. robotframework_javagui-0.6.0/tests/robot/showcase/README.md +88 -0
  315. robotframework_javagui-0.6.0/tests/robot/showcase/resources/showcase.resource +127 -0
  316. robotframework_javagui-0.6.0/tests/robot/swing/01_connection.robot +243 -0
  317. robotframework_javagui-0.6.0/tests/robot/swing/02_element_finding.robot +366 -0
  318. robotframework_javagui-0.6.0/tests/robot/swing/03_buttons.robot +367 -0
  319. robotframework_javagui-0.6.0/tests/robot/swing/04_text_input.robot +383 -0
  320. robotframework_javagui-0.6.0/tests/robot/swing/05_selection.robot +396 -0
  321. robotframework_javagui-0.6.0/tests/robot/swing/06_tables.robot +482 -0
  322. robotframework_javagui-0.6.0/tests/robot/swing/07_trees.robot +415 -0
  323. robotframework_javagui-0.6.0/tests/robot/swing/08_menus.robot +394 -0
  324. robotframework_javagui-0.6.0/tests/robot/swing/09_waits.robot +373 -0
  325. robotframework_javagui-0.6.0/tests/robot/swing/10_verification.robot +501 -0
  326. robotframework_javagui-0.6.0/tests/robot/swing/11_spinner_slider.robot +139 -0
  327. robotframework_javagui-0.6.0/tests/robot/swing/12_tabs.robot +148 -0
  328. robotframework_javagui-0.6.0/tests/robot/swing/13_dialogs.robot +165 -0
  329. robotframework_javagui-0.6.0/tests/robot/swing/14_progressbar.robot +107 -0
  330. robotframework_javagui-0.6.0/tests/robot/swing/15_labels.robot +145 -0
  331. robotframework_javagui-0.6.0/tests/robot/swing/16_cascaded_basic.robot +295 -0
  332. robotframework_javagui-0.6.0/tests/robot/swing/17_cascaded_engines.robot +628 -0
  333. robotframework_javagui-0.6.0/tests/robot/swing/18_cascaded_capture.robot +412 -0
  334. robotframework_javagui-0.6.0/tests/robot/swing/19_cascaded_tables.robot +535 -0
  335. robotframework_javagui-0.6.0/tests/robot/swing/21_coverage_getters.robot +58 -0
  336. robotframework_javagui-0.6.0/tests/robot/swing/resources/cascaded_selectors.resource +696 -0
  337. robotframework_javagui-0.6.0/tests/robot/swing/resources/common.resource +280 -0
  338. robotframework_javagui-0.6.0/tests/robot/swt/01_connection.robot +216 -0
  339. robotframework_javagui-0.6.0/tests/robot/swt/02_shells.robot +201 -0
  340. robotframework_javagui-0.6.0/tests/robot/swt/02_widgets.robot +184 -0
  341. robotframework_javagui-0.6.0/tests/robot/swt/03_tables.robot +249 -0
  342. robotframework_javagui-0.6.0/tests/robot/swt/03_widget_finding.robot +299 -0
  343. robotframework_javagui-0.6.0/tests/robot/swt/04_clicks.robot +303 -0
  344. robotframework_javagui-0.6.0/tests/robot/swt/04_trees.robot +262 -0
  345. robotframework_javagui-0.6.0/tests/robot/swt/05_text_input.robot +346 -0
  346. robotframework_javagui-0.6.0/tests/robot/swt/06_selection.robot +381 -0
  347. robotframework_javagui-0.6.0/tests/robot/swt/20_coverage_getters.robot +87 -0
  348. robotframework_javagui-0.6.0/tests/robot/swt/resources/common.resource +957 -0
  349. robotframework_javagui-0.6.0/tests/scripts/comprehensive_test_report.py +182 -0
  350. robotframework_javagui-0.6.0/tests/test_empty_locator.py +57 -0
  351. robotframework_javagui-0.6.0/tests/unit/test_empty_locator_validation.py +211 -0
  352. robotframework_javagui-0.6.0/tests/unit/test_list_shells_and_retry.py +282 -0
  353. robotframework_javagui-0.6.0/tests/verify_empty_locator_fix.robot +15 -0
  354. 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`.