Skip to content

Commit

Permalink
Adding test infra to test legacy PR
Browse files Browse the repository at this point in the history
  • Loading branch information
jainaashish committed Jul 27, 2018
1 parent ab96049 commit 74b458c
Show file tree
Hide file tree
Showing 7 changed files with 437 additions and 73 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
using NuGet.Test.Utility;
using NuGet.Versioning;
using NuGet.VisualStudio;
using Test.Utility;
using Test.Utility.Threading;
using Xunit;
using Task = System.Threading.Tasks.Task;
Expand Down Expand Up @@ -844,77 +845,5 @@ private static IVsProjectAdapter CreateProjectAdapter(string fullPath)

return projectAdapter.Object;
}

private class TestProjectThreadingService : IVsProjectThreadingService
{
public TestProjectThreadingService(JoinableTaskFactory jtf)
{
JoinableTaskFactory = jtf;
}

public JoinableTaskFactory JoinableTaskFactory { get; }

public void ExecuteSynchronously(Func<Task> asyncAction)
{
JoinableTaskFactory.Run(asyncAction);
}

public T ExecuteSynchronously<T>(Func<Task<T>> asyncAction)
{
return JoinableTaskFactory.Run(asyncAction);
}

public void ThrowIfNotOnUIThread(string callerMemberName)
{
ThreadHelper.ThrowIfNotOnUIThread(callerMemberName);
}
}

private class TestProjectSystemServices : INuGetProjectServices
{
public TestProjectSystemServices()
{
Mock.Get(ReferencesReader)
.Setup(x => x.GetProjectReferencesAsync(
It.IsAny<Common.ILogger>(), CancellationToken.None))
.ReturnsAsync(() => new ProjectRestoreReference[] { });

Mock.Get(ReferencesReader)
.Setup(x => x.GetPackageReferencesAsync(
It.IsAny<NuGetFramework>(), CancellationToken.None))
.ReturnsAsync(() => new LibraryDependency[] { });
}

public IProjectBuildProperties BuildProperties { get; } = Mock.Of<IProjectBuildProperties>();

public IProjectSystemCapabilities Capabilities { get; } = Mock.Of<IProjectSystemCapabilities>();

public IProjectSystemReferencesReader ReferencesReader { get; } = Mock.Of<IProjectSystemReferencesReader>();

public IProjectSystemService ProjectSystem { get; } = Mock.Of<IProjectSystemService>();

public IProjectSystemReferencesService References { get; } = Mock.Of<IProjectSystemReferencesService>();

public IProjectScriptHostService ScriptService { get; } = Mock.Of<IProjectScriptHostService>();

public T GetGlobalService<T>() where T : class
{
throw new NotImplementedException();
}

public void SetupInstalledPackages(NuGetFramework targetFramework, params LibraryDependency[] dependencies)
{
Mock.Get(ReferencesReader)
.Setup(x => x.GetPackageReferencesAsync(targetFramework, CancellationToken.None))
.ReturnsAsync(dependencies.ToList());
}

public void SetupProjectDependencies(params ProjectRestoreReference[] dependencies)
{
Mock.Get(ReferencesReader)
.Setup(x => x.GetProjectReferencesAsync(It.IsAny<Common.ILogger>(), CancellationToken.None))
.ReturnsAsync(dependencies.ToList());
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,39 @@
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Microsoft;
using NuGet.Commands;
using NuGet.Configuration;
using NuGet.Frameworks;
using NuGet.PackageManagement.VisualStudio;
using NuGet.Packaging.Core;
using NuGet.ProjectManagement;
using NuGet.ProjectManagement.Projects;
using NuGet.Protocol.Core.Types;
using NuGet.Protocol.VisualStudio;
using NuGet.Resolver;
using NuGet.Test;
using NuGet.Test.Utility;
using NuGet.Versioning;
using NuGet.VisualStudio;
using Test.Utility;
using Test.Utility.Threading;
using Xunit;

namespace NuGet.PackageManagement.Test
{
[Collection(DispatcherThreadCollection.CollectionName)]
public class DependencyGraphRestoreUtilityTests
{
private readonly IVsProjectThreadingService _threadingService;

public DependencyGraphRestoreUtilityTests(DispatcherThreadFixture fixture)
{
Assumes.Present(fixture);

_threadingService = new TestProjectThreadingService(fixture.JoinableTaskFactory);
}

[Fact]
public async Task DependencyGraphRestoreUtility_NoopRestoreTest()
{
Expand Down Expand Up @@ -72,5 +90,98 @@ public async Task DependencyGraphRestoreUtility_NoopRestoreTest()
Assert.Equal(0, logger.Warnings);
}
}

[Fact]
public async void DependencyGraphRestoreUtility_LegacyPackageRef_Restore_Success()
{
// Set up Package Source
var packages = new List<SourcePackageDependencyInfo>
{
new SourcePackageDependencyInfo("packageA", new NuGetVersion(1, 0, 0), new Packaging.Core.PackageDependency[] { }, true, null),
new SourcePackageDependencyInfo("packageA", new NuGetVersion(2, 0, 0), new Packaging.Core.PackageDependency[] { }, true, null)
};

// Arrange
var sourceRepositoryProvider = CreateSource(packages);

using (var testSolutionManager = new TestSolutionManager(true))
using (var randomProjectFolderPath = TestDirectory.Create())
{
var testSettings = PopulateSettingsWithSources(sourceRepositoryProvider, randomProjectFolderPath);
var testNuGetProjectContext = new TestNuGetProjectContext();
var deleteOnRestartManager = new TestDeleteOnRestartManager();
var nuGetPackageManager = new NuGetPackageManager(
sourceRepositoryProvider,
testSettings,
testSolutionManager,
deleteOnRestartManager);

var projectTargetFrameworkStr = "net46";
var fullProjectPath = Path.Combine(randomProjectFolderPath, "project1.csproj");
var projectNames = new ProjectNames(
fullName: fullProjectPath,
uniqueName: Path.GetFileName(fullProjectPath),
shortName: Path.GetFileNameWithoutExtension(fullProjectPath),
customUniqueName: Path.GetFileName(fullProjectPath));
var vsProjectAdapter = new TestVSProjectAdapter(
fullProjectPath,
projectNames,
projectTargetFrameworkStr);

var legacyPRProject = new LegacyPackageReferenceProject(
vsProjectAdapter,
Guid.NewGuid().ToString(),
new TestProjectSystemServices(),
_threadingService);
testSolutionManager.NuGetProjects.Add(legacyPRProject);

var testLogger = new TestLogger();
var restoreContext = new DependencyGraphCacheContext(testLogger, testSettings);
var providersCache = new RestoreCommandProvidersCache();

var dgSpec = await DependencyGraphRestoreUtility.GetSolutionRestoreSpec(testSolutionManager, restoreContext);

// Act
var restoreSummaries = await DependencyGraphRestoreUtility.RestoreAsync(
testSolutionManager,
restoreContext,
providersCache,
(c) => { },
sourceRepositoryProvider.GetRepositories(),
Guid.Empty,
false,
dgSpec,
testLogger,
CancellationToken.None);

// Assert
foreach (var restoreSummary in restoreSummaries)
{
Assert.True(restoreSummary.Success);
Assert.False(restoreSummary.NoOpRestore);
}
}
}

private ISettings PopulateSettingsWithSources(SourceRepositoryProvider sourceRepositoryProvider, TestDirectory settingsDirectory)
{
var Settings = new Settings(settingsDirectory);
foreach (var source in sourceRepositoryProvider.GetRepositories())
Settings.SetValue(ConfigurationConstants.PackageSources, ConfigurationConstants.PackageSources, source.PackageSource.Source);

return Settings;
}

private SourceRepositoryProvider CreateSource(List<SourcePackageDependencyInfo> packages)
{
var resourceProviders = new List<Lazy<INuGetResourceProvider>>();
resourceProviders.Add(new Lazy<INuGetResourceProvider>(() => new TestDependencyInfoProvider(packages)));
resourceProviders.Add(new Lazy<INuGetResourceProvider>(() => new TestMetadataProvider(packages)));

var packageSource = new Configuration.PackageSource("http://temp");
var packageSourceProvider = new TestPackageSourceProvider(new[] { packageSource });

return new SourceRepositoryProvider(packageSourceProvider, resourceProviders);
}
}
}
Loading

0 comments on commit 74b458c

Please sign in to comment.