解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
2.95 KiB
X
using NewLife;
using NewLife.Serialization;
using Xunit;

namespace XUnitTest.Serialization;

public class JsonReaderTests
{
    private readonly JsonReader _reader = new();

    [Fact]
    public void Read_String()
    {
        var json = "{\"Name\":\"hello\"}";
        var result = _reader.Read<Person>(json);

        Assert.NotNull(result);
        Assert.Equal("hello", result.Name);
    }

    [Fact]
    public void Read_Int32()
    {
        var json = "{\"value\":42}";
        var result = _reader.Read<IntHolder>(json);

        Assert.NotNull(result);
        Assert.Equal(42, result.Value);
    }

    [Fact]
    public void Read_Boolean()
    {
        var json = "{\"flag\":true}";
        var result = _reader.Read<FlagHolder>(json);

        Assert.NotNull(result);
        Assert.True(result.Flag);
    }

    [Fact]
    public void Read_Null()
    {
        var json = "{\"Name\":null}";
        var result = _reader.Read<Person>(json);

        Assert.NotNull(result);
        Assert.Null(result.Name);
    }

    [Fact]
    public void Read_SimpleObject()
    {
        var json = "{\"Name\":\"test\",\"Age\":30}";
        var result = _reader.Read<Person>(json);

        Assert.NotNull(result);
        Assert.Equal("test", result.Name);
        Assert.Equal(30, result.Age);
    }

    [Fact]
    public void Read_NestedObject()
    {
        var json = "{\"Title\":\"Engineer\",\"Person\":{\"Name\":\"Alice\",\"Age\":28}}";
        var result = _reader.Read<Job>(json);

        Assert.NotNull(result);
        Assert.Equal("Engineer", result.Title);
        Assert.NotNull(result.Person);
        Assert.Equal("Alice", result.Person.Name);
        Assert.Equal(28, result.Person.Age);
    }

    [Fact]
    public void Read_Array()
    {
        var json = "[1,2,3,4,5]";
        var result = _reader.Read<Int32[]>(json);

        Assert.NotNull(result);
        Assert.Equal(5, result.Length);
        Assert.Equal(1, result[0]);
        Assert.Equal(5, result[4]);
    }

    [Fact]
    public void Read_EmptyObject()
    {
        var json = "{}";
        var result = _reader.Read<Person>(json);

        Assert.NotNull(result);
        Assert.Null(result.Name);
        Assert.Equal(0, result.Age);
    }

    [Fact]
    public void Read_TypeOverload()
    {
        var json = "{\"Name\":\"hello\"}";
        var result = _reader.Read(json, typeof(Person)) as Person;

        Assert.NotNull(result);
        Assert.Equal("hello", result.Name);
    }

    [Fact]
    public void Read_InvalidJson()
    {
        Assert.Throws<XException>(() => _reader.Read<String>("not json"));
    }

    public class Person
    {
        public String? Name { get; set; }
        public Int32 Age { get; set; }
    }

    public class Job
    {
        public String? Title { get; set; }
        public Person? Person { get; set; }
    }

    public class IntHolder
    {
        public Int32 Value { get; set; }
    }

    public class FlagHolder
    {
        public Boolean Flag { get; set; }
    }
}