UniVRM/UniJSON/Editor/Tests/Json/SchemaTests.cs
ousttrue df85433628 Merge commit 'df5f79584312cf4f6cc7ec1d73a78f6ba475c9ad' as 'UniJSON'
Co-authored-by: Deatrathias <dmailsec@gmail.com>
Co-authored-by: dj-kusuha <dj.kusuha+github@gmail.com>
Co-authored-by: ousttrue <ousttrue@gmail.com>
Co-authored-by: yutopp <yutopp@gmail.com>
2018-12-28 20:38:39 +09:00

135 lines
3.0 KiB
C#

#pragma warning disable 0649
using NUnit.Framework;
namespace UniJSON
{
public class SchemaTests
{
/// <summary>
/// http://json-schema.org/examples.html
/// </summary>
[JsonSchema(Title="Person")]
public class Person
{
[JsonSchema(Required = true)]
public string firstName;
[JsonSchema(Required = true)]
public string lastName;
[JsonSchema(Description = "Age in years", Minimum = 0)]
public int age;
}
[Test]
public void CreateFromClass()
{
var s = JsonSchema.FromType<Person>();
Assert.AreEqual("Person", s.Title);
var v = s.Validator as JsonObjectValidator;
Assert.AreEqual("Age in years", v.Properties["age"].Description);
Assert.AreEqual(new[] { "firstName", "lastName" }, v.Required);
var f = new JsonFormatter(2);
s.ToJson(f);
var json = f.ToString();
var parsed = JsonParser.Parse(json);
Assert.AreEqual(0, parsed["properties"]["age"]["minimum"].GetInt32());
}
public enum ProjectionType
{
Perspective,
Orthographic
}
class EnumStringTest
{
[JsonSchema(EnumSerializationType =EnumSerializationType.AsLowerString)]
public ProjectionType type;
}
class EnumIntTest
{
[JsonSchema(EnumSerializationType = EnumSerializationType.AsInt)]
public ProjectionType type;
}
[Test]
public void TestEnumAsString()
{
var json = @"
{
""type"": ""object"",
""properties"": {
""type"": {
""anyOf"": [
{
""enum"": [ ""perspective"" ]
},
{
""enum"": [ ""orthographic"" ]
},
{
""type"": ""string""
}
]
}
}
}
";
var fromJson = new JsonSchema();
fromJson.Parse(null, JsonParser.Parse(json), "enum test");
var fromType = JsonSchema.FromType<EnumStringTest>();
Assert.AreEqual(fromJson, fromType);
}
[Test]
public void TestEnumAsInt()
{
var json = @"
{
""type"": ""object"",
""properties"": {
""type"": {
""anyOf"": [
{
""enum"": [ 0 ]
},
{
""enum"": [ 1 ]
},
{
""type"": ""integer""
}
]
}
}
}
";
var fromJson = new JsonSchema();
fromJson.Parse(null, JsonParser.Parse(json), "enum test");
var fromType = JsonSchema.FromType<EnumIntTest>();
Assert.AreEqual(fromJson, fromType);
}
}
}