コード例 #1
0
        public static async ValueTask <DataModelValue> GetContent(IValueEvaluator?contentBodyEvaluator,
                                                                  IObjectEvaluator?contentExpressionEvaluator,
                                                                  IExecutionContext executionContext,
                                                                  CancellationToken token)
        {
            if (executionContext is null)
            {
                throw new ArgumentNullException(nameof(executionContext));
            }

            if (contentExpressionEvaluator is not null)
            {
                var obj = await contentExpressionEvaluator.EvaluateObject(executionContext, token).ConfigureAwait(false);

                return(DataModelValue.FromObject(obj).AsConstant());
            }

            if (contentBodyEvaluator is IObjectEvaluator objectEvaluator)
            {
                var obj = await objectEvaluator.EvaluateObject(executionContext, token).ConfigureAwait(false);

                return(DataModelValue.FromObject(obj).AsConstant());
            }

            if (contentBodyEvaluator is IStringEvaluator stringEvaluator)
            {
                var str = await stringEvaluator.EvaluateString(executionContext, token).ConfigureAwait(false);

                return(new DataModelValue(str));
            }

            return(default);
コード例 #2
0
        public void ValuesOfObjectPropertiesShouldBeConcatenatedThroughValue_IfRootIsComplexObject()
        {
            // arrange
            var v = DataModelValue.FromObject(new { prop = "1", obj = new { prop1 = "1", prop2 = "1" } });

            // act
            var value = new DataModelXPathNavigator(v).Evaluate("string(.)");

            // assert
            Assert.AreEqual(expected: "111", value);
        }
コード例 #3
0
        public void ValueOfObjectPropertyShouldBeAvailableThroughValue_IfRootIsObject()
        {
            // arrange
            var v = DataModelValue.FromObject(new { prop = "value" });

            // act
            var value = new DataModelXPathNavigator(v).Evaluate("string(prop)");

            // assert
            Assert.AreEqual(expected: "value", value);
        }
コード例 #4
0
        public void LocalNameShouldBeEmpty_IfTypeIsList()
        {
            // arrange
            var v = DataModelValue.FromObject(new { key = "value" });

            // act
            var value = new DataModelXPathNavigator(v);

            // assert
            Assert.AreEqual(expected: "", value.LocalName);
        }
コード例 #5
0
        public void LocalNameShouldBeText_IfTypeIsNumeric()
        {
            // arrange
            var v = DataModelValue.FromObject(55);

            // act
            var value = new DataModelXPathNavigator(v);

            // assert
            Assert.AreEqual(expected: "#text", value.LocalName);
        }
コード例 #6
0
        public void LocalNameShouldBePropName_IfTypeIsList()
        {
            // arrange
            var v = DataModelValue.FromObject(new { key = "value" });

            // act
            var value = new DataModelXPathNavigator(v);

            value.MoveToFirstChild();

            // assert
            Assert.AreEqual(expected: "key", value.LocalName);
        }
コード例 #7
0
        public void CanSelectSubNode_IfRootIsComplexObject()
        {
            // arrange
            var v = DataModelValue.FromObject(new
            {
                /*prop = "value", */ obj = new { prop1 = "val1", prop2 = "target" }
            });

            // act
            var value = new DataModelXPathNavigator(v).Evaluate("string(obj/prop2)");

            // assert
            Assert.AreEqual(expected: "target", value);
        }
コード例 #8
0
        public void TempTest()
        {
            // arrange
            var n    = DataModelValue.FromObject(new { child1 = "val1", child2 = "val2" });
            var v    = DataModelValue.FromObject(new { key = "value" });
            var nNav = new DataModelXPathNavigator(n);
            var vNav = new DataModelXPathNavigator(v);

            vNav.MoveToFirstChild();

            // act
            vNav.ReplaceChildren(new XPathObject(nNav.Evaluate("child::*") !));

            // assert
            v.AsList().TryGet(key: "key", caseInsensitive: false, out var v1);
            v1.Value.AsList().TryGet(key: "child1", caseInsensitive: false, out var v2);
            Assert.AreEqual(expected: "val1", v2.Value.AsString());
        }
コード例 #9
0
        public virtual async ValueTask Execute(IExecutionContext executionContext, CancellationToken token)
        {
            if (executionContext is null)
            {
                throw new ArgumentNullException(nameof(executionContext));
            }

            var data = default(DataModelValue);

            if (ExpressionEvaluator is not null)
            {
                var obj = await ExpressionEvaluator.EvaluateObject(executionContext, token).ConfigureAwait(false);

                data = DataModelValue.FromObject(obj).AsConstant();
            }

            await executionContext.Log(LogLevel.Info, _log.Label, data, token : token).ConfigureAwait(false);
        }
コード例 #10
0
            private async ValueTask <DataModelValue> Evaluate(IValueEvaluator objectEvaluator, IExecutionContext executionContext, CancellationToken token)
            {
                switch (_expectedValueType)
                {
                case ExpectedValueType.String when objectEvaluator is IStringEvaluator evaluator:
                    return(await evaluator.EvaluateString(executionContext, token).ConfigureAwait(false));

                case ExpectedValueType.Integer when objectEvaluator is IIntegerEvaluator evaluator:
                    return(await evaluator.EvaluateInteger(executionContext, token).ConfigureAwait(false));

                case ExpectedValueType.Boolean when objectEvaluator is IBooleanEvaluator evaluator:
                    return(await evaluator.EvaluateBoolean(executionContext, token).ConfigureAwait(false));
                }

                var obj = await((IObjectEvaluator)objectEvaluator).EvaluateObject(executionContext, token).ConfigureAwait(false);

                return(DataModelValue.FromObject(obj));
            }
コード例 #11
0
ファイル: DoneDataNode.cs プロジェクト: TSSArt/Xtate.Core
        public async ValueTask <DataModelValue> Evaluate(IExecutionContext executionContext, CancellationToken token)
        {
            var obj = await _doneDataEvaluator.EvaluateObject(executionContext, token).ConfigureAwait(false);

            return(DataModelValue.FromObject(obj));
        }