mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-07-02 14:25:38 +08:00
add CatCode test
This commit is contained in:
@@ -11,7 +11,7 @@ class CatCode
|
||||
/**
|
||||
* 从 MessageSegment 转换为 CatCode 字符串
|
||||
*/
|
||||
public static function fromSegment(mixed $message_segment): string
|
||||
public static function fromSegment(array|MessageSegment|string $message_segment): string
|
||||
{
|
||||
// 传入的必须是段数组或段对象
|
||||
if (is_array($message_segment)) {
|
||||
@@ -24,13 +24,12 @@ class CatCode
|
||||
}
|
||||
return $str;
|
||||
}
|
||||
|
||||
if ($message_segment instanceof MessageSegment) {
|
||||
return self::segment2CatCode($message_segment);
|
||||
}
|
||||
if (is_string($message_segment)) {
|
||||
return $message_segment;
|
||||
}
|
||||
return '';
|
||||
|
||||
return $message_segment;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
75
tests/ZM/Utils/CatCodeTest.php
Normal file
75
tests/ZM/Utils/CatCodeTest.php
Normal file
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\ZM\Utils;
|
||||
|
||||
use OneBot\V12\Object\MessageSegment;
|
||||
use Tests\TestCase;
|
||||
use ZM\Utils\CatCode;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
class CatCodeTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideTestConvertFromSegment
|
||||
*/
|
||||
public function testConvertFromSegment(mixed $segment, string $expected): void
|
||||
{
|
||||
$this->assertSame($expected, CatCode::fromSegment($segment));
|
||||
}
|
||||
|
||||
public function provideTestConvertFromSegment(): array
|
||||
{
|
||||
return [
|
||||
'string' => ['[CatCode:mention,user_id=123456789]', '[CatCode:mention,user_id=123456789]'],
|
||||
'segment instance' => [new MessageSegment('mention', ['user_id' => '123456789']), '[CatCode:mention,user_id=123456789]'],
|
||||
'multiple segment instance' => [
|
||||
[
|
||||
new MessageSegment('mention', ['user_id' => '123456789']),
|
||||
new MessageSegment('text', ['text' => 'Hello']),
|
||||
],
|
||||
'[CatCode:mention,user_id=123456789]Hello',
|
||||
],
|
||||
'array contains non-segment' => [
|
||||
[
|
||||
new MessageSegment('mention', ['user_id' => '123456789']),
|
||||
'Hello',
|
||||
],
|
||||
'',
|
||||
],
|
||||
'non-string, non-segment, non-array' => [123, ''],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideTestEscapeText
|
||||
*/
|
||||
public function testEscapeText(string $text): void
|
||||
{
|
||||
$encoded = CatCode::encode($text);
|
||||
$decoded = CatCode::decode($encoded);
|
||||
$this->assertSame($text, $decoded);
|
||||
}
|
||||
|
||||
public function provideTestEscapeText(): array
|
||||
{
|
||||
return [
|
||||
["前缀是'['后缀是']', 还有以及一个特殊的&"],
|
||||
["[前缀是'['后缀是']', 还有以及一个特殊的&"],
|
||||
["前缀是'['后缀是']', 还有以及一个特殊的"],
|
||||
["&前缀是'['后缀是']', 还有以及一个特殊的"],
|
||||
["&前缀是'['后缀是']', 还有以及一个特殊的]"],
|
||||
];
|
||||
}
|
||||
|
||||
public function testEscapeTextForContent(): void
|
||||
{
|
||||
$text = "前缀是'['后缀是']', 还有以及一个特殊的&";
|
||||
$encoded = CatCode::encode($text, true);
|
||||
$decoded = CatCode::decode($encoded, true);
|
||||
$this->assertSame($text, $decoded);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user