| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- <?php
- /*
- * This file is part of the overtrue/pinyin.
- *
- * (c) overtrue <i@overtrue.me>
- *
- * This source file is subject to the MIT license that is bundled
- * with this source code in the file LICENSE.
- */
- namespace Overtrue\Pinyin\Test;
- use Overtrue\Pinyin\Pinyin;
- use PHPUnit\Framework\TestCase;
- abstract class AbstractDictLoaderTestCase extends TestCase
- {
- /**
- * @var Pinyin
- */
- protected $pinyin;
- public function testConvert()
- {
- $pinyin = $this->pinyin;
- $this->assertSame(array('nin', 'hao', '2018i', 'New', 'Year'), $pinyin->convert('您好&^2018i New Year!√ç', \PINYIN_KEEP_NUMBER | \PINYIN_KEEP_ENGLISH));
- $this->assertSame(array('nin', 'hao', 'i', 'New', 'Year'), $pinyin->convert('您好&^2018i New Year!√ç', \PINYIN_KEEP_ENGLISH));
- $this->assertSame(array('nin', 'hao', '2018'), $pinyin->convert('您好&^2018i New Year!√ç', \PINYIN_KEEP_NUMBER));
- $this->assertSame(array('nin', 'hao'), $pinyin->convert('您好!'));
- $this->assertSame(array('nin', 'hao'), $pinyin->convert('您好!', PINYIN_DEFAULT));
- $this->assertSame(array('nin2', 'hao3'), $pinyin->convert('您好!', PINYIN_ASCII_TONE));
- $this->assertSame(array('nín', 'hǎo'), $pinyin->convert('您好!', PINYIN_TONE));
- $this->assertSame(array('nín', 'hǎo', '2018'), $pinyin->convert('您好2018!', PINYIN_KEEP_NUMBER | PINYIN_TONE));
- $this->assertSame(array('nín', 'hǎo'), $pinyin->convert('您好 New Year!', PINYIN_KEEP_NUMBER | PINYIN_TONE));
- }
- public function testPermalink()
- {
- $pinyin = $this->pinyin;
- $this->assertSame('dai-zhe-xi-wang-qu-lyu-xing', $pinyin->permalink('带着希望去旅行'));
- $this->assertSame('dai_zhe_xi_wang_qu_lyu_xing', $pinyin->permalink('带着希望去旅行', '_'));
- $this->assertSame('dai.zhe.xi.wang.qu.lyu.xing', $pinyin->permalink('带着希望去旅行', '.'));
- $this->assertSame('daizhexiwangqulyuxing', $pinyin->permalink('带着希望去旅行', ''));
- // with number.
- $this->assertSame('1-dai-23-zhe-56-xi-wang-qu-abc-lyu-xing-568', $pinyin->permalink('1带23着。!5_6.=希望去abc旅行568'));
- $this->expectException('InvalidArgumentException', "Delimiter must be one of: '_', '-', '', '.'.");
- $this->assertSame('daizhexiwangqulyuxing', $pinyin->permalink('带着希望去旅行', '='));
- }
- public function testAbbr()
- {
- $pinyin = $this->pinyin;
- $this->assertSame('dzxwqlx', $pinyin->abbr('带着希望去旅行'));
- $this->assertSame('d z x w q l x', $pinyin->abbr('带着希望去旅行', ' '));
- $this->assertSame('d*z*x*w*q*l*x', $pinyin->abbr('带着希望去旅行', '*'));
- $this->assertSame('d--z--x--w--q--l--x', $pinyin->abbr('带着希望去旅行', '--'));
- // issue #27
- $this->assertEquals('dldnr', $pinyin->abbr('独立的女人'));
- $this->assertEquals('n', $pinyin->abbr('女'));
- $this->assertEquals('nr', $pinyin->abbr('女人'));
- // #91 #101
- $this->assertEquals('nh2017', $pinyin->abbr('你好2017!', \PINYIN_KEEP_NUMBER));
- $this->assertEquals('HNY2018', $pinyin->abbr('Happy New Year! 2018!', \PINYIN_KEEP_NUMBER | \PINYIN_KEEP_ENGLISH));
- }
- public function testSentence()
- {
- $pinyin = $this->pinyin;
- $this->assertSame('dai zhe xi wang qu lyu xing, bi dao da zhong dian geng mei hao!', $pinyin->sentence('带着希望去旅行,比到达终点更美好!'));
- // $this->assertSame('dai zhe xi 123 wang qu good lyu boy2 xing!.', $pinyin->sentence('带^着&*希123望去good旅boy2行!.'));
- // $this->assertSame('dai zhe xi 123 wang.. qu good lyu boy2 xing!.', $pinyin->sentence('--带^着&*希123望.。去good旅boy2行!.'));
- }
- public function testName()
- {
- $pinyin = $this->pinyin;
- $this->assertSame(array('shan'), $pinyin->name('单'));
- $this->assertSame(array('gu', 'dan'), $pinyin->name('孤单'));
- $this->assertSame(array('shan', 'dan', 'dan'), $pinyin->name('单单单'));
- $this->assertSame(array('chan', 'yu', 'dan'), $pinyin->name('单于单'));
- $this->assertSame(array('piao', 'dan', 'pu'), $pinyin->name('朴单朴'));
- $this->assertSame(array('yu', 'chi', 'pu'), $pinyin->name('尉迟朴'));
- $this->assertSame(array('wei', 'mou', 'mou'), $pinyin->name('尉某某'));
- $this->assertSame(array('yu', 'chi', 'mou', 'mou'), $pinyin->name('尉迟某某'));
- $this->assertSame(array('zhai', 'di', 'di'), $pinyin->name('翟翟翟'));
- // 以下两词在任何位置都不变
- $this->assertSame(array('mou', 'mou', 'yu', 'chi'), $pinyin->name('某某尉迟'));
- $this->assertSame(array('shan', 'chan', 'yu', 'dan'), $pinyin->name('单单于单'));
- }
- // test special words
- public function testSpecialWords()
- {
- $pinyin = $this->pinyin;
- $this->assertEquals('hello, world!', $pinyin->sentence('hello, world!'));
- $this->assertEquals('DNA jiàn dìng', $pinyin->sentence('DNA鉴定', \PINYIN_TONE));
- $this->assertEquals('21 sān tǐ zōng hé zhèng', $pinyin->sentence('21三体综合症', \PINYIN_TONE));
- $this->assertEquals('C pán', $pinyin->sentence('C盘', \PINYIN_TONE));
- $this->assertEquals('G diǎn', $pinyin->sentence('G点', \PINYIN_TONE));
- $this->assertEquals('zhōng dù xìng fèi shuǐ zhǒng', $pinyin->sentence('中度性肺水肿', \PINYIN_TONE));
- }
- // test multibyte non-Chinese character
- public function testSpecialWordsUsingAbbr()
- {
- $pinyin = $this->pinyin;
- $this->assertEquals('dfscdzz123r', $pinyin->abbr('Ⅲ度房室传导阻滞123人', PINYIN_KEEP_ENGLISH | PINYIN_KEEP_NUMBER));
- }
- // test Polyphone
- public function testPolyphone()
- {
- $pinyin = $this->pinyin;
- // 了
- $this->assertEquals(array('liǎo', 'rán'), $pinyin->convert('了然', PINYIN_TONE));
- $this->assertEquals(array('lái', 'le'), $pinyin->convert('来了', PINYIN_TONE));
- // 还
- $this->assertEquals(array('hái', 'yǒu'), $pinyin->convert('还有', PINYIN_TONE));
- $this->assertEquals(array('jiāo', 'huán'), $pinyin->convert('交还', PINYIN_TONE));
- // 什
- $this->assertEquals(array('shén', 'me'), $pinyin->convert('什么', PINYIN_TONE));
- $this->assertEquals(array('shí', 'jǐn'), $pinyin->convert('什锦', PINYIN_TONE));
- // 便
- $this->assertEquals(array('biàn', 'dāng'), $pinyin->convert('便当', PINYIN_TONE));
- $this->assertEquals(array('pián', 'yí'), $pinyin->convert('便宜', PINYIN_TONE));
- // 剥
- $this->assertEquals(array('bō', 'xuē'), $pinyin->convert('剥削', PINYIN_TONE));
- $this->assertEquals(array('bāo', 'pí', 'qì'), $pinyin->convert('剥皮器', PINYIN_TONE));
- // 不
- $this->assertEquals(array('péi', 'bú', 'shì'), $pinyin->convert('赔不是', PINYIN_TONE));
- $this->assertEquals(array('pǎo', 'le', 'hé', 'shàng', 'pǎo', 'bù', 'liǎo', 'miào'), $pinyin->convert('跑了和尚,跑不了庙', PINYIN_TONE));
- // 降
- $this->assertEquals(array('jiàng', 'wēn'), $pinyin->convert('降温', PINYIN_TONE));
- $this->assertEquals(array('tóu', 'xiáng'), $pinyin->convert('投降', PINYIN_TONE));
- // 都
- $this->assertEquals(array('shǒu', 'dū'), $pinyin->convert('首都', PINYIN_TONE));
- $this->assertEquals(array('dōu', 'shén', 'me', 'nián', 'dài', 'le'), $pinyin->convert('都什么年代了', PINYIN_TONE));
- // 乐
- $this->assertEquals(array('kuài', 'lè'), $pinyin->convert('快乐', PINYIN_TONE));
- $this->assertEquals(array('yīn', 'yuè'), $pinyin->convert('音乐', PINYIN_TONE));
- // 长
- $this->assertEquals(array('chéng', 'zhǎng'), $pinyin->convert('成长', PINYIN_TONE));
- $this->assertEquals(array('cháng', 'jiāng'), $pinyin->convert('长江', PINYIN_TONE));
- // 难
- $this->assertEquals(array('nàn', 'mín'), $pinyin->convert('难民', PINYIN_TONE));
- $this->assertEquals(array('nán', 'guò'), $pinyin->convert('难过', PINYIN_TONE));
- // 厦
- $this->assertEquals(array('dà', 'shà'), $pinyin->convert('大厦', PINYIN_TONE));
- $this->assertEquals(array('xià', 'mén'), $pinyin->convert('厦门', PINYIN_TONE));
- // 曾
- $this->assertEquals(array('céng', 'jīng'), $pinyin->convert('曾经', PINYIN_TONE));
- $this->assertEquals(array('xìng', 'zēng'), $pinyin->convert('姓曾', PINYIN_TONE));
- $this->assertEquals(array('zēng', 'xìng'), $pinyin->convert('曾姓', PINYIN_TONE));
- // 奇
- $this->assertEquals(array('qí', 'guài'), $pinyin->convert('奇怪', PINYIN_TONE));
- $this->assertEquals(array('jī', 'ǒu', 'jiào', 'yàn'), $pinyin->convert('奇偶校验', PINYIN_TONE));
- // 其它多音词
- $this->assertEquals(array('náo', 'zhí', 'wéi', 'qū'), $pinyin->convert('挠直为曲', PINYIN_TONE));
- $this->assertEquals(array('pī', 'fēng', 'mò', 'yuè'), $pinyin->convert('批风抹月', PINYIN_TONE));
- }
- /**
- * 测试字母+数字Bug.
- */
- public function testNumberWithAlpha()
- {
- $pinyin = $this->pinyin;
- $this->assertEquals('cè shì R60', $pinyin->sentence('测试R60', \PINYIN_TONE));
- $this->assertEquals('ce4 shi4 R60', $pinyin->sentence('测试R60', \PINYIN_ASCII_TONE));
- $this->assertEquals('ce shi R60', $pinyin->sentence('测试R60'));
- $this->assertEquals('ce ce5 shi Rr60', $pinyin->sentence('测ce5试Rr60'));
- $this->assertEquals('ce shi R50', $pinyin->sentence('测试R50'));
- $this->assertEquals('ce 3sh4i R50', $pinyin->sentence('测3sh4i R50'));
- $this->assertEquals('ce3sh4i R50', $pinyin->sentence('ce3sh4i R50'));
- $this->assertEquals('33ai4', $pinyin->sentence('33ai4'));
- $this->assertEquals('33ai4 ni', $pinyin->sentence('33ai4你'));
- $this->assertEquals('ai 334 ni', $pinyin->sentence('爱334你'));
- $this->assertEquals('aaaa1234', $pinyin->sentence('aaaa1234'));
- $this->assertEquals('aaaa_1234', $pinyin->sentence('aaaa_1234'));
- $this->assertEquals('ai45 liao wu sheng qu ce shi', $pinyin->sentence('ai45了无生趣测试'));
- $this->assertEquals('java gong cheng shi', $pinyin->sentence('java工程师'));
- }
- /**
- * 测试单个音的字.
- *
- * bug: #19
- * bug: #22
- * bug: #23
- * bug: #24
- * bug: #29
- * bug: #235
- * bug: #81
- */
- public function testSingleAccent()
- {
- $pinyin = $this->pinyin;
- $this->assertEquals('a le tai', $pinyin->sentence('阿勒泰'));
- $this->assertEquals('e er duo si', $pinyin->sentence('鄂尔多斯'));
- $this->assertEquals('zu', $pinyin->sentence('足'));
- $this->assertEquals('feng', $pinyin->sentence('冯'));
- $this->assertEquals('bao hu ping he', $pinyin->sentence('暴虎冯河'));
- $this->assertEquals('hé', $pinyin->sentence('和', PINYIN_TONE));
- $this->assertEquals('gěi', $pinyin->sentence('给', PINYIN_TONE));
- $this->assertEquals('là', $pinyin->sentence('腊', PINYIN_TONE));
- // # 28 词库不全
- $this->assertEquals('kun', $pinyin->sentence('堃'));
- // #29
- $this->assertEquals('dì', $pinyin->sentence('地', PINYIN_TONE));
- $this->assertEquals('zhi yu si di', $pinyin->sentence('置于死地'));
- // #35
- $this->assertEquals('ji xiao', $pinyin->sentence('技校'));
- $this->assertEquals('jiao zheng', $pinyin->sentence('校正'));
- // #45
- $this->assertEquals('luó', $pinyin->sentence('罗', PINYIN_TONE));
- // #58
- $this->assertEquals('fēi', $pinyin->sentence('飞', PINYIN_TONE));
- $this->assertEquals('jiāng', $pinyin->sentence('将', PINYIN_TONE));
- $this->assertEquals('míng jiàng', $pinyin->sentence('名将', PINYIN_TONE));
- $this->assertEquals('dì wáng jiàng xiàng', $pinyin->sentence('帝王将相', PINYIN_TONE));
- $this->assertEquals('dì wáng jiàng xiàng', $pinyin->sentence('帝王将相', PINYIN_TONE));
- $this->assertEquals('wèi shǒu wèi wěi', $pinyin->sentence('畏首畏尾', PINYIN_TONE));
- // #63
- $this->assertEquals('shěn', $pinyin->sentence('沈', PINYIN_TONE));
- $this->assertEquals('shěn yáng', $pinyin->sentence('沈阳', PINYIN_TONE));
- $this->assertEquals('chén yú luò yàn', $pinyin->sentence('沈鱼落雁', PINYIN_TONE));
- // #81
- $this->assertEquals('yuán yùn', $pinyin->sentence('圆晕', PINYIN_TONE));
- $this->assertEquals('guāng yùn', $pinyin->sentence('光晕', PINYIN_TONE));
- $this->assertEquals('yūn jué', $pinyin->sentence('晕厥', PINYIN_TONE));
- // #105 #112
- $this->assertEquals('èn', $pinyin->sentence('嗯', PINYIN_TONE));
- // #96
- $this->assertEquals('shén me', $pinyin->sentence('什么', PINYIN_TONE));
- $this->assertEquals('hái shuō shén me ne? huán gěi nǐ. hái gè pì!', $pinyin->sentence('还说什么呢?还给你。还个屁!', \PINYIN_TONE));
- // #82
- $this->assertEquals('wū lā tè qián qí', $pinyin->sentence('乌拉特前旗', PINYIN_TONE));
- $this->assertEquals('cháo yáng qū', $pinyin->sentence('朝阳区', PINYIN_TONE));
- $this->assertEquals('jì xī xiàn', $pinyin->sentence('绩溪县', PINYIN_TONE));
- $this->assertEquals('bǎi sè xiàn', $pinyin->sentence('百色县', PINYIN_TONE));
- $this->assertEquals('dū ān yáo zú zì zhì xiàn', $pinyin->sentence('都安瑶族自治县', PINYIN_TONE));
- $this->assertEquals('tǎ shí kù ěr gān', $pinyin->sentence('塔什库尔干', PINYIN_TONE));
- $this->assertEquals('cháng yáng tǔ jiā zú zì zhì xiàn', $pinyin->sentence('长阳土家族自治县', PINYIN_TONE));
- $this->assertEquals('mǎ wěi qū', $pinyin->sentence('马尾区', PINYIN_TONE));
- $this->assertEquals('sān dū shuǐ zú zì zhì xiàn', $pinyin->sentence('三都水族自治县', PINYIN_TONE));
- }
- public function testYu()
- {
- $this->assertEquals(array('lyu', 'xiu', 'cai'), $this->pinyin->convert('吕秀才'));
- $this->assertEquals(array('lv', 'xiu', 'cai'), $this->pinyin->convert('吕秀才', \PINYIN_UMLAUT_V));
- }
- public function testIssue175()
- {
- $this->assertEquals('yùn', $this->pinyin->sentence('貟', PINYIN_TONE));
- $this->assertEquals(['yun', 'xiu', 'cai'], $this->pinyin->name('貟秀才'));
- $this->assertEquals(['yun', 'xiu', 'cai'], $this->pinyin->name('贠秀才'));
- }
- public function testIssue138()
- {
- $this->assertEquals(['wu', 'la', 'gui'], $this->pinyin->convert('乌拉圭'));
- }
- public function testPhrase()
- {
- $pinyin = $this->pinyin;
- $this->assertEquals('bei3-jing1', $pinyin->phrase('北京', '-', \PINYIN_ASCII_TONE));
- }
- }
|