private void DumpProperties(StringBuilder sb, object obj, NestedModel nested, IList properties)
        {
            foreach (PropertyModel m in properties)
            {
                if (nested != null)
                {
                    sb.AppendFormat("{0}.", nested.Property.Name);
                }

                if ((m.PropertyAtt.ColumnType ?? "").EndsWith("Blob"))
                {
                    sb.AppendFormat("{0} = (blob); ", m.Property.Name);
                }
                else
                {
                    object value = m.Property.GetValue(obj, null);
                    if (NullableHelper.IsNull(value))
                    {
                        sb.AppendFormat("{0} = (null); ", m.Property.Name);
                    }
                    else
                    {
                        sb.AppendFormat("{0} = '{1}'; ", m.Property.Name, value);
                    }
                }
            }
        }
        public void Benchmark_Nested_Model()
        {
            var oldModel = new NestedModel
            {
                Id    = 1,
                Child = new ChildModel
                {
                    Id         = 2,
                    Name       = "Child",
                    GrandChild = new GrandChildModel
                    {
                        Id    = 3,
                        Name  = "GrandChild",
                        Value = 100,
                    }
                }
            };
            var newModel = new NestedModel
            {
                Id    = 1,
                Child = new ChildModel
                {
                    Id         = 2,
                    Name       = "Child 2",
                    GrandChild = new GrandChildModel
                    {
                        Id    = 4,
                        Name  = "GrandChild 2",
                        Value = 200,
                    }
                }
            };

            var sw = new Stopwatch();

            sw.Start();
            var comparer = SutEngine.Get <NestedModel>();

            sw.Stop();
            var compilation = sw.ElapsedMilliseconds;

            sw.Reset();

            sw.Start();
            var numIterations = 100000;

            for (var i = 0; i < numIterations; i++)
            {
                var updates = comparer(oldModel, newModel);
            }
            sw.Stop();

            var benchmark = sw.ElapsedMilliseconds;

            Console.WriteLine($"Compilation took {compilation} ms.");
            Console.WriteLine($"{numIterations} iterations took {benchmark} ms.");
            Assert.IsTrue(benchmark < 500);
        }
Exemple #3
0
        static void Main(string[] args)
        {
            var baseAddr = "http://localhost:8888";

            Console.WriteLine("hello------from origin http client");

            var client = new HttpClient {
                BaseAddress = new Uri(baseAddr)
            };

            var res = client.GetAsync("api/test/GetFromSimpleArg?id=world").Result.Content.ReadAsStringAsync().Result;

            Console.WriteLine(res);
            Console.WriteLine("\n\n");


            var proxy = new ProxyClient();

            Console.WriteLine("hello------from web api proxy");

            var v1 = proxy.GetFromSimpleArg("just say this is my name");

            Console.WriteLine("1---" + JsonConvert.SerializeObject(v1));

            v1 = proxy.GetFromSimpleArgAsync("just say this is my name").Result;
            Console.WriteLine("1-async---" + JsonConvert.SerializeObject(v1));

            var complexModel = new ComplexModel()
            {
                Age = 18, Name = "super star"
            };
            var v2 = proxy.GetFromComplexArg(complexModel);

            Console.WriteLine("2---" + JsonConvert.SerializeObject(v2));

            var v3 = proxy.GetFromMixedArg(2016, complexModel);

            Console.WriteLine("3---" + JsonConvert.SerializeObject(v3));


            var nest = new NestedModel()
            {
                Id           = 999999,
                ComplexModel = complexModel
            };
            var v4 = proxy.PostFromMixedArg("this is my str", nest, complexModel);

            Console.WriteLine("4---" + JsonConvert.SerializeObject(v4));

            var v5 = proxy.PostFromMixedArg2("this is my str", complexModel, nest);

            Console.WriteLine("5---" + JsonConvert.SerializeObject(v5));


            Console.WriteLine("---------------done!");
            Console.ReadLine();
        }
        public void Benchmark_Nested_Model()
        {
            var oldModel = new NestedModel
            {
                Id = 1,
                Child = new ChildModel
                {
                    Id = 2,
                    Name = "Child",
                    GrandChild = new GrandChildModel
                    {
                        Id = 3,
                        Name = "GrandChild",
                        Value = 100,
                    }
                }
            };
            var newModel = new NestedModel
            {
                Id = 1,
                Child = new ChildModel
                {
                    Id = 2,
                    Name = "Child 2",
                    GrandChild = new GrandChildModel
                    {
                        Id = 4,
                        Name = "GrandChild 2",
                        Value = 200,
                    }
                }
            };

            var sw = new Stopwatch();

            sw.Start();
            var comparer = SutEngine.Get<NestedModel>();
            sw.Stop();
            var compilation = sw.ElapsedMilliseconds;
            sw.Reset();

            sw.Start();
            var numIterations = 100000;
            for (var i = 0; i < numIterations; i++)
            {
                var updates = comparer(oldModel, newModel);
            }
            sw.Stop();

            var benchmark = sw.ElapsedMilliseconds;
            Console.WriteLine($"Compilation took {compilation} ms.");
            Console.WriteLine($"{numIterations} iterations took {benchmark} ms.");
            Assert.IsTrue(benchmark < 500);
        }
Exemple #5
0
        public void AreDeeplyEqualShouldWorkCorrectlyWithSameReferences()
        {
            var firstObject = new NestedModel {
                Integer = 1, String = "Text"
            };
            var secondObject = new NestedModel {
                Integer = 1, String = "Text", Nested = firstObject
            };

            firstObject.Nested = secondObject;

            Assert.True(DeepEquality.AreDeeplyEqual(firstObject, secondObject));
        }
Exemple #6
0
        public void AreDeeplyEqualShouldReportCorrectly()
        {
            var firstObject = new NestedModel()
            {
                Integer = 1, String = "Text"
            };
            var secondObject = new NestedModel()
            {
                Integer = 2, String = "Text"
            };

            Assert.False(DeepEquality.AreDeeplyEqual(firstObject, secondObject, out var result));
            Assert.Equal("Difference occurs at 'NestedModel.Integer'. Expected a value of '1', but in fact it was '2'", result.ToString());
        }
        public void Check_nested_properties()
        {
            var model = new NestedModel
            {
                Prop = new RequiredModel()
            };

            builder.BuildFromModel(model);

            builder.Invalid.Should().BeTrue();
            builder.Result.Errors.Should().ContainEquivalentOf(new
            {
                Error = "required",
                Path  = new[] { "prop", "summary" }
            });
        }
Exemple #8
0
        public void Can_deserialize_nested_json_with_whitespace()
        {
            var model = new NestedModel
            {
                Id    = "Nested with space",
                Model = new ModelWithIdAndName
                {
                    Id   = 1,
                    Name = @"Simple string"
                }
            };

            const string json = "\t { \"Id\" : \"Nested with space\" \n , \r \t \"Model\" \t : \n { \t \"Id\" \t : 1 , \t \"Name\" \t  : \t \"Simple string\" \t } \t } \n ";

            var fromJson = JsonSerializer.DeserializeFromString <NestedModel>(json);

            Assert.That(fromJson.Id, Is.EqualTo(model.Id));
            Assert.That(fromJson.Model, Is.EqualTo(model.Model));
        }
        public void Can_deserialize_nested_json_with_whitespace()
        {
            var model = new NestedModel
            {
                Id = "Nested with space",
                Model = new ModelWithIdAndName
                {
                    Id = 1,
                    Name = @"Simple string"
                }
            };

            const string json = "\t { \"Id\" : \"Nested with space\" \n , \r \t \"Model\" \t : \n { \t \"Id\" \t : 1 , \t \"Name\" \t  : \t \"Simple string\" \t } \t } \n ";

            var fromJson = JsonSerializer.DeserializeFromString<NestedModel>(json);

            Assert.That(fromJson.Id, Is.EqualTo(model.Id));
            Assert.That(fromJson.Model, Is.EqualTo(model.Model));
        }
        public void CanValidateNestedPropertiesFalse()
        {
            var response = new NestedModel
            {
                Phone      = "11111111111",
                Email      = "*****@*****.**",
                MyProperty = "AFDSFSD",
                Model      = new Model
                {
                    Phone      = "c",
                    Email      = "aaaaaa",
                    MyProperty = null
                }
            }
            .ValidateNested();

            Assert.IsFalse(response.IsSuccess);
            Assert.AreEqual(3, response.Results.Count);
        }
Exemple #11
0
        public void Can_deserialize_nested_json_object_with_slash_at_end_of_value()
        {
            var model = new NestedModel
            {
                Id    = "Nested with slash at the end of name",
                Model = new ModelWithIdAndName
                {
                    Id   = 1,
                    Name = "String with slashes\\",
                }
            };

            const string json = "{ \"Id\" : \"Nested with slash at the end of name\", \"Model\" : { \"Id\" : 1, \"Name\" : \"String with slashes\\\\\" } }";

            var fromJson = JsonSerializer.DeserializeFromString <NestedModel>(json);

            Assert.That(fromJson.Id, Is.EqualTo(model.Id));
            Assert.That(fromJson.Model, Is.EqualTo(model.Model));
        }
        public void GetValidateNestedPropertiesResultMessages()
        {
            var response = new NestedModel
            {
                Phone      = "11111111111",
                Email      = "*****@*****.**",
                MyProperty = "AFDSFSD",
                Model      = new Model
                {
                    Phone      = "c",
                    Email      = "aaaaaa",
                    MyProperty = null
                }
            }
            .ValidateNested();

            Assert.AreEqual(response.Results[0].Message, "The  field is not a valid phone number.");
            Assert.AreEqual(response.Results[1].Message, "The  field is not a valid e-mail address.");
            Assert.AreEqual(response.Results[2].Message, "The  field is required.");
        }
        public void GetValidateNestedPropertiesResultKeys()
        {
            var response = new NestedModel
            {
                Phone      = "11111111111",
                Email      = "*****@*****.**",
                MyProperty = "AFDSFSD",
                Model      = new Model
                {
                    Phone      = "c",
                    Email      = "aaaaaa",
                    MyProperty = null
                }
            }
            .ValidateNested();

            Assert.AreEqual(response.Results[0].Key, "Phone");
            Assert.AreEqual(response.Results[1].Key, "Email");
            Assert.AreEqual(response.Results[2].Key, "MyProperty");
        }
        public void ShouldMapFromNestedModelToFluentObject()
        {
            var nestedModel = new NestedModel(false);

            var fluentObject = nestedModel.MapToFluentObject();

            Assert.IsNotNull(fluentObject);
            Assert.AreEqual(fluentObject.Name, NestedModelFields.MODEL_NAME);

            Assert.IsTrue(fluentObject.ContainsKey(NestedModelFields.FIELD_NAME));
            Assert.IsTrue(fluentObject.ContainsKey(NestedModelFields.CONDITIONAL_FIELD_NAME));
            Assert.IsFalse(fluentObject.ContainsKey(NestedModelFields.CONDITIONAL_REVERSED_FIELD_NAME));
            Assert.IsFalse(fluentObject.ContainsKey(NestedModelFields.READONLY_FIELD_NAME));
            Assert.IsTrue(fluentObject.ContainsKey(NestedModelFields.DEPENDENT_FIELD_NAME));
            Assert.IsFalse(fluentObject.ContainsKey(NestedModelFields.DEPENDENT_REVERSED_FIELD_NAME));

            Assert.AreEqual(fluentObject[NestedModelFields.FIELD_NAME], NestedModelFields.FIELD_VALUE);
            Assert.AreEqual(fluentObject[NestedModelFields.CONDITIONAL_FIELD_NAME], NestedModelFields.CONDITIONAL_FIELD_VALUE.ToString());
            Assert.AreEqual(fluentObject[NestedModelFields.DEPENDENT_FIELD_NAME], NestedModelFields.DEPENDENT_FIELD_VALUE.ToString());
        }
Exemple #15
0
        public void AreDeeplyEqualShouldReportCorrectlyWithNestedObjects()
        {
            var firstObject = new NestedModel {
                Integer = 1, String = "Text"
            };
            var secondObject = new NestedModel {
                Integer = 2, String = "Text"
            };

            Assert.False(DeepEquality.AreDeeplyEqual(firstObject, secondObject, out var result));
            Assert.Equal("Difference occurs at 'NestedModel.Integer'. Expected a value of '1', but in fact it was '2'", result.ToString());

            Assert.False(DeepEquality.AreDeeplyEqual(
                             new NestedModel
            {
                Integer = 1,
                String  = "test",
                Enum    = CustomEnum.ConstantWithCustomValue,
                Nested  = new NestedModel {
                    Integer = 2, String = "test2", Nested = new NestedModel {
                        Integer = 3, String = "test3"
                    }
                }
            },
                             new NestedModel
            {
                Integer = 1,
                String  = "test",
                Enum    = CustomEnum.ConstantWithCustomValue,
                Nested  = new NestedModel {
                    Integer = 2, String = "test1", Nested = new NestedModel {
                        Integer = 3, String = "test3"
                    }
                }
            }, out result));

            Assert.Equal("Difference occurs at 'NestedModel.Nested.String'. Expected a value of 'test2', but in fact it was 'test1'", result.ToString());
        }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.Null)
        {
            return(null);
        }
        // Load JObject from stream
        JObject jObject = JObject.Load(reader);
        // Create target object based on JObject
        NestedModel target = new NestedModel();
        // Populate the object properties
        StringWriter writer = new StringWriter();

        serializer.Serialize(writer, jObject);
        using (JsonTextReader newReader = new JsonTextReader(new StringReader(writer.ToString())))
        {
            newReader.Culture              = reader.Culture;
            newReader.DateParseHandling    = reader.DateParseHandling;
            newReader.DateTimeZoneHandling = reader.DateTimeZoneHandling;
            newReader.FloatParseHandling   = reader.FloatParseHandling;
            serializer.Populate(newReader, target);
        }
        return(target);
    }
        public void Extract_Structure_ShouldMapToNestedObject()
        {
            // Arrange
            var          structHandle = (IntPtr)443534;
            var          intValue     = 123;
            RfcErrorInfo errorInfo;

            _interopMock.Setup(x => x.GetStructure(It.IsAny <IntPtr>(), It.IsAny <string>(), out structHandle, out errorInfo));
            _interopMock.Setup(x => x.GetInt(It.IsAny <IntPtr>(), It.IsAny <string>(), out intValue, out errorInfo));

            // Act
            NestedModel result = OutputMapper.Extract <NestedModel>(_interopMock.Object, DataHandle);

            // Assert
            _interopMock.Verify(
                x => x.GetStructure(DataHandle, "INNERMODEL", out structHandle, out errorInfo),
                Times.Once);
            _interopMock.Verify(
                x => x.GetInt(structHandle, "VALUE", out intValue, out errorInfo),
                Times.Once);
            result.Should().NotBeNull();
            result.InnerModel.Should().NotBeNull();
            result.InnerModel.Value.Should().Be(123);
        }
Exemple #18
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="simpleStr"></param>
 /// <param name="uriComplexArg"></param>
 /// <param name="bodyNestedArg"></param>
 public virtual TotalResult PostFromMixedArg2(String simpleStr, ComplexModel uriComplexArg, NestedModel bodyNestedArg)
 {
     return(PostFromMixedArg2Async(simpleStr, uriComplexArg, bodyNestedArg).Result);
 }
Exemple #19
0
 protected virtual List <KeyValuePair <string, object> > GeneratePostFromMixedArg2KeyValueList(String simpleStr, ComplexModel uriComplexArg, NestedModel bodyNestedArg)
 {
     // Name={Name}&Age={Age}
     throw new NotImplementedException();
 }
Exemple #20
0
        protected virtual string GeneratePostFromMixedArg2QueryString(String simpleStr, ComplexModel uriComplexArg, NestedModel bodyNestedArg)
        {
            var kvList = GeneratePostFromMixedArg2KeyValueList(simpleStr, uriComplexArg, bodyNestedArg);
            var urlTpl = GenerateQueryStrFromKvList(kvList);

            return(urlTpl);
        }
Exemple #21
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="simpleStr"></param>
        /// <param name="uriComplexArg"></param>
        /// <param name="bodyNestedArg"></param>
        /// <returns></returns>
        public virtual async Task <TotalResult> PostFromMixedArg2Async(String simpleStr, ComplexModel uriComplexArg, NestedModel bodyNestedArg)
        {
            var requestUrl = "api/test/PostFromMixedArg2";


            var queryHasParamUrl = "simpleStr=" + Uri.EscapeDataString(Convert.ToString(simpleStr)) + "";



            var queryNoParamUrl = GeneratePostFromMixedArg2QueryString(simpleStr, uriComplexArg, bodyNestedArg);


            if (string.IsNullOrEmpty(queryHasParamUrl))
            {
                requestUrl = requestUrl + "?" + queryNoParamUrl;
            }
            else
            {
                requestUrl = requestUrl + "?" + queryHasParamUrl + "&" + queryNoParamUrl;
            }


            var result = await HttpClient.PostAsJsonAsync <NestedModel>(requestUrl, bodyNestedArg);


            EnsureSuccess(result);

            return(await result.Content.ReadAsAsync <TotalResult>());
        }
        public void AreDeeplyEqualShouldWorkCorrectlyWithSameReferences()
        {
            var firstObject = new NestedModel { Integer = 1, String = "Text" };
            var secondObject = new NestedModel { Integer = 1, String = "Text", Nested = firstObject };
            firstObject.Nested = secondObject;

            Assert.True(Reflection.AreDeeplyEqual(firstObject, secondObject));
        }
Exemple #23
0
 public Model()
 {
     NestedModel = new NestedModel();
 }
        public void Can_deserialize_nested_json_object_with_slash_at_end_of_value()
        {
            var model = new NestedModel
            {
                Id = "Nested with slash at the end of name",
                Model = new ModelWithIdAndName
                {
                    Id = 1,
                    Name = "String with slashes\\",
                }
            };

            const string json = "{ \"Id\" : \"Nested with slash at the end of name\", \"Model\" : { \"Id\" : 1, \"Name\" : \"String with slashes\\\\\" } }";

            var fromJson = JsonSerializer.DeserializeFromString<NestedModel>(json);

            Assert.That(fromJson.Id, Is.EqualTo(model.Id));
            Assert.That(fromJson.Model, Is.EqualTo(model.Model));
        }
Exemple #25
0
 protected override List <KeyValuePair <string, object> > GeneratePostFromMixedArg2KeyValueList(string simpleStr, ComplexModel uriComplexArg, NestedModel bodyNestedArg)
 {
     return(new List <KeyValuePair <string, object> >()
     {
         new KeyValuePair <string, object>("Name", uriComplexArg.Name),
         new KeyValuePair <string, object>("Age", uriComplexArg.Age),
     });
 }