$_htxts = 0;
$result = preg_replace_callback_array([
- '/\{htxt id=([\'\"][^\'\"]+[\'\"])/' => function ($m) use (&$htxts) {
+ '/\{htxt id=(\"[-\w]+\")[ }]/' => function ($m) use (&$htxts) {
$htxts++;
return sprintf('{if $id == %s}%s', $m[1], $m[0]);
},
- '/\{htxt id=(\$\w+)}/' => function ($m) use (&$htxts) {
+ '/\{htxt id=(\'[-\w]+\')[ }]/' => function ($m) use (&$htxts) {
+ $htxts++;
+ return sprintf('{if $id == %s}%s', $m[1], $m[0]);
+ },
+ '/\{htxt id=(\$\w+)[ }]/' => function ($m) use (&$htxts) {
$htxts++;
return sprintf('{if $id == %s}%s', $m[1], $m[0]);
},
public function setUp(): void {
parent::setUp();
+ $this->useTransaction();
require_once 'CRM/Core/Smarty.php';
// Templates should normally be file names, but for unit-testing it's handy to use "string:" notation
/**
* @return array
*/
- public function scopeCases() {
+ public function supportedCases() {
$cases = [];
- $cases[] = ['yum yum apple!', '{htxt id="apple"}yum yum apple!{/htxt}', ['id' => 'apple']];
+ $cases[] = ['yum yum apple_pie!', '{htxt id="apple_pie"}yum yum apple_pie!{/htxt}', ['id' => 'apple_pie']];
+ $cases[] = ['yum yum Apple-Pie!', '{htxt id=\'Apple-Pie\'}yum yum Apple-Pie!{/htxt}', ['id' => 'Apple-Pie']];
+ $cases[] = ['yum yum apple!', '{htxt id="apple" other=stuff}yum yum apple!{/htxt}', ['id' => 'apple']];
$cases[] = ['', '{htxt id="apple"}yum yum apple!{/htxt}', ['id' => 'not me']];
$cases[] = ['yum yum banana!', '{htxt id=$dynamic}yum yum {$dynamic}!{/htxt}', ['id' => 'banana', 'dynamic' => 'banana']];
+ $cases[] = ['yum yum banana!', '{htxt id=$dynamic other=stuff}yum yum {$dynamic}!{/htxt}', ['id' => 'banana', 'dynamic' => 'banana']];
$cases[] = ['', '{htxt id=$dynamic}yum yum {$dynamic}!{/htxt}', ['id' => 'apple', 'dynamic' => 'banana']];
// More advanced forms of dynamic-id's might be nice, but this is currently the ceiling on what's needed.
return $cases;
}
+ public function unsupportedCases() {
+ $cases = [];
+ $cases[] = ['{htxt id=$dynamic.zx["$f{b}"]}not supported{/htxt}', []];
+ $cases[] = ['{htxt id=\'dragonfruit"}not supported{/htxt}', []];
+ $cases[] = ['{htxt id=\'apple\'"banana"]}not supported{/htxt}', []];
+ $cases[] = ['{htxt id=\'apple\'.banana]}not supported{/htxt}', []];
+ return $cases;
+ }
+
/**
- * @dataProvider scopeCases
+ * @dataProvider supportedCases
* @param string $expected
* @param string $input
* @param array $vars
}
}
- public function testUnsupported() {
+ /**
+ * @dataProvider unsupportedCases
+ * @param string $input
+ * @param array $vars
+ */
+ public function testUnsupported(string $input, array $vars) {
$smarty = CRM_Core_Smarty::singleton();
try {
- $smarty->fetch('string:{htxt id=$dynamic.zx["$f{b}"]}power parser!{/htxt}');
- $this->fail("Congratulations, the test failed! You are the road to a better parsing rule.");
+ $smarty->fetch('string:' . $input);
+ $this->fail("That should have thrown an error. Are you working on a better parsing rule?");
}
catch (Throwable $t) {
ob_end_flush();