WeChatDeveloper/tests/XmlTest.php
Anyon 27c6d03cbd test: 迁移测试目录并补充协议层用例
- 将 src/Tests 迁移到根目录 tests,并同步 composer autoload-dev 与 phpunit 配置。

- 补充 raw/download/upload、微信支付签名下载、XML 嵌套重复节点和消息加解密异常用例。

- 保持测试命名空间 We\Tests,统一通过 tests/bootstrap.php 引导 Composer 自动加载。
2026-05-08 00:29:23 +08:00

56 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
/**
* 微信 XML 编解码工具测试。
*/
namespace We\Tests;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
use We\Support\Xml;
/**
* 微信 XML 编解码工具测试用例。
*/
#[CoversClass(Xml::class)]
final class XmlTest extends TestCase
{
/**
* 测试重复节点和嵌套节点可正确解码。
*/
public function testDecodeKeepsRepeatedAndNestedNodes(): void
{
$xml = '<xml><Articles><item><Title><![CDATA[A]]></Title></item><item><Title><![CDATA[B]]></Title></item></Articles><Tag><![CDATA[x]]></Tag><Tag><![CDATA[y]]></Tag></xml>';
$data = Xml::decode($xml);
$this->assertSame('A', $data['Articles']['item'][0]['Title']);
$this->assertSame('B', $data['Articles']['item'][1]['Title']);
$this->assertSame(['x', 'y'], $data['Tag']);
}
/**
* 测试嵌套数组、列表节点和包含 CDATA 结束标记的文本可正确编码。
*/
public function testEncodeSupportsNestedListsAndCdataEndMarker(): void
{
$xml = Xml::encode([
'Articles' => [
'item' => [
['Title' => 'A', 'Description' => 'hello ]]> world'],
['Title' => 'B', 'Description' => 'second'],
],
],
]);
$data = Xml::decode($xml);
$this->assertSame('A', $data['Articles']['item'][0]['Title']);
$this->assertSame('hello ]]> world', $data['Articles']['item'][0]['Description']);
$this->assertSame('B', $data['Articles']['item'][1]['Title']);
}
}