protected static async Task <bool> DetectMissingPackagesAsync(IPackageManager packageManager, string reqTxtPath) { try { return(await PipRequirementsUtils.DetectMissingPackagesAsync( packageManager.Factory.Configuration.InterpreterPath, reqTxtPath )); } catch (IOException) { } catch (OperationCanceledException) { } return(false); }
private async Task DetectReqPkgMissingAsync(PythonVersion pythonInterpreter) { string virtualEnvPath = TestData.GetTempPath(); string interpreterExePath = Path.Combine(virtualEnvPath, "Scripts", "python.exe"); string reqTextPath = Path.Combine(virtualEnvPath, "requirements.txt"); var installPackages = new[] { "cookies >= 2.0", "Bottle==0.8.2" }; pythonInterpreter.CreateVirtualEnv(virtualEnvPath, installPackages); // Test cases for packages not missing bool isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath); Assert.IsFalse(isPackageMissing, "Expected no missing packages because requirements.txt does not exist"); File.WriteAllText(reqTextPath, String.Empty); isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath); Assert.IsFalse(isPackageMissing, "Expected no missing packages because requirements.txt is empty"); File.Delete(reqTextPath); File.WriteAllLines(reqTextPath, installPackages); File.AppendAllLines(reqTextPath, new string[] { " ", "$InvalidLineOfText ", "#MissingPackageName", " git+https://myvcs.com/some_dependency@", "coo kies", "cookies > = 100 ", "cookies >= 1.0 <= 2.0 flask == 2.0" }); isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath); Assert.IsFalse(isPackageMissing, "Expected no missing packages because all packages are installed and invalid lines should be ignored"); File.Delete(reqTextPath); File.WriteAllLines(reqTextPath, installPackages, encoding: new UTF8Encoding(true)); isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath); Assert.IsFalse(isPackageMissing, "Expected no missing packages because all packages are installed and UTF-8 BOM signature should be ignored"); File.Delete(reqTextPath); // Test cases for packages missing File.WriteAllLines(reqTextPath, new string[] { " MissingPackageName " }); isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath); Assert.IsTrue(isPackageMissing, "Expected missing packages because \"MissingPackageName\" it is not installed"); File.Delete(reqTextPath); File.WriteAllLines(reqTextPath, new string[] { "Cookies<=1.0" }); isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath); Assert.IsTrue(isPackageMissing, "Expected missing packages because \"cookies\" is incorrect version"); File.Delete(reqTextPath); File.WriteAllLines(reqTextPath, new string[] { "Cookies>=1.0", "Cookies>=100.0" }); isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath); Assert.IsTrue(isPackageMissing, "Expected missing package because \"cookies\" has a valid and invalid package version"); File.Delete(reqTextPath); }