From 314496ba7b881ac822c81b602f9483b2191a3c3e Mon Sep 17 00:00:00 2001 From: John Lewin Date: Tue, 5 May 2015 07:25:47 -0700 Subject: [PATCH] Extract tests to dedicated assemblies --- AboutPage/HTMLParser/HtmlParser.cs | 72 ----------- MatterControl.csproj | 7 -- MatterControl.sln | 84 ++++++++++++- MatterControlApplication.cs | 40 ++++-- .../Slicing/Tests/UnitTests.cs | 49 -------- Submodules/MatterSlice | 2 +- Submodules/agg-sharp | 2 +- Testing/ReleaseTests.cs | 14 --- Testing/TestingDispatch.cs | 83 ------------- .../MatterControl.Tests.csproj | 114 +++++++++++++++++ .../MatterControl/HtmlParser.cs | 117 ++++++++++++++++++ .../MatterControl/ReleaseBuildTests.cs | 72 +++++++++++ .../MatterControl}/SliceLayersTests.cs | 4 +- .../Properties/AssemblyInfo.cs | 36 ++++++ Tests/MatterControl.Tests/packages.config | 5 + .../TestMeshes}/SliceLayers/Box20x20x10.stl | Bin Tests/TestRunner/MatterControl.nunit | 8 ++ Tests/TestRunner/TestRunner/Program.cs | 80 ++++++++++++ .../TestRunner/Properties/AssemblyInfo.cs | 36 ++++++ Tests/TestRunner/TestRunner/TestRunner.csproj | 55 ++++++++ Tests/TestRunner/TestRunner/TestRunner.sln | 20 +++ 21 files changed, 658 insertions(+), 242 deletions(-) delete mode 100644 SlicerConfiguration/Slicing/Tests/UnitTests.cs delete mode 100644 Testing/ReleaseTests.cs delete mode 100644 Testing/TestingDispatch.cs create mode 100644 Tests/MatterControl.Tests/MatterControl.Tests.csproj create mode 100644 Tests/MatterControl.Tests/MatterControl/HtmlParser.cs create mode 100644 Tests/MatterControl.Tests/MatterControl/ReleaseBuildTests.cs rename {SlicerConfiguration/Slicing/Tests => Tests/MatterControl.Tests/MatterControl}/SliceLayersTests.cs (94%) create mode 100644 Tests/MatterControl.Tests/Properties/AssemblyInfo.cs create mode 100644 Tests/MatterControl.Tests/packages.config rename {TestMeshes => Tests/TestData/TestMeshes}/SliceLayers/Box20x20x10.stl (100%) create mode 100644 Tests/TestRunner/MatterControl.nunit create mode 100644 Tests/TestRunner/TestRunner/Program.cs create mode 100644 Tests/TestRunner/TestRunner/Properties/AssemblyInfo.cs create mode 100644 Tests/TestRunner/TestRunner/TestRunner.csproj create mode 100644 Tests/TestRunner/TestRunner/TestRunner.sln diff --git a/AboutPage/HTMLParser/HtmlParser.cs b/AboutPage/HTMLParser/HtmlParser.cs index 85b848025..63dce4a23 100644 --- a/AboutPage/HTMLParser/HtmlParser.cs +++ b/AboutPage/HTMLParser/HtmlParser.cs @@ -27,7 +27,6 @@ of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. */ -using NUnit.Framework; using System; using System.Collections.Generic; using System.Text.RegularExpressions; @@ -45,75 +44,6 @@ namespace MatterHackers.MatterControl.HtmlParsing public ElementState CurrentElementState { get { return elementQueue.Peek(); } } - [Test] - public static void TestSplitOnSpacesNotInQuotes() - { - { - string test1 = "one two three"; - string[] results = SplitOnSpacesNotInQuotes(test1); - Assert.IsTrue(results.Length == 3); - Assert.IsTrue(results[0] == "one"); - Assert.IsTrue(results[1] == "two"); - Assert.IsTrue(results[2] == "three"); - } - - { - string test1 = "one 'two three' four"; - string[] results = SplitOnSpacesNotInQuotes(test1); - Assert.IsTrue(results.Length == 3); - Assert.IsTrue(results[0] == "one"); - Assert.IsTrue(results[1] == "'two three'"); - Assert.IsTrue(results[2] == "four"); - } - - { - string test1 = "one 'two three''four' five"; - string[] results = SplitOnSpacesNotInQuotes(test1); - Assert.IsTrue(results.Length == 3); - Assert.IsTrue(results[0] == "one"); - Assert.IsTrue(results[1] == "'two three''four'"); - Assert.IsTrue(results[2] == "five"); - } - - { - string test1 = "one \"two three\" four"; - string[] results = SplitOnSpacesNotInQuotes(test1); - Assert.IsTrue(results.Length == 3); - Assert.IsTrue(results[0] == "one"); - Assert.IsTrue(results[1] == "\"two three\""); - Assert.IsTrue(results[2] == "four"); - } - - { - string test1 = "one \"'two' three\" four"; - string[] results = SplitOnSpacesNotInQuotes(test1); - Assert.IsTrue(results.Length == 3); - Assert.IsTrue(results[0] == "one"); - Assert.IsTrue(results[1] == "\"'two' three\""); - Assert.IsTrue(results[2] == "four"); - } - - { - string test1 = "one '\"two\" three' four"; - string[] results = SplitOnSpacesNotInQuotes(test1); - Assert.IsTrue(results.Length == 3); - Assert.IsTrue(results[0] == "one"); - Assert.IsTrue(results[1] == "'\"two\" three'"); - Assert.IsTrue(results[2] == "four"); - } - - { - string test1 = "\"White"; - string[] results = SplitOnSpacesNotInQuotes(test1); - Assert.IsTrue(results.Length == 5); - Assert.IsTrue(results[0] == ""); - } - } - public static string UrlDecode(string htmlContent) { string decoded = htmlContent.Replace("™", "™"); @@ -247,8 +177,6 @@ namespace MatterHackers.MatterControl.HtmlParsing private void ParseTypeContent(int openPosition, int closePosition, string htmlContent) { - TestSplitOnSpacesNotInQuotes(); - string text = htmlContent.Substring(openPosition, closePosition - openPosition); ElementState currentElementState = new ElementState(elementQueue.Peek()); int afterTypeName = typeNameEndRegex.Match(htmlContent, openPosition).Index; diff --git a/MatterControl.csproj b/MatterControl.csproj index d1076693c..fca757503 100644 --- a/MatterControl.csproj +++ b/MatterControl.csproj @@ -226,8 +226,6 @@ - - @@ -245,8 +243,6 @@ - - @@ -358,9 +354,6 @@ - - Submodules\agg-sharp\AggTests\nunit.framework.dll - Submodules\agg-sharp\PlatformWin32\OpenTK.dll diff --git a/MatterControl.sln b/MatterControl.sln index 2691a98ef..665dc914f 100644 --- a/MatterControl.sln +++ b/MatterControl.sln @@ -93,11 +93,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InfInstaller", "PrinterDriv EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Nat", "..\CloudServicesPlugin\Mono.Nat\Mono.Nat.csproj", "{F5D74163-145F-47BF-83DC-D0E07249C6CA}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{FBE6DF29-85A9-4A8B-B739-35BE4CA0A9B7}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{9EA7B05F-E58F-44DF-BD33-EEA28553D220}" ProjectSection(SolutionItems) = preProject .nuget\NuGet.Config = .nuget\NuGet.Config .nuget\NuGet.exe = .nuget\NuGet.exe - .nuget\NuGet.targets = .nuget\NuGet.targets EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrintNotifications", "..\CloudServicesPlugin\PrintNotifications\PrintNotifications.csproj", "{291CD87C-2C58-4369-9D85-238C7EB31542}" @@ -120,6 +121,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextCreator", "TextCreator\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataConverters3D", "Submodules\agg-sharp\DataConverters3D\DataConverters3D.csproj", "{04667764-DC7B-4B95-AEF6-B4E6C87A54E9}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MatterControl.Tests", "Tests\MatterControl.Tests\MatterControl.Tests.csproj", "{E1455E5C-127C-4282-8CC5-452C300E91D0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Agg.Tests", "Submodules\agg-sharp\Tests\Agg.Tests\Agg.Tests.csproj", "{195CBE56-E654-437B-AB05-3BE1B9452497}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MatterSlice.Tests", "Submodules\MatterSlice\Tests\MatterSlice.Tests\MatterSlice.Tests.csproj", "{8CD15B23-D30F-470E-99BA-9276FB7CABD4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1070,6 +1077,78 @@ Global {04667764-DC7B-4B95-AEF6-B4E6C87A54E9}.Release64|x64.ActiveCfg = Release64|x64 {04667764-DC7B-4B95-AEF6-B4E6C87A54E9}.Release64|x64.Build.0 = Release64|x64 {04667764-DC7B-4B95-AEF6-B4E6C87A54E9}.Release64|x86.ActiveCfg = Release64|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug|x64.ActiveCfg = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug|x86.ActiveCfg = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug64|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug64|Mixed Platforms.Build.0 = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug64|x64.ActiveCfg = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Debug64|x86.ActiveCfg = Debug|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release|Any CPU.Build.0 = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release|x64.ActiveCfg = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release|x86.ActiveCfg = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release64|Any CPU.ActiveCfg = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release64|Any CPU.Build.0 = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release64|Mixed Platforms.ActiveCfg = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release64|Mixed Platforms.Build.0 = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release64|x64.ActiveCfg = Release|Any CPU + {E1455E5C-127C-4282-8CC5-452C300E91D0}.Release64|x86.ActiveCfg = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug|Any CPU.Build.0 = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug|x64.ActiveCfg = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug|x86.ActiveCfg = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug64|Mixed Platforms.ActiveCfg = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug64|Mixed Platforms.Build.0 = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug64|x64.ActiveCfg = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Debug64|x86.ActiveCfg = Debug|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release|Any CPU.ActiveCfg = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release|Any CPU.Build.0 = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release|x64.ActiveCfg = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release|x86.ActiveCfg = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release64|Any CPU.ActiveCfg = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release64|Any CPU.Build.0 = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release64|Mixed Platforms.ActiveCfg = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release64|Mixed Platforms.Build.0 = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release64|x64.ActiveCfg = Release|Any CPU + {195CBE56-E654-437B-AB05-3BE1B9452497}.Release64|x86.ActiveCfg = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug|x64.ActiveCfg = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug|x86.ActiveCfg = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug64|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug64|Mixed Platforms.Build.0 = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug64|x64.ActiveCfg = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Debug64|x86.ActiveCfg = Debug|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release|Any CPU.Build.0 = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release|x64.ActiveCfg = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release|x86.ActiveCfg = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release64|Any CPU.ActiveCfg = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release64|Any CPU.Build.0 = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release64|Mixed Platforms.ActiveCfg = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release64|Mixed Platforms.Build.0 = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release64|x64.ActiveCfg = Release|Any CPU + {8CD15B23-D30F-470E-99BA-9276FB7CABD4}.Release64|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1106,6 +1185,9 @@ Global {002B1D12-4DBB-4ECF-B481-5EBECBC1666E} = {8F938919-F383-4BAE-BB95-13AB2A94088E} {F49EC1DD-D645-4709-8667-B57318AF67B0} = {32E5B656-D6DF-415E-9E7E-D03F1D8C3A8A} {04667764-DC7B-4B95-AEF6-B4E6C87A54E9} = {2AB9B589-5C98-4C05-BBEA-F97DAE168EAB} + {E1455E5C-127C-4282-8CC5-452C300E91D0} = {FBE6DF29-85A9-4A8B-B739-35BE4CA0A9B7} + {195CBE56-E654-437B-AB05-3BE1B9452497} = {FBE6DF29-85A9-4A8B-B739-35BE4CA0A9B7} + {8CD15B23-D30F-470E-99BA-9276FB7CABD4} = {FBE6DF29-85A9-4A8B-B739-35BE4CA0A9B7} EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = MatterControl.csproj diff --git a/MatterControlApplication.cs b/MatterControlApplication.cs index 219321ac4..a8d7c38a7 100644 --- a/MatterControlApplication.cs +++ b/MatterControlApplication.cs @@ -99,11 +99,6 @@ namespace MatterHackers.MatterControl string commandUpper = command.ToUpper(); switch (commandUpper) { - case "TEST": - Testing.TestingDispatch testDispatch = new Testing.TestingDispatch(); - testDispatch.RunTests(); - return; - case "FORCE_SOFTWARE_RENDERING": forceSofwareRendering = true; GL.ForceSoftwareRendering(); @@ -259,13 +254,6 @@ namespace MatterHackers.MatterControl } #endif - MatterHackers.PolygonMesh.UnitTests.UnitTests.Run(); - MatterHackers.RayTracer.UnitTests.Run(); - MatterHackers.Agg.Tests.UnitTests.Run(); - MatterHackers.VectorMath.Tests.UnitTests.Run(); - MatterHackers.Agg.UI.Tests.UnitTests.Run(); - MatterHackers.MatterControl.Slicing.Tests.UnitTests.Run(); - // you can turn this on to debug some bounds issues //GuiWidget.DebugBoundsUnderMouse = true; } @@ -637,5 +625,33 @@ namespace MatterHackers.MatterControl base.OnClosing(out CancelClose); } } + + private static void AssertDebugNotDefined() + { +#if DEBUG + throw new Exception("DEBUG is defined and should not be!"); +#endif + } + + public static void CheckKnownAssemblyConditionalCompSymbols() + { + MatterControlApplication.AssertDebugNotDefined(); + MatterHackers.GCodeVisualizer.GCodeFile.AssertDebugNotDefined(); + MatterHackers.Agg.Graphics2D.AssertDebugNotDefined(); + MatterHackers.Agg.UI.SystemWindow.AssertDebugNotDefined(); + ClipperLib.Clipper.AssertDebugNotDefined(); + MatterHackers.Csg.Utilities.AssertDebugNotDefined(); + MatterHackers.Agg.ImageProcessing.InvertLightness.AssertDebugNotDefined(); + MatterHackers.Localizations.TranslationMap.AssertDebugNotDefined(); + MatterHackers.MarchingSquares.MarchingSquaresByte.AssertDebugNotDefined(); + MatterHackers.MatterControl.PluginSystem.MatterControlPlugin.AssertDebugNotDefined(); + MatterHackers.MatterSlice.MatterSlice.AssertDebugNotDefined(); + MatterHackers.MeshVisualizer.MeshViewerWidget.AssertDebugNotDefined(); + MatterHackers.RenderOpenGl.GLMeshTrianglePlugin.AssertDebugNotDefined(); + } + + + } + } \ No newline at end of file diff --git a/SlicerConfiguration/Slicing/Tests/UnitTests.cs b/SlicerConfiguration/Slicing/Tests/UnitTests.cs deleted file mode 100644 index bf0f27d71..000000000 --- a/SlicerConfiguration/Slicing/Tests/UnitTests.cs +++ /dev/null @@ -1,49 +0,0 @@ -/* -Copyright (c) 2014, Lars Brubaker -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. -*/ - -namespace MatterHackers.MatterControl.Slicing.Tests -{ - public static class UnitTests - { - private static bool ranTests = false; - - public static bool RanTests { get { return ranTests; } } - - public static void Run() - { - if (!ranTests) - { - SliceLayersTests layerTests = new SliceLayersTests(); - layerTests.SliceLayersGeneratingCorrectSegmets(); - - ranTests = true; - } - } - } -} \ No newline at end of file diff --git a/Submodules/MatterSlice b/Submodules/MatterSlice index 183204caa..108fbbc8e 160000 --- a/Submodules/MatterSlice +++ b/Submodules/MatterSlice @@ -1 +1 @@ -Subproject commit 183204caa9035f392c3fb09f4ebbec01d0fb15c9 +Subproject commit 108fbbc8e6f757c089063114782d47ad6f03a70b diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index e2537da2f..1b04e552d 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit e2537da2f53c63843ce8349ed81bfffc87e9f214 +Subproject commit 1b04e552d6edc20c090431d02b9c6a9b1e2325bf diff --git a/Testing/ReleaseTests.cs b/Testing/ReleaseTests.cs deleted file mode 100644 index 7ca6114e5..000000000 --- a/Testing/ReleaseTests.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; - -namespace MatterHackers.MatterControl.Testing -{ - public static class ReleaseTests - { - public static void AssertDebugNotDefined() - { -#if DEBUG - throw new Exception("DEBUG is defined and should not be!"); -#endif - } - } -} \ No newline at end of file diff --git a/Testing/TestingDispatch.cs b/Testing/TestingDispatch.cs deleted file mode 100644 index c8cdeff1a..000000000 --- a/Testing/TestingDispatch.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.IO; - -namespace MatterHackers.MatterControl.Testing -{ - public class TestingDispatch - { - private bool hadErrors = false; - - public bool HadErrors { get { return hadErrors; } } - - private string errorLogFileName = null; - - public TestingDispatch() - { - string exePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); - errorLogFileName = Path.Combine(exePath, "ErrorLog.txt"); - string firstLine = string.Format("MatterControl Errors: {0:yyyy-MM-dd hh:mm:ss tt}", DateTime.Now); - using (StreamWriter file = new StreamWriter(errorLogFileName)) - { - file.WriteLine(firstLine); - } - } - - public void RunTests() - { - try { ReleaseTests.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.GCodeVisualizer.GCodeFile.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.Agg.Graphics2D.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.Agg.UI.SystemWindow.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { ClipperLib.Clipper.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.Csg.CSGTests.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.Agg.ImageProcessing.InvertLightness.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.Localizations.TranslationMap.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.MarchingSquares.MarchingSquaresByte.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.MatterControl.PluginSystem.MatterControlPlugin.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.MatterSlice.MatterSlice.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.MeshVisualizer.MeshViewerWidget.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - try { MatterHackers.RenderOpenGl.GLMeshTrianglePlugin.AssertDebugNotDefined(); } - catch (Exception e) { DumpException(e); } - - if (!HadErrors) - { - File.Delete(errorLogFileName); - } - } - - private void DumpException(Exception e) - { - hadErrors = true; - using (StreamWriter w = File.AppendText(errorLogFileName)) - { - w.WriteLine(e.Message); - w.Write(e.StackTrace); - w.WriteLine(); - } - } - } -} \ No newline at end of file diff --git a/Tests/MatterControl.Tests/MatterControl.Tests.csproj b/Tests/MatterControl.Tests/MatterControl.Tests.csproj new file mode 100644 index 000000000..e436ad7d4 --- /dev/null +++ b/Tests/MatterControl.Tests/MatterControl.Tests.csproj @@ -0,0 +1,114 @@ + + + + + Debug + AnyCPU + {E1455E5C-127C-4282-8CC5-452C300E91D0} + Library + Properties + MatterControl.Tests + MatterControl.Tests + v4.5 + 512 + ..\..\ + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.dll + False + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.interfaces.dll + False + + + ..\..\packages\NUnit.2.6.4\lib\nunit.framework.dll + True + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\nunit.util.dll + False + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\NUnit.VisualStudio.TestAdapter.dll + False + + + + + + + + + + + + + + + + + + {0b8d6f56-bd7f-4426-b858-d9292b084656} + MatterControl + + + {657dbc6d-c3ea-4398-a3fa-ddb73c14f71b} + Agg + + + {74f6bb6c-9d02-4512-a59a-21940e35c532} + Gui + + + {3e4aaba8-d85f-4922-88c6-5c1b2d2308fb} + PlatformAbstract + + + {670bddff-927b-425d-9dd1-22acb14356eb} + PlatformWin32 + + + {86f6aaf2-9b50-40b8-a427-1897d76471c5} + PolygonMesh + + + {d3e41b4e-bfbb-44ca-94c8-95c00f754fdd} + VectorMath + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/Tests/MatterControl.Tests/MatterControl/HtmlParser.cs b/Tests/MatterControl.Tests/MatterControl/HtmlParser.cs new file mode 100644 index 000000000..02b76faf3 --- /dev/null +++ b/Tests/MatterControl.Tests/MatterControl/HtmlParser.cs @@ -0,0 +1,117 @@ +/* +Copyright (c) 2014, Lars Brubaker +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. +*/ + +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using System.Reflection; + +namespace MatterHackers.MatterControl.HtmlParsing +{ + [TestFixture, Category("MatterControl.HtmlParsing")] + public class HtmlParserTests + { + + private static string[] HtmlParserSplitOnSpacesNotInQuotes(string methodParameter) + { + MethodInfo method = typeof(HtmlParser).GetMethod("SplitOnSpacesNotInQuotes", BindingFlags.Static | BindingFlags.NonPublic); + return method.Invoke(null, parameters: new object[] { methodParameter }) as string[]; + } + + [Test] + public static void TestSplitOnSpacesNotInQuotes() + { + { + string test1 = "one two three"; + string[] results = HtmlParserSplitOnSpacesNotInQuotes(test1); + Assert.IsTrue(results.Length == 3); + Assert.IsTrue(results[0] == "one"); + Assert.IsTrue(results[1] == "two"); + Assert.IsTrue(results[2] == "three"); + } + + { + string test1 = "one 'two three' four"; + string[] results = HtmlParserSplitOnSpacesNotInQuotes(test1); + Assert.IsTrue(results.Length == 3); + Assert.IsTrue(results[0] == "one"); + Assert.IsTrue(results[1] == "'two three'"); + Assert.IsTrue(results[2] == "four"); + } + + { + string test1 = "one 'two three''four' five"; + string[] results = HtmlParserSplitOnSpacesNotInQuotes(test1); + Assert.IsTrue(results.Length == 3); + Assert.IsTrue(results[0] == "one"); + Assert.IsTrue(results[1] == "'two three''four'"); + Assert.IsTrue(results[2] == "five"); + } + + { + string test1 = "one \"two three\" four"; + string[] results = HtmlParserSplitOnSpacesNotInQuotes(test1); + Assert.IsTrue(results.Length == 3); + Assert.IsTrue(results[0] == "one"); + Assert.IsTrue(results[1] == "\"two three\""); + Assert.IsTrue(results[2] == "four"); + } + + { + string test1 = "one \"'two' three\" four"; + string[] results = HtmlParserSplitOnSpacesNotInQuotes(test1); + Assert.IsTrue(results.Length == 3); + Assert.IsTrue(results[0] == "one"); + Assert.IsTrue(results[1] == "\"'two' three\""); + Assert.IsTrue(results[2] == "four"); + } + + { + string test1 = "one '\"two\" three' four"; + string[] results = HtmlParserSplitOnSpacesNotInQuotes(test1); + Assert.IsTrue(results.Length == 3); + Assert.IsTrue(results[0] == "one"); + Assert.IsTrue(results[1] == "'\"two\" three'"); + Assert.IsTrue(results[2] == "four"); + } + + { + string test1 = "\"White"; + string[] results = HtmlParserSplitOnSpacesNotInQuotes(test1); + Assert.IsTrue(results.Length == 5); + Assert.IsTrue(results[0] == ""); + } + } + } +} \ No newline at end of file diff --git a/Tests/MatterControl.Tests/MatterControl/ReleaseBuildTests.cs b/Tests/MatterControl.Tests/MatterControl/ReleaseBuildTests.cs new file mode 100644 index 000000000..28ce0bb30 --- /dev/null +++ b/Tests/MatterControl.Tests/MatterControl/ReleaseBuildTests.cs @@ -0,0 +1,72 @@ +using MatterHackers.MatterControl; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Reflection; +using System.Text; + +namespace MatterControl.Tests +{ + [TestFixture] + public class ReleaseBuildTests + { + private static Type debuggableAttribute = typeof(DebuggableAttribute); + + [Test, Category("ReleaseQuality")] + public void MatterControlAssemblyIsOptimized() + { +#if(!DEBUG) + IsAssemblyOptimized(Assembly.Load("MatterControl, Culture=neutral, PublicKeyToken=null")); +#endif + } + + [Test, Category("ReleaseQuality")] + public void MatterControlDependenciesAreOptimized() + { +#if(!DEBUG) + var matterControl = Assembly.Load("MatterControl, Culture=neutral, PublicKeyToken=null"); + + // Loop over all referenced assemblies to verify they are optimized and lack (symbols and Debug compile flag) + foreach(var assemblyName in matterControl.GetReferencedAssemblies()) + { + var assembly = Assembly.Load(assemblyName.FullName); + var firstNamespace = assembly.GetTypes().First().Namespace; + + // Only validate our assemblies + if (firstNamespace.Contains("MatterHackers") || firstNamespace.Contains("MatterControl")) + { + IsAssemblyOptimized(assembly); + } + } + + Console.WriteLine(string.Join("\r\n", matterControl.GetReferencedAssemblies().Select(a => a.Name).ToArray())); +#endif + } + + [Test, Category("ReleaseQuality")] + public void ClassicDebugComplicationFlagTests() + { +#if(!DEBUG) + MatterControlApplication.CheckKnownAssemblyConditionalCompSymbols(); +#endif + } + + private static void IsAssemblyOptimized(Assembly assm) + { + var matchedAttributes = assm.GetCustomAttributes(debuggableAttribute, false); + var assemblyName = assm.GetName(); + + if (matchedAttributes.Count() == 0) + { + Assert.Inconclusive("Symbols likely missing from Release build: " + assemblyName.FullName + ". \r\n\r\nTo resolve the issue, switch Project Properties -> Build -> Advanced -> Debug Info property to 'pdb-only'"); + } + + var debuggable = matchedAttributes.First() as DebuggableAttribute; + Assert.IsFalse(debuggable.IsJITOptimizerDisabled, "Referenced assembly is not optimized: " + assemblyName.Name); + Assert.IsFalse(debuggable.IsJITTrackingEnabled, "Referenced assembly is has symbols: " + assemblyName.Name); + Console.WriteLine("Assembly is optimized: " + assemblyName.Name); + } + } +} diff --git a/SlicerConfiguration/Slicing/Tests/SliceLayersTests.cs b/Tests/MatterControl.Tests/MatterControl/SliceLayersTests.cs similarity index 94% rename from SlicerConfiguration/Slicing/Tests/SliceLayersTests.cs rename to Tests/MatterControl.Tests/MatterControl/SliceLayersTests.cs index 31f471994..ccbfab626 100644 --- a/SlicerConfiguration/Slicing/Tests/SliceLayersTests.cs +++ b/Tests/MatterControl.Tests/MatterControl/SliceLayersTests.cs @@ -36,7 +36,7 @@ using System.IO; namespace MatterHackers.MatterControl.Slicing.Tests { - [TestFixture] + [TestFixture, Category("MatterControl.Slicing")] public class SliceLayersTests { [Test] @@ -48,7 +48,7 @@ namespace MatterHackers.MatterControl.Slicing.Tests return; } - string pathToMesh = Path.Combine("..", "..", "TestMeshes", "SliceLayers"); + string pathToMesh = Path.Combine("..", "..", "..", "TestData", "TestMeshes", "SliceLayers"); string meshFileName = Path.Combine(pathToMesh, "Box20x20x10.stl"); Mesh cubeMesh = StlProcessing.Load(meshFileName); diff --git a/Tests/MatterControl.Tests/Properties/AssemblyInfo.cs b/Tests/MatterControl.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..0eeff05fc --- /dev/null +++ b/Tests/MatterControl.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MatterControl.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("MatterHackers, Inc.")] +[assembly: AssemblyProduct("MatterControl.Tests")] +[assembly: AssemblyCopyright("2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("ecbee48f-eea8-4700-9635-6d8513f8ffcb")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Tests/MatterControl.Tests/packages.config b/Tests/MatterControl.Tests/packages.config new file mode 100644 index 000000000..1f8800b2c --- /dev/null +++ b/Tests/MatterControl.Tests/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TestMeshes/SliceLayers/Box20x20x10.stl b/Tests/TestData/TestMeshes/SliceLayers/Box20x20x10.stl similarity index 100% rename from TestMeshes/SliceLayers/Box20x20x10.stl rename to Tests/TestData/TestMeshes/SliceLayers/Box20x20x10.stl diff --git a/Tests/TestRunner/MatterControl.nunit b/Tests/TestRunner/MatterControl.nunit new file mode 100644 index 000000000..09af9b2a7 --- /dev/null +++ b/Tests/TestRunner/MatterControl.nunit @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Tests/TestRunner/TestRunner/Program.cs b/Tests/TestRunner/TestRunner/Program.cs new file mode 100644 index 000000000..ec37dfc5f --- /dev/null +++ b/Tests/TestRunner/TestRunner/Program.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Net; + +namespace TestRunner +{ + class Program + { + private const string outputFileName = "result.xml"; + + // Currently just running from the bin folder + private const string nunitPath = "NUnit-2.6.4"; + //private const string nunitPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "NUnit 2.6.3"); + + static void Main(string[] args) + { + Uri siteBaseUri = new Uri(args[0]); + + //SimulateZipPost(); + //return; + + if (File.Exists(outputFileName)) + { + File.Delete(outputFileName); + } + + string binPath = null; + + if (Directory.Exists(nunitPath)) + { + binPath = Path.Combine(nunitPath, "bin\\nunit-console-x86.exe"); + } + + // Run the unit tests + if (!string.IsNullOrWhiteSpace(binPath) && File.Exists(binPath)) + { + Process process = new Process(); + process.StartInfo.Arguments = string.Format( + "{0} /xml:{1} /noshadow:true", + Path.GetFullPath("../../../MatterControl.nunit"), + Path.GetFullPath(outputFileName)); + process.StartInfo.FileName = binPath; + process.StartInfo.UseShellExecute = true; + process.Start(); + + process.WaitForExit(); + } + + // Post the results + if (File.Exists(outputFileName)) + { + var uri = new Uri(siteBaseUri, "testresults/create/"); + + // Post the file to the server + var client = new WebClient(); + var bytes = client.UploadFile(uri, outputFileName); + + string reportID = UTF8Encoding.UTF8.GetString(bytes); + + // Launch the results + Process.Start(new Uri(siteBaseUri, "testresults/details/" + reportID).AbsoluteUri); + } + } + + private static void SimulateZipPost(Uri baseUri) + { + var uri = new Uri(baseUri, "testresults/createfromzip/"); + + // Post the file to the server + var client = new WebClient(); + var bytes = client.UploadFile(uri, @"E:\sources\websites\matterdata\TestResult4.zip"); + + string reportID = System.Text.UTF8Encoding.UTF8.GetString(bytes); + } + } +} diff --git a/Tests/TestRunner/TestRunner/Properties/AssemblyInfo.cs b/Tests/TestRunner/TestRunner/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..0b46526fb --- /dev/null +++ b/Tests/TestRunner/TestRunner/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TestRunner")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TestRunner")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("053add9e-15c5-4ca2-8669-88889e28ef32")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Tests/TestRunner/TestRunner/TestRunner.csproj b/Tests/TestRunner/TestRunner/TestRunner.csproj new file mode 100644 index 000000000..e87787fb2 --- /dev/null +++ b/Tests/TestRunner/TestRunner/TestRunner.csproj @@ -0,0 +1,55 @@ + + + + + Debug + AnyCPU + {33677C3F-145C-476B-A882-2A44179CDECB} + Exe + Properties + TestRunner + TestRunner + v4.0 + 512 + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tests/TestRunner/TestRunner/TestRunner.sln b/Tests/TestRunner/TestRunner/TestRunner.sln new file mode 100644 index 000000000..9ac51c74e --- /dev/null +++ b/Tests/TestRunner/TestRunner/TestRunner.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestRunner", "TestRunner.csproj", "{33677C3F-145C-476B-A882-2A44179CDECB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {33677C3F-145C-476B-A882-2A44179CDECB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {33677C3F-145C-476B-A882-2A44179CDECB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {33677C3F-145C-476B-A882-2A44179CDECB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {33677C3F-145C-476B-A882-2A44179CDECB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal