public void Can_load_really_big_schema()
        {
            var s = JSchema.Parse(File.ReadAllText(Path.Combine(Path.GetDirectoryName(typeof(JSchemaValidatorBuilderTests).Assembly.Location), "Validation", "ecourt_com_151.json")));
            var o = JObject.Parse(File.ReadAllText(Path.Combine(Path.GetDirectoryName(typeof(JSchemaValidatorBuilderTests).Assembly.Location), "Validation", "efm.json")));
            var v = JSchemaExpressionBuilder.CreateDefault().Build(s);

            var a = v.Compile();

            a.Invoke(o);
            var sw = new Stopwatch();

            var t = TimeSpan.Zero;

            for (var i = 0; i < 1000; i++)
            {
                sw.Start();
                var r = a.Invoke(o);
                sw.Stop();
                t += sw.Elapsed;
                sw.Reset();
            }
            Console.WriteLine("Average on Fast Validator: " + new TimeSpan((long)(t.Ticks / 1000d)));


            t = TimeSpan.Zero;
            for (var i = 0; i < 1000; i++)
            {
                sw.Start();
                var r = o.IsValid(s);
                sw.Stop();
                t += sw.Elapsed;
                sw.Reset();
            }
            Console.WriteLine("Average on Slow Validator: " + new TimeSpan((long)(t.Ticks / 1000d)));
        }
        public override Expression Build(JSchemaExpressionBuilder builder, JSchema schema, Expression token)
        {
            if (schema.OneOf.Count == 0)
            {
                return(null);
            }

            return(OneOf(schema.OneOf.Select(i => builder.Eval(i, token))));
        }
Ejemplo n.º 3
0
        Expression BuildPatternProperty(JSchemaExpressionBuilder builder, string propertyPattern, JSchema propertySchema, Expression o)
        {
            if (o.Type != typeof(JObject))
            {
                throw new ArgumentException(nameof(o));
            }

            return(CallThis(nameof(PatternProperty), Expression.Constant(propertyPattern), EvalSchemaFunc(builder, propertySchema), o));
        }
        public void Should_fail_to_validate_const_integer()
        {
            var s = new JSchema()
            {
                Const = 1
            };
            var o = new JValue(2);
            var r = JSchemaExpressionBuilder.CreateDefault().Build(s).Compile().Invoke(o);

            r.Should().BeFalse();
        }
Ejemplo n.º 5
0
        public override Expression Build(JSchemaExpressionBuilder builder, JSchema schema, Expression token)
        {
            if (schema.Format == null)
            {
                return(null);
            }

            return(IfThenElseTrue(
                       IsTokenType(token, JTokenType.String),
                       ValidateFormat(schema.Format, Expression.Convert(token, typeof(string)))));
        }
        public void Should_validate_recursive_ref()
        {
            var s = JSchema.Parse("{ 'properties': { 'Prop1': { '$ref': '#' }, 'Prop2': { 'const': 'value' } } }");
            var o = new JObject()
            {
                ["Prop1"] = new JObject()
                {
                    ["Prop1"] = null
                }
            };
            var r = JSchemaExpressionBuilder.CreateDefault().Build(s).Compile().Invoke(o);

            r.Should().BeTrue();
        }
        public void Should_skip_validating_single_property_with_const()
        {
            var s = new JSchema()
            {
                Properties = { ["Prop1"] = new JSchema()
                               {
                               Const = 1
                               } }
            };
            var o = new JObject()
            {
                ["Prop2"] = 2
            };
            var r = JSchemaExpressionBuilder.CreateDefault().Build(s).Compile().Invoke(o);

            r.Should().BeTrue();
        }
Ejemplo n.º 8
0
        IEnumerable <Expression> BuildPropertiesAll(JSchemaExpressionBuilder builder, JSchema schema, Expression o)
        {
            if (schema.Properties.Count > 0)
            {
                yield return(IfThenElseTrue(
                                 IsTokenType(o, JTokenType.Object),
                                 AllOf(schema.Properties.Select(i =>
                                                                BuildProperty(builder, i.Key, i.Value, Expression.Convert(o, typeof(JObject)))))));
            }

            if (schema.PatternProperties.Count > 0)
            {
                yield return(IfThenElseTrue(
                                 IsTokenType(o, JTokenType.Object),
                                 AllOf(schema.PatternProperties.Select(i =>
                                                                       BuildPatternProperty(builder, i.Key, i.Value, Expression.Convert(o, typeof(JObject)))))));
            }

            if (schema.AllowAdditionalProperties == false)
            {
                yield return(IfThenElseTrue(
                                 IsTokenType(o, JTokenType.Object),
                                 CallThis(
                                     nameof(AllowAdditionalProperties),
                                     Expression.Constant(schema),
                                     Expression.Convert(o, typeof(JObject)))));
            }
            else if (schema.AdditionalProperties != null)
            {
                var p = Expression.Parameter(typeof(JToken));

                yield return(IfThenElseTrue(
                                 IsTokenType(o, JTokenType.Object),
                                 CallThis(
                                     nameof(AdditionalProperties),
                                     Expression.Constant(schema),
                                     Expression.Convert(o, typeof(JObject)),
                                     EvalSchemaFunc(builder, schema.AdditionalProperties))));
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Returns an expression that returns a delegate to evaluate the schema.
        /// </summary>
        /// <param name="schema"></param>
        /// <returns></returns>
        protected Expression EvalSchemaFunc(JSchemaExpressionBuilder builder, JSchema schema)
        {
            var p = Expression.Parameter(typeof(JToken));

            return(Expression.Lambda <Func <JToken, bool> >(builder.Eval(schema, p), p));
        }
Ejemplo n.º 10
0
 public abstract Expression Build(JSchemaExpressionBuilder builder, JSchema schema, Expression token);
Ejemplo n.º 11
0
 Expression BuildProperties(JSchemaExpressionBuilder builder, JSchema schema, Expression o)
 {
     return(AllOf(BuildPropertiesAll(builder, schema, o).Where(i => i != null)));
 }
Ejemplo n.º 12
0
 public override Expression Build(JSchemaExpressionBuilder builder, JSchema schema, Expression token)
 {
     return(BuildProperties(builder, schema, token));
 }