ソースを参照

Run editor unit tests after project load to allow for more complex tests

BearishSun 10 年 前
コミット
78d0790de5

+ 19 - 0
MBansheeEditor/EditorApplication.cs

@@ -134,6 +134,7 @@ namespace BansheeEditor
         private static FolderMonitor monitor;
         private static FolderMonitor monitor;
         private static HashSet<string> dirtyResources = new HashSet<string>();
         private static HashSet<string> dirtyResources = new HashSet<string>();
         private static bool sceneDirty;
         private static bool sceneDirty;
+        private static bool unitTestsExecuted;
 
 
         /// <summary>
         /// <summary>
         /// Constructs a new editor application. Called at editor start-up by the runtime.
         /// Constructs a new editor application. Called at editor start-up by the runtime.
@@ -424,6 +425,11 @@ namespace BansheeEditor
         private static void OnProjectLoaded()
         private static void OnProjectLoaded()
         {
         {
             SetStatusProject(false);
             SetStatusProject(false);
+            if (!unitTestsExecuted)
+            {
+                RunUnitTests();
+                unitTestsExecuted = true;
+            }
 
 
             if (!IsProjectLoaded)
             if (!IsProjectLoaded)
             {
             {
@@ -548,6 +554,16 @@ namespace BansheeEditor
             return sceneDirty;
             return sceneDirty;
         }
         }
 
 
+        /// <summary>
+        /// Executes any editor-specific unit tests. This should be called after a project is loaded if possible.
+        /// </summary>
+        private static void RunUnitTests()
+        {
+#if DEBUG
+            Internal_RunUnitTests();
+#endif
+        }
+
         [MethodImpl(MethodImplOptions.InternalCall)]
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern void Internal_SetStatusScene(string name, bool modified);
         private static extern void Internal_SetStatusScene(string name, bool modified);
 
 
@@ -607,5 +623,8 @@ namespace BansheeEditor
 
 
         [MethodImpl(MethodImplOptions.InternalCall)]
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern void Internal_OpenExternally(string path);
         private static extern void Internal_OpenExternally(string path);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_RunUnitTests();
     }
     }
 }
 }

+ 1 - 0
SBansheeEditor/Include/BsScriptEditorApplication.h

@@ -47,6 +47,7 @@ namespace BansheeEngine
 		static void internal_UnloadProject();
 		static void internal_UnloadProject();
 		static void internal_CreateProject(MonoString* path);
 		static void internal_CreateProject(MonoString* path);
 		static void internal_OpenExternally(MonoString* path);
 		static void internal_OpenExternally(MonoString* path);
+		static void internal_RunUnitTests();
 
 
 		typedef void(__stdcall *OnProjectLoadedThunkDef)(MonoException**);
 		typedef void(__stdcall *OnProjectLoadedThunkDef)(MonoException**);
 
 

+ 0 - 9
SBansheeEditor/Source/BsEditorScriptManager.cpp

@@ -13,12 +13,10 @@
 #include "BsMenuItemManager.h"
 #include "BsMenuItemManager.h"
 #include "BsToolbarItemManager.h"
 #include "BsToolbarItemManager.h"
 #include "BsScriptFolderMonitor.h"
 #include "BsScriptFolderMonitor.h"
-#include "BsScriptEditorTestSuite.h"
 #include "BsTime.h"
 #include "BsTime.h"
 #include "BsMath.h"
 #include "BsMath.h"
 #include "BsEditorApplication.h"
 #include "BsEditorApplication.h"
 #include "BsScriptSelection.h"
 #include "BsScriptSelection.h"
-#include "BsTestOutput.h"
 #include "BsEditorResourceLoader.h"
 #include "BsEditorResourceLoader.h"
 #include "BsScriptManager.h"
 #include "BsScriptManager.h"
 #include "BsScriptEditorApplication.h"
 #include "BsScriptEditorApplication.h"
@@ -59,13 +57,6 @@ namespace BansheeEngine
 		// Initial update
 		// Initial update
 		mLastUpdateTime = gTime().getTime();
 		mLastUpdateTime = gTime().getTime();
 		mUpdateMethod->invoke(nullptr, nullptr);
 		mUpdateMethod->invoke(nullptr, nullptr);
-
-		// Run tests
-#if BS_DEBUG_MODE
-		TestSuitePtr testSuite = TestSuite::create<ScriptEditorTestSuite>();
-		ExceptionTestOutput testOutput;
-		testSuite->run(testOutput);
-#endif
 	}
 	}
 
 
 	EditorScriptManager::~EditorScriptManager()
 	EditorScriptManager::~EditorScriptManager()

+ 12 - 0
SBansheeEditor/Source/BsScriptEditorApplication.cpp

@@ -12,6 +12,8 @@
 #include "BsEditorWindowManager.h"
 #include "BsEditorWindowManager.h"
 #include "BsMainEditorWindow.h"
 #include "BsMainEditorWindow.h"
 #include "BsGUIStatusBar.h"
 #include "BsGUIStatusBar.h"
+#include "BsScriptEditorTestSuite.h"
+#include "BsTestOutput.h"
 #include "BsPlatform.h"
 #include "BsPlatform.h"
 #include "BsResources.h"
 #include "BsResources.h"
 #include "BsScriptEditorWindow.h"
 #include "BsScriptEditorWindow.h"
@@ -54,6 +56,7 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_UnloadProject", &ScriptEditorApplication::internal_UnloadProject);
 		metaData.scriptClass->addInternalCall("Internal_UnloadProject", &ScriptEditorApplication::internal_UnloadProject);
 		metaData.scriptClass->addInternalCall("Internal_CreateProject", &ScriptEditorApplication::internal_CreateProject);
 		metaData.scriptClass->addInternalCall("Internal_CreateProject", &ScriptEditorApplication::internal_CreateProject);
 		metaData.scriptClass->addInternalCall("Internal_OpenExternally", &ScriptEditorApplication::internal_OpenExternally);
 		metaData.scriptClass->addInternalCall("Internal_OpenExternally", &ScriptEditorApplication::internal_OpenExternally);
+		metaData.scriptClass->addInternalCall("Internal_RunUnitTests", &ScriptEditorApplication::internal_RunUnitTests);
 
 
 		onProjectLoadedThunk = (OnProjectLoadedThunkDef)metaData.scriptClass->getMethod("OnProjectLoaded")->getThunk();
 		onProjectLoadedThunk = (OnProjectLoadedThunkDef)metaData.scriptClass->getMethod("OnProjectLoaded")->getThunk();
 	}
 	}
@@ -224,4 +227,13 @@ namespace BansheeEngine
 
 
 		PlatformUtility::open(nativePath);
 		PlatformUtility::open(nativePath);
 	}
 	}
+
+	void ScriptEditorApplication::internal_RunUnitTests()
+	{
+#if BS_DEBUG_MODE
+		TestSuitePtr testSuite = TestSuite::create<ScriptEditorTestSuite>();
+		ExceptionTestOutput testOutput;
+		testSuite->run(testOutput);
+#endif
+	}
 }
 }