Example #1
0
        public static int WasSymbolic_BecameConcrete_RecursiveObject(int v)
        {
            var a = new RecursiveClass(v);

            a.SetValue(50);
            return(a.Multiply(2));
        }
Example #2
0
        public void DeserializeComplex_TypedObject_RecursiveAntiparalell()
        {
            var objTyped1 = new RecursiveClass()
            {
                MyProp            = 100,
                RecursiveProperty = null
            };

            var objTyped2 = new RecursiveClass()
            {
                MyProp            = 120,
                RecursiveProperty = objTyped1
            };

            objTyped1.RecursiveProperty = objTyped2;

            var expressionStr = objTyped1.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = (RecursiveClass)deserializer.Deserialize(expressionStr, objTyped1.GetType());

            Assert.IsType <RecursiveClass>(deserialized);
            Assert.Equal(100, deserialized.MyProp);
            Assert.Equal(120, deserialized.RecursiveProperty.MyProp);
            Assert.Same(deserialized, deserialized.RecursiveProperty.RecursiveProperty);
        }
        public void SelfAsProperty()
        {
            var instance = new RecursiveClass {
                Name = "Self"
            };

            Expression <Func <RecursiveClass, RecursiveClass> > func = x => x;
            var data = PropertyMetadataHelper.GetPropertyMetadata(func);

            Assert.IsNotNull(data);
            Assert.AreEqual("Self", ((RecursiveClass)data.Getter(instance)).Name);
        }
Example #4
0
        [InlineData(70)] // default max depth is 64
        public static void SerializeToNode_RespectsMaxDepth(int maxDepth)
        {
            var options = new JsonSerializerOptions {
                MaxDepth = maxDepth
            };

            RecursiveClass value = RecursiveClass.FromInt(maxDepth);
            JsonNode       dom   = JsonSerializer.SerializeToNode(value, options);

            value = RecursiveClass.FromInt(maxDepth + 1);
            Assert.Throws <JsonException>(() => JsonSerializer.SerializeToNode(value, options));
        }
Example #5
0
        public async Task AsyncValidation()
        {
            const int ParallelCount = 2;

            var list    = new HashSet <int>();
            var cts     = new CancellationTokenSource();
            var builder = new ValidatorBuilder <object>();

            builder.AddKnownType <RecursiveClass>();
            builder.AddPropertyFilter <RecursiveClass>();
            builder.AddConstraint(_ => new DelegateConstraint(instanceValue =>
            {
                lock (list)
                {
                    if (Task.CurrentId.HasValue)
                    {
                        list.Add(Task.CurrentId.Value);
                    }
                }

                return(true);
            }));
            var validator = builder.Build();

            var instance = new RecursiveClass
            {
                Entry1 = new RecursiveClass
                {
                    Entry1 = new RecursiveClass
                    {
                    },
                    Entry2 = new RecursiveClass
                    {
                    },
                },
                Entry2 = new RecursiveClass
                {
                    Entry1 = new RecursiveClass
                    {
                    },
                    Entry2 = new RecursiveClass
                    {
                    },
                },
            };

            var context = new TestValidationContext();

            context.Context.MaxDegreeOfParallelism = ParallelCount;
            await validator.ValidateAsync(instance, context.Context).ConfigureAwait(false);

            Assert.Equal(ParallelCount, list.Count);
        }
        public void ParentAsPropertyViaInterface()
        {
            IRecursiveClass instance = new RecursiveClass {
                Name = "Self", Parent = new RecursiveClass {
                    Name = "Parent"
                }
            };

            Expression <Func <IRecursiveClass, IRecursiveClass> > func = x => x.Parent;
            var data = PropertyMetadataHelper.GetPropertyMetadata(func);

            Assert.IsNotNull(data);
            Assert.AreEqual("Parent", ((RecursiveClass)data.Getter(instance)).Name);
        }
Example #7
0
        public void DeserializeComplex_TypedObject_MultiLevel()
        {
            var objTyped = new RecursiveClass()
            {
                MyProp            = 1,
                RecursiveProperty = new RecursiveClass()
                {
                    MyProp            = 2,
                    RecursiveProperty = new RecursiveClass()
                    {
                        MyProp            = 3,
                        RecursiveProperty = new RecursiveClass()
                        {
                            MyProp            = 4,
                            RecursiveProperty = null,
                            ZProp             = "D"
                        },
                        ZProp = "C"
                    },
                    ZProp = "B"
                },
                ZProp = "A"
            };

            var expressionStr = objTyped.AsExpression().DefaultSerializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = (RecursiveClass)deserializer.Deserialize(expressionStr, objTyped.GetType());

            Assert.IsType <RecursiveClass>(deserialized);
            Assert.Equal(1, deserialized.MyProp);
            Assert.Equal("A", deserialized.ZProp);

            Assert.Equal(2, deserialized.RecursiveProperty.MyProp);
            Assert.Equal("B", deserialized.RecursiveProperty.ZProp);

            Assert.Equal(3, deserialized.RecursiveProperty.RecursiveProperty.MyProp);
            Assert.Equal("C", deserialized.RecursiveProperty.RecursiveProperty.ZProp);

            Assert.Equal(4, deserialized.RecursiveProperty.RecursiveProperty.RecursiveProperty.MyProp);
            Assert.Equal("D", deserialized.RecursiveProperty.RecursiveProperty.RecursiveProperty.ZProp);
        }
Example #8
0
        public void DeserializeComplex_TypedObject_ShowType_None()
        {
            var obj = new RecursiveClass
            {
                MyProp            = 10,
                RecursiveProperty = new RecursiveClass()
                {
                    MyProp = 20
                },
                ZProp = "value"
            };

            var serializer = obj.AsExpression().GetSerializer <ComplexEntityExpressionSerializer>();

            serializer.ShowType = ShowTypeOptions.None;
            var expressionStr = serializer.Serialize();
            var deserializer  = new ComplexEntityExpressionDeserializer();
            var deserialized  = deserializer.Deserialize <RecursiveClass>(expressionStr);

            Assert.Equal(10, deserialized.MyProp);
            Assert.Equal("value", deserialized.ZProp);
            Assert.Equal(20, deserialized.RecursiveProperty.MyProp);
        }
 public RecursiveClass(RecursiveClass c)
 {
 }
Example #10
0
 public RecursiveClass(int value)
 {
     _value = value;
     next   = this;
 }
Example #11
0
        public static RecursiveClass CreateRecursiveObject()
        {
            var a = new RecursiveClass(42);

            return(a);
        }
Example #12
0
 public static int ToInt(RecursiveClass value) => value is null ? 0 : 1 + ToInt(value.Next);