v9.10.2019.0101  全面巩固批量Insert/Update/Upsert,支持数据备份、恢复和同步,支持实体列表保存到文件以及加载
大石头 authored at 2019-01-01 13:38:33
1.55 KiB
X
using NewLife.Serialization;
using Xunit;

namespace XUnitTest.Serialization;

/// <summary>XML解析器测试</summary>
public class XmlParserTests
{
    [Fact(DisplayName = "解析简单XML")]
    public void ParseSimpleXml()
    {
        var xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<root>
    <name>NewLife</name>
    <value>123</value>
</root>";

        var dic = XmlParser.Decode(xml);
        Assert.NotNull(dic);
        Assert.Equal("NewLife", dic["name"]);
        Assert.Equal("123", dic["value"]);
    }

    [Fact(DisplayName = "解析嵌套XML")]
    public void ParseNestedXml()
    {
        var xml = @"<Config>
    <App>
        <Id>1</Id>
        <Name>Test</Name>
    </App>
    <Debug>true</Debug>
</Config>";

        var dic = XmlParser.Decode(xml);
        Assert.NotNull(dic);

        // App 应为嵌套字典
        var app = dic["App"] as IDictionary<String, Object?>;
        Assert.NotNull(app);
        Assert.Equal("1", app!["Id"]);
        Assert.Equal("Test", app["Name"]);

        Assert.Equal("true", dic["Debug"]);
    }

    [Fact(DisplayName = "解析带属性的XML")]
    public void ParseAttributes()
    {
        var xml = @"<Response>
    <Status Code=""200"" />
</Response>";

        var dic = XmlParser.Decode(xml);
        Assert.NotNull(dic);
        // 属性值被读取到字典中
        Assert.Equal("200", dic["Code"]);
    }

    [Fact(DisplayName = "解析空XML抛出异常")]
    public void ParseEmptyThrowsException()
    {
        Assert.Throws<System.Xml.XmlException>(() => XmlParser.Decode(""));
    }
}