public void UnhandledException()
 {
     using (var directory = new DisposableDirectory(Temp))
     {
         bool restored = false;
         var resolver = new NuGetPackageResolverImpl(directory.Path, startInfo => { restored = true; throw new InvalidOperationException(); });
         Assert.Throws<InvalidOperationException>(() => resolver.ResolveNuGetPackage("A.B.C", "1.2"));
         Assert.True(restored);
     }
 }
        public void ResolveReference()
        {
            var expectedProjectJson =
@"{
  ""dependencies"": {
    ""A.B.C"": ""1.2""
  },
  ""frameworks"": {
    ""net46"": {}
  }
}";
            var expectedConfig =
@"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
  <packageRestore>
    <add key=""enabled"" value=""True"" />
    <add key=""automatic"" value=""False"" />
  </packageRestore>
  <packageSources/>
</configuration>";
            var actualProjectLockJson =
@"{
  ""locked"": false,
  ""version"": 1,
  ""targets"": {
    "".NETFramework,Version=v4.5"": { },
    "".NETFramework,Version=v4.6"": {
      ""System.Collections/4.0.10"": {
        ""dependencies"": {
          ""System.Runtime"": """"
        },
        ""compile"": {
          ""ref/dotnet/System.Runtime.dll"": {}
        },
        ""runtime"": {
          ""ref/dotnet/System.Collections.dll"": {}
        }
      },
      ""System.Diagnostics.Debug/4.0.10"": {
        ""dependencies"": {
          ""System.Runtime"": """"
        },
      },
      ""System.Runtime/4.0.0"": {
        ""runtime"": {
          ""ref/dotnet/_._"": {}
        }
      },
      ""System.IO/4.0.10"": {
        ""dependencies"": {},
        ""runtime"": {
          ""ref/dotnet/System.Runtime.dll"": {},
          ""ref/dotnet/System.IO.dll"": {}
        }
      }
    }
  }
}";
            using (var directory = new DisposableDirectory(Temp))
            {
                var packagesDirectory = directory.Path;
                var resolver = new NuGetPackageResolverImpl(
                    packagesDirectory,
                    startInfo =>
                    {
                        // Verify arguments.
                        var arguments = startInfo.Arguments.Split('"');
                        Assert.Equal(7, arguments.Length);
                        Assert.Equal("restore ", arguments[0]);
                        Assert.Equal("project.json", PathUtilities.GetFileName(arguments[1]));
                        Assert.Equal(" -ConfigFile ", arguments[2]);
                        Assert.Equal("nuget.config", PathUtilities.GetFileName(arguments[3]));
                        Assert.Equal(" -PackagesDirectory ", arguments[4]);
                        Assert.Equal(packagesDirectory, arguments[5]);
                        Assert.Equal("", arguments[6]);
                        // Verify project.json contents.
                        var projectJsonPath = arguments[1];
                        var actualProjectJson = File.ReadAllText(projectJsonPath);
                        Assert.Equal(expectedProjectJson, actualProjectJson);
                        // Verify config file contents.
                        var configPath = arguments[3];
                        var actualConfig = File.ReadAllText(configPath);
                        Assert.Equal(expectedConfig, actualConfig);
                        // Generate project.lock.json.
                        var projectLockJsonPath = PathUtilities.CombineAbsoluteAndRelativePaths(PathUtilities.GetDirectoryName(projectJsonPath), "project.lock.json");
                        using (var writer = new StreamWriter(projectLockJsonPath))
                        {
                            writer.Write(actualProjectLockJson);
                        }
                    });
                var actualPaths = resolver.ResolveNuGetPackage("A.B.C", "1.2");
                AssertEx.SetEqual(actualPaths,
                    PathUtilities.CombineAbsoluteAndRelativePaths(packagesDirectory, PathUtilities.CombinePossiblyRelativeAndRelativePaths("System.Collections/4.0.10", "ref/dotnet/System.Collections.dll")),
                    PathUtilities.CombineAbsoluteAndRelativePaths(packagesDirectory, PathUtilities.CombinePossiblyRelativeAndRelativePaths("System.IO/4.0.10", "ref/dotnet/System.Runtime.dll")),
                    PathUtilities.CombineAbsoluteAndRelativePaths(packagesDirectory, PathUtilities.CombinePossiblyRelativeAndRelativePaths("System.IO/4.0.10", "ref/dotnet/System.IO.dll")));
            }
        }
 public void HandledException()
 {
     using (var directory = new DisposableDirectory(Temp))
     {
         bool restored = false;
         var resolver = new NuGetPackageResolverImpl(directory.Path, startInfo => { restored = true; throw new IOException(); });
         var actualPaths = resolver.ResolveNuGetPackage("A.B.C", "1.2");
         Assert.True(actualPaths.IsEmpty);
         Assert.True(restored);
     }
 }