Esempio n. 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="EvaluationContext"/> class.
        /// </summary>
        /// <param name="ignoreEvaluationExceptions">If set to <c>true</c>, ignores evaluation exceptions.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <param name="identifierComparer">The identifier comparer.</param>
        /// <param name="objectFormatter">The object formatter.</param>
        /// <param name="selfObject">The <c>self</c> object that exposes all global identifiers.</param>
        /// <param name="unParsedTextHandler">The un-parsed text handler delegate.</param>
        public EvaluationContext(
            bool ignoreEvaluationExceptions,
            CancellationToken cancellationToken,
            [NotNull] IEqualityComparer <string> identifierComparer,
            [NotNull] IObjectFormatter objectFormatter,
            [CanBeNull] object selfObject,
            [NotNull] Func <IExpressionEvaluationContext, string, string> unParsedTextHandler)
        {
            Expect.NotNull(nameof(identifierComparer), identifierComparer);
            Expect.NotNull(nameof(objectFormatter), objectFormatter);
            Expect.NotNull(nameof(unParsedTextHandler), unParsedTextHandler);

            CancellationToken          = cancellationToken;
            _identifierComparer        = identifierComparer;
            _objectFormatter           = objectFormatter;
            IgnoreEvaluationExceptions = ignoreEvaluationExceptions;
            _unParsedTextHandler       = unParsedTextHandler;
            _selfObject = selfObject;

            _disembowelers  = new Dictionary <Type, SimpleTypeDisemboweler>();
            _frames         = new Stack <Frame>();
            _dynamicInvoker = new SimpleDynamicInvoker();

            OpenEvaluationFrame();
        }
Esempio n. 2
0
        public void InvokeReturnsNullForNonExistentMethod()
        {
            var invoker = new SimpleDynamicInvoker();
            var result  = invoker.Invoke(this, "Fake");

            Assert.IsNull(result);
        }
Esempio n. 3
0
        public void InvokeCallsTheMatchingMethod()
        {
            var invoker = new SimpleDynamicInvoker();
            var result  = invoker.Invoke(this, nameof(MatchArgumentMethod), new object[] { "100", false });

            Assert.AreEqual(102, result);
        }
Esempio n. 4
0
        public void InvokeThrowsErrorIfMemberHasInvalidFormat()
        {
            var invoker = new SimpleDynamicInvoker();

            Assert.Throws <ArgumentNullException>(() => invoker.Invoke(this, null));
            Assert.Throws <ArgumentException>(() => invoker.Invoke(this, ""));
            Assert.Throws <ArgumentException>(() => invoker.Invoke(this, " broken "));
        }
Esempio n. 5
0
        public void InvokeFailsToMatchWithImpreciseArguments2()
        {
            var invoker = new SimpleDynamicInvoker();

            var result = invoker.Invoke(this, nameof(MatchArgumentMethod), new object[] { "arg1", 1 });

            Assert.IsNull(result);
        }
Esempio n. 6
0
        public void GetValueReturnsTheValueOfProperty()
        {
            var invoker = new SimpleDynamicInvoker();

            var result = invoker.GetValue(this, nameof(PublicProperty));

            Assert.AreEqual(nameof(PublicProperty), result);
        }
Esempio n. 7
0
        public void GetValueReturnsNullIfMemberIsNotAccessible()
        {
            var invoker = new SimpleDynamicInvoker();

            var result = invoker.GetValue(this, nameof(_privateField));

            Assert.IsNull(result);
        }
Esempio n. 8
0
        public void InvokeThrowsErrorIfArgsCountGreaterThanFourteen()
        {
            var invoker = new SimpleDynamicInvoker();

            var args = Enumerable.Range(0, 15).Cast <object>().ToArray();

            Assert.Throws <ArgumentOutOfRangeException>(() => invoker.Invoke(this, "property", args));
        }
Esempio n. 9
0
        public void GetValueReturnsTrulyDynamicPropertyValue()
        {
            var     invoker = new SimpleDynamicInvoker();
            dynamic expando = new ExpandoObject();

            expando.Property = 100;

            var result = invoker.GetValue(expando, nameof(expando.Property));

            Assert.AreEqual(expando.Property, result);
        }
Esempio n. 10
0
        public void InvokeCallsTheFullArgumentMethod()
        {
            var invoker = new SimpleDynamicInvoker();
            var args    = new object[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14" };
            var result  = invoker.Invoke(
                this,
                nameof(FullArgumentMethod),
                args);

            Assert.AreEqual(string.Join("-", args), result);
        }
Esempio n. 11
0
        public void GetValueReturnsNullIfObjectIsNull()
        {
            var invoker = new SimpleDynamicInvoker();

            Assert.IsNull(invoker.GetValue(null, "property"));
        }
Esempio n. 12
0
        public void InvokeLeaksException()
        {
            var invoker = new SimpleDynamicInvoker();

            Assert.Throws <ArgumentException>(() => invoker.Invoke(this, nameof(ThrowException)));
        }