public void TryGenerateScript_OnlyProcessProvidedPlatform_IfMultiPlatformIsDisabled()
        {
            // Arrange
            var detector1 = new TestPlatformDetectorSimpleMatch(shouldMatch: true, "main", "1.0.0");
            var platform1 = new TestProgrammingPlatform(
                "main",
                new[] { "1.0.0" },
                canGenerateScript: true,
                scriptContent: "script-content",
                detector: detector1);
            var detector2 = new TestPlatformDetectorSimpleMatch(shouldMatch: true, "anotherPlatform", "1.0.0");
            var platform2 = new TestProgrammingPlatform(
                "anotherPlatform",
                new[] { "1.0.0" },
                canGenerateScript: true,
                scriptContent: "some code",
                detector: detector2);
            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName             = "main",
                PlatformVersion          = "1.0.0",
                EnableMultiPlatformBuild = false,
            };
            var generator = CreateDefaultScriptGenerator(new[] { platform1, platform2 }, commonOptions);
            var context   = CreateScriptGeneratorContext();

            // Act
            generator.GenerateBashScript(context, out var generatedScript);

            // Assert
            Assert.Contains("script-content", generatedScript);
            Assert.DoesNotContain("some code", generatedScript);
        }
        public void Checkers_DontFailTheBuild_WhenTheyThrow()
        {
            // Arrange
            bool checkerRan = false;

            IChecker[] checkers = { new TestChecker(() =>
                {
                    checkerRan = true;
                    throw new Exception("checker failed");
                }) };

            var platformVersion = "1.0.0";
            var detector        = new TestPlatformDetectorSimpleMatch(true, TestPlatformName, platformVersion);
            var scriptContent   = "script-content";
            var platform        = new TestProgrammingPlatform(
                TestPlatformName, new[] { platformVersion }, true, scriptContent, detector: detector);

            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName    = TestPlatformName,
                PlatformVersion = platformVersion,
                EnableCheckers  = true,
            };
            var generator = CreateDefaultScriptGenerator(new[] { platform }, commonOptions, checkers);
            var context   = CreateScriptGeneratorContext();

            var messages = new List <ICheckerMessage>();

            // Act
            generator.GenerateBashScript(context, out var generatedScript, messages);

            // Assert
            Assert.True(checkerRan);
        }
        public void Checkers_AreAppliedCorrectly_WhenCheckersAreEnabled()
        {
            // Arrange
            var repoWarning = new CheckerMessage("some repo warning");

            IChecker[] checkers = { new TestChecker(() => new[] { repoWarning }) };

            var platformVersion = "1.0.0";
            var detector        = new TestPlatformDetectorSimpleMatch(true, TestPlatformName, platformVersion);
            var platform        = new TestProgrammingPlatform(
                TestPlatformName, new[] { platformVersion }, true, "script-content", detector: detector);

            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName    = TestPlatformName,
                PlatformVersion = platformVersion,
                EnableCheckers  = true,
            };
            var generator = CreateDefaultScriptGenerator(new[] { platform }, commonOptions, checkers);
            var context   = CreateScriptGeneratorContext();

            var messages = new List <ICheckerMessage>();

            // Act
            // Return value of TryGenerateBashScript is irrelevant - messages should be added even if build fails
            generator.GenerateBashScript(context, out var generatedScript, messages);

            // Assert
            Assert.Single(messages);
            Assert.Equal(repoWarning, messages.First());
        }