public void WatchWorkspaceVirtualEnvCreated() { var python = PythonPaths.Python37_x64 ?? PythonPaths.Python37; var workspaceFolder = TestData.GetTempPath(); Directory.CreateDirectory(workspaceFolder); File.WriteAllText(Path.Combine(workspaceFolder, "app.py"), string.Empty); string envFolder = Path.Combine(workspaceFolder, "env"); var workspace = new WorkspaceTestHelper.MockWorkspace(workspaceFolder); var workspaceContext = new WorkspaceTestHelper.MockWorkspaceContext(workspace); // Create virtual env inside the workspace folder (one level from root) var configs = TestTriggerDiscovery( workspaceContext, () => python.CreateVirtualEnv(Path.Combine(workspaceFolder, "env")) ).ToArray(); Assert.AreEqual(1, configs.Length); Assert.IsTrue(PathUtils.IsSamePath( Path.Combine(envFolder, "scripts", "python.exe"), configs[0].InterpreterPath )); Assert.AreEqual("Workspace|Workspace|env", configs[0].Id); }
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 (TestSetupData, IList <string>) GenerateWorkspace() { var virtualEnvName = "virtualEnv"; WorkspaceTestHelper.MockWorkspace mockWorkspace = WorkspaceTestHelper.CreateMockWorkspace(WorkspaceTestHelper.CreateWorkspaceFolder(), WorkspaceTestHelper.Python37Id); WorkspaceTestHelper.MockOptionsService optionsService = new WorkspaceTestHelper.MockOptionsService(WorkspaceTestHelper.DefaultFactory); var includedWorkspaceFilePaths = GenerateWorkspaceFiles(mockWorkspace.Location, virtualEnvName, out string virtualEnvPath); includedWorkspaceFilePaths.Add(Path.Combine(mockWorkspace.Location, "app.py")); //Created by WorkspaceTestHelper.CreateWorkspaceFolder() var workspaceInterpreterFactories = new List <IPythonInterpreterFactory>() { new MockPythonInterpreterFactory( new VisualStudioInterpreterConfiguration("Python|3.7", "Fake interpreter 3.7", Path.Combine(mockWorkspace.Location, virtualEnvName), virtualEnvPath) ) }; WorkspaceTestHelper.MockRegistryService registryService = new WorkspaceTestHelper.MockRegistryService(workspaceInterpreterFactories); TestSetupData testDataSetup = new TestSetupData { OptionsService = optionsService, RegistryService = registryService, Workspace = mockWorkspace, }; return(testDataSetup, includedWorkspaceFilePaths); }
public void WatchWorkspaceSettingsChanged() { var workspaceFolder = TestData.GetTempPath(); Directory.CreateDirectory(workspaceFolder); File.WriteAllText(Path.Combine(workspaceFolder, "app.py"), string.Empty); var workspace = new WorkspaceTestHelper.MockWorkspace(workspaceFolder); var workspaceContext = new WorkspaceTestHelper.MockWorkspaceContext(workspace); // Modify settings Action triggerDiscovery = () => { workspaceContext.SimulateChangeInterpreterSetting("Global|PythonCore|3.7"); }; TestTriggerDiscovery(workspaceContext, triggerDiscovery, null, true); }
public void AlreadyOpenedWorkspace() { var workspaceFolder = WorkspaceTestHelper.CreateWorkspaceFolder(); WorkspaceTestHelper.MockWorkspace workspace = WorkspaceTestHelper.CreateMockWorkspace(workspaceFolder, WorkspaceTestHelper.PythonNoId); WorkspaceTestHelper.MockWorkspaceService workspaceService = new WorkspaceTestHelper.MockWorkspaceService(workspace); WorkspaceTestHelper.MockOptionsService optionsService = new WorkspaceTestHelper.MockOptionsService(WorkspaceTestHelper.DefaultFactory); WorkspaceTestHelper.MockRegistryService registryService = new WorkspaceTestHelper.MockRegistryService(WorkspaceTestHelper.AllFactories); var provider = new PythonWorkspaceContextProvider( workspaceService, new Lazy <IInterpreterOptionsService>(() => optionsService), new Lazy <IInterpreterRegistryService>(() => registryService), new JoinableTaskContext() ); Assert.AreEqual(workspaceFolder, provider.Workspace.Location); Assert.AreEqual(WorkspaceTestHelper.DefaultFactory, provider.Workspace.CurrentFactory); }
public void SwitchWorkspace() { var workspaceFolder1 = WorkspaceTestHelper.CreateWorkspaceFolder(); var workspaceFolder2 = WorkspaceTestHelper.CreateWorkspaceFolder(); WorkspaceTestHelper.MockWorkspace workspace1 = WorkspaceTestHelper.CreateMockWorkspace(workspaceFolder1, WorkspaceTestHelper.Python27Id); WorkspaceTestHelper.MockWorkspace workspace2 = WorkspaceTestHelper.CreateMockWorkspace(workspaceFolder2, WorkspaceTestHelper.Python37Id); WorkspaceTestHelper.MockWorkspaceService workspaceService = new WorkspaceTestHelper.MockWorkspaceService(workspace1); WorkspaceTestHelper.MockOptionsService optionsService = new WorkspaceTestHelper.MockOptionsService(WorkspaceTestHelper.DefaultFactory); WorkspaceTestHelper.MockRegistryService registryService = new WorkspaceTestHelper.MockRegistryService(WorkspaceTestHelper.AllFactories); var provider = new PythonWorkspaceContextProvider( workspaceService, new Lazy <IInterpreterOptionsService>(() => optionsService), new Lazy <IInterpreterRegistryService>(() => registryService), new JoinableTaskContext() ); Assert.AreEqual(workspaceFolder1, provider.Workspace.Location); Assert.AreEqual(WorkspaceTestHelper.Python27Factory, provider.Workspace.CurrentFactory); using (var openEvent = new AutoResetEvent(false)) using (var initEvent = new AutoResetEvent(false)) using (var closingEvent = new AutoResetEvent(false)) using (var closedEvent = new AutoResetEvent(false)) { provider.WorkspaceOpening += (sender, e) => { openEvent.Set(); }; provider.WorkspaceInitialized += (sender, e) => { initEvent.Set(); }; provider.WorkspaceClosed += (sender, e) => { closedEvent.Set(); }; provider.WorkspaceClosing += (sender, e) => { closingEvent.Set(); }; workspaceService.SimulateChangeWorkspace(workspace2); Assert.IsTrue(openEvent.WaitOne(1000), $"Expected {nameof(provider.WorkspaceOpening)}."); Assert.IsTrue(initEvent.WaitOne(1000), $"Expected {nameof(provider.WorkspaceInitialized)}."); Assert.IsTrue(closingEvent.WaitOne(1000), $"Expected {nameof(provider.WorkspaceClosing)}."); Assert.IsTrue(closedEvent.WaitOne(1000), $"Expected {nameof(provider.WorkspaceClosed)}."); Assert.AreEqual(workspaceFolder2, provider.Workspace.Location); Assert.AreEqual(WorkspaceTestHelper.Python37Factory, provider.Workspace.CurrentFactory); } }
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. WorkspaceTestHelper.MockWorkspace workspace = new WorkspaceTestHelper.MockWorkspace(workspaceFolder); WorkspaceTestHelper.MockWorkspaceContext workspaceContext = new WorkspaceTestHelper.MockWorkspaceContext(workspace, @"..\outside\scripts\python.exe"); WorkspaceTestHelper.MockWorkspaceContextProvider workspaceContextProvider = new WorkspaceTestHelper.MockWorkspaceContextProvider(workspaceContext); using (var factoryProvider = new WorkspaceInterpreterFactoryProvider(workspaceContextProvider)) { workspaceContextProvider.SimulateChangeWorkspace(workspaceContext); var configs = factoryProvider.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); } }
public MockWorkspaceContext(WorkspaceTestHelper.MockWorkspace workspace, string interpreterSetting = null) { _workspace = workspace; _interpreterSetting = interpreterSetting; }