From a95743c5f659d5c8fb597f810f7743e39f8b01f2 Mon Sep 17 00:00:00 2001 From: Cesar Blum Silveira Date: Mon, 6 Feb 2017 16:34:28 -0800 Subject: [PATCH] Add functional test to verify generated code is up to date (#1369). --- .../GeneratedCodeTests.cs | 44 +++++++++++++++ ...Core.Server.Kestrel.FunctionalTests.csproj | 1 + tools/CodeGenerator/Program.cs | 56 ++++++++++--------- 3 files changed, 74 insertions(+), 27 deletions(-) create mode 100644 test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/GeneratedCodeTests.cs diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/GeneratedCodeTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/GeneratedCodeTests.cs new file mode 100644 index 0000000000..3fa3d89026 --- /dev/null +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/GeneratedCodeTests.cs @@ -0,0 +1,44 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +#if NETCOREAPP1_1 + +using System.IO; +using Xunit; + +namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests +{ + public class GeneratedCodeTests + { + [Fact] + public void GeneratedCodeIsUpToDate() + { + const string frameHeadersGeneratedPath = "../../../../../src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameHeaders.Generated.cs"; + const string frameGeneratedPath = "../../../../../src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.Generated.cs"; + + var testFrameHeadersGeneratedPath = Path.GetTempFileName(); + var testFrameGeneratedPath = Path.GetTempFileName(); + + try + { + var currentFrameHeadersGenerated = File.ReadAllText(frameHeadersGeneratedPath); + var currentFrameGenerated = File.ReadAllText(frameGeneratedPath); + + CodeGenerator.Program.Run(testFrameHeadersGeneratedPath, testFrameGeneratedPath); + + var testFrameHeadersGenerated = File.ReadAllText(testFrameHeadersGeneratedPath); + var testFrameGenerated = File.ReadAllText(testFrameGeneratedPath); + + Assert.Equal(currentFrameHeadersGenerated, testFrameHeadersGenerated, ignoreLineEndingDifferences: true); + Assert.Equal(currentFrameGenerated, testFrameGenerated, ignoreLineEndingDifferences: true); + } + finally + { + File.Delete(testFrameHeadersGeneratedPath); + File.Delete(testFrameGeneratedPath); + } + } + } +} + +#endif \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj index 41df7b3e09..fe6cbe0da0 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj @@ -35,6 +35,7 @@ + diff --git a/tools/CodeGenerator/Program.cs b/tools/CodeGenerator/Program.cs index 102839b6b7..a057b078c6 100644 --- a/tools/CodeGenerator/Program.cs +++ b/tools/CodeGenerator/Program.cs @@ -10,36 +10,38 @@ namespace CodeGenerator { public static int Main(string[] args) { - var text0 = KnownHeaders.GeneratedFile(); - var text1 = FrameFeatureCollection.GeneratedFile(); + if (args.Length < 1) + { + Console.Error.WriteLine("Missing path to FrameHeaders.Generated.cs"); + return 1; + } + else if (args.Length < 2) + { + Console.Error.WriteLine("Missing path to Frame.Generated.cs"); + return 1; + } - if (args.Length == 1) - { - var existing = File.Exists(args[0]) ? File.ReadAllText(args[0]) : ""; - if (!string.Equals(text0, existing)) - { - File.WriteAllText(args[0], text0); - } - } - else if (args.Length == 2) - { - var existing0 = File.Exists(args[0]) ? File.ReadAllText(args[0]) : ""; - if (!string.Equals(text0, existing0)) - { - File.WriteAllText(args[0], text0); - } + Run(args[0], args[1]); - var existing1 = File.Exists(args[1]) ? File.ReadAllText(args[1]) : ""; - if (!string.Equals(text1, existing1)) - { - File.WriteAllText(args[1], text1); - } - } - else - { - Console.WriteLine(text0); - } return 0; } + + public static void Run(string knownHeadersPath, string frameFeaturesCollectionPath) + { + var knownHeadersContent = KnownHeaders.GeneratedFile(); + var frameFeatureCollectionContent = FrameFeatureCollection.GeneratedFile(); + + var existingKnownHeaders = File.Exists(knownHeadersPath) ? File.ReadAllText(knownHeadersPath) : ""; + if (!string.Equals(knownHeadersContent, existingKnownHeaders)) + { + File.WriteAllText(knownHeadersPath, knownHeadersContent); + } + + var existingFrameFeatureCollection = File.Exists(frameFeaturesCollectionPath) ? File.ReadAllText(frameFeaturesCollectionPath) : ""; + if (!string.Equals(frameFeatureCollectionContent, existingFrameFeatureCollection)) + { + File.WriteAllText(frameFeaturesCollectionPath, frameFeatureCollectionContent); + } + } } }