diff --git a/ServerCodeExciserTest/ExcisionIntegrationTests.cs b/ServerCodeExciserTest/ExcisionIntegrationTests.cs index ef5a84e..20632d7 100644 --- a/ServerCodeExciserTest/ExcisionIntegrationTests.cs +++ b/ServerCodeExciserTest/ExcisionIntegrationTests.cs @@ -1,150 +1,112 @@ -using System; -using System.IO; using ServerCodeExcision; using ServerCodeExcisionCommon; +using Spectre.Console; +using System; +using System.IO; +using UnrealAngelscriptServerCodeExcision; public class IntegrationTests { - private static string TestProblemPath = @"Problems"; - //private static string TestProblemPath = @"ProblemTestBed"; - private static string TestAnswerPath = @"Answers"; - private static string TestSolutionPath = @"Solutions"; - - private static string CommonSubPath = @"Common"; - private static string AngelscriptSubPath = @"Angelscript"; - - public static void Main(string[] args) - { - ConsoleColor initialColor = Console.ForegroundColor; - bool excisionWasSuccessful = true; - int nrCorrectAnswers = 0; - int nrErrors = 0; - int nrProblems = 0; - - var commonProblemPath = Path.Combine(TestProblemPath, CommonSubPath); - var commonSolutionPath = Path.Combine(TestSolutionPath, CommonSubPath); - - // Run for Angelscript - excisionWasSuccessful = excisionWasSuccessful && RunExciserIntegrationTests("as", - Path.Combine(TestProblemPath, AngelscriptSubPath), - Path.Combine(TestAnswerPath, AngelscriptSubPath), - Path.Combine(TestSolutionPath, AngelscriptSubPath), - commonProblemPath, - commonSolutionPath, - ref nrCorrectAnswers, ref nrErrors, ref nrProblems); - - if (excisionWasSuccessful) - { - Console.ForegroundColor = initialColor; - Console.WriteLine("----------------------------"); - Console.WriteLine(nrCorrectAnswers > 0 && nrCorrectAnswers == nrProblems - ? string.Format("{0} test(s) ran successfully.", nrCorrectAnswers) - : string.Format("{0} error(s) detected running {1} tests", nrErrors, nrProblems)); - } - } - - private static bool RunExciserIntegrationTests(string fileExtension, string testProblemPath, string testAnswerPath, string testSolutionPath, string commonProblemPath, string commonSolutionPath, ref int nrCorrectAnswers, ref int nrErrors, ref int nrProblems) - { - string problemPath = Path.Combine(Environment.CurrentDirectory, testProblemPath); - string answerPath = Path.Combine(Environment.CurrentDirectory, testAnswerPath); - string solutionPath = Path.Combine(Environment.CurrentDirectory, testSolutionPath); - - // First copy common problems to their language folders and rename them so they are picked up by the exciser if they exist. - if (Directory.Exists(commonProblemPath) && Directory.Exists(commonSolutionPath)) - { - CopyCommonTestFiles(fileExtension, problemPath, commonProblemPath); - CopyCommonTestFiles(fileExtension, solutionPath, commonSolutionPath); - } - - // Clean up earlier answers. - if (Directory.Exists(answerPath)) - { - Directory.Delete(answerPath, true); - } - - string[] exciserArgs = - { - problemPath, - "-u", - "-f", - "FullExcise1/.*", - "-a", - "AllFunctionExcise1/.*|||AllFunctionExcise2/.*", - "-o", - answerPath - }; - - var excisionReturnCode = (EExciserReturnValues)ServerCodeExciser.Main(exciserArgs); - if (excisionReturnCode != EExciserReturnValues.Success) - { - Console.Error.WriteLine("Excision error: " + excisionReturnCode); - return false; - } - - if (Directory.Exists(answerPath)) - { - foreach (var answerFilePath in Directory.EnumerateFiles(answerPath, "*." + fileExtension, SearchOption.AllDirectories)) - { - nrProblems++; - - var relativePath = Path.GetRelativePath(answerPath, answerFilePath); - var solutionFilePath = Path.Combine(solutionPath, relativePath); - var fileName = Path.GetFileName(answerFilePath); - - var answer = File.ReadAllText(answerFilePath); - var solution = File.ReadAllText(solutionFilePath); - - if(answer == solution) - { - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine(fileName + "'s answer matched the correct solution!"); - nrCorrectAnswers++; - } - else - { - Console.ForegroundColor = ConsoleColor.Red; - Console.Error.WriteLine(fileName + "'s failed!"); - nrErrors++; - } - } - } - else - { - Console.Error.WriteLine("No test answers found in path: " + answerPath); - return false; - } - - // Clean up common folders if it went well - CleanupTestFiles(problemPath); - CleanupTestFiles(solutionPath); - - return true; - } - - private static void CopyCommonTestFiles(string fileExtension, string targetRootPath, string commonRootPath) - { - // First clear target problem path - CleanupTestFiles(targetRootPath); - - var targetCommonPath = Path.Combine(targetRootPath, "Common"); - foreach (var commonProblemFilePath in Directory.EnumerateFiles(commonRootPath, "*.*", SearchOption.AllDirectories)) - { - var targetPath = Path.Combine(targetCommonPath, Path.GetRelativePath(commonRootPath, Path.ChangeExtension(commonProblemFilePath, fileExtension))); - var targetDirectory = Path.GetDirectoryName(targetPath); - if (targetDirectory != null) - { - Directory.CreateDirectory(targetDirectory); - File.Copy(commonProblemFilePath, targetPath); - } - } - } - - private static void CleanupTestFiles(string targetRootPath) - { - var targetCommonPath = Path.Combine(targetRootPath, "Common"); - if (Directory.Exists(targetCommonPath)) - { - Directory.Delete(targetCommonPath, true); - } + private static string TestProblemPath = @"Problems"; + private static string TestAnswerPath = @"Answers"; + + public static int Main(string[] args) + { + int numTestFailures = 0; + int numTestCases = 0; + + try + { + // Run for Angelscript + var angelscriptResult = RunExciserIntegrationTests( + ".as", + Path.Combine(Environment.CurrentDirectory, TestProblemPath, "Angelscript"), + Path.Combine(Environment.CurrentDirectory, TestAnswerPath, "Angelscript"), + ref numTestFailures, + ref numTestCases); + + // Run for "common" + var commonResult = RunExciserIntegrationTests( + ".common", + Path.Combine(Environment.CurrentDirectory, TestProblemPath, "Common"), + Path.Combine(Environment.CurrentDirectory, TestAnswerPath, "Common"), + ref numTestFailures, + ref numTestCases); + + Console.WriteLine("----------------------------"); + Console.WriteLine($"{numTestCases - numTestFailures} test(s) passed."); + Console.WriteLine($"{numTestFailures} test(s) failed."); + } + catch (Exception e) + { + AnsiConsole.WriteException(e); + return 1; + } + + return numTestFailures == 0 ? 0 : 1; + } + + private static EExciserReturnValues RunExciserIntegrationTests(string fileExtension, string inputPath, string outputPath, ref int numTestFailures, ref int numTestCases) + { + // Clean up earlier answers. + if (Directory.Exists(outputPath)) + { + Directory.Delete(outputPath, true); + } + + string searchPattern = "*" + fileExtension.TrimStart('.'); + + EExciserReturnValues returnCode; + try + { + var excisionParams = new ServerCodeExcisionParameters + { + OutputPath = outputPath, + ShouldOutputUntouchedFiles = true, + FullExcisionRegexString = @"FullExcise1/.*", + ExciseAllFunctionsRegexString = @"AllFunctionExcise1/.*|||AllFunctionExcise2/.*", + }; + excisionParams.InputPaths.Add(inputPath); + + var angelscriptServerCodeExciser = new ServerCodeExcisionProcessor(excisionParams); + returnCode = angelscriptServerCodeExciser.ExciseServerCode(searchPattern, new UnrealAngelscriptServerCodeExcisionLanguage()); + Console.WriteLine($"ExciseServerCode for {fileExtension} files returned: {returnCode}"); + } + catch (Exception e) + { + AnsiConsole.WriteException(e); + return EExciserReturnValues.InternalExcisionError; + } + + foreach (var answerFilePath in Directory.EnumerateFiles(outputPath, searchPattern, SearchOption.AllDirectories)) + { + numTestCases++; + + var solutionFilePath = Path.Combine(inputPath, Path.GetRelativePath(outputPath, answerFilePath)) + ".solution"; + + var fileName = Path.GetFileName(answerFilePath); + var answer = File.ReadAllText(answerFilePath); + var solution = File.ReadAllText(solutionFilePath); + + if (answer == solution) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine(fileName + " passed!"); + Console.ForegroundColor = ConsoleColor.Gray; + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(fileName + " failed!"); + Console.ForegroundColor = ConsoleColor.Gray; + Console.WriteLine("--- Expected: ---"); + Console.WriteLine(solution); + Console.WriteLine("--- Actual: ---"); + Console.WriteLine(answer); + numTestFailures++; + } + } + + return returnCode; } } diff --git a/ServerCodeExciserTest/Solutions/Angelscript/AllFunctionExcise1/ReferenceFullExcise.as b/ServerCodeExciserTest/Problems/Angelscript/AllFunctionExcise1/ReferenceFullExcise.as.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Angelscript/AllFunctionExcise1/ReferenceFullExcise.as rename to ServerCodeExciserTest/Problems/Angelscript/AllFunctionExcise1/ReferenceFullExcise.as.solution diff --git a/ServerCodeExciserTest/Solutions/Angelscript/AllFunctionExcise1/UFuncWithAccessSpecTest.as b/ServerCodeExciserTest/Problems/Angelscript/AllFunctionExcise1/UFuncWithAccessSpecTest.as.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Angelscript/AllFunctionExcise1/UFuncWithAccessSpecTest.as rename to ServerCodeExciserTest/Problems/Angelscript/AllFunctionExcise1/UFuncWithAccessSpecTest.as.solution diff --git a/ServerCodeExciserTest/Solutions/Angelscript/ReferenceReturnRootScopeTest.as b/ServerCodeExciserTest/Problems/Angelscript/ReferenceReturnRootScopeTest.as.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Angelscript/ReferenceReturnRootScopeTest.as rename to ServerCodeExciserTest/Problems/Angelscript/ReferenceReturnRootScopeTest.as.solution diff --git a/ServerCodeExciserTest/Solutions/Angelscript/ReferenceReturnTest.as b/ServerCodeExciserTest/Problems/Angelscript/ReferenceReturnTest.as.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Angelscript/ReferenceReturnTest.as rename to ServerCodeExciserTest/Problems/Angelscript/ReferenceReturnTest.as.solution diff --git a/ServerCodeExciserTest/Solutions/Angelscript/ReturnValueMixinTest.as b/ServerCodeExciserTest/Problems/Angelscript/ReturnValueMixinTest.as.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Angelscript/ReturnValueMixinTest.as rename to ServerCodeExciserTest/Problems/Angelscript/ReturnValueMixinTest.as.solution diff --git a/ServerCodeExciserTest/Solutions/Angelscript/ServerPostfixFunctionTest.as b/ServerCodeExciserTest/Problems/Angelscript/ServerPostfixFunctionTest.as.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Angelscript/ServerPostfixFunctionTest.as rename to ServerCodeExciserTest/Problems/Angelscript/ServerPostfixFunctionTest.as.solution diff --git a/ServerCodeExciserTest/Solutions/Common/AllFunctionExcise1/AllFunctionExcise1Test.common b/ServerCodeExciserTest/Problems/Common/AllFunctionExcise1/AllFunctionExcise1Test.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/AllFunctionExcise1/AllFunctionExcise1Test.common rename to ServerCodeExciserTest/Problems/Common/AllFunctionExcise1/AllFunctionExcise1Test.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/AllFunctionExcise2/AllFunctionExcise2Test.common b/ServerCodeExciserTest/Problems/Common/AllFunctionExcise2/AllFunctionExcise2Test.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/AllFunctionExcise2/AllFunctionExcise2Test.common rename to ServerCodeExciserTest/Problems/Common/AllFunctionExcise2/AllFunctionExcise2Test.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/AlreadyHasGuardsTest.common b/ServerCodeExciserTest/Problems/Common/AlreadyHasGuardsTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/AlreadyHasGuardsTest.common rename to ServerCodeExciserTest/Problems/Common/AlreadyHasGuardsTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/AuthorityBranchTest.common b/ServerCodeExciserTest/Problems/Common/AuthorityBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/AuthorityBranchTest.common rename to ServerCodeExciserTest/Problems/Common/AuthorityBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/BranchAfterDeclarationTest.common b/ServerCodeExciserTest/Problems/Common/BranchAfterDeclarationTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/BranchAfterDeclarationTest.common rename to ServerCodeExciserTest/Problems/Common/BranchAfterDeclarationTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/ChainedBranchTest.common b/ServerCodeExciserTest/Problems/Common/ChainedBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/ChainedBranchTest.common rename to ServerCodeExciserTest/Problems/Common/ChainedBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/ComplexBranchTest.common b/ServerCodeExciserTest/Problems/Common/ComplexBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/ComplexBranchTest.common rename to ServerCodeExciserTest/Problems/Common/ComplexBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/ComplexNegationBranchTest.common b/ServerCodeExciserTest/Problems/Common/ComplexNegationBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/ComplexNegationBranchTest.common rename to ServerCodeExciserTest/Problems/Common/ComplexNegationBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/ConjunctiveBranchTest.common b/ServerCodeExciserTest/Problems/Common/ConjunctiveBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/ConjunctiveBranchTest.common rename to ServerCodeExciserTest/Problems/Common/ConjunctiveBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/ConjunctiveNegativeBranchTest.common b/ServerCodeExciserTest/Problems/Common/ConjunctiveNegativeBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/ConjunctiveNegativeBranchTest.common rename to ServerCodeExciserTest/Problems/Common/ConjunctiveNegativeBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/DeclarationAfterBranchTest.common b/ServerCodeExciserTest/Problems/Common/DeclarationAfterBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/DeclarationAfterBranchTest.common rename to ServerCodeExciserTest/Problems/Common/DeclarationAfterBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/DeclarationInFunctionRootScopeWithReturnValTest.common b/ServerCodeExciserTest/Problems/Common/DeclarationInFunctionRootScopeWithReturnValTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/DeclarationInFunctionRootScopeWithReturnValTest.common rename to ServerCodeExciserTest/Problems/Common/DeclarationInFunctionRootScopeWithReturnValTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/DeclarationInsideBranchTest.common b/ServerCodeExciserTest/Problems/Common/DeclarationInsideBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/DeclarationInsideBranchTest.common rename to ServerCodeExciserTest/Problems/Common/DeclarationInsideBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/DeclarationInsideBranchWithConjunctionTest.common b/ServerCodeExciserTest/Problems/Common/DeclarationInsideBranchWithConjunctionTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/DeclarationInsideBranchWithConjunctionTest.common rename to ServerCodeExciserTest/Problems/Common/DeclarationInsideBranchWithConjunctionTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/EmptyScopeTest.common b/ServerCodeExciserTest/Problems/Common/EmptyScopeTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/EmptyScopeTest.common rename to ServerCodeExciserTest/Problems/Common/EmptyScopeTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/EnsureNegationBranchTest.common b/ServerCodeExciserTest/Problems/Common/EnsureNegationBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/EnsureNegationBranchTest.common rename to ServerCodeExciserTest/Problems/Common/EnsureNegationBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/FullExcise1/FullExcise1Test.common b/ServerCodeExciserTest/Problems/Common/FullExcise1/FullExcise1Test.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/FullExcise1/FullExcise1Test.common rename to ServerCodeExciserTest/Problems/Common/FullExcise1/FullExcise1Test.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/MultipleTestsInSameFileTest.common b/ServerCodeExciserTest/Problems/Common/MultipleTestsInSameFileTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/MultipleTestsInSameFileTest.common rename to ServerCodeExciserTest/Problems/Common/MultipleTestsInSameFileTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/NegationVariantsTest.common b/ServerCodeExciserTest/Problems/Common/NegationVariantsTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/NegationVariantsTest.common rename to ServerCodeExciserTest/Problems/Common/NegationVariantsTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/NegativeBranchTest.common b/ServerCodeExciserTest/Problems/Common/NegativeBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/NegativeBranchTest.common rename to ServerCodeExciserTest/Problems/Common/NegativeBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/NegativeDeclarationInsideBranchTest.common b/ServerCodeExciserTest/Problems/Common/NegativeDeclarationInsideBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/NegativeDeclarationInsideBranchTest.common rename to ServerCodeExciserTest/Problems/Common/NegativeDeclarationInsideBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/NestedBranchTest.common b/ServerCodeExciserTest/Problems/Common/NestedBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/NestedBranchTest.common rename to ServerCodeExciserTest/Problems/Common/NestedBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/NotServerImmediateReturnBranchOneLinerTest.common b/ServerCodeExciserTest/Problems/Common/NotServerImmediateReturnBranchOneLinerTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/NotServerImmediateReturnBranchOneLinerTest.common rename to ServerCodeExciserTest/Problems/Common/NotServerImmediateReturnBranchOneLinerTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/NotServerImmediateReturnBranchTest.common b/ServerCodeExciserTest/Problems/Common/NotServerImmediateReturnBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/NotServerImmediateReturnBranchTest.common rename to ServerCodeExciserTest/Problems/Common/NotServerImmediateReturnBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/NotServerImmediateReturnWithFunctionReturnBranchTest.common b/ServerCodeExciserTest/Problems/Common/NotServerImmediateReturnWithFunctionReturnBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/NotServerImmediateReturnWithFunctionReturnBranchTest.common rename to ServerCodeExciserTest/Problems/Common/NotServerImmediateReturnWithFunctionReturnBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/OneLineBranchElseOneLineTest.common b/ServerCodeExciserTest/Problems/Common/OneLineBranchElseOneLineTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/OneLineBranchElseOneLineTest.common rename to ServerCodeExciserTest/Problems/Common/OneLineBranchElseOneLineTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/OneLineBranchElseOnlyTest.common b/ServerCodeExciserTest/Problems/Common/OneLineBranchElseOnlyTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/OneLineBranchElseOnlyTest.common rename to ServerCodeExciserTest/Problems/Common/OneLineBranchElseOnlyTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/OneLineBranchElseTest.common b/ServerCodeExciserTest/Problems/Common/OneLineBranchElseTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/OneLineBranchElseTest.common rename to ServerCodeExciserTest/Problems/Common/OneLineBranchElseTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/OneLineBranchTest.common b/ServerCodeExciserTest/Problems/Common/OneLineBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/OneLineBranchTest.common rename to ServerCodeExciserTest/Problems/Common/OneLineBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/OneLineReturnBranchTest.common b/ServerCodeExciserTest/Problems/Common/OneLineReturnBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/OneLineReturnBranchTest.common rename to ServerCodeExciserTest/Problems/Common/OneLineReturnBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/OrBranchTest.common b/ServerCodeExciserTest/Problems/Common/OrBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/OrBranchTest.common rename to ServerCodeExciserTest/Problems/Common/OrBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/ReturnValueFunctionButNoReturnAtEndTest.common b/ServerCodeExciserTest/Problems/Common/ReturnValueFunctionButNoReturnAtEndTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/ReturnValueFunctionButNoReturnAtEndTest.common rename to ServerCodeExciserTest/Problems/Common/ReturnValueFunctionButNoReturnAtEndTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/ReturnValueNestedTypeTest.common b/ServerCodeExciserTest/Problems/Common/ReturnValueNestedTypeTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/ReturnValueNestedTypeTest.common rename to ServerCodeExciserTest/Problems/Common/ReturnValueNestedTypeTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/ServerMetaUFunctionTest.common b/ServerCodeExciserTest/Problems/Common/ServerMetaUFunctionTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/ServerMetaUFunctionTest.common rename to ServerCodeExciserTest/Problems/Common/ServerMetaUFunctionTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/SimpleBranchTest.common b/ServerCodeExciserTest/Problems/Common/SimpleBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/SimpleBranchTest.common rename to ServerCodeExciserTest/Problems/Common/SimpleBranchTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/SimpleBranchWithReturnTest.common b/ServerCodeExciserTest/Problems/Common/SimpleBranchWithReturnTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/SimpleBranchWithReturnTest.common rename to ServerCodeExciserTest/Problems/Common/SimpleBranchWithReturnTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/SimpleDeclarationTest.common b/ServerCodeExciserTest/Problems/Common/SimpleDeclarationTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/SimpleDeclarationTest.common rename to ServerCodeExciserTest/Problems/Common/SimpleDeclarationTest.common.solution diff --git a/ServerCodeExciserTest/Solutions/Common/UnrelatedBranchTest.common b/ServerCodeExciserTest/Problems/Common/UnrelatedBranchTest.common.solution similarity index 100% rename from ServerCodeExciserTest/Solutions/Common/UnrelatedBranchTest.common rename to ServerCodeExciserTest/Problems/Common/UnrelatedBranchTest.common.solution