public void TryGetVsProjectAdapter_ReturnsProjectByUniqueName() { // Arrange var target = new ProjectSystemCache(); var projectNames = new ProjectNames( fullName: @"C:\src\project\project.csproj", uniqueName: @"folder\project", shortName: "project", customUniqueName: @"folder\project"); var vsProjectAdapter = new Mock <IVsProjectAdapter>(); target.AddProject(projectNames, vsProjectAdapter.Object, nuGetProject: null); IVsProjectAdapter actual; // Act var success = target.TryGetVsProjectAdapter(projectNames.UniqueName, out actual); // Assert Assert.True(success, "The project should have been fetched from the cache by unique name."); Assert.Same(vsProjectAdapter.Object, actual); }
public void AddProjectRestoreInfo_TriggersEvent_WithEventHandler_NoReset() { // Arrange var target = new ProjectSystemCache(); var projectNames = new ProjectNames( fullName: @"C:\src\project\project.csproj", uniqueName: @"folder\project", shortName: "project", customUniqueName: @"folder\project"); var projectNamesFromFullPath = ProjectNames.FromFullProjectPath(@"C:\src\project\project.csproj"); var projectRestoreInfo = new DependencyGraphSpec(); var eventCount = 0; target.CacheUpdated += delegate(object sender, NuGetEventArgs <string> e) { eventCount++; }; // Act target.AddProjectRestoreInfo(projectNamesFromFullPath, projectRestoreInfo); target.AddProjectRestoreInfo(projectNamesFromFullPath, projectRestoreInfo); target.AddProject(projectNames, vsProjectAdapter: null, nuGetProject: null); // Assert DependencyGraphSpec actual; ProjectNames names; var getPackageSpecSuccess = target.TryGetProjectRestoreInfo(projectNames.FullName, out actual); var getProjectNameSuccess = target.TryGetProjectNames(projectNames.UniqueName, out names); Assert.True(getPackageSpecSuccess); Assert.True(getProjectNameSuccess); Assert.Same(projectRestoreInfo, actual); Assert.Equal(@"folder\project", names.CustomUniqueName); // Since no listener resets the dirty flag, the cache remains dirty and only 1 event is raised. Assert.Equal(target.IsCacheDirty, 1); Assert.Equal(eventCount, 1); }
public void AddProjectRestoreInfo_TriggersNoEvent_NoEventHandler() { // Arrange var target = new ProjectSystemCache(); var projectNames = GetTestProjectNames(); var projectRestoreInfo = new DependencyGraphSpec(); // Act target.AddProjectRestoreInfo(projectNames, projectRestoreInfo, additionalMessages: null); target.AddProject(projectNames, vsProjectAdapter: null, nuGetProject: null); // Assert DependencyGraphSpec actual; ProjectNames names; var getPackageSpecSuccess = target.TryGetProjectRestoreInfo(projectNames.FullName, out actual, out _); var getProjectNameSuccess = target.TryGetProjectNames(projectNames.UniqueName, out names); Assert.True(getPackageSpecSuccess); Assert.True(getProjectNameSuccess); Assert.Same(projectRestoreInfo, actual); Assert.Equal(@"folder\project", names.CustomUniqueName); // Cache remains clean since no one is listening to the cache events Assert.Equal(target.IsCacheDirty, 0); }
public void AddProject_AfterAddProjectRestoreInfo_UpdatesCacheEntry() { // Arrange var target = new ProjectSystemCache(); var projectNames = GetTestProjectNames(); var projectRestoreInfo = new DependencyGraphSpec(); target.AddProjectRestoreInfo(projectNames, projectRestoreInfo, additionalMessages: null); // Act target.AddProject(projectNames, vsProjectAdapter: null, nuGetProject: null); // Assert DependencyGraphSpec actual; ProjectNames names; var getPackageSpecSuccess = target.TryGetProjectRestoreInfo(projectNames.FullName, out actual, out _); var getProjectNameSuccess = target.TryGetProjectNames(projectNames.UniqueName, out names); Assert.True(getPackageSpecSuccess); Assert.True(getProjectNameSuccess); Assert.Same(projectRestoreInfo, actual); Assert.Equal(@"folder\project", names.CustomUniqueName); }
public void AddProjectRestoreInfoSource_AfterAddProject_UpdatesCacheEntry() { // Arrange var target = new ProjectSystemCache(); var projectNames = GetTestProjectNames(); object projectRestoreInfoSource = new(); target.AddProject(projectNames, vsProjectAdapter: null, nuGetProject: null); // Act target.AddProjectRestoreInfoSource(projectNames, projectRestoreInfoSource); // Assert var getProjectRestoreInfoSources = target.GetProjectRestoreInfoSources(); var getProjectNameFromUniqueNameSuccess = target.TryGetProjectNames(projectNames.UniqueName, out var names1); var getProjectNameFromFullNameSuccess = target.TryGetProjectNames(projectNames.FullName, out var names2); Assert.True(getProjectRestoreInfoSources.Any()); Assert.Equal(projectRestoreInfoSource, getProjectRestoreInfoSources.Single()); Assert.True(getProjectNameFromUniqueNameSuccess); Assert.True(getProjectNameFromFullNameSuccess); Assert.Equal(@"folder\project", names1.CustomUniqueName); Assert.Equal(@"folder\project", names2.CustomUniqueName); }
public async Task GetInstalledVersion_WithAssetsFile_ChangingPackageSpec_ReturnsVersionsFromAssetsSpecs() { using (var testDirectory = TestDirectory.Create()) { // Setup var projectName = "project1"; var projectFullPath = Path.Combine(testDirectory.Path, projectName + ".csproj"); // Project var projectCache = new ProjectSystemCache(); IVsProjectAdapter projectAdapter = (new Mock <IVsProjectAdapter>()).Object; var project = CreateNetCorePackageReferenceProject(projectName, projectFullPath, projectCache); var projectNames = GetTestProjectNames(projectFullPath, projectName); var packageSpec = GetPackageSpec(projectName, projectFullPath, "[2.0.0, )"); // Restore info var projectRestoreInfo = ProjectJsonTestHelpers.GetDGSpecFromPackageSpecs(packageSpec); projectCache.AddProjectRestoreInfo(projectNames, projectRestoreInfo, new List <IAssetsLogMessage>()); projectCache.AddProject(projectNames, projectAdapter, project).Should().BeTrue(); // Package directories var sources = new List <PackageSource>(); var packagesDir = new DirectoryInfo(Path.Combine(testDirectory, "globalPackages")); var packageSource = new DirectoryInfo(Path.Combine(testDirectory, "packageSource")); packagesDir.Create(); packageSource.Create(); sources.Add(new PackageSource(packageSource.FullName)); var logger = new TestLogger(); var request = new TestRestoreRequest(packageSpec, sources, packagesDir.FullName, logger) { LockFilePath = Path.Combine(testDirectory, "project.assets.json") }; await SimpleTestPackageUtility.CreateFullPackageAsync(packageSource.FullName, "packageA", "2.0.0"); await SimpleTestPackageUtility.CreateFullPackageAsync(packageSource.FullName, "packageA", "3.0.0"); // Act var command = new RestoreCommand(request); var result = await command.ExecuteAsync(); await result.CommitAsync(logger, CancellationToken.None); var packages = await project.GetInstalledPackagesAsync(CancellationToken.None); // Asert Assert.True(result.Success); packages.Should().Contain(a => a.PackageIdentity.Equals(new PackageIdentity("packageA", new NuGetVersion("2.0.0")))); // Setup packageSpec = GetPackageSpec(projectName, projectFullPath, "[3.0.0, )"); // Restore info projectRestoreInfo = ProjectJsonTestHelpers.GetDGSpecFromPackageSpecs(packageSpec); projectCache.AddProjectRestoreInfo(projectNames, projectRestoreInfo, new List <IAssetsLogMessage>()); projectCache.AddProject(projectNames, projectAdapter, project).Should().BeTrue(); request = new TestRestoreRequest(packageSpec, sources, packagesDir.FullName, logger) { LockFilePath = Path.Combine(testDirectory, "project.assets.json") }; // Act command = new RestoreCommand(request); result = await command.ExecuteAsync(); await result.CommitAsync(logger, CancellationToken.None); packages = await project.GetInstalledPackagesAsync(CancellationToken.None); // Asert Assert.True(result.Success); packages.Should().Contain(a => a.PackageIdentity.Equals(new PackageIdentity("packageA", new NuGetVersion("3.0.0")))); } }