Current File : /home/jvzmxxx/wiki/extensions/Wikibase/client/tests/phpunit/includes/Usage/EntityUsageTest.php
<?php

namespace Wikibase\Client\Tests\Usage;

use PHPUnit_Framework_TestCase;
use Wikibase\Client\Usage\EntityUsage;
use Wikibase\DataModel\Entity\ItemId;

/**
 * @covers Wikibase\Client\Usage\EntityUsage
 *
 * @group Wikibase
 * @group WikibaseClient
 * @group WikibaseUsageTracking
 *
 * @license GPL-2.0+
 * @author Daniel Kinzler
 */
class EntityUsageTest extends PHPUnit_Framework_TestCase {

	public function testGetEntityId() {
		$id = new ItemId( 'Q7' );
		$aspect = EntityUsage::ALL_USAGE;

		$usage = new EntityUsage( $id, $aspect );

		$this->assertEquals( $id, $usage->getEntityId() );
	}

	public function testGetAspect() {
		$id = new ItemId( 'Q7' );
		$aspect = EntityUsage::ALL_USAGE;

		$usage = new EntityUsage( $id, $aspect );
		$this->assertEquals( $aspect, $usage->getAspect() );
	}

	public function testGetIdentityString() {
		$id = new ItemId( 'Q7' );
		$aspect = EntityUsage::ALL_USAGE;

		$usage = new EntityUsage( $id, $aspect );
		$this->assertInternalType( 'string', $usage->getIdentityString() );
	}

	public function testGetAspectKey() {
		$id = new ItemId( 'Q7' );
		$aspect = EntityUsage::LABEL_USAGE;
		$modifier = 'ru';

		$usage = new EntityUsage( $id, $aspect );
		$this->assertEquals( $aspect, $usage->getAspectKey() );

		$usage = new EntityUsage( $id, $aspect, $modifier );
		$this->assertEquals( "$aspect.$modifier", $usage->getAspectKey() );
	}

	public function testAsArray() {
		$id = new ItemId( 'Q7' );
		$aspect = EntityUsage::LABEL_USAGE;
		$modifier = 'ru';

		$expected = array(
			'entityId' => $id->getSerialization(),
			'aspect' => $aspect,
			'modifier' => null
		);

		$usage = new EntityUsage( $id, $aspect );
		$this->assertEquals( $expected, $usage->asArray() );

		$expected['modifier'] = $modifier;
		$usage = new EntityUsage( $id, $aspect, $modifier );
		$this->assertEquals( $expected, $usage->asArray() );
	}

	public function aspectKeyProvider() {
		return array(
			array( 'L', array( 'L', null ) ),
			array( 'L.x', array( 'L', 'x' ) ),
			array( 'L.x.y', array( 'L', 'x.y' ) ),
		);
	}

	/**
	 * @dataProvider aspectKeyProvider
	 */
	public function testStripModifier( $aspectKey, array $expectedParts ) {
		$aspect = EntityUsage::stripModifier( $aspectKey );
		$this->assertEquals( $expectedParts[0], $aspect );
	}

	/**
	 * @dataProvider aspectKeyProvider
	 */
	public function testSplitAspectKey( $aspectKey, array $expectedParts ) {
		$parts = EntityUsage::splitAspectKey( $aspectKey );
		$this->assertEquals( $expectedParts, $parts );
	}

	public function provideMakeAspectKey() {
		return array(
			array( 'L', null, 'L' ),
			array( 'L', 'x', 'L.x' ),
		);
	}

	/**
	 * @dataProvider provideMakeAspectKey
	 */
	public function testMakeAspectKey( $aspect, $modifier, $expectedKey ) {
		$key = EntityUsage::makeAspectKey( $aspect, $modifier );
		$this->assertEquals( $expectedKey, $key );
	}

}