Twig accepts abs filter, added 2 more tests.
This commit is contained in:
@@ -69,11 +69,15 @@ class TwigSceneRenderer
|
||||
// throwing an exception.
|
||||
try {
|
||||
$template = $this->twig->createTemplate($string);
|
||||
} catch (SecurityError $e) {
|
||||
} catch (SecurityError | SyntaxError $e) {
|
||||
if ($ignoreErrors) {
|
||||
return $string;
|
||||
} else {
|
||||
if ($e instanceof SecurityError) {
|
||||
throw new InsecureTwigTemplateError("Template contains illegal calls: {$e->getMessage()}");
|
||||
} else {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,7 +98,11 @@ class TwigSceneRenderer
|
||||
if ($ignoreErrors) {
|
||||
return $string;
|
||||
} else {
|
||||
if ($e instanceof SecurityError) {
|
||||
throw new InsecureTwigTemplateError("Template contains illegal calls: {$e->getMessage()}");
|
||||
} else {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +117,7 @@ class TwigSceneRenderer
|
||||
public function getSecurityPolicy(): SecurityPolicy
|
||||
{
|
||||
$tags = ["if"];
|
||||
$filters = ["lower", "upper", "escape", "round"];
|
||||
$filters = ["lower", "upper", "escape", "round", "abs"];
|
||||
$functions = ["range"];
|
||||
$methods = [
|
||||
Character::class => ["getDisplayName", "getLevel", "isAlive", "getHealth", "getMaxHealth", "getProperty"],
|
||||
|
||||
@@ -26,6 +26,9 @@ class TwigSceneRendererTest extends LotGDTestCase
|
||||
$character->method("getHealth")->willReturn(10);
|
||||
$character->method("getMaxHealth")->willReturn(100);
|
||||
$character->method("isAlive")->willReturn(true);
|
||||
$character->method("getProperty")->willReturnCallback(function ($name, $default=null) {
|
||||
return $default;
|
||||
});
|
||||
|
||||
# Get mock game
|
||||
$game = $this->getMockBuilder(Game::class)
|
||||
@@ -104,6 +107,46 @@ class TwigSceneRendererTest extends LotGDTestCase
|
||||
$this->assertSame($result, $renderResult);
|
||||
}
|
||||
|
||||
public function testIfTwigSceneRendererParsesStringsWithCharacterProperty()
|
||||
{
|
||||
[$game, $viewpoint, $character, $eventManager] = $this->getMockeries();
|
||||
$eventManager->method("publish")->willReturnArgument(1);
|
||||
|
||||
# Get renderer
|
||||
$renderer = new TwigSceneRenderer($game);
|
||||
|
||||
# Prepare the template string.
|
||||
$template = "Character has {{ Character.getProperty('a/goldiNBank', -10) }} gold in bank.";
|
||||
|
||||
$result = "Character has -10 gold in bank.";
|
||||
|
||||
# Create the result
|
||||
$renderResult = $renderer->render($template, $viewpoint);
|
||||
|
||||
# Assert result
|
||||
$this->assertSame($result, $renderResult);
|
||||
}
|
||||
|
||||
public function testIfTwigSceneRendererAccepsAbsFIlter()
|
||||
{
|
||||
[$game, $viewpoint, $character, $eventManager] = $this->getMockeries();
|
||||
$eventManager->method("publish")->willReturnArgument(1);
|
||||
|
||||
# Get renderer
|
||||
$renderer = new TwigSceneRenderer($game);
|
||||
|
||||
# Prepare the template string.
|
||||
$template = "Character has a debt of {{ Character.getProperty('a/goldiNBank', -10)|abs }} gold.";
|
||||
|
||||
$result = "Character has a debt of 10 gold.";
|
||||
|
||||
# Create the result
|
||||
$renderResult = $renderer->render($template, $viewpoint);
|
||||
|
||||
# Assert result
|
||||
$this->assertSame($result, $renderResult);
|
||||
}
|
||||
|
||||
public function testIfViewpointDataCanBeAccessed()
|
||||
{
|
||||
[$game, $viewpoint, $character, $eventManager] = $this->getMockeries();
|
||||
|
||||
Reference in New Issue
Block a user