public void ArrayValidator() { var c = new JsonSchemaValidationContext("test"); { var v = new JsonArrayValidator(); v.MaxItems = 1; Assert.Null(v.Validate(c, new object[] { 0 })); Assert.NotNull(v.Validate(c, new object[] { 0, 1 })); } { var v = new JsonArrayValidator(); v.MinItems = 1; Assert.Null(v.Validate(c, new object[] { 0 })); Assert.NotNull(v.Validate(c, new object[] { })); } }
public static IJsonSchemaValidator Create(JsonValueType valueType, Type t = null, BaseJsonSchemaAttribute a = null, ItemJsonSchemaAttribute ia = null) { switch (valueType) { case JsonValueType.Integer: { var v = new JsonIntValidator(); if (a != null) { if (!double.IsNaN(a.Minimum)) { v.Minimum = (int)a.Minimum; } if (a.ExclusiveMinimum) { v.ExclusiveMinimum = a.ExclusiveMinimum; } if (!double.IsNaN(a.Maximum)) { v.Maximum = (int)a.Maximum; } if (a.ExclusiveMaximum) { v.ExclusiveMaximum = a.ExclusiveMaximum; } if (a.MultipleOf != 0) { v.MultipleOf = (int)a.MultipleOf; } } return(v); } case JsonValueType.Number: { var v = new JsonNumberValidator(); if (a != null) { if (!double.IsNaN(a.Minimum)) { v.Minimum = (int)a.Minimum; } if (a.ExclusiveMinimum) { v.ExclusiveMinimum = a.ExclusiveMinimum; } if (!double.IsNaN(a.Maximum)) { v.Maximum = (int)a.Maximum; } if (a.ExclusiveMaximum) { v.ExclusiveMaximum = a.ExclusiveMaximum; } if (a.MultipleOf != 0) { v.MultipleOf = (int)a.MultipleOf; } } return(v); } case JsonValueType.String: { var v = new JsonStringValidator(); if (a != null) { if (a.Pattern != null) { v.Pattern = new System.Text.RegularExpressions.Regex(a.Pattern); } } return(v); } case JsonValueType.Boolean: return(new JsonBoolValidator()); case JsonValueType.Array: { var v = new JsonArrayValidator(); if (a != null) { if (a.MinItems != 0) { v.MinItems = a.MinItems; } if (a.MaxItems != 0) { v.MaxItems = a.MaxItems; } if (t != null) { if (ia == null) { ia = new ItemJsonSchemaAttribute(); } Type elementType = null; if (t.IsArray) { elementType = t.GetElementType(); } else if (t.GetIsGenericList()) { elementType = t.GetGenericArguments().First(); } if (elementType != null) { /* * var sub = new JsonSchema * { * SkipComparison = ia.SkipSchemaComparison, * Validator = Create(elementType, ia, null) * }; */ var sub = JsonSchema.FromType(elementType, ia, null); v.Items = sub; } } } return(v); } case JsonValueType.Object: { var v = new JsonObjectValidator(); if (a != null) { if (a.MinProperties > 0) { v.MinProperties = a.MinProperties; } // props foreach (var prop in GetProperties(t, a.ExportFlags)) { v.Properties.Add(prop.Key, prop.Schema); if (prop.Required) { v.Required.Add(prop.Key); } if (prop.Dependencies != null) { v.Dependencies.Add(prop.Key, prop.Dependencies); } } } if (ia != null) { var sub = new JsonSchema { SkipComparison = ia.SkipSchemaComparison, Validator = Create(typeof(object), ia, null) }; v.AdditionalProperties = sub; } return(v); } default: throw new NotImplementedException(); } }