|
@@ -0,0 +1,179 @@
|
|
|
|
+<?php
|
|
|
|
+
|
|
|
|
+namespace Tests\Unit\Lexer;
|
|
|
|
+
|
|
|
|
+use Tests\TestCase;
|
|
|
|
+use Illuminate\Foundation\Testing\WithFaker;
|
|
|
|
+use App\Util\Lexer\Autolink;
|
|
|
|
+use App\Util\Lexer\Extractor;
|
|
|
|
+
|
|
|
|
+class UsernameTest extends TestCase
|
|
|
|
+{
|
|
|
|
+ /** @test **/
|
|
|
|
+ public function genericUsername()
|
|
|
|
+ {
|
|
|
|
+ $username = '@dansup';
|
|
|
|
+ $entities = Extractor::create()->extract($username);
|
|
|
|
+ $autolink = Autolink::create()->autolink($username);
|
|
|
|
+ $expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup" rel="external nofollow noopener" target="_blank">@dansup</a>';
|
|
|
|
+ $expectedEntity = [
|
|
|
|
+ "hashtags" => [],
|
|
|
|
+ "urls" => [],
|
|
|
|
+ "mentions" => [
|
|
|
|
+ "dansup",
|
|
|
|
+ ],
|
|
|
|
+ "replyto" => "dansup",
|
|
|
|
+ "hashtags_with_indices" => [],
|
|
|
|
+ "urls_with_indices" => [],
|
|
|
|
+ "mentions_with_indices" => [
|
|
|
|
+ [
|
|
|
|
+ "screen_name" => "dansup",
|
|
|
|
+ "indices" => [
|
|
|
|
+ 0,
|
|
|
|
+ 7,
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ ];
|
|
|
|
+ $this->assertEquals($expectedAutolink, $autolink);
|
|
|
|
+ $this->assertEquals($expectedEntity, $entities);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /** @test **/
|
|
|
|
+ public function usernameWithPeriod()
|
|
|
|
+ {
|
|
|
|
+ $username = '@dansup.two';
|
|
|
|
+ $autolink = Autolink::create()->autolink($username);
|
|
|
|
+ $entities = Extractor::create()->extract($username);
|
|
|
|
+ $expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup.two" rel="external nofollow noopener" target="_blank">@dansup.two</a>';
|
|
|
|
+ $expectedEntity = [
|
|
|
|
+ "hashtags" => [],
|
|
|
|
+ "urls" => [],
|
|
|
|
+ "mentions" => [
|
|
|
|
+ "dansup.two",
|
|
|
|
+ ],
|
|
|
|
+ "replyto" => "dansup.two",
|
|
|
|
+ "hashtags_with_indices" => [],
|
|
|
|
+ "urls_with_indices" => [],
|
|
|
|
+ "mentions_with_indices" => [
|
|
|
|
+ [
|
|
|
|
+ "screen_name" => "dansup.two",
|
|
|
|
+ "indices" => [
|
|
|
|
+ 0,
|
|
|
|
+ 11,
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ ];
|
|
|
|
+ $this->assertEquals($expectedAutolink, $autolink);
|
|
|
|
+ $this->assertEquals($expectedEntity, $entities);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /** @test **/
|
|
|
|
+ public function usernameWithDash()
|
|
|
|
+ {
|
|
|
|
+ $username = '@dansup-too';
|
|
|
|
+ $autolink = Autolink::create()->autolink($username);
|
|
|
|
+ $entities = Extractor::create()->extract($username);
|
|
|
|
+ $expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup-too" rel="external nofollow noopener" target="_blank">@dansup-too</a>';
|
|
|
|
+ $expectedEntity = [
|
|
|
|
+ "hashtags" => [],
|
|
|
|
+ "urls" => [],
|
|
|
|
+ "mentions" => [
|
|
|
|
+ "dansup-too",
|
|
|
|
+ ],
|
|
|
|
+ "replyto" => "dansup-too",
|
|
|
|
+ "hashtags_with_indices" => [],
|
|
|
|
+ "urls_with_indices" => [],
|
|
|
|
+ "mentions_with_indices" => [
|
|
|
|
+ [
|
|
|
|
+ "screen_name" => "dansup-too",
|
|
|
|
+ "indices" => [
|
|
|
|
+ 0,
|
|
|
|
+ 11,
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ ];
|
|
|
|
+ $this->assertEquals($expectedAutolink, $autolink);
|
|
|
|
+ $this->assertEquals($expectedEntity, $entities);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /** @test **/
|
|
|
|
+ public function usernameWithUnderscore()
|
|
|
|
+ {
|
|
|
|
+ $username = '@dansup_too';
|
|
|
|
+ $autolink = Autolink::create()->autolink($username);
|
|
|
|
+ $entities = Extractor::create()->extract($username);
|
|
|
|
+ $expectedAutolink = '<a class="u-url mention" href="https://pixelfed.dev/dansup_too" rel="external nofollow noopener" target="_blank">@dansup_too</a>';
|
|
|
|
+ $expectedEntity = [
|
|
|
|
+ "hashtags" => [],
|
|
|
|
+ "urls" => [],
|
|
|
|
+ "mentions" => [
|
|
|
|
+ "dansup_too",
|
|
|
|
+ ],
|
|
|
|
+ "replyto" => "dansup_too",
|
|
|
|
+ "hashtags_with_indices" => [],
|
|
|
|
+ "urls_with_indices" => [],
|
|
|
|
+ "mentions_with_indices" => [
|
|
|
|
+ [
|
|
|
|
+ "screen_name" => "dansup_too",
|
|
|
|
+ "indices" => [
|
|
|
|
+ 0,
|
|
|
|
+ 11,
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ ];
|
|
|
|
+ $this->assertEquals($expectedAutolink, $autolink);
|
|
|
|
+ $this->assertEquals($expectedEntity, $entities);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /** @test **/
|
|
|
|
+ public function multipleMentions()
|
|
|
|
+ {
|
|
|
|
+ $text = 'hello @dansup and @pixelfed.team from @username_underscore';
|
|
|
|
+ $autolink = Autolink::create()->autolink($text);
|
|
|
|
+ $entities = Extractor::create()->extract($text);
|
|
|
|
+ $expectedAutolink = 'hello <a class="u-url mention" href="https://pixelfed.dev/dansup" rel="external nofollow noopener" target="_blank">@dansup</a> and <a class="u-url mention" href="https://pixelfed.dev/pixelfed.team" rel="external nofollow noopener" target="_blank">@pixelfed.team</a> from <a class="u-url mention" href="https://pixelfed.dev/username_underscore" rel="external nofollow noopener" target="_blank">@username_underscore</a>';
|
|
|
|
+ $expectedEntity = [
|
|
|
|
+ "hashtags" => [],
|
|
|
|
+ "urls" => [],
|
|
|
|
+ "mentions" => [
|
|
|
|
+ "dansup",
|
|
|
|
+ "pixelfed.team",
|
|
|
|
+ "username_underscore",
|
|
|
|
+ ],
|
|
|
|
+ "replyto" => null,
|
|
|
|
+ "hashtags_with_indices" => [],
|
|
|
|
+ "urls_with_indices" => [],
|
|
|
|
+ "mentions_with_indices" => [
|
|
|
|
+ [
|
|
|
|
+ "screen_name" => "dansup",
|
|
|
|
+ "indices" => [
|
|
|
|
+ 6,
|
|
|
|
+ 13,
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ [
|
|
|
|
+ "screen_name" => "pixelfed.team",
|
|
|
|
+ "indices" => [
|
|
|
|
+ 18,
|
|
|
|
+ 32,
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ [
|
|
|
|
+ "screen_name" => "username_underscore",
|
|
|
|
+ "indices" => [
|
|
|
|
+ 38,
|
|
|
|
+ 58,
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ $this->assertEquals($expectedAutolink, $autolink);
|
|
|
|
+ $this->assertEquals($expectedEntity, $entities);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|