private static async Task <bool> ApplyActionAsync(ProjectSystemReferenceUpdate referenceUpdate, AbstractReferenceHandler referenceHandler, ConfiguredProject selectedConfiguredProject, CancellationToken cancellationToken) { bool wasUpdated = false; cancellationToken.ThrowIfCancellationRequested(); if (referenceUpdate.Action == ProjectSystemUpdateAction.SetTreatAsUsed || referenceUpdate.Action == ProjectSystemUpdateAction.UnsetTreatAsUsed) { wasUpdated = await referenceHandler.UpdateReferenceAsync(selectedConfiguredProject, referenceUpdate, cancellationToken); } else { if (await referenceHandler.CanRemoveReferenceAsync(selectedConfiguredProject, referenceUpdate, cancellationToken)) { await referenceHandler.RemoveReferenceAsync(selectedConfiguredProject, referenceUpdate.ReferenceInfo); wasUpdated = true; } } return(wasUpdated); }
public async Task UpdateReferencesAsync_GetUpdateReferenceOperationAsync_FailedToCreateOperation() { var referenceCleanupService = Setup(); var referenceUpdate1 = new ProjectSystemReferenceUpdate((ProjectSystemUpdateAction)3, new ProjectSystemReferenceInfo(ProjectSystemReferenceType.Package, "UnknownPackage", true)); var operation = await referenceCleanupService.GetUpdateReferenceOperationAsync(_projectPath1, referenceUpdate1, CancellationToken.None); Assert.Equal(ReferenceCleanupService.NullCommand, operation); }
public async Task UpdateReferenceAsync_TryUpdateReferenceAsync_ShouldThrowException() { var referenceCleanupService = Setup(); var referenceUpdate1 = new ProjectSystemReferenceUpdate(ProjectSystemUpdateAction.Remove, new ProjectSystemReferenceInfo(ProjectSystemReferenceType.Package, _package3, true)); await Assert.ThrowsAsync <NotImplementedException>(() => referenceCleanupService.TryUpdateReferenceAsync(_projectPath1, referenceUpdate1, CancellationToken.None) ); }
public async Task UpdateReferencesAsync_RemovePackages_CannotRemovePackageThatDoesntExist() { var referenceCleanupService = Setup(); var referenceUpdate1 = new ProjectSystemReferenceUpdate(ProjectSystemUpdateAction.Remove, new ProjectSystemReferenceInfo(ProjectSystemReferenceType.Package, "UnknownPackage", true)); bool wasUpdated = await referenceCleanupService.TryUpdateReferenceAsync(_projectPath1, referenceUpdate1, CancellationToken.None); _packageServicesMock1 !.Verify(c => c.RemoveAsync(It.IsAny <string>()), Times.Never); Assert.False(wasUpdated); }
public async Task UpdateReferencesAsync_RemovePackages_RemovedPackageMarkedAsUnused() { var referenceCleanupService = Setup(); var referenceUpdate1 = new ProjectSystemReferenceUpdate(ProjectSystemUpdateAction.Remove, new ProjectSystemReferenceInfo(ProjectSystemReferenceType.Package, _package3, true)); bool wasUpdated = await referenceCleanupService.TryUpdateReferenceAsync(_projectPath1, referenceUpdate1, CancellationToken.None); _packageServicesMock1 !.Verify(c => c.RemoveAsync(_package3), Times.Once); Assert.True(wasUpdated); }
public async Task UpdateReferencesAsync_RemovePackages_CannotRemovedPackageIsNotInReferences() { var referenceCleanupService = Setup(); var referenceUpdate1 = new ProjectSystemReferenceUpdate(ProjectSystemUpdateAction.Remove, new ProjectSystemReferenceInfo(ProjectSystemReferenceType.Package, _package1, true)); bool wasUpdated = await referenceCleanupService.TryUpdateReferenceAsync(_projectPath1, referenceUpdate1, CancellationToken.None); _packageServicesMock1 !.Verify(c => c.RemoveAsync(_package1), Times.Never); Assert.False(wasUpdated); }
public async Task UpdateReferenceAsync_TreatAsUsed_ReferencesChangedToTreatAsUnused() { s_item = null; var referenceCleanupService = Setup(); var referenceUpdate1 = new ProjectSystemReferenceUpdate(ProjectSystemUpdateAction.UnsetTreatAsUsed, new ProjectSystemReferenceInfo(ProjectSystemReferenceType.Package, _package3, true)); bool wasUpdated = await referenceCleanupService.TryUpdateReferenceAsync(_projectPath1, referenceUpdate1, CancellationToken.None); s_item !.As <IProjectItem>().Verify(c => c.Metadata.SetPropertyValueAsync(ProjectReference.TreatAsUsedProperty, PropertySerializer.SimpleTypes.ToString(false), null), Times.Once); Assert.True(wasUpdated); }
public async Task <bool> TryUpdateReferenceAsync(string projectPath, ProjectSystemReferenceUpdate referenceUpdate, CancellationToken cancellationToken) { bool wasUpdated = false; cancellationToken.ThrowIfCancellationRequested(); var activeConfiguredProject = await GetActiveConfiguredProjectByPathAsync(projectPath, cancellationToken); var referenceHandler = s_mapReferenceTypeToHandler[referenceUpdate.ReferenceInfo.ReferenceType]; if (referenceHandler != null) { wasUpdated = await ApplyActionAsync(referenceUpdate, referenceHandler, activeConfiguredProject, cancellationToken); } return(wasUpdated); }
public RemoveReferenceCommand(AbstractReferenceHandler abstractReferenceHandler, ConfiguredProject selectedConfiguredProject, ProjectSystemReferenceUpdate referenceUpdate) { _referenceHandler = abstractReferenceHandler; _selectedConfiguredProject = selectedConfiguredProject; _itemSpecification = referenceUpdate.ReferenceInfo.ItemSpecification; }
public Task <bool> TryUpdateReferenceAsync(string projectPath, ProjectSystemReferenceUpdate referenceUpdate, CancellationToken cancellationToken) { throw new NotImplementedException(); }
private static IProjectSystemUpdateReferenceOperation?CreateCommand(ProjectSystemReferenceUpdate referenceUpdate, AbstractReferenceHandler referenceHandler, ConfiguredProject selectedConfiguredProject, CancellationToken cancellationToken) => referenceUpdate.Action switch {
/// <summary> /// Gets an operation that can update the project’s references by removing or marking references as /// TreatAsUsed in the project file. /// </summary> public async Task <IProjectSystemUpdateReferenceOperation> GetUpdateReferenceOperationAsync(string projectPath, ProjectSystemReferenceUpdate referenceUpdate, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var activeConfiguredProject = await GetActiveConfiguredProjectByPathAsync(projectPath, cancellationToken); var referenceHandler = s_mapReferenceTypeToHandler[referenceUpdate.ReferenceInfo.ReferenceType]; IProjectSystemUpdateReferenceOperation?command = null; if (referenceHandler != null) { command = CreateCommand(referenceUpdate, referenceHandler, activeConfiguredProject, cancellationToken); } return(command ?? NullCommand); }