assertInstanceOf(\rcube_string_replacer::class, $sr, 'Class constructor'); } /** * @dataProvider provide_replace_cases */ #[DataProvider('provide_replace_cases')] public function test_replace($input, $output) { $replacer = new \rcube_string_replacer(); $result = $replacer->replace($input); $result = $replacer->resolve($result); $this->assertSame($output, $result); } /** * Data for test_replace() */ public static function provide_replace_cases(): iterable { return [ ['http://domain.tld/path*path2', 'http://domain.tld/path*path2'], ["Click this link:\nhttps://mail.xn--brderli-o2a.ch/rc/ EOF", "Click this link:\nhttps://mail.xn--brderli-o2a.ch/rc/ EOF"], ['Start http://localhost/?foo End', 'Start http://localhost/?foo End'], ['http://localhost/?foo=bar. Period', 'http://localhost/?foo=bar. Period'], ['www.domain.tld', 'www.domain.tld'], ['WWW.DOMAIN.TLD', 'WWW.DOMAIN.TLD'], ['[http://link.com]', '[http://link.com]'], ['http://link.com?a[]=1', 'http://link.com?a[]=1'], ['http://link.com?a[]', 'http://link.com?a[]'], ['(http://link.com)', '(http://link.com)'], ['http://link.com?a(b)c', 'http://link.com?a(b)c'], ['http://link.com?(link)', 'http://link.com?(link)'], ['https://github.com/a/b/compare/3a0f82...1f4b2a after', 'https://github.com/a/b/compare/3a0f82...1f4b2a after'], ['http://', 'http://'], ['http://', 'http://'], ['test test@www.test test', 'test test@www.test test'], ["test 'test@www.test' test", "test 'test@www.test' test"], ['test "test@www.test" test', 'test "test@www.test" test'], ['a 1@1.com www.domain.tld', 'a 1@1.com www.domain.tld'], [' www.domain.tld ', ' www.domain.tld '], [' www.domain.tld/#!download|856p1|2 ', ' www.domain.tld/#!download|856p1|2 '], // #1489898: allow some unicode characters ['https://www.google.com/maps/place/New+York,+État+de+New+York/@40.7056308,-73.9780035,11z/data=!3m1!4b1!4m2!3m1!1s0x89c24fa5d33f083b:0xc80b8f06e177fe62', 'https://www.google.com/maps/place/New+York,+État+de+New+York/@40.7056308,-73.9780035,11z/data=!3m1!4b1!4m2!3m1!1s0x89c24fa5d33f083b:0xc80b8f06e177fe62', ], ]; } /** * Test link references */ public function test_linkrefs() { $input = "This is a sample message [1] to test the linkref [ref0] replacement feature of [Roundcube].[ref<0]\n" . "[1] http://en.wikipedia.org/wiki/Email\n" . "[ref0] www.link-ref.com\n"; $replacer = new \rcube_string_replacer(); $result = $replacer->replace($input); $result = $replacer->resolve($result); $this->assertStringContainsString('[1] to', $result, 'Numeric linkref replacements'); $this->assertStringContainsString('[ref0] repl', $result, 'Alphanum linkref replacements'); $this->assertStringContainsString('of [Roundcube].[ref<0]', $result, "Don't touch strings without an index entry"); } }