add CatCode test

This commit is contained in:
sunxyw
2022-12-23 17:15:39 +08:00
parent 5e8f80b626
commit 1d131871f1
2 changed files with 79 additions and 5 deletions

View File

@@ -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,14 +24,13 @@ class CatCode
}
return $str;
}
if ($message_segment instanceof MessageSegment) {
return self::segment2CatCode($message_segment);
}
if (is_string($message_segment)) {
return $message_segment;
}
return '';
}
/**
* 转义CatCode的特殊字符

View 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);
}
}