Пример #1
0
        public static T Evaluate <T>(this object instance, string method, string expression)
        {
            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }

            if (method == null)
            {
                throw new ArgumentNullException(nameof(method));
            }

            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }

            var expr = Expression <T> .Create(method,
                                              ExpressionTest <T> .CreateWithExpression(expression));

            expr.ExpressionTest.Target.Type    = instance.GetType();
            expr.ExpressionTest.TargetInstance = instance;

            throw new InvalidOperationException($"[{expression}] is Invalid!");
        }
Пример #2
0
 public void TestMethod_GetMessage_WrongFieldName()
 {
     Assert.Throws <FieldNotFoundException>(
         () =>
         ExpressionTest <Dummy>
         .CreateMethodExpression(nameof(Dummy.GetMessage), typeof(Dummy).GetFieldValue(WrongFieldName))
         .TestAndVerify());
 }
Пример #3
0
        public void TestMethod_CharAt1()
        {
            var classInfo = ClassInfo <Dummy> .Create(new Dictionary <string, dynamic>
            {
                { MessageField, "012345789" }
            });

            ExpressionTest <Dummy> .CreateMethodExpression(nameof(Dummy.CharAt1), classInfo, "_message[1] == '1'").TestAndVerify();
        }
Пример #4
0
        public void TestMethod_GetMessage_WithUserDefinedFields()
        {
            var classInfo = ClassInfo <Dummy> .Create(new Dictionary <string, object>
            {
                { MessageField, "CustomMessage" }
            });

            ExpressionTest <Dummy> .CreateTest(MessageField, classInfo, "CustomMessage").TestAndVerify();
        }
Пример #5
0
        internal static object[] GetParentExpressionValue <T>(this ExpressionTest <T> expressionTest)
        {
            if (expressionTest.Expressions == null)
            {
                return(new[] { expressionTest.TargetInstance });
            }

            var parentExpressions = new object[expressionTest.Expressions.Length];

            for (var i = 0; i < expressionTest.Expressions.Length; i++)
            {
                var expression = expressionTest.Expressions[i];
                expression = Regex.Replace(expression, "\\[", ".[");
                expression = expression.Replace("this.", "");
                var members = expression.Split('.');

                for (var index = 0; index < members.Length; index++)
                {
                    var member = Regex.Replace(members[index], "\\(\\)", "");
                    if (parentExpressions[i] == null)
                    {
                        parentExpressions[i] = expressionTest.TargetInstance;
                    }

                    var parentExpressionClass = parentExpressions[i] == null
                        ? expressionTest.Target.Type
                        : parentExpressions[i].GetType();
                    var fieldInfo      = parentExpressionClass.FindFieldByName(member);
                    var propertyGetter = TypeUtility.FindPropertyByName(parentExpressionClass, member);
                    var method         = parentExpressionClass.FindMethodByName(member);

                    if (fieldInfo == null && propertyGetter == null && method == null)
                    {
                        if (parentExpressionClass.IsACollection())
                        {
                            try
                            {
                                parentExpressions[i] = ExpressionEvaluator.GetValue(parentExpressions[i], members[index]);
                            }
                            catch (Exception)
                            {
                                parentExpressions[i] = TypeUtility.GetFirstObjectFromCollection(parentExpressions[i]);
                                index--;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }

                    parentExpressions[i] = SetParentExpressionValue(fieldInfo, propertyGetter, method,
                                                                    parentExpressions[i]);
                }
            }
            return(parentExpressions);
        }
Пример #6
0
        public void TestMethod_AddLongItems()
        {
            ExpressionTest <Dummy> .CreateTest(nameof(Dummy.AddLongItems), "_longList.Count", 50).TestAndVerify();

            TypeUtility.InitializeInstanceCollectionFields = false;

            ExpressionTest <Dummy> .CreateTest(nameof(Dummy.AddLongItems), "_longList.Count", 25).TestAndVerify();

            TypeUtility.InitializeInstanceCollectionFields = true;
        }
Пример #7
0
        public void TestMethod_AddItem()
        {
            ExpressionTest <Dummy> .CreateTest(nameof(Dummy.AddItem), "_classList.Count", 26).TestAndVerify();

            TypeUtility.InitializeInstanceCollectionFields = false;

            ExpressionTest <Dummy> .CreateTest(nameof(Dummy.AddItem), "_classList.Count", 1).TestAndVerify();

            TypeUtility.InitializeInstanceCollectionFields = true;
        }
Пример #8
0
        public void TestMethods_UsingExpressions()
        {
            var methods = new List <Expression <Dummy> >
            {
                Expression <Dummy> .Create(nameof(GetType), ExpressionTest <Dummy> .CreateTest("Name", "Dummy")),
                Expression <Dummy> .Create(nameof(GetType), ExpressionTest <Dummy> .CreateTest("GetFields[0].Name", "DummyClassType"))
            };

            _tester.TestAndVerifyMethods(methods);
        }
Пример #9
0
        public void TestMethod_ReturnMessage()
        {
            // Arrange
            var methods = new List <Expression <Dummy> >
            {
                Expression <Dummy>
                .Create(nameof(Dummy.ReturnMessage), new object[] { "ExpressionTest-1", "ExpressionTest-2" },
                        ExpressionTest <Dummy> .CreateTest("ExpressionTest-1 ExpressionTest-2"))
            };

            // Assert
            _tester.TestAndVerifyMethods(methods);
        }
Пример #10
0
        public void TestMethod_GetMessage()
        {
            // Solution 1
            ExpressionTest <Dummy>
            .CreateMethodExpression(nameof(Dummy.GetMessage), typeof(Dummy).GetFieldValue(MessageField))
            .TestAndVerify();

            // Solution 2
            // Arrange
            var dummy = typeof(Dummy)
                        .CreateInstance() as Dummy;
            // Act
            var message = dummy?.GetMessage();

            // Assert
            message.ShouldBe(dummy.Evaluate <string>(MessageField));
        }
Пример #11
0
        public void TestMethod_GetSquareRoot()
        {
            const double expectedOutput = 25.9422435421457;

            // Solution 1
            ExpressionTest <Dummy> .CreateTest(SquareRootMethod, expectedOutput).TestAndVerify();

            // Solution 2
            // Arrange
            var dummy = new Dummy();

            // Act
            var result = dummy.Evaluate <double>(SquareRootMethod);

            // Assert
            result.ShouldBe(expectedOutput);
        }
Пример #12
0
        public void TestMethod_GetException()
        {
            const string outputExpression = "_exception";

            // Solution 1
            ExpressionTest <Dummy> .CreateWithOutputExpression(nameof(Dummy.GetException), outputExpression).TestAndVerify();

            // Solution 2
            // Arrange
            var dummy = new Dummy();

            // Act
            var exception = dummy.GetException();

            // Assert
            exception.ShouldBe(dummy.Evaluate <Exception>(outputExpression));
        }
Пример #13
0
    //Let's not get too fancy and over engineer this. Just run through some prebaked test cases and compare them to expected results
    //Rolling my own unit testing framework will just distract me.

    //Basic test driver is a good exercise. Not full fledged by any measure.

    //Alright, we'll make test objects that run themselves and passback result objs.
    public static void Main(string[] args)
    {
        Console.WriteLine("Expression Test");
        TestCase          test = new ExpressionTest();
        List <TestResult> res  = test.run();
        bool testResult        = true;

        foreach (TestResult result in res)
        {
            Console.WriteLine(result.printResult());
            if (!result.getPass())
            {
                testResult = false;
            }
        }
        Console.WriteLine(testResult);
        Console.WriteLine();

        Console.WriteLine("Parser Test");
        test = new ParserTest();
        res  = test.run();
        foreach (TestResult result in res)
        {
            Console.WriteLine(result.printResult());
            if (!result.getPass())
            {
                testResult = false;
            }
        }
        Console.WriteLine(testResult);
        Console.WriteLine();

        Console.WriteLine("Interface Test");
        test = new InterfaceTest();
        res  = test.run();
        foreach (TestResult result in res)
        {
            Console.WriteLine(result.printResult());
            if (!result.getPass())
            {
                testResult = false;
            }
        }
        Console.WriteLine(testResult);
        Console.WriteLine();
    }
Пример #14
0
        public void TestMethod_SetMessage()
        {
            var testMessage = "test-message";
            var expression  = MessageField;

            // Solution 1
            ExpressionTest <Dummy> .CreateWithOutputExpression(nameof(Dummy.SetMessage), expression, "@p0 + @p0").TestAndVerify();

            // Solution 2
            // Arrange
            var dummy = new Dummy();

            // Act
            dummy.SetMessage(testMessage);

            // Assert
            dummy.Evaluate <string>(expression)
            .ShouldBe(testMessage + testMessage);
        }
Пример #15
0
        public static T Evaluate <T>(this object instance, string expression)
        {
            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }

            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }

            var expressionTest = ExpressionTest <T> .CreateWithExpression(expression);

            expressionTest.TargetInstance = instance;
            expressionTest.Target.Type    = instance.GetType();
            expressionTest.Test();

            return((T)expressionTest.ActualOutputs.First());
        }
Пример #16
0
 internal static void SetTestActualOutput <T>(this ExpressionTest <T> expressionTest, object[] expressionValues)
 {
     for (var i = 0; i < expressionValues.Length; i++)
     {
         try
         {
             if (
                 SerializeUtility.Serialize(expressionTest.ExpectedOutputs[i])
                 .Equals(SerializeUtility.Serialize(Enum.Enum.Instance.NotNull)) &&
                 expressionValues[i] != null)
             {
                 expressionTest.ActualOutputs[i] = Enum.Enum.Instance.NotNull;
             }
             else if (
                 SerializeUtility.Serialize(expressionTest.ExpectedOutputs[i])
                 .Equals(SerializeUtility.Serialize(Enum.Enum.Instance.Null)) && expressionValues[i] == null)
             {
                 expressionTest.ActualOutputs[i] = Enum.Enum.Instance.Null;
             }
             else if (expressionValues[i] != null && expressionValues[i] is Type)
             {
                 expressionTest.ActualOutputs[i] = ((Type)expressionValues[i]).FullName;
             }
             else
             {
                 expressionTest.ActualOutputs[i] = expressionValues[i];
             }
         }
         catch (Exception e)
         {
             if (e.InnerException != null)
             {
                 expressionTest.ActualOutputs[i] = e.InnerException.GetType().FullName;
             }
             else
             {
                 expressionTest.ActualOutputs[i] = e.GetType().FullName;
             }
         }
     }
 }
Пример #17
0
 public void TestMethod_ReturnMessage_WithWrongExpectedOutput()
 {
     Assert.Throws <NoMatchedException>(
         () => ExpressionTest <Dummy> .CreateMethodExpression(nameof(Dummy.ReturnMessage), "Wrong Expected Output").TestAndVerify());
 }
Пример #18
0
 public void TestMethod_NotEqual()
 {
     ExpressionTest <Dummy> .CreateWithOutputExpression(nameof(Dummy.NotEqual), "_number1 != _number2").TestAndVerify();
 }
Пример #19
0
 public void TestMethod_ReturnCurrentInstance()
 {
     ExpressionTest <Dummy> .CreateMethodOutputExpression(nameof(Dummy.ReturnCurrentInstance), "this").TestAndVerify();
 }
Пример #20
0
 public void TestMethod_Equal()
 {
     ExpressionTest <Dummy> .CreateMethodOutputExpression(nameof(Dummy.Equals), "_number1 == _number2").TestAndVerify();
 }
Пример #21
0
 public void TestMethod_MethodWithListAsParameter()
 {
     ExpressionTest <Dummy>
     .CreateMethodExpression(nameof(Dummy.MethodWithListAsParameter), "Test Output-0556 Test Output-1556").TestAndVerify();
 }
Пример #22
0
 public void ThrowSystemException()
 {
     ExpressionTest <Dummy> .CreateMethodExpression(nameof(Dummy.ThrowSystemException), typeof(System.SystemException).Name).TestAndVerify();
 }
Пример #23
0
 public void TestMethod_GetDummyTestStringArray()
 {
     ExpressionTest <Dummy> .CreateMethodOutputExpression(nameof(Dummy.GetDummyTestStringArray), "_stringArray").TestAndVerify();
 }
Пример #24
0
 public void TestMethod_ReturnCharacter()
 {
     ExpressionTest <Dummy> .CreateTest(nameof(Dummy.ReturnCharacter), 'a').TestAndVerify();
 }
Пример #25
0
 public void TestMethod_Message_ClassWithNoConstructor()
 {
     ExpressionTest <DummyWithNoConstructor> .CreateTest(nameof(DummyWithNoConstructor.Message), "Test_Message").TestAndVerify();
 }
Пример #26
0
 public void TestMethod_WithNullParameters()
 {
     Expression <Dummy> .CreateWithNullParameters("ReturnMessage2", ExpressionTest <Dummy> .CreateTest(null)).TestAndVerify();
 }
Пример #27
0
 public void TestMethod_ReturnInteger()
 {
     ExpressionTest <Dummy> .CreateMethodOutputExpression(nameof(Dummy.ReturnInteger), "5").TestAndVerify();
 }
Пример #28
0
 public void TestMethod_ToString()
 {
     ExpressionTest <Dummy> .CreateWithOutputExpression(nameof(Dummy.ToString), "'_message=' + _message + 'message2=' + _message2 + 'number1=' + _number1")
     .TestAndVerify();
 }
Пример #29
0
 public void TestMethod_WithUserDefinedParameters()
 {
     Expression <Dummy> .Create("ReturnMessage2", new object[] { "Test" }, ExpressionTest <Dummy> .CreateTest("Test")).TestAndVerify();
 }
Пример #30
0
 public void TestMethod_WrongMethod()
 {
     Assert.Throws <MethodNotFoundException>(
         () => ExpressionTest <Dummy> .CreateMethodExpression("WrongMethod", null).TestAndVerify());
 }