Implement project-based testing architecture for multi-project workspaces#25719
Closed
eleanorjboyd wants to merge 13 commits intomicrosoft:mainfrom
Closed
Implement project-based testing architecture for multi-project workspaces#25719eleanorjboyd wants to merge 13 commits intomicrosoft:mainfrom
eleanorjboyd wants to merge 13 commits intomicrosoft:mainfrom
Conversation
- Created ProjectAdapter and WorkspaceDiscoveryState interfaces - Added project utility functions (ID generation, scoping, nested project detection) - Updated PythonResultResolver to support optional projectId parameter - Modified populateTestTree to create project-scoped test IDs - Updated TestDiscoveryHandler to handle project-scoped error nodes Co-authored-by: eleanorjboyd <26030610+eleanorjboyd@users.noreply.github.com>
- Added project-based state maps (workspaceProjects, vsIdToProject, fileUriToProject, projectToVsIds) - Implemented discoverWorkspaceProjects() to query Python Environment API - Created createProjectAdapter() to build ProjectAdapter from PythonProject - Added createDefaultProject() for backward compatibility - Imported necessary types from environment API - Added flag to enable/disable project-based testing Co-authored-by: eleanorjboyd <26030610+eleanorjboyd@users.noreply.github.com>
- Modified activate() to check useProjectBasedTesting flag - Calls discoverWorkspaceProjects() for each workspace when enabled - Populates workspaceProjects map with discovered projects - Created activateLegacyWorkspace() for backward compatibility - Falls back to legacy mode if project discovery fails - Maintains full backward compatibility with flag disabled Co-authored-by: eleanorjboyd <26030610+eleanorjboyd@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds infrastructure to support multiple Python projects (each with distinct Python executables and test configurations) within a single VS Code workspace. Currently behind a feature flag (
useProjectBasedTesting = false) for safe deployment.Core Infrastructure
{projectId}::{testPath}prevents ID collisions between projectsResult Resolver Updates
projectIdparameter toPythonResultResolverconstructorpopulateTestTree()andTestDiscoveryHandlerto propagate project scopingProject Discovery Integration
discoverWorkspaceProjects(): Queries Python Environment API for projects, filters to workspace, createsProjectAdapterinstancescreateProjectAdapter(): Resolves Python environment, creates project-scoped resolver and provider-specific adapterscreateDefaultProject(): Fallback that mimics single-workspace behavior using workspace interpreterworkspaceProjects: Project registry by workspace URIvsIdToProject: O(1) test-to-project lookup for executionfileUriToProject: File-to-project mapping for file watchingprojectToVsIds: Project-to-tests mapping for cleanupActivation Flow
Graceful degradation: Any failure in project discovery automatically falls back to legacy single-workspace mode. All new code paths are disabled by default until Phases 3-4 (discovery with overlap resolution, test execution) are implemented.
Files Changed
New:
testController/common/projectAdapter.ts- Type definitionstestController/common/projectUtils.ts- UtilitiesModified:
testController/controller.ts- Project discovery and state managementtestController/common/resultResolver.ts- Project scoping supporttestController/common/testDiscoveryHandler.ts- Scoped error nodestestController/common/utils.ts- Scoped test ID creation