mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-06-02 22:14:30 -05:00
Validator checks elements in Array/List. Validator allows Count == 0
This commit is contained in:
parent
cbd158c81d
commit
4d01aff7e3
|
|
@ -330,5 +330,55 @@ namespace UniJSON
|
||||||
|
|
||||||
Assert.True(c.IsEmpty());
|
Assert.True(c.IsEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class HasArrayOBject
|
||||||
|
{
|
||||||
|
[ItemJsonSchema(Minimum = 0.0, Maximum = 1.0)]
|
||||||
|
public float[] xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void HasArrayObjectValidator()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
var c = new JsonSchemaValidationContext("test")
|
||||||
|
{
|
||||||
|
EnableDiagnosisForNotRequiredFields = true,
|
||||||
|
};
|
||||||
|
|
||||||
|
var s = JsonSchema.FromType<HasArrayOBject>();
|
||||||
|
|
||||||
|
Assert.Null(s.Validator.Validate(c, new HasArrayOBject { xs = new float[] {} }));
|
||||||
|
Assert.Null(s.Validator.Validate(c, new HasArrayOBject { xs = new float[] { 0.5f } }));
|
||||||
|
Assert.NotNull(s.Validator.Validate(c, new HasArrayOBject { xs = new float[] { 1.5f } }));
|
||||||
|
|
||||||
|
Assert.True(c.IsEmpty());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class HasListObject
|
||||||
|
{
|
||||||
|
[ItemJsonSchema(Minimum = 0.0, Maximum = 1.0)]
|
||||||
|
public List<float> xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void HasListObjectValidator()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
var c = new JsonSchemaValidationContext("test")
|
||||||
|
{
|
||||||
|
EnableDiagnosisForNotRequiredFields = true,
|
||||||
|
};
|
||||||
|
|
||||||
|
var s = JsonSchema.FromType<HasListObject>();
|
||||||
|
|
||||||
|
Assert.Null(s.Validator.Validate(c, new HasListObject { xs = new List<float> {} }));
|
||||||
|
Assert.Null(s.Validator.Validate(c, new HasListObject { xs = new List<float> { 0.5f } }));
|
||||||
|
Assert.NotNull(s.Validator.Validate(c, new HasListObject { xs = new List<float> { 1.5f } }));
|
||||||
|
|
||||||
|
Assert.True(c.IsEmpty());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
@ -145,10 +146,12 @@ namespace UniJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
var count = GenericCounter<T>.Count(o);
|
var count = GenericCounter<T>.Count(o);
|
||||||
if (count == 0)
|
|
||||||
|
// Empty array is valid
|
||||||
|
/*if (count == 0)
|
||||||
{
|
{
|
||||||
return new JsonSchemaValidationException(context, "empty");
|
return new JsonSchemaValidationException(context, "empty");
|
||||||
}
|
}*/
|
||||||
|
|
||||||
if (MaxItems.HasValue && count > MaxItems.Value)
|
if (MaxItems.HasValue && count > MaxItems.Value)
|
||||||
{
|
{
|
||||||
|
|
@ -160,6 +163,31 @@ namespace UniJSON
|
||||||
return new JsonSchemaValidationException(context, "minItems");
|
return new JsonSchemaValidationException(context, "minItems");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var v = Items.Validator;
|
||||||
|
var t = o.GetType();
|
||||||
|
IEnumerable iter = null;
|
||||||
|
if (t.IsArray)
|
||||||
|
{
|
||||||
|
iter = o as Array;
|
||||||
|
}
|
||||||
|
else if (t.GetIsGenericList())
|
||||||
|
{
|
||||||
|
iter = o as IList;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new JsonSchemaValidationException(context, "non iterable object");
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach(var e in iter)
|
||||||
|
{
|
||||||
|
var ex = v.Validate(context, e);
|
||||||
|
if (ex != null)
|
||||||
|
{
|
||||||
|
return ex;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -252,7 +280,7 @@ namespace UniJSON
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Deserialize<T, U>(ListTreeNode<T> src, ref U dst)
|
public void Deserialize<T, U>(ListTreeNode<T> src, ref U dst)
|
||||||
where T : IListTreeItem, IValue<T>
|
where T : IListTreeItem, IValue<T>
|
||||||
{
|
{
|
||||||
src.Deserialize(ref dst);
|
src.Deserialize(ref dst);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user