public void UnknownSdk_DotNetMSBuildSdkResolverDoesNotFatalReportError() { var resolution = SdkResolution.GetResolver(Runtime.SystemAssemblyService.CurrentRuntime); // Using a sdk with an invalid version to prevent the NuGet sdk resolver causing a test crash. // Invalid version numbers cause the NuGet sdk resolver to not try to resolve the sdk. The crash // only seems to happen with this test - using the IDE does not trigger the crash. There is a // separate NuGet sdk resolver test that runs the resolver. Crash error: // NuGet.Configuration.NuGetPathContext doesn't implement interface NuGet.Common.INuGetPathContext var sdkReference = new SdkReference("MonoDevelop.Unknown.Test.Sdk", "InvalidVersion", null); var logger = new TestLoggingService(); var context = new MSBuildContext(); string result = null; UserException ex = Assert.Throws <UserException> (() => { result = resolution.GetSdkPath(sdkReference, logger, context, null, null); }); var error = logger.FatalBuildErrors.FirstOrDefault(); Assert.AreEqual(0, logger.FatalBuildErrors.Count, "First error: " + error); Assert.IsNull(result); Assert.AreEqual("Unable to find SDK 'MonoDevelop.Unknown.Test.Sdk/InvalidVersion'", ex.Message); Assert.That(ex.Details, Contains.Substring("SDK not found")); // MonoDevelop.Projects.MSBuild.Resolver Assert.That(ex.Details, Contains.Substring("Check that a recent enough .NET Core SDK is installed")); // .NET Core SDK resolver }
public void AssertFirstResolverCanResolve() { var sdk = new SdkReference("1sdkName", "referencedVersion", "minimumVersion"); SdkResolution resolution = new SdkResolution(new MockLoaderStrategy()); var result = resolution.GetSdkPath(sdk, _loggingContext, new MockElementLocation("file"), "sln", "projectPath"); Assert.Equal("resolverpath1", result); Assert.Equal("MockSdkResolver1 running", _log.ToString().Trim()); }
public void AssertErrorLoggedWhenResolverThrows() { var log = new StringBuilder(); var sdk = new SdkReference("1sdkName", "referencedVersion", "minimumVersion"); var logger = new MockLoggingService(message => log.AppendLine(message)); var bec = new BuildEventContext(0, 0, 0, 0, 0); SdkResolution resolution = new SdkResolution(new MockLoaderStrategy(true)); var result = resolution.GetSdkPath(sdk, _loggingContext, new MockElementLocation("file"), "sln", "projectPath"); Assert.Equal("resolverpath1", result); Assert.Contains("EXMESSAGE", _log.ToString()); }
public void AssertFirstResolverCanResolve() { var log = new StringBuilder(); var sdk = new SdkReference("1sdkName", "referencedVersion", "minimumVersion"); var logger = new MockLoggingService(message => log.AppendLine(message)); var bec = new BuildEventContext(0, 0, 0, 0, 0); SdkResolution resolution = new SdkResolution(new MockLoaderStrategy()); var result = resolution.GetSdkPath(sdk, logger, bec, new MockElementLocation("file"), "sln", "projectPath"); Assert.Equal("resolverpath1", result); Assert.Equal("MockSdkResolver1 running", log.ToString().Trim()); }
public void UnknownSdk_DotNetMSBuildSdkResolverDoesNotFatalReportError() { var resolution = SdkResolution.GetResolver(Runtime.SystemAssemblyService.CurrentRuntime); // Using a sdk with an invalid version to prevent the NuGet sdk resolver causing a test crash. // Invalid version numbers cause the NuGet sdk resolver to not try to resolve the sdk. The crash // only seems to happen with this test - using the IDE does not trigger the crash. There is a // separate NuGet sdk resolver test that runs the resolver. Crash error: // NuGet.Configuration.NuGetPathContext doesn't implement interface NuGet.Common.INuGetPathContext var sdkReference = new SdkReference("MonoDevelop.Unknown.Test.Sdk", "InvalidVersion", null); var logger = new TestLoggingService(); var context = new MSBuildContext(); var result = resolution.GetSdkPath(sdkReference, logger, context, null, null); var error = logger.FatalBuildErrors.FirstOrDefault(); Assert.AreEqual(0, logger.FatalBuildErrors.Count, "First error: " + error); Assert.IsNull(result); }
public void AssertAllResolverErrorsLoggedWhenSdkNotResolved() { var log = new StringBuilder(); var sdk = new SdkReference("notfound", "referencedVersion", "minimumVersion"); var logger = new MockLoggingService(message => log.AppendLine(message)); var bec = new BuildEventContext(0, 0, 0, 0, 0); SdkResolution resolution = new SdkResolution(new MockLoaderStrategy()); var result = resolution.GetSdkPath(sdk, _loggingContext, new MockElementLocation("file"), "sln", "projectPath"); var logResult = _log.ToString(); Assert.Null(result); Assert.Contains("MockSdkResolver1 running", logResult); Assert.Contains("MockSdkResolver2 running", logResult); Assert.Contains("ERROR1", logResult); Assert.Contains("ERROR2", logResult); Assert.Contains("WARNING2", logResult); }
public void AssertFirstResolverErrorsSupressedWhenResolved() { // 2sdkName will cause MockSdkResolver1 to fail with an error reason. The error will not // be logged because MockSdkResolver2 will succeed. var log = new StringBuilder(); var sdk = new SdkReference("2sdkName", "referencedVersion", "minimumVersion"); var logger = new MockLoggingService(message => log.AppendLine(message)); var bec = new BuildEventContext(0, 0, 0, 0, 0); SdkResolution resolution = new SdkResolution(new MockLoaderStrategy()); var result = resolution.GetSdkPath(sdk, _loggingContext, new MockElementLocation("file"), "sln", "projectPath"); var logResult = _log.ToString(); Assert.Equal("resolverpath2", result); // Both resolvers should run, and no ERROR string. Assert.Contains("MockSdkResolver1 running", logResult); Assert.Contains("MockSdkResolver2 running", logResult); // Resolver2 gives a warning on success or failure. Assert.Contains("WARNING2", logResult); Assert.DoesNotContain("ERROR", logResult); }