public void Simulate01() { var tr = new RegistryMock(SimulateRegistry01()); string dir = @"C:\Program Files\MRO\R-3.2.3"; string dir64 = dir + @"\bin\x64\"; var fs = Substitute.For <IFileSystem>(); PretendRFilesAvailable(fs, dir); var fvi = Substitute.For <IFileVersionInfo>(); fvi.FileMajorPart.Returns(3); fvi.FileMinorPart.Returns(23); fs.GetVersionInfo(dir64 + "R.dll").Returns(fvi); var ri = new RInstallation(tr, fs); var svl = new SupportedRVersionRange(3, 2, 3, 2); var engines = ri.GetCompatibleEngines(svl); engines.Should().NotBeEmpty(); var e = engines.FirstOrDefault(); e.VerifyInstallation(svl, fs).Should().BeTrue(); e.Version.Major.Should().BeGreaterOrEqualTo(3); e.Version.Minor.Should().BeGreaterOrEqualTo(2); e.InstallPath.Should().StartWithEquivalent(@"C:\Program Files"); e.InstallPath.Should().Contain("R-"); e.Version.Should().Be(new Version(3, 2, 3)); }
public void Simulate01() { var tr = new RegistryMock(SimulateRegistry01()); string dir = @"C:\Program Files\MRO\R-3.2.3"; string dir64 = dir + @"\bin\x64\"; var fs = Substitute.For<IFileSystem>(); PretendRFilesAvailable(fs, dir); var fvi = Substitute.For<IFileVersionInfo>(); fvi.FileMajorPart.Returns(3); fvi.FileMinorPart.Returns(23); fs.GetVersionInfo(dir64 + "R.dll").Returns(fvi); var ri = new RInstallation(tr, fs); var svl = new SupportedRVersionRange(3, 2, 3, 2); var engines = ri.GetCompatibleEngines(svl); engines.Should().NotBeEmpty(); var e = engines.FirstOrDefault(); e.VerifyInstallation(svl, fs).Should().BeTrue(); e.Version.Major.Should().BeGreaterOrEqualTo(3); e.Version.Minor.Should().BeGreaterOrEqualTo(2); e.InstallPath.Should().StartWithEquivalent(@"C:\Program Files"); e.InstallPath.Should().Contain("R-"); e.Version.Should().Be(new Version(3, 2, 3)); }
public void Duplicates() { var tr = new RegistryMock(SimulateDuplicates()); var svl = new SupportedRVersionRange(3, 2, 3, 4); string dir = @"C:\Program Files\Microsoft\R Client\R_SERVER"; var fs = Substitute.For <IFileSystem>(); var fsi = Substitute.For <IFileSystemInfo>(); fsi.Attributes.Returns(FileAttributes.Directory); fsi.FullName.Returns(dir); fs.GetDirectoryInfo(@"C:\Program Files\Microsoft\R Client\R_SERVER").EnumerateFileSystemInfos().Returns(new IFileSystemInfo[] { fsi }); var fvi = SimulateFileVersion(3, 22); fs.GetVersionInfo(Path.Combine(dir, @"bin\x64", "R.dll")).Returns(fvi); PretendRFilesAvailable(fs, dir); var ri = new RInstallation(tr, fs); var engines = ri.GetCompatibleEngines(svl); engines.Should().HaveCount(1); var e = engines.First(); e.Name.Should().Contain("Microsoft R"); e = new RInterpreterInfo(e.Name, e.InstallPath, fs); }
public void RInstallationBasicTest() { var fs = new TestFileSystem(); var rInstallation = new RInstallation(fs); var installs = rInstallation.GetCompatibleEngines(); installs.Count().Should().Be(2); // test MRO installs.Should().ContainSingle(i => i.Name.StartsWithOrdinal("Microsoft")).Which.Version.Should().Be(new Version(3, 3, 3)); // test CRAN R installs.Should().ContainSingle(i => i.Name.StartsWithOrdinal("R")).Which.Version.Should().Be(new Version(3, 2, 3, 4)); }
public void IncompatibleVerson01() { var tr = new RegistryMock(SimulateRegistry02()); var svl = new SupportedRVersionRange(3, 2, 3, 9); var fs = Substitute.For <IFileSystem>(); var ri = new RInstallation(tr, fs); ri.GetCompatibleEngines(svl).Should().BeEmpty(); string dir = @"C:\Program Files\RRO\R-3.1.3"; var fsi = Substitute.For <IFileSystemInfo>(); fsi.Attributes.Returns(FileAttributes.Directory); fsi.FullName.Returns(dir); fs.GetDirectoryInfo(@"C:\Program Files\RRO").EnumerateFileSystemInfos().Returns(new[] { fsi }); ri = new RInstallation(tr, fs); var engines = ri.GetCompatibleEngines(svl); engines.Should().BeEmpty(); }
public void MissingBinaries() { var tr = new RegistryMock(SimulateRegistry02()); var svl = new SupportedRVersionRange(3, 1, 3, 4); string dir = @"C:\Program Files\R\R-3.1.3"; var fs = Substitute.For <IFileSystem>(); var fsi = Substitute.For <IFileSystemInfo>(); fsi.Attributes.Returns(FileAttributes.Directory); fsi.FullName.Returns(dir); fs.GetDirectoryInfo(@"C:\Program Files\R").EnumerateFileSystemInfos().Returns(new IFileSystemInfo[] { fsi }); var fvi = new Version(3, 13); fs.GetFileVersion(Path.Combine(dir, @"bin\x64", "R.dll")).Returns(fvi); PretendRFilesAvailable(fs, dir); var ri = new RInstallation(tr, fs); var e = ri.GetCompatibleEngines(svl).FirstOrDefault(); e.Should().NotBeNull(); var ui = Substitute.For <IUIService>(); fs = Substitute.For <IFileSystem>(); var coreShell = Substitute.For <ICoreShell>(); coreShell.UI().Returns(ui); e = new RInterpreterInfo(e.Name, e.InstallPath, fs); e.VerifyInstallation(svl, fs, ui).Should().BeFalse(); ui.When(x => x.ShowMessage(Arg.Any <string>(), MessageButtons.OK)).Do(x => { var s = x.Args()[0] as string; s.Should().Contain("Cannot find"); }); ui.Received().ShowMessage(Arg.Any <string>(), MessageButtons.OK); }
public void IncompatibleVersonInPF() { var tr = new RegistryMock(SimulateRegistry02()); var svl = new SupportedRVersionRange(3, 1, 3, 9); var root = @"C:\Program Files\R"; string dir = Path.Combine(root, "R-3.1.3"); var fs = Substitute.For <IFileSystem>(); fs.DirectoryExists(root).Returns(true); fs.DirectoryExists(dir).Returns(true); var fsi = Substitute.For <IFileSystemInfo>(); fsi.Attributes.Returns(FileAttributes.Directory); fsi.FullName.Returns(dir); fs.GetDirectoryInfo(root).EnumerateFileSystemInfos().Returns(new IFileSystemInfo[] { fsi }); var ri = new RInstallation(tr, fs); var engines = ri.GetCompatibleEngines(svl); engines.Should().BeEmpty(); }
public static void WriteGeneralData(TextWriter writer, bool detailed) { try { writer.WriteLine("OS Information"); writer.WriteLine(" Version: " + Environment.OSVersion); if (detailed) { writer.WriteLine(" CPU Count: " + Environment.ProcessorCount); writer.WriteLine(" 64 bit: " + Environment.Is64BitOperatingSystem); writer.WriteLine(" System Folder: " + Environment.SystemDirectory); writer.WriteLine(" Working set: " + Environment.WorkingSet); } writer.WriteLine(); Assembly thisAssembly = Assembly.GetExecutingAssembly(); writer.WriteLine("RTVS Information:"); writer.WriteLine(" Assembly: " + thisAssembly.FullName); if (detailed) { writer.WriteLine(" Codebase: " + thisAssembly.CodeBase); } writer.WriteLine(); var ri = new RInstallation(); var workflow = VsAppShell.Current.GlobalServices.GetService <IRInteractiveWorkflowProvider>().GetOrCreate(); if (detailed) { var rEngines = ri.GetCompatibleEngines(); writer.WriteLine("Installed R Engines (from registry):"); foreach (var e in rEngines) { writer.WriteLine(Invariant($"{e.Name} {e.Version} {e.InstallPath}")); } writer.WriteLine(); var connections = workflow.Connections.RecentConnections; writer.WriteLine("Installed R Engines (from registry):"); foreach (var connection in connections) { writer.WriteLine(Invariant($" {connection.Name}: {connection.Path}")); } writer.WriteLine(); } var activeConnection = workflow.Connections.ActiveConnection; if (activeConnection != null) { writer.WriteLine("Active R URI:"); writer.WriteLine(Invariant($" {activeConnection.Name}: {activeConnection.Path}")); writer.WriteLine(); } if (detailed) { writer.WriteLine("Assemblies loaded by Visual Studio:"); foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies().OrderBy(assem => assem.FullName)) { var assemFileVersion = assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false).OfType <AssemblyFileVersionAttribute>().FirstOrDefault(); writer.WriteLine(string.Format(CultureInfo.InvariantCulture, " {0}, FileVersion={1}", assembly.FullName, assemFileVersion == null ? "(null)" : assemFileVersion.Version )); } } } catch (Exception ex) { writer.WriteLine(" Failed to access system data."); writer.WriteLine(ex.ToString()); writer.WriteLine(); } finally { writer.Flush(); } }
public void IncompatibleVerson01() { var tr = new RegistryMock(SimulateRegistry02()); var svl = new SupportedRVersionRange(3, 2, 3, 9); var fs = Substitute.For<IFileSystem>(); var ri = new RInstallation(tr, fs); ri.GetCompatibleEngines(svl).Should().BeEmpty(); string dir = @"C:\Program Files\RRO\R-3.1.3"; var fsi = Substitute.For<IFileSystemInfo>(); fsi.Attributes.Returns(FileAttributes.Directory); fsi.FullName.Returns(dir); fs.GetDirectoryInfo(@"C:\Program Files\RRO").EnumerateFileSystemInfos().Returns(new[] { fsi }); ri = new RInstallation(tr, fs); var engines = ri.GetCompatibleEngines(svl); engines.Should().BeEmpty(); }
public void Duplicates() { var tr = new RegistryMock(SimulateDuplicates()); var svl = new SupportedRVersionRange(3, 2, 3, 4); string dir = @"C:\Program Files\Microsoft\R Client\R_SERVER"; var fs = Substitute.For<IFileSystem>(); var fsi = Substitute.For<IFileSystemInfo>(); fsi.Attributes.Returns(FileAttributes.Directory); fsi.FullName.Returns(dir); fs.GetDirectoryInfo(@"C:\Program Files\Microsoft\R Client\R_SERVER").EnumerateFileSystemInfos().Returns(new IFileSystemInfo[] { fsi }); var fvi = SimulateFileVersion(3, 22); fs.GetVersionInfo(Path.Combine(dir, @"bin\x64", "R.dll")).Returns(fvi); PretendRFilesAvailable(fs, dir); var ri = new RInstallation(tr, fs); var engines = ri.GetCompatibleEngines(svl); engines.Should().HaveCount(1); var e = engines.First(); e.Name.Should().Contain("Microsoft R"); e = new RInterpreterInfo(e.Name, e.InstallPath, fs); }
public void MissingBinaries() { var tr = new RegistryMock(SimulateRegistry02()); var svl = new SupportedRVersionRange(3, 1, 3, 4); string dir = @"C:\Program Files\R\R-3.1.3"; var fs = Substitute.For<IFileSystem>(); var fsi = Substitute.For<IFileSystemInfo>(); fsi.Attributes.Returns(FileAttributes.Directory); fsi.FullName.Returns(dir); fs.GetDirectoryInfo(@"C:\Program Files\R").EnumerateFileSystemInfos().Returns(new IFileSystemInfo[] { fsi }); var fvi = SimulateFileVersion(3, 13); fs.GetVersionInfo(Path.Combine(dir, @"bin\x64", "R.dll")).Returns(fvi); PretendRFilesAvailable(fs, dir); var ri = new RInstallation(tr, fs); var e = ri.GetCompatibleEngines(svl).FirstOrDefault(); e.Should().NotBeNull(); e = new RInterpreterInfo(e.Name, e.InstallPath, fs); var coreShell = Substitute.For<ICoreShell>(); fs = Substitute.For<IFileSystem>(); e.VerifyInstallation(svl, fs, coreShell).Should().BeFalse(); coreShell.When(x => x.ShowMessage(Arg.Any<string>(), MessageButtons.OK)).Do(x => { var s = x.Args()[0] as string; s.Should().Contain("Cannot find"); }); coreShell.Received().ShowMessage(Arg.Any<string>(), MessageButtons.OK); }
public void IncompatibleVersonInPF() { var tr = new RegistryMock(SimulateRegistry02()); var svl = new SupportedRVersionRange(3, 1, 3, 9); var root = @"C:\Program Files\R"; string dir = Path.Combine(root, "R-3.1.3"); var fs = Substitute.For<IFileSystem>(); fs.DirectoryExists(root).Returns(true); fs.DirectoryExists(dir).Returns(true); var fsi = Substitute.For<IFileSystemInfo>(); fsi.Attributes.Returns(FileAttributes.Directory); fsi.FullName.Returns(dir); fs.GetDirectoryInfo(root).EnumerateFileSystemInfos().Returns(new IFileSystemInfo[] { fsi }); var ri = new RInstallation(tr, fs); var engines = ri.GetCompatibleEngines(svl); engines.Should().BeEmpty(); }