diff --git a/tests/VersioncontrolTokenTests.test b/tests/VersioncontrolTokenTests.test index b097eda..9094191 100644 --- a/tests/VersioncontrolTokenTests.test +++ b/tests/VersioncontrolTokenTests.test @@ -44,7 +44,7 @@ class VersioncontrolTokenTests extends VersioncontrolTestCase { $tokens = array( '[VersioncontrolRepository:id]' => $object->repo_id, '[VersioncontrolRepository:name]' => $object->name, - '[VersioncontrolRepository:vcs]' => $object->vcs, + '[VersioncontrolRepository:backend]' => $object->vcs, '[VersioncontrolRepository:viewer]' => $viewer_url, ); // Test to make sure that we generated something for each token. @@ -102,13 +102,26 @@ class VersioncontrolTokenTests extends VersioncontrolTestCase { } } - //function testVersioncontrolItemTokens() { - //$message = '[item-path]'; - //$object = $this->versioncontrolCreateItem(); - //$expected = $object->path; - //$render = token_replace($message, array('VersioncontrolItem' => $object)); - //$this->assertEqual($render, $expected); - //} + function testVersioncontrolItemTokens() { + $object = $this->versioncontrolCreateItem(); + $tokens = array( + '[VersioncontrolItem:id]' => $object->item_revision_id, + '[VersioncontrolItem:operation]' => $object->vc_op_id, + '[VersioncontrolItem:repository]' => $object->repo_id, + '[VersioncontrolItem:path]' => $object->path, + '[VersioncontrolItem:revision]' => $object->revision, + '[VersioncontrolItem:source_item]' => $object->source_item_revision_id, + '[VersioncontrolItem:action]' => $object->action, + '[VersioncontrolItem:line_changes_addded]' => $object->line_changes_addded, + '[VersioncontrolItem:line_changes_removed]' => $object->line_changes_removed, + ); + // Test to make sure that we generated something for each token. + $this->assertFalse(in_array(0, array_map('strlen', $tokens)), t('No empty tokens generated.')); + foreach ($tokens as $name => $value) { + $render = token_replace($name, array('VersioncontrolItem' => $object)); + $this->assertEqual($render, $value, t('Token %name generated correctly.', array('%name' => $name))); + } + } //function testVersioncontrolEventTokens() { //$message = '[event-id] [event-actor] [event-actor-name] [event-actor-uid] [event-repository] [event-repository-id] [event-repository-name]'; diff --git a/versioncontrol.tokens.inc b/versioncontrol.tokens.inc index 67877e4..0eaa63c 100644 --- a/versioncontrol.tokens.inc +++ b/versioncontrol.tokens.inc @@ -100,7 +100,6 @@ function versioncontrol_token_info() { 'message' => array( 'name' => t('Commit message'), 'description' => 'Log message from VCS for this operation.', - 'type' => 'user', ), ); @@ -148,10 +147,56 @@ function versioncontrol_token_info() { ), ); - // @todo VersioncontrolItem tokens: id, operation, repository, path, - // revision, type, source_item, action, line_changes_addded, - // line_changes_removed + // Item revision. + $info['types']['VersioncontrolItem'] = array( + 'name' => t('Version Control Item'), + 'description' => t('Tokens related to item revisions.'), + 'needs-data' => 'VersioncontrolItem', + ); + $info['tokens']['VersioncontrolItem'] = array( + 'id' => array( + 'name' => t('Item revision ID'), + 'description' => t('The unique identifier for the item revision.'), + ), + 'operation' => array( + 'name' => t('Item revision operation ID'), + 'description' => t('The unique identifier for the operation this item revision belongs to.'), + 'type' => 'VersioncontrolOperation', + ), + 'repository' => array( + 'name' => t('Item revision repository ID'), + 'description' => t('The unique identifier for the repository this item revision belongs to.'), + 'type' => 'VersioncontrolRepository', + ), + 'path' => array( + 'name' => t('Item revision path'), + 'description' => t('Path of the item revision, relative to the repository root.'), + ), + 'revision' => array( + 'name' => t('Item revision revision'), + 'description' => t('File-level revision of the item.'), + ), + // @todo type + 'source_item' => array( + 'name' => t('Item revision type'), + 'description' => t('File-level revision of the item.'), + 'type' => 'VersioncontrolItem', + ), + 'action' => array( + 'name' => t('Item revision action'), + 'description' => t('Action that was performed while transforming the source item into the successor item.'), + ), + 'line_changes_addded' => array( + 'name' => t('Item revision added lines count'), + 'description' => t('Number of lines added with this item.'), + ), + 'line_changes_removed' => array( + 'name' => t('Item revision removed lines count'), + 'description' => t('Number of lines removed with this item.'), + ), + ); + // Event. // @todo VersioncontrolEvent tokens: id, repository, actor, date return $info; @@ -258,6 +303,46 @@ function versioncontrol_tokens($type, $tokens, array $data = array(), array $opt $replacements += token_generate('VersioncontrolRepository', $repository_tokens, array('VersioncontrolRepository' => $repository), $options); } break; + case 'VersioncontrolItem': + switch ($name) { + case 'repository': + $name = 'repo_id'; + $replacements[$original] = $sanitize ? check_plain($object->$name) : $object->$name; + break; + case 'operation': + $name = 'vc_op_id'; + $replacements[$original] = $sanitize ? check_plain($object->$name) : $object->$name; + break; + case 'action': + $item_revision_actions = versioncontrol_revision_actions(); + $replacements[$original] = $item_revision_actions[$object->action]; + break; + case 'source_item': + $name = 'source_item_revision_id'; + $replacements[$original] = $sanitize ? check_plain($object->$name) : $object->$name; + break; + //@todo add a successor_item if possible + case 'id': + $name = 'item_revision_id'; + case 'path': + case 'revision': + case 'line_changes_addded': + case 'line_changes_removed': + $replacements[$original] = $sanitize ? check_plain($object->$name) : $object->$name; + } + if ($repository_tokens = token_find_with_prefix($tokens, 'repository')) { + $repository = $object->getRepository(); + $replacements += token_generate('VersioncontrolRepository', $repository_tokens, array('VersioncontrolRepository' => $repository), $options); + } + if ($operation_tokens = token_find_with_prefix($tokens, 'operation')) { + $operation = $object->getBackend()->loadEntity('operation', array($object->vc_op_id)); + $replacements += token_generate('VersioncontrolOperation', $operation_tokens, array('VersioncontrolOperation' => $operation), $options); + } + if ($source_item_tokens = token_find_with_prefix($tokens, 'source_item')) { + $source_item = $object->getSourceItem(); + $replacements += token_generate('VersioncontrolItem', $source_item_tokens, array('VersioncontrolItem' => $source_item), $options); + } + break; } }