public void GeneratesScript_UsingTheFirstPlatform_WhichCanGenerateScript() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: null, detectedPlatformVersion: null); var platform1 = new TestProgrammingPlatform( "lang1", new[] { "1.0.0" }, canGenerateScript: false, scriptContent: null, detector); var platform2 = new TestProgrammingPlatform( "lang2", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", detector); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = "lang2", PlatformVersion = "1.0.0", }; var generator = CreateDefaultScriptGenerator(new[] { platform1, platform2 }, commonOptions); var context = CreateScriptGeneratorContext(); // Act generator.GenerateBashScript(context, out var generatedScript); // Assert Assert.Contains("script-content", generatedScript); Assert.False(detector.DetectInvoked); }
public void DoesNotDetectPlatforms_IfDetectionResultsAlreadyProvided() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "1.0.0"); var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", installationScriptContent: "install-content", detector: detector); var envScriptProvider = CreateEnvironmentSetupScriptProvider(new[] { platform }); var context = CreateScriptGeneratorContext(); var detectionResults = new[] { new PlatformDetectorResult { Platform = "test", PlatformVersion = "1.0.0", } }; // Act var setupScript = envScriptProvider.GetBashScriptSnippet(context, detectionResults); // Assert Assert.False(detector.DetectInvoked); Assert.Contains("install-content", setupScript); Assert.DoesNotContain("script-content", setupScript); }
public void GenerateDockerfile_GeneratesBuildTagAndRuntime_ForProvidedPlatformAndVersion( string platformName, string platformVersion, string expectedBuildTag) { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: platformName, detectedPlatformVersion: platformVersion); var platform = new TestProgrammingPlatform( platformName, new[] { platformVersion }, detector: detector); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = platformName, PlatformVersion = platformVersion }; var generator = CreateDefaultDockerfileGenerator(platform, commonOptions); var ctx = CreateDockerfileContext(); // Act var dockerfile = generator.GenerateDockerfile(ctx); // Assert Assert.NotNull(dockerfile); Assert.NotEqual(string.Empty, dockerfile); Assert.Contains(string.Format(_buildImageFormat, expectedBuildTag), dockerfile); Assert.Contains(string.Format(_argRuntimeFormat, ConvertToRuntimeName(platformName), platformVersion), dockerfile); Assert.True(detector.DetectInvoked); }
public void TryGenerateScript_Throws_IfSuppliedPlatformIsUnsupported() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "1.0.0"); var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", detector: detector); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = "unsupported", PlatformVersion = "1.0.0", }; var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act & Assert var exception = Assert.Throws <UnsupportedPlatformException>( () => generator.GenerateBashScript(context, out var generatedScript)); Assert.Equal( "'unsupported' platform is not supported. Supported platforms are: test", exception.Message); Assert.True(detector.DetectInvoked); }
public void TryGenerateScript_Throws_IfCanDetectLanguageVersion_AndLanguageVersionIsUnsupported() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "2.0.0"); // Unsupported version var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", detector); var commonOptions = new BuildScriptGeneratorOptions(); var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act & Assert var exception = Assert.Throws <UnsupportedVersionException>( () => generator.GenerateBashScript(context, out var generatedScript)); Assert.Equal( "Platform 'test' version '2.0.0' is unsupported. Supported versions: 1.0.0", exception.Message); Assert.True(detector.DetectInvoked); }
public void TryGenerateScript_ReturnsTrue_IfPlatformIsProvidedButNoVersion_AndCanDetectVersion() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "1.0.0"); var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", detector: detector); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = "test", PlatformVersion = null, // version not provided by user }; var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act generator.GenerateBashScript(context, out var generatedScript); // Assert Assert.Contains("script-content", generatedScript); Assert.True(detector.DetectInvoked); }
public void GenerateDockerfile_GeneratesBuildTagAndRuntime_ForMultiPlatformBuild( string platformName, string platformVersion, string runtimePlatformName, string runtimePlatformVersion) { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: platformName, detectedPlatformVersion: platformVersion); var platform = new TestProgrammingPlatform( platformName, new[] { platformVersion }, detector: detector); var runtimeDetector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: runtimePlatformName, detectedPlatformVersion: runtimePlatformVersion); var runtimePlatform = new TestProgrammingPlatform( runtimePlatformName, new[] { runtimePlatformVersion }, detector: runtimeDetector); var commonOptions = new BuildScriptGeneratorOptions { EnableMultiPlatformBuild = true, PlatformName = platformName, PlatformVersion = platformVersion, RuntimePlatformName = runtimePlatformName, RuntimePlatformVersion = runtimePlatformVersion, }; var generator = CreateDefaultDockerfileGenerator(new[] { platform, runtimePlatform }, commonOptions); var ctx = CreateDockerfileContext(); // Act var dockerfile = generator.GenerateDockerfile(ctx); // Assert Assert.NotNull(dockerfile); Assert.NotEqual(string.Empty, dockerfile); Assert.Contains(string.Format(_buildImageFormat, _buildImageName, _buildImageTag), dockerfile); Assert.Contains(string.Format(_argRuntimeFormat, ConvertToRuntimeName(runtimePlatformName), runtimePlatformVersion), dockerfile); }
public void TryGenerateScript_Throws_IfPlatformIsProvidedButDisabled() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "1.0.0"); var platform = new TestProgrammingPlatform("test", new[] { "1.0.0" }, detector: detector, enabled: false); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = "test", PlatformVersion = "1.0.0", }; var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act & Assert var exception = Assert.Throws <UnsupportedPlatformException>( () => generator.GenerateBashScript(context, out var generatedScript)); }
public void TryGenerateScript_Throws_IfPlatformIsProvided_AndCannotDetectPlatform() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: null, detectedPlatformVersion: null); var platform = new TestProgrammingPlatform("test1", new[] { "1.0.0" }, detector: detector); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = "test2", }; var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act & Assert var exception = Assert.Throws <UnsupportedPlatformException>( () => generator.GenerateBashScript(context, out var generatedScript)); Assert.Equal("'test2' platform is not supported. Supported platforms are: test1", exception.Message); }
public void TryGenerateScript_Throws_IfPlatformIsProvidedButNoVersion_AndCannotDetectVersion() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: null); var platform = new TestProgrammingPlatform("test", new[] { "1.0.0" }, detector: detector); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = "test", }; var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act & Assert var exception = Assert.Throws <UnsupportedVersionException>( () => generator.GenerateBashScript(context, out var generatedScript)); Assert.Equal("Couldn't detect a version for the platform 'test' in the repo.", exception.Message); Assert.True(detector.DetectInvoked); }
public void TryGenerateScript_Throws_IfNoPlatformIsProvided_AndCannotDetectPlatform() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: null, detectedPlatformVersion: null); var platform = new TestProgrammingPlatform("test", new[] { "1.0.0" }, detector: detector); var commonOptions = new BuildScriptGeneratorOptions { EnableMultiPlatformBuild = true, }; var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act & Assert var exception = Assert.Throws <UnsupportedPlatformException>( () => generator.GenerateBashScript(context, out var generatedScript)); Assert.Equal(Labels.UnableToDetectPlatformMessage, exception.Message); Assert.True(detector.DetectInvoked); }
public void GetRequiredToolVersions_ReturnsPlatformTools() { // Arrange var platName = "test"; var platVer = "1.0.0"; var detector = new TestPlatformDetectorUsingPlatformName(platName, platVer); var platform = new TestProgrammingPlatform( platName, new[] { platVer }, canGenerateScript: true, scriptContent: "script-content", detector: detector); var commonOptions = new BuildScriptGeneratorOptions(); var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act var result = generator.GetRequiredToolVersions(context); // Assert Assert.Equal(platName, result.First().Key); Assert.Equal(platVer, result.First().Value); }
public void TryGenerateScript_CallsDetector_IfMultiPlatformIsOff_AndNoLangProvided() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "1.0.0"); var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", detector: detector); var commonOptions = new BuildScriptGeneratorOptions { EnableMultiPlatformBuild = false, }; var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act & Assert generator.GenerateBashScript(context, out var generatedScript); Assert.True(detector.DetectInvoked); }
public void TryGenerateScript_ReturnsFalse_IfGeneratorTryGenerateScript_IsFalse() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "1.0.0"); var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: false, scriptContent: null, detector: detector); var commonOptions = new BuildScriptGeneratorOptions(); var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act & Assert var exception = Assert.Throws <UnsupportedPlatformException>( () => generator.GenerateBashScript(context, out var generatedScript)); Assert.Equal(Labels.UnableToDetectPlatformMessage, exception.Message); Assert.True(detector.DetectInvoked); }
private string GenerateScript(BuildConfigurationFileFlags flags)// { // Arrange var detector1 = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "lang1", detectedPlatformVersion: "1.0.0"); var platform1 = new TestProgrammingPlatform( "lang1", new[] { "1.0.0" }, canGenerateScript: false, scriptContent: null, installationScriptContent: "lang1-installationscript", detector: detector1); var detector2 = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "lang2", detectedPlatformVersion: "1.0.0"); var platform2 = new TestProgrammingPlatform( "lang2", new[] { "1.0.0" }, canGenerateScript: true, installationScriptContent: "lang2-installationscript", scriptContent: "script-content", detector: detector2); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = "lang2", PlatformVersion = "1.0.0", }; var generator = CreateDefaultScriptGenerator(new[] { platform1, platform2 }, commonOptions); var context = CreateScriptGeneratorContext(); ((TestSourceRepo)context.SourceRepo).buildConfigurationFileFlags = flags; // Act generator.GenerateBashScript(context, out var generatedScript); return(generatedScript); }
public void ContainsInstallationScriptContent_FromMultiplePlatforms() { // Arrange var detector1 = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test1", detectedPlatformVersion: "1.0.0"); var platform1 = new TestProgrammingPlatform( "test1", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script1-content", installationScriptContent: "install1-content", detector: detector1); var detector2 = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test2", detectedPlatformVersion: "1.0.0"); var platform2 = new TestProgrammingPlatform( "test2", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script2-content", installationScriptContent: "install2-content", detector: detector2); var envScriptProvider = CreateEnvironmentSetupScriptProvider(new[] { platform1, platform2 }); var context = CreateScriptGeneratorContext(); // Act var setupScript = envScriptProvider.GetBashScriptSnippet(context); // Assert Assert.Contains("install1-content", setupScript); Assert.Contains("install2-content", setupScript); Assert.DoesNotContain("script1-content", setupScript); Assert.DoesNotContain("script2-content", setupScript); Assert.True(detector1.DetectInvoked); Assert.True(detector2.DetectInvoked); }
public void DoesNotFailIfPlatformDoesNotReturnInstallationScriptSnippet( string installationScriptContent) { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "1.0.0"); var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", installationScriptContent: installationScriptContent, detector: detector); var envScriptProvider = CreateEnvironmentSetupScriptProvider(new[] { platform }); var context = CreateScriptGeneratorContext(); // Act var setupScript = envScriptProvider.GetBashScriptSnippet(context); // Assert Assert.True(detector.DetectInvoked); Assert.DoesNotContain("script-content", setupScript); }
public void TryGenerateScript_DoesntCallDetector_IfMultiPlatformIsOff_AndLangProvided() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "1.0.0"); var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", detector); var detector2 = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test2", detectedPlatformVersion: "1.0.0"); var platform2 = new TestProgrammingPlatform( "test2", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", detector2); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = "test", PlatformVersion = "1.0.0", }; var generator = CreateDefaultScriptGenerator(new[] { platform, platform2 }, commonOptions); var context = CreateScriptGeneratorContext(); // Act & Assert generator.GenerateBashScript(context, out var generatedScript); Assert.False(detector.DetectInvoked); Assert.False(detector2.DetectInvoked); }