public void WatchWorkspaceFolderChanged() { var workspaceFolder1 = TestData.GetTempPath(); Directory.CreateDirectory(workspaceFolder1); File.WriteAllText(Path.Combine(workspaceFolder1, "app1.py"), string.Empty); var workspaceFolder2 = TestData.GetTempPath(); Directory.CreateDirectory(workspaceFolder2); File.WriteAllText(Path.Combine(workspaceFolder2, "app2.py"), string.Empty); var workspace1 = new WorkspaceTestHelper.MockWorkspace(workspaceFolder1); var workspace2 = new WorkspaceTestHelper.MockWorkspace(workspaceFolder2); var workspaceContext1 = new WorkspaceTestHelper.MockWorkspaceContext(workspace1); var workspaceContext2 = new WorkspaceTestHelper.MockWorkspaceContext(workspace2); var workspaceContextProvider = new WorkspaceTestHelper.MockWorkspaceContextProvider(workspaceContext1); using (var factoryProvider = new WorkspaceInterpreterFactoryProvider(workspaceContextProvider)) { // Load a different workspace Action triggerDiscovery = () => { workspaceContextProvider.SimulateChangeWorkspace(workspaceContext2); }; TestTriggerDiscovery(workspaceContext1, triggerDiscovery, workspaceContextProvider, true); } }
private static IEnumerable <InterpreterConfiguration> TestTriggerDiscovery( IPythonWorkspaceContext workspaceContext, Action triggerDiscovery, IPythonWorkspaceContextProvider workspaceContextProvider = null, bool useDiscoveryStartedEvent = false ) { workspaceContextProvider = workspaceContextProvider ?? new WorkspaceTestHelper.MockWorkspaceContextProvider(workspaceContext); using (var provider = new WorkspaceInterpreterFactoryProvider(workspaceContextProvider)) using (var evt = new AutoResetEvent(false)) { // This initializes the provider, discovers the initial set // of factories and starts watching the filesystem. provider.GetInterpreterFactories(); if (useDiscoveryStartedEvent) { provider.DiscoveryStarted += (sender, e) => { evt.Set(); }; } else { provider.InterpreterFactoriesChanged += (sender, e) => { evt.Set(); }; } triggerDiscovery(); Assert.IsTrue(evt.WaitOne(5000), "Failed to trigger discovery."); return(provider.GetInterpreterConfigurations()); } }
private static IEnumerable <InterpreterConfiguration> TestTriggerDiscovery( IVsFolderWorkspaceService workspaceService, Action triggerDiscovery, bool useDiscoveryStartedEvent = false ) { using (var evt = new AutoResetEvent(false)) using (var provider = new WorkspaceInterpreterFactoryProvider(workspaceService)) { // This initializes the provider, discovers the initial set // of factories and starts watching the filesystem. var configs = provider.GetInterpreterConfigurations(); if (useDiscoveryStartedEvent) { provider.DiscoveryStarted += (sender, e) => { evt.Set(); }; } else { provider.InterpreterFactoriesChanged += (sender, e) => { evt.Set(); }; } triggerDiscovery(); Assert.IsTrue(evt.WaitOne(5000), "Failed to trigger discovery."); return(provider.GetInterpreterConfigurations()); } }
public void DetectLocalEnvOutsideWorkspace() { var python = PythonPaths.Python37_x64 ?? PythonPaths.Python37; var tempFolder = TestData.GetTempPath(); var workspaceFolder = Path.Combine(tempFolder, "workspace"); var envFolder = Path.Combine(tempFolder, "outside"); Directory.CreateDirectory(workspaceFolder); File.WriteAllText(Path.Combine(workspaceFolder, "app.py"), string.Empty); // Create virtual env outside the workspace folder using (var p = ProcessOutput.RunHiddenAndCapture(python.InterpreterPath, "-m", "venv", envFolder)) { Console.WriteLine(p.Arguments); p.Wait(); Console.WriteLine(string.Join(Environment.NewLine, p.StandardOutputLines.Concat(p.StandardErrorLines))); Assert.AreEqual(0, p.ExitCode); } // Normally a local virtual environment outside the workspace // wouldn't be detected, but it is when it's referenced from // the workspace python settings. var aggregatedSettings = new MockWorkspaceSettings( new Dictionary <string, string> { { "Interpreter", @"..\outside\scripts\python.exe" } } ); var settingsManager = new MockWorkspaceSettingsManager(aggregatedSettings); var workspace = new MockWorkspace(workspaceFolder, settingsManager); var workspaceService = new MockWorkspaceService(workspace); using (var provider = new WorkspaceInterpreterFactoryProvider(workspaceService)) { var configs = provider.GetInterpreterConfigurations().ToArray(); Assert.AreEqual(1, configs.Length); Assert.IsTrue(PathUtils.IsSamePath( Path.Combine(envFolder, "scripts", "python.exe"), configs[0].InterpreterPath )); Assert.AreEqual("Workspace|Workspace|outside", configs[0].Id); } }