diff --git a/tests/src/Kernel/FieldTest.php b/tests/src/Kernel/FieldTest.php index ba9ec69..fde6e0a 100644 --- a/tests/src/Kernel/FieldTest.php +++ b/tests/src/Kernel/FieldTest.php @@ -28,7 +28,7 @@ class FieldTest extends KernelTestBase { * * @var array */ - public static $modules = ['node', 'text', 'field', 'filter']; + public static $modules = ['node', 'text', 'field', 'filter', 'options']; /** * {@inheritdoc} @@ -64,7 +64,7 @@ class FieldTest extends KernelTestBase { $field_storage = FieldStorageConfig::create([ 'field_name' => 'test_field', 'entity_type' => 'user', - 'type' => 'reference', + 'type' => 'entity_reference', ]); $field_storage->save(); @@ -84,13 +84,34 @@ class FieldTest extends KernelTestBase { ], ]); $this->testFormat->save(); + + // Create a multi-value list_string field. + $field_storage = FieldStorageConfig::create([ + 'field_name' => 'test_list', + 'entity_type' => 'node', + 'type' => 'list_string', + 'cardinality' => 2, + 'settings' => [ + 'allowed_values' => [ + 'key1' => 'value1', + 'key2' => 'value2', + ] + ], + ]); + $field_storage->save(); + + $this->field = FieldConfig::create([ + 'field_name' => 'test_list', + 'entity_type' => 'node', + 'bundle' => 'article', + ])->save(); } /** * Tests [entity:field_name] tokens. */ public function testEntityFieldTokens() { - // Create a node with a value in the text field and test its token. + // Create a node with a value in its fields and test its tokens. $entity = Node::create([ 'title' => 'Test node title', 'type' => 'article', @@ -98,15 +119,28 @@ class FieldTest extends KernelTestBase { 'value' => 'foo', 'format' => $this->testFormat->id(), ], + 'test_list' => [ + 'value' => 'key1', + ], ]); $entity->save(); $this->assertTokens('node', ['node' => $entity], [ 'test_field' => Markup::create('foo'), - 'test_field:value' => 'foo', - 'test_field:format' => $format->id(), + 'test_list:0' => Markup::create('value1'), + ]); + + // Verify that no token was generated for the list_string's second value. + $this->assertNoTokens('node', ['node' => $entity], [ + 'test_list:1', ]); + // Test the test_list token metadata. + $tokenService = \Drupal::service('token'); + $token_info = $tokenService->getTokenInfo('node', 'test_list'); + $this->assertEqual($token_info['name'], 'test_list'); + $this->assertEqual($token_info['module'], 'token'); + // Create a node without a value in the text field and test its token. $entity = Node::create([ 'title' => 'Test node title', @@ -116,8 +150,6 @@ class FieldTest extends KernelTestBase { $this->assertNoTokens('node', ['node' => $entity], [ 'test_field', - 'test_field:value', - 'test_field:format', ]); } diff --git a/token.tokens.inc b/token.tokens.inc index 25e1973..7682e47 100644 --- a/token.tokens.inc +++ b/token.tokens.inc @@ -1225,7 +1225,7 @@ function field_token_info_alter(&$info) { // Show a different token for each field delta. if ($cardinality > 1) { - for ($delta = 0; $delta <= $cardinality; $delta++) { + for ($delta = 0; $delta < $cardinality; $delta++) { $info['tokens']["list<$field_token_name>"][$delta] = [ 'name' => t('@type type with delta @delta', ['@type' => SafeMarkup::checkPlain($label), '@delta' => $delta]), 'module' => 'token',