Exemplo n.º 1
0
        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());
        }
Exemplo n.º 4
0
        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());
        }
Exemplo n.º 5
0
        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);
        }