summaryrefslogtreecommitdiff
blob: 86b7f6e57accf757914355b473d64fa04bd90da7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
/**
 * @file
 * @author Abijeet Patro
 * @license GPL-2.0-or-later
 */

class RegexInsertablesSuggesterTest extends PHPUnit\Framework\TestCase {
	/**
	 * @dataProvider getTestRegexInsertableProvider
	 */
	public function testRegexInsertable( $text, $params, $expectedVals ) {
		$insertablesSuggester = new RegexInsertablesSuggester( $params );
		$insertables = $insertablesSuggester->getInsertables( $text );

		$this->assertCount( count( $expectedVals ), $insertables,
			'should return all the expected insertables.' );

		foreach ( $expectedVals as $i => $values ) {
			$this->assertEquals( $values['display'], $insertables[$i]->getDisplayText(),
				'should return the correct display text.' );
			$this->assertEquals( $values['pre'], $insertables[$i]->getPreText(),
				'should return the correct pre text.' );
			$this->assertEquals( $values['post'], $insertables[$i]->getPostText(),
				'should return the correct post text.' );
		}
	}

	public function getTestRegexInsertableProvider() {
		yield [
			'Hello $name! I\'m $myname',
			[
				'regex' => '/\$[a-z0-9]+/'
			],
			[
				[ 'display' => '$name', 'pre' => '$name', 'post' => '' ],
				[ 'display' => '$myname', 'pre' => '$myname', 'post' => '' ],
			]
		];

		yield [
			'<html> <rocks>',
			[
				'regex' => '/(?<display>\<[a-z]+>)/',
				'display' => '$display',
			],
			[
				[ 'display' => '<html>', 'pre' => '<html>', 'post' => '' ],
				[ 'display' => '<rocks>', 'pre' => '<rocks>', 'post' => '' ]
			]
		];

		yield [
			'[Hello]($1) [World]($2)',
			[
				'regex' => '/(?<pre>\[)[^]]+(?<post>\]\([^)]+\))/',
				'display' => '$pre$post',
				'pre' => '$pre',
				'post' => '$post'
			],
			[
				[ 'display' => '[]($1)', 'pre' => '[', 'post' => ']($1)' ],
				[ 'display' => '[]($2)', 'pre' => '[', 'post' => ']($2)' ]
			]
		];
	}
}