Skip to content

Commit

Permalink
Adding nuget.exe tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jainaashish committed Aug 14, 2018
1 parent 22000fe commit 2469687
Show file tree
Hide file tree
Showing 3 changed files with 164 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using System.Threading.Tasks;
using NuGet.CommandLine.Test;
using NuGet.Frameworks;
using NuGet.Packaging;
using NuGet.ProjectModel;
using NuGet.Test.Utility;
using Xunit;
Expand All @@ -24,12 +25,12 @@ public async Task Restore_LegacyPackageReference_WithNuGetLockFile()
// Set up solution, project, and packages
var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot);

var net45 = NuGetFramework.Parse("net45");
var net461 = NuGetFramework.Parse("net461");

var projectA = SimpleTestProjectContext.CreateLegacyPackageReference(
"a",
pathContext.SolutionRoot,
net45);
net461);

projectA.Properties.Add("RestorePackagesWithLockFile", "true");

Expand All @@ -38,39 +39,114 @@ public async Task Restore_LegacyPackageReference_WithNuGetLockFile()
Id = "x",
Version = "1.0.0"
};
packageX.Files.Clear();
packageX.AddFile("lib/net461/a.dll");

projectA.AddPackageToAllFrameworks(packageX);
solution.Projects.Add(projectA);
solution.Create(pathContext.SolutionRoot);

await SimpleTestPackageUtility.CreateFolderFeedV3Async(
pathContext.PackageSource,
PackageSaveMode.Defaultv3,
packageX);

var args = new string[]
// Act
var result = RunRestore(pathContext);

// Assert
Assert.True(File.Exists(projectA.NuGetLockFileOutputPath));

var lockFile = NuGetLockFileFormat.Read(projectA.NuGetLockFileOutputPath);
Assert.Equal(4, lockFile.Targets.Count);

var targets = lockFile.Targets.Where(t => t.Dependencies.Count > 0).ToList();
Assert.Equal(1, targets.Count);
Assert.Equal(".NETFramework,Version=v4.6.1", targets[0].Name);
Assert.Equal(1, targets[0].Dependencies.Count);
Assert.Equal("x", targets[0].Dependencies[0].Id);
}
}

[Fact]
public async Task Restore_LegacyPackageReference_WithNuGetLockFilePath()
{
// Arrange
using (var pathContext = new SimpleTestPathContext())
{
// Set up solution, project, and packages
var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot);

var net461 = "net461";

var projectA = SimpleTestProjectContext.CreateLegacyPackageReference(
"a",
pathContext.SolutionRoot,
NuGetFramework.Parse(net461));

var projectB = SimpleTestProjectContext.CreateLegacyPackageReference(
"b",
pathContext.SolutionRoot,
NuGetFramework.Parse(net461));

// set up packages
var packageX = new SimpleTestPackageContext()
{
Id = "x",
Version = "1.0.0"
};
packageX.Files.Clear();
packageX.AddFile($"lib/{0}/x.dll", net461);

var packageY = new SimpleTestPackageContext()
{
projectA.ProjectPath,
"-Source",
pathContext.PackageSource
Id = "y",
Version = "1.0.0"
};
packageY.Files.Clear();
packageY.AddFile($"lib/{0}/y.dll", net461);

await SimpleTestPackageUtility.CreateFolderFeedV3Async(
pathContext.PackageSource,
PackageSaveMode.Defaultv3,
packageX,
packageY);

// set up projects and solution
projectB.AddPackageToAllFrameworks(packageY);
projectA.Properties.Add("RestorePackagesWithLockFile", "true");
var packagesLockFilePath = Path.Combine(Path.GetDirectoryName(projectA.ProjectPath), "packages.custom.lock.json");
projectA.Properties.Add("NuGetLockFilePath", packagesLockFilePath);
projectA.AddProjectToAllFrameworks(projectB);
projectA.AddPackageToAllFrameworks(packageX);
solution.Projects.Add(projectA);
solution.Projects.Add(projectB);
solution.Create(pathContext.SolutionRoot);

// Act
var result = RunRestore(pathContext, expectedExitCode: 1, additionalArgs: args);
var result = RunRestore(pathContext);

// Assert
Assert.True(File.Exists(projectA.NuGetLockFileOutputPath));
Assert.Equal(packagesLockFilePath, projectA.NuGetLockFileOutputPath);

var lockFile = NuGetLockFileFormat.Read(projectA.NuGetLockFileOutputPath);
Assert.Equal(1, lockFile.Targets.Count);

var target = lockFile.Targets.First();
Assert.Equal(".NETFramework,Version=v4.5", target.Name);
Assert.Equal(1, target.Dependencies.Count);
Assert.Equal("x", target.Dependencies[0].Id);
Assert.Equal(4, lockFile.Targets.Count);

var targets = lockFile.Targets.Where(t => t.Dependencies.Count > 0).ToList();
Assert.Equal(1, targets.Count);
Assert.Equal(".NETFramework,Version=v4.6.1", targets[0].Name);
Assert.Equal(3, targets[0].Dependencies.Count);
Assert.Equal("x", targets[0].Dependencies[0].Id);
Assert.Equal(PackageInstallationType.Direct, targets[0].Dependencies[0].Type);
Assert.Equal("y", targets[0].Dependencies[1].Id);
Assert.Equal(PackageInstallationType.Transitive, targets[0].Dependencies[1].Type);
Assert.Equal("b", targets[0].Dependencies[2].Id);
Assert.Equal(PackageInstallationType.Project, targets[0].Dependencies[2].Type);
}
}

public static CommandRunnerResult RunRestore(SimpleTestPathContext pathContext, int expectedExitCode = 0, params string[] additionalArgs)
public static CommandRunnerResult RunRestore(SimpleTestPathContext pathContext, int expectedExitCode = 0)
{
var nugetExe = Util.GetNuGetExePath();

Expand All @@ -83,16 +159,15 @@ public static CommandRunnerResult RunRestore(SimpleTestPathContext pathContext,
var args = new string[]
{
"restore",
pathContext.SolutionRoot,
"-Verbosity",
"detailed"
};

args = args.Concat(additionalArgs).ToArray();

// Act
var r = CommandRunner.Run(
nugetExe,
pathContext.WorkingDirectory,
pathContext.WorkingDirectory.Path,
string.Join(" ", args),
waitForExit: true,
environmentVariables: envVars);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,21 +148,51 @@ public async void DependencyGraphRestoreUtility_LegacyPackageRef_Restore_Generat
testSolutionManager,
deleteOnRestartManager);

// set up projects
var projectTargetFrameworkStr = "net45";
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,
var fullProjectPathB = Path.Combine(randomProjectFolderPath, "ProjectB", "project2.csproj");
var projectNamesB = new ProjectNames(
fullName: fullProjectPathB,
uniqueName: Path.GetFileName(fullProjectPathB),
shortName: Path.GetFileNameWithoutExtension(fullProjectPathB),
customUniqueName: Path.GetFileName(fullProjectPathB));
var vsProjectAdapterB = new TestVSProjectAdapter(
fullProjectPathB,
projectNamesB,
projectTargetFrameworkStr);

var projectServicesB = new TestProjectSystemServices();
projectServicesB.SetupInstalledPackages(
NuGetFramework.Parse(projectTargetFrameworkStr),
new LibraryDependency
{
LibraryRange = new LibraryRange(
"packageB",
VersionRange.Parse("1.*"),
LibraryDependencyTarget.Package)
});

var legacyPRProjectB = new LegacyPackageReferenceProject(
vsProjectAdapterB,
Guid.NewGuid().ToString(),
projectServicesB,
_threadingService);

var projectPathA = Path.Combine(randomProjectFolderPath, "ProjectA");
var fullProjectPathA = Path.Combine(projectPathA, "project1.csproj");
var projectNamesA = new ProjectNames(
fullName: fullProjectPathA,
uniqueName: Path.GetFileName(fullProjectPathA),
shortName: Path.GetFileNameWithoutExtension(fullProjectPathA),
customUniqueName: Path.GetFileName(fullProjectPathA));
var vsProjectAdapterA = new TestVSProjectAdapter(
fullProjectPathA,
projectNamesA,
projectTargetFrameworkStr,
restorePackagesWithLockFile: "true");

var projectServices = new TestProjectSystemServices();
projectServices.SetupInstalledPackages(
var projectServicesA = new TestProjectSystemServices();
projectServicesA.SetupInstalledPackages(
NuGetFramework.Parse(projectTargetFrameworkStr),
new LibraryDependency
{
Expand All @@ -171,21 +201,31 @@ public async void DependencyGraphRestoreUtility_LegacyPackageRef_Restore_Generat
VersionRange.Parse("1.*"),
LibraryDependencyTarget.Package)
});
projectServicesA.SetupProjectDependencies(
new ProjectRestoreReference
{
ProjectUniqueName = fullProjectPathB,
ProjectPath = fullProjectPathB
});

var legacyPRProject = new LegacyPackageReferenceProject(
vsProjectAdapter,
var legacyPRProjectA = new LegacyPackageReferenceProject(
vsProjectAdapterA,
Guid.NewGuid().ToString(),
projectServices,
projectServicesA,
_threadingService);
testSolutionManager.NuGetProjects.Add(legacyPRProject);
testSolutionManager.NuGetProjects.Add(legacyPRProjectB);
testSolutionManager.NuGetProjects.Add(legacyPRProjectA);

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

var packageContext = new SimpleTestPackageContext("packageA", "1.0.0");
packageContext.AddFile("lib/net45/a.dll");
SimpleTestPackageUtility.CreateOPCPackage(packageContext, packageSource);
var packageContextA = new SimpleTestPackageContext("packageA", "1.0.0");
packageContextA.AddFile("lib/net45/a.dll");
var packageContextB = new SimpleTestPackageContext("packageB", "1.0.0");
packageContextB.AddFile("lib/net45/b.dll");
var packages = new List<SimpleTestPackageContext>() { packageContextA, packageContextB };
SimpleTestPackageUtility.CreateOPCPackages(packages, packageSource);

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

Expand All @@ -207,10 +247,20 @@ public async void DependencyGraphRestoreUtility_LegacyPackageRef_Restore_Generat
{
Assert.True(restoreSummary.Success);
Assert.False(restoreSummary.NoOpRestore);
Assert.Equal(1, restoreSummary.InstallCount);
}

Assert.True(File.Exists(Path.Combine(randomProjectFolderPath, "packages.lock.json")));
Assert.True(File.Exists(Path.Combine(projectPathA, "packages.lock.json")));
var lockFile = NuGetLockFileFormat.Read(Path.Combine(projectPathA, "packages.lock.json"));
Assert.Equal(1, lockFile.Targets.Count);

Assert.Equal(".NETFramework,Version=v4.5", lockFile.Targets[0].Name);
Assert.Equal(3, lockFile.Targets[0].Dependencies.Count);
Assert.Equal("packageA", lockFile.Targets[0].Dependencies[0].Id);
Assert.Equal(PackageInstallationType.Direct, lockFile.Targets[0].Dependencies[0].Type);
Assert.Equal("packageB", lockFile.Targets[0].Dependencies[1].Id);
Assert.Equal(PackageInstallationType.Transitive, lockFile.Targets[0].Dependencies[1].Type);
Assert.Equal("project2", lockFile.Targets[0].Dependencies[2].Id);
Assert.Equal(PackageInstallationType.Project, lockFile.Targets[0].Dependencies[2].Type);
}
}
}
Expand Down Expand Up @@ -837,6 +887,7 @@ public async void DependencyGraphRestoreUtility_LegacyPackageRef_Restore_Package
private ISettings PopulateSettingsWithSources(SourceRepositoryProvider sourceRepositoryProvider, TestDirectory settingsDirectory)
{
var Settings = new Settings(settingsDirectory);
Settings.DeleteSection(ConfigurationConstants.PackageSources);
foreach (var source in sourceRepositoryProvider.GetRepositories())
Settings.SetValue(ConfigurationConstants.PackageSources, ConfigurationConstants.PackageSources, source.PackageSource.Source);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ public string NuGetLockFileOutputPath
{
return Properties["NuGetLockFilePath"];
}
return Path.Combine(OutputPath, "packages.lock.json");
return Path.Combine(Path.GetDirectoryName(ProjectPath), "packages.lock.json");
default:
return null;
}
Expand Down

0 comments on commit 2469687

Please sign in to comment.