private void DrawOptionsForAfterPeriodOfTime(AssertionComponent script)
        {
            EditorGUILayout.Space();
            script.checkAfterTime = EditorGUILayout.FloatField(guiCheckAfterTimeGuiContent,
                                                               script.checkAfterTime);

            if (script.checkAfterTime < 0)
            {
                script.checkAfterTime = 0;
            }

            script.repeatCheckTime = EditorGUILayout.Toggle(guiRepeatCheckTimeGuiContent,
                                                            script.repeatCheckTime);

            if (script.repeatCheckTime)
            {
                script.repeatEveryTime = EditorGUILayout.FloatField(guiRepeatEveryTimeGuiContent,
                                                                    script.repeatEveryTime);

                if (script.repeatEveryTime < 0)
                {
                    script.repeatEveryTime = 0;
                }
            }
        }
        private bool DrawComparerSelection(AssertionComponent script)
        {
            if (allComparersList == null)
            {
                allComparersList = new List <Type>();
                var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
                foreach (var assembly in allAssemblies)
                {
                    var types = assembly.GetTypes();
                    allComparersList.AddRange(types.Where(type => type.IsSubclassOf(typeof(ActionBase)) && !type.IsAbstract));
                }
            }
            var allComparers = allComparersList.ToArray();

            if (script.Action == null)
            {
                script.Action = (ActionBase)CreateInstance(allComparers.First());
            }

            m_ComparerDropDown.Draw(script.Action.GetType(), allComparers,
                                    type =>
            {
                if (script.Action == null || script.Action.GetType().Name != type.Name)
                {
                    script.Action = (ActionBase)CreateInstance(type);
                    AssertionExplorerWindow.Reload();
                }
            });

            return(script.Action != null);
        }
        private void DrawOptionsForOnUpdate(AssertionComponent script)
        {
            EditorGUILayout.Space();
            script.checkAfterFrames = EditorGUILayout.IntField(guiCheckAfterFramesGuiContent,
                                                               script.checkAfterFrames);

            if (script.checkAfterFrames < 1)
            {
                script.checkAfterFrames = 1;
            }

            script.repeatCheckFrame = EditorGUILayout.Toggle(guiRepeatCheckFrameGuiContent,
                                                             script.repeatCheckFrame);

            if (script.repeatCheckFrame)
            {
                script.repeatEveryFrame = EditorGUILayout.IntField(guiRepeatEveryTimeGuiContent,
                                                                   script.repeatEveryFrame);

                if (script.repeatEveryFrame < 1)
                {
                    script.repeatEveryFrame = 1;
                }
            }
        }
예제 #4
0
        private static T CreateAssertionComponent <T>(out IAssertionComponentConfigurator configurator, CheckMethod checkOnMethods, GameObject gameObject, string propertyPath) where T : ActionBase
        {
            AssertionComponent assertionComponent = gameObject.AddComponent <AssertionComponent>();

            assertionComponent.checkMethods = checkOnMethods;
            T result = (T)(assertionComponent.Action = ScriptableObject.CreateInstance <T>());

            assertionComponent.Action.go = gameObject;
            assertionComponent.Action.thisPropertyPath = propertyPath;
            configurator = assertionComponent;
            StackTrace stackTrace = new StackTrace(fNeedFileInfo: true);
            string     fileName   = stackTrace.GetFrame(0).GetFileName();

            for (int i = 1; i < stackTrace.FrameCount; i++)
            {
                StackFrame frame = stackTrace.GetFrame(i);
                if (frame.GetFileName() != fileName)
                {
                    string text = (assertionComponent.m_CreatedInFilePath = frame.GetFileName().Substring(Application.dataPath.Length - "Assets".Length));
                    assertionComponent.m_CreatedInFileLine = frame.GetFileLineNumber();
                    break;
                }
            }
            return(result);
        }
        protected virtual void PrintFoldedAssertionLine(AssertionComponent assertionComponent)
        {
            EditorGUILayout.BeginHorizontal();

            EditorGUILayout.BeginVertical(GUILayout.MaxWidth(300));
            EditorGUILayout.BeginHorizontal(GUILayout.MaxWidth(300));
            PrintPath(assertionComponent.Action.go,
                      assertionComponent.Action.thisPropertyPath);
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();

            EditorGUILayout.BeginVertical(GUILayout.MaxWidth(250));
            var labelStr = assertionComponent.Action.GetType().Name;
            var labelStr2 = assertionComponent.Action.GetConfigurationDescription();
            if (labelStr2 != "")
                labelStr += "( " + labelStr2 + ")";
            EditorGUILayout.LabelField(labelStr);
            EditorGUILayout.EndVertical();

            if (assertionComponent.Action is ComparerBase)
            {
                var comparer = assertionComponent.Action as ComparerBase;

                var otherStrVal = "(no value selected)";
                EditorGUILayout.BeginVertical();
                EditorGUILayout.BeginHorizontal(GUILayout.MaxWidth(300));
                switch (comparer.compareToType)
                {
                    case ComparerBase.CompareToType.CompareToObject:
                        if (comparer.other != null)
                        {
                            PrintPath(comparer.other,
                                      comparer.otherPropertyPath);
                        }
                        else
                        {
                            EditorGUILayout.LabelField(otherStrVal,
                                                       Styles.redLabel);
                        }
                        break;
                    case ComparerBase.CompareToType.CompareToConstantValue:
                        otherStrVal = comparer.ConstValue.ToString();
                        EditorGUILayout.LabelField(otherStrVal);
                        break;
                    case ComparerBase.CompareToType.CompareToNull:
                        otherStrVal = "null";
                        EditorGUILayout.LabelField(otherStrVal);
                        break;
                }
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.EndVertical();
            }
            else
            {
                EditorGUILayout.LabelField("");
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();
        }
예제 #6
0
        public static Type GetSecondArgumentType(this AssertionComponent assertion)
        {
            Type secondArgument = null;

            if (assertion.Action is ComparerBase)
            {
                secondArgument = (assertion.Action as ComparerBase).GetSecondParameterType();
            }
            return(secondArgument);
        }
 private void DrawCustomFields(AssertionComponent script)
 {
     foreach (var prop in script.Action.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly))
     {
         var so = new SerializedObject(script.Action);
         var sp = so.FindProperty(prop.Name);
         if (sp != null)
         {
             EditorGUILayout.PropertyField(sp, true);
             so.ApplyModifiedProperties();
         }
     }
 }
예제 #8
0
        public static void CheckAssertions(AssertionComponent[] assertions) {
            if (!Debug.isDebugBuild)
            { return; }

            foreach(var assertion in assertions) {
                assertion.checksPerformed++;
                var result = assertion.Action.Compare();

                if (!result) {
                    assertion.hasFailed = true;
                    assertion.Action.Fail(assertion);
                }
            }
        }
예제 #9
0
		public static void CheckAssertions (AssertionComponent[] assertions)
		{
			if (!Debug.isDebugBuild)
				return;
			foreach (var assertion in assertions)
			{
				assertion.checksPerformed++;
				var result = assertion.Action.Compare ();
				if (!result)
				{
					assertion.hasFailed = true;
					Debug.LogException (new AssertionException (assertion), assertion);
				}
			}
		}
		private void DrawOptionsForAfterPeriodOfTime (AssertionComponent script)
		{
			EditorGUILayout.Space ();
			script.checkAfterTime = EditorGUILayout.FloatField (guiCheckAfterTimeGuiContent,
																script.checkAfterTime);
			if (script.checkAfterTime < 0)
				script.checkAfterTime = 0;
			script.repeatCheckTime = EditorGUILayout.Toggle (guiRepeatCheckTimeGuiContent,
															script.repeatCheckTime);
			if (script.repeatCheckTime)
			{
				script.repeatEveryTime = EditorGUILayout.FloatField (guiRepeatEveryTimeGuiContent,
																	script.repeatEveryTime);
				if (script.repeatEveryTime < 0)
					script.repeatEveryTime = 0;
			}
		}
예제 #11
0
        public static void CheckAssertions(AssertionComponent[] assertions)
        {
            if (!Debug.isDebugBuild)
                return;

            for (int i = 0; i < assertions.Length; ++i)
            {
                var assertion = assertions[i];
                assertion.checksPerformed++;
                var result = assertion.Action.Compare();

                if (!result)
                {
                    assertion.hasFailed = true;
                    assertion.Action.Fail(assertion);
                }
            }
        }
예제 #12
0
        protected virtual void PrintAssertionLineDetails(AssertionComponent assertionComponent)
        {
            EditorGUILayout.BeginHorizontal();


            EditorGUILayout.BeginVertical(GUILayout.MaxWidth(320));
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Attached to",
                                       GUILayout.Width(70));
            var sss = EditorStyles.objectField.CalcSize(new GUIContent(assertionComponent.gameObject.name));

            EditorGUILayout.ObjectField(assertionComponent.gameObject,
                                        typeof(GameObject),
                                        true,
                                        GUILayout.Width(sss.x));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();


            EditorGUILayout.BeginVertical(GUILayout.MaxWidth(250));

#if UNITY_2017_3_OR_NEWER
            EditorGUILayout.EnumFlagsField(assertionComponent.checkMethods,
                                           EditorStyles.popup,
                                           GUILayout.MaxWidth(150));
#else
            EditorGUILayout.EnumMaskField(assertionComponent.checkMethods,
                                          EditorStyles.popup,
                                          GUILayout.MaxWidth(150));
#endif
            EditorGUILayout.EndVertical();


            EditorGUILayout.BeginVertical();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Disabled",
                                       GUILayout.Width(55));
            assertionComponent.enabled = !EditorGUILayout.Toggle(!assertionComponent.enabled,
                                                                 GUILayout.Width(15));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();

            EditorGUILayout.EndHorizontal();
        }
예제 #13
0
        private void OnComponentCopy()
        {
            if (m_ActionBase == null)
            {
                return;
            }
            IEnumerable <UnityEngine.Object> source = from o in Resources.FindObjectsOfTypeAll(typeof(AssertionComponent))
                                                      where ((AssertionComponent)o).m_ActionBase == m_ActionBase && o != this
                                                      select o;

            if (source.Any())
            {
                if (source.Count() > 1)
                {
                    UnityEngine.Debug.LogWarning("More than one refence to comparer found. This shouldn't happen");
                }
                AssertionComponent assertionComponent = source.First() as AssertionComponent;
                m_ActionBase = assertionComponent.m_ActionBase.CreateCopy(assertionComponent.gameObject, base.gameObject);
            }
        }
예제 #14
0
		public static void CheckAssertions (AssertionComponent[] assertions)
		{
			if (!Debug.isDebugBuild)
				return;

			foreach (var assertion in assertions)
			{
				assertion.checksPerformed++;
				var result = assertion.Action.Compare ();
				if (!result)
				{
					assertion.hasFailed = true;
					string message = "";
					if (assertion.Action is ComparerBase)
					{ //needs different message for different comapre to type.
						var comparer = assertion.Action as ComparerBase;
						message = assertion.name + " assertion failed.\n(" + assertion.Action.go + ")." + assertion.Action.thisPropertyPath + " "
							+ comparer.compareToType;

						switch (comparer.compareToType)
						{
								case ComparerBase.CompareToType.CompareToObject:
									message +=" (" + comparer.other + ")." + comparer.otherPropertyPath + " failed.";
									break;
								case ComparerBase.CompareToType.CompareToConstantValue:
									message += comparer.ConstValue + " failed.";
									break;
								case ComparerBase.CompareToType.CompareToNull:
									message += " failed.";
									break;
						}
					}
					else
					{
						message = assertion.name + " assertion failed.\n(" + assertion.Action.go + ")." + assertion.Action.thisPropertyPath + " failed.";
					}

					Debug.LogException (new AssertionException (message), assertion);
				}
			}
		}
예제 #15
0
        private bool DrawComparerSelection(AssertionComponent script)
        {
            var types        = typeof(ActionBase).Assembly.GetTypes();
            var allComparers = types.Where(type => type.IsSubclassOf(typeof(ActionBase)) && !type.IsAbstract).ToArray();

            if (script.Action == null)
            {
                script.Action = (ActionBase)CreateInstance(allComparers.First());
            }

            comparerDropDown.Draw(script.Action.GetType(), allComparers,
                                  type => {
                if (script.Action == null || script.Action.GetType().Name != type.Name)
                {
                    script.Action = (ActionBase)CreateInstance(type);
                    AssertionExplorerWindow.Reload();
                }
            });

            return(script.Action != null);
        }
		private void DrawOptionsForOnUpdate (AssertionComponent script)
		{
			EditorGUILayout.Space ();
			script.checkAfterFrames = EditorGUILayout.IntField (guiCheckAfterFramesGuiContent,
																script.checkAfterFrames);
			if (script.checkAfterFrames < 1)
				script.checkAfterFrames = 1;
			script.repeatCheckFrame = EditorGUILayout.Toggle (guiRepeatCheckFrameGuiContent,
															script.repeatCheckFrame);
			if (script.repeatCheckFrame)
			{
				script.repeatEveryFrame = EditorGUILayout.IntField (guiRepeatEveryTimeGuiContent,
																	script.repeatEveryFrame);
				if (script.repeatEveryFrame < 1)
					script.repeatEveryFrame = 1;
			}
		}
예제 #17
0
 public virtual void Fail(AssertionComponent assertion)
 {
     Debug.LogException(new AssertionException(assertion), assertion.GetFailureReferenceObject());
 }
예제 #18
0
 public virtual void Fail(AssertionComponent assertion)
 {
     Debug.LogException(new AssertionException(assertion), assertion);
 }
예제 #19
0
 public AssertionException(AssertionComponent assertion) : base(assertion.Action.GetFailureMessage())
 {
     m_Assertion = assertion;
 }
예제 #20
0
        private bool DrawComparerSelection(AssertionComponent script)
        {
            if(allComparersList == null)
            {
                allComparersList = new List<Type>();
                var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
                foreach (var assembly in allAssemblies)
                {
                    var types = assembly.GetTypes();
                    allComparersList.AddRange(types.Where(type => type.IsSubclassOf(typeof(ActionBase)) && !type.IsAbstract));
                }
            }
            var allComparers = allComparersList.ToArray();

            if (script.Action == null)
                script.Action = (ActionBase)CreateInstance(allComparers.First());

            m_ComparerDropDown.Draw(script.Action.GetType(), allComparers,
                                    type =>
                                    {
                                        if (script.Action == null || script.Action.GetType().Name != type.Name)
                                        {
                                            script.Action = (ActionBase)CreateInstance(type);
                                            AssertionExplorerWindow.Reload();
                                        }
                                    });

            return script.Action != null;
        }
예제 #21
0
 public static void CheckAssertions(AssertionComponent assertion)
 {
     CheckAssertions(new[] {assertion});
 }
예제 #22
0
 public static Type GetFirstArgumentType(this AssertionComponent assertion)
 {
     return(assertion.Action.GetParameterType());
 }
예제 #23
0
 public static void CheckAssertions(AssertionComponent assertion)
 {
     CheckAssertions(new AssertionComponent[1] {
         assertion
     });
 }
예제 #24
0
 public AssertionException(AssertionComponent assertion) : base(assertion.Action.GetFailureMessage())
 {
     m_Assertion = assertion;
 }
		private bool DrawComparerSelection (AssertionComponent script)
		{
			var types = typeof(ActionBase).Assembly.GetTypes();
			var allComparers = types.Where(type => type.IsSubclassOf(typeof(ActionBase)) && !type.IsAbstract).ToArray();

			if (script.Action == null)
				script.Action = (ActionBase)CreateInstance(allComparers.First());

			comparerDropDown.Draw(script.Action.GetType (), allComparers,
								type =>
								{
									if (script.Action == null || script.Action.GetType().Name != type.Name)
									{
										script.Action = (ActionBase)CreateInstance(type);
										AssertionExplorerWindow.Reload ();
									}
								});

			return script.Action != null;
		}
		private void DrawCustomFields (AssertionComponent script)
		{
			foreach (var prop in script.Action.GetType ().GetFields (BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly))
			{
				var so = new SerializedObject(script.Action);
				var sp = so.FindProperty(prop.Name);
				if (sp != null)
 				{
					EditorGUILayout.PropertyField (sp, true);
					so.ApplyModifiedProperties ();
 				}
			}
		}
예제 #27
0
 public static void CheckAssertions(AssertionComponent assertion)
 {
     AssertionComponent[] assertions = new AssertionComponent[] { assertion };
     CheckAssertions(assertions);
 }