From 5a198f8f0bcaba3a81df522b8e693b16248f881d Mon Sep 17 00:00:00 2001 From: JaguarJack Date: Thu, 18 Jun 2020 10:50:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Ephpunit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 8 +- composer.lock | 1728 ++++++++++++++++++++++++++++++++++++++- logo.png | Bin 20647 -> 0 bytes phpunit.xml | 31 + tests/unit/TrieTest.php | 49 ++ 5 files changed, 1814 insertions(+), 2 deletions(-) delete mode 100644 logo.png create mode 100644 phpunit.xml create mode 100644 tests/unit/TrieTest.php diff --git a/composer.json b/composer.json index 55ed9f2..9c9d2be 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,8 @@ }, "require-dev": { "symfony/var-dumper": "^4.2", - "topthink/think-trace":"^1.0" + "topthink/think-trace":"^1.0", + "phpunit/phpunit": "^8.5" }, "autoload": { "psr-4": { @@ -43,6 +44,11 @@ "": "extend/" } }, + "autoload-dev": { + "psr-4": { + "catchAdmin\\tests\\": "tests" + } + }, "config": { "preferred-install": "dist" }, diff --git a/composer.lock b/composer.lock index 96d00ed..050b637 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "090f305c46b5fc3ad9390731d5331637", + "content-hash": "57ac309e289a6f9d509e996f4c0a65d3", "packages": [ { "name": "aliyuncs/oss-sdk-php", @@ -3813,6 +3813,1631 @@ } ], "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-05-29T17:27:14+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2020-01-17T21:11:47+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2020-04-27T09:25:28+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" + }, + "require-dev": { + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2020-02-22T12:28:44+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "^7.2", + "mockery/mockery": "~1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2020-02-18T18:59:58+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2020-03-05T15:02:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "7.0.10", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", + "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.1.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.2.2", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.2.2" + }, + "suggest": { + "ext-xdebug": "^2.7.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2019-11-20T13:55:58+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2018-09-13T20:33:42+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2019-06-07T04:22:29+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2019-09-17T06:23:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "8.5.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "3f9c4079d1407cd84c51c02c6ad1df6ec2ed1348" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3f9c4079d1407cd84c51c02c6ad1df6ec2ed1348", + "reference": "3f9c4079d1407cd84c51c02c6ad1df6ec2ed1348", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/instantiator": "^1.2.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.9.1", + "phar-io/manifest": "^1.0.3", + "phar-io/version": "^2.0.1", + "php": "^7.2", + "phpspec/prophecy": "^1.8.1", + "phpunit/php-code-coverage": "^7.0.7", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.2", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.2", + "sebastian/exporter": "^3.1.1", + "sebastian/global-state": "^3.0.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.3", + "sebastian/version": "^2.0.1" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0.0" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-15T10:45:47+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-02-04T06:01:07+00:00" + }, + { + "name": "sebastian/environment", + "version": "4.2.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2019-11-20T08:46:58+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2019-09-14T09:02:43+00:00" + }, + { + "name": "sebastian/global-state", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2019-02-01T05:30:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" + }, + { + "name": "sebastian/type", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", + "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "time": "2019-07-02T08:10:15+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:14:59+00:00" + }, { "name": "symfony/var-dumper", "version": "v4.4.8", @@ -3909,6 +5534,52 @@ ], "time": "2020-04-12T16:14:02+00:00" }, + { + "name": "theseer/tokenizer", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-06-13T22:48:21+00:00" + }, { "name": "topthink/think-trace", "version": "v1.3", @@ -3961,6 +5632,61 @@ ], "description": "thinkphp debug trace", "time": "2020-03-18T07:59:53+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "9dc4f203e36f2b486149058bade43c851dd97451" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/9dc4f203e36f2b486149058bade43c851dd97451", + "reference": "9dc4f203e36f2b486149058bade43c851dd97451", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2020-06-16T10:16:42+00:00" } ], "aliases": [], diff --git a/logo.png b/logo.png deleted file mode 100644 index 5d52ded0188741a99413ba702e1f037e45a84718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20647 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 + + + + ./tests/feature + + + + ./tests/unit + + + + + ./app + + + + + + + + + diff --git a/tests/unit/TrieTest.php b/tests/unit/TrieTest.php new file mode 100644 index 0000000..b095bbb --- /dev/null +++ b/tests/unit/TrieTest.php @@ -0,0 +1,49 @@ +add($word); + } + + return $trie->getTries(); + } + public function testData() + { + $this->assertEquals([ + '你' => ['大' => ['爷' => ['end' => true]]], + '尼' => ['玛' => ['end' => true]], + 'S' => ['B' => ['end' => true]], + ], $this->getTries()); + } + + public function testReplace() + { + $string = '你大爷的真尼玛SB'; + + $this->assertEquals('***的真****',(new Trie())->replace($this->getTries(), $string)); + } + + public function testHasSensitiveWord() + { + $string = '你大爷的真尼玛SB'; + + $res = (new Trie())->getSensitiveWords($this->getTries(), $string, false); + + + $this->assertEquals('你大爷', $res); + } +} \ No newline at end of file