forked from codeigniter4/CodeIgniter4
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParserPluginTest.php
More file actions
158 lines (119 loc) · 4.72 KB
/
ParserPluginTest.php
File metadata and controls
158 lines (119 loc) · 4.72 KB
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<?php
declare(strict_types=1);
/**
* This file is part of CodeIgniter 4 framework.
*
* (c) CodeIgniter Foundation <[email protected]>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace CodeIgniter\View;
use CodeIgniter\Test\CIUnitTestCase;
use CodeIgniter\Validation\Validation;
use Config\Services;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\PreserveGlobalState;
use PHPUnit\Framework\Attributes\RunInSeparateProcess;
use PHPUnit\Framework\Attributes\WithoutErrorHandler;
/**
* @internal
*/
#[Group('Others')]
final class ParserPluginTest extends CIUnitTestCase
{
private Parser $parser;
private Validation $validator;
protected function setUp(): void
{
parent::setUp();
Services::reset(true);
$this->parser = service('parser');
$this->validator = service('validation');
}
public function testCurrentURL(): void
{
$template = '{+ current_url +}';
$this->assertSame(current_url(), $this->parser->renderString($template));
}
#[Group('SeparateProcess')]
#[PreserveGlobalState(false)]
#[RunInSeparateProcess]
#[WithoutErrorHandler]
public function testPreviousURL(): void
{
$template = '{+ previous_url +}';
// Ensure a previous URL exists to work with.
session()->set('_ci_previous_url', 'http://example.com/foo');
$this->assertSame(previous_url(), $this->parser->renderString($template));
}
public function testMailto(): void
{
$template = '{+ mailto [email protected] title=Silly +}';
$this->assertSame(mailto('[email protected]', 'Silly'), $this->parser->renderString($template));
}
/**
* @see https://github.com/codeigniter4/CodeIgniter4/issues/3523
*/
public function testMailtoWithDashAndParenthesis(): void
{
$template = '{+ mailto [email protected] title="Online español test level" +}';
$this->assertSame(mailto('[email protected]', 'Online español test level'), $this->parser->renderString($template));
}
public function testSafeMailto(): void
{
$template = '{+ safe_mailto [email protected] title=Silly +}';
$this->assertSame(safe_mailto('[email protected]', 'Silly'), $this->parser->renderString($template));
}
public function testLang(): void
{
$template = '{+ lang Number.terabyteAbbr +}';
$this->assertSame('TB', $this->parser->renderString($template));
$template = '{+ lang Time.years 2024 +}';
$this->assertSame('2,024 years', $this->parser->renderString($template));
}
public function testValidationErrors(): void
{
$this->validator->setError('email', 'Invalid email address');
$template = '{+ validation_errors field=email +}';
$this->assertSame($this->setHints($this->validator->showError('email')), $this->setHints($this->parser->renderString($template)));
}
public function testRoute(): void
{
// prime the pump
$routes = service('routes');
// @TODO Do not put any placeholder after (:any).
// Because the number of parameters passed to the controller method may change.
$routes->add('path/(:any)/to/(:num)', 'myController::goto/$1/$2');
$template = '{+ route myController::goto string 13 +}';
$this->assertSame('/path/string/to/13', $this->parser->renderString($template));
}
public function testSiteURL(): void
{
$template = '{+ siteURL +}';
$this->assertSame('http://example.com/index.php', $this->parser->renderString($template));
$template = '{+ siteURL login +}';
$this->assertSame('http://example.com/index.php/login', $this->parser->renderString($template));
}
public function testValidationErrorsList(): void
{
$this->validator->setError('email', 'Invalid email address');
$this->validator->setError('username', 'User name must be unique');
$template = '{+ validation_errors +}';
$this->assertSame($this->setHints($this->validator->listErrors()), $this->setHints($this->parser->renderString($template)));
}
public function setHints(string $output): string
{
return preg_replace('/(<!-- DEBUG-VIEW+) (\w+) (\d+)/', '${1}', $output);
}
public function testCspScriptNonceWithCspEnabled(): void
{
$config = config('App');
$config->CSPEnabled = true;
$template = 'aaa {+ csp_script_nonce +} bbb';
$this->assertMatchesRegularExpression(
'/aaa nonce="[a-zA-Z0-9+\/-_]+[=]{0,2}" bbb/',
$this->parser->renderString($template),
);
}
}