Skip to content

Commit

Permalink
MonolingualTextValueFormatter/Parser service, refs 2275 (#2310)
Browse files Browse the repository at this point in the history
  • Loading branch information
mwjames committed Mar 5, 2017
1 parent bdebb93 commit 8f5c4e8
Show file tree
Hide file tree
Showing 9 changed files with 225 additions and 116 deletions.
26 changes: 6 additions & 20 deletions src/DataValues/MonolingualTextValue.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,6 @@ class MonolingualTextValue extends AbstractMultiValue {
*/
private static $properties = null;

/**
* @var MonolingualTextValueParser
*/
private $monolingualTextValueParser = null;

/**
* @param string $typeid
*/
Expand Down Expand Up @@ -166,7 +161,7 @@ protected function parseUserValue( $userValue ) {
* @return array
*/
public function getValuesFromString( $userValue ) {
return $this->getValueParser()->parse( $userValue );
return $this->dataValueServiceFactory->getValueParser( $this )->parse( $userValue );
}

/**
Expand Down Expand Up @@ -195,35 +190,35 @@ protected function loadDataItem( DataItem $dataItem ) {
* @see DataValue::getShortWikiText
*/
public function getShortWikiText( $linker = null ) {
return $this->getDataValueFormatter()->format( DataValueFormatter::WIKI_SHORT, $linker );
return $this->dataValueServiceFactory->getValueFormatter( $this )->format( DataValueFormatter::WIKI_SHORT, $linker );
}

/**
* @see DataValue::getShortHTMLText
*/
public function getShortHTMLText( $linker = null ) {
return $this->getDataValueFormatter()->format( DataValueFormatter::HTML_SHORT, $linker );
return $this->dataValueServiceFactory->getValueFormatter( $this )->format( DataValueFormatter::HTML_SHORT, $linker );
}

/**
* @see DataValue::getLongWikiText
*/
public function getLongWikiText( $linker = null ) {
return $this->getDataValueFormatter()->format( DataValueFormatter::WIKI_LONG, $linker );
return $this->dataValueServiceFactory->getValueFormatter( $this )->format( DataValueFormatter::WIKI_LONG, $linker );
}

/**
* @see DataValue::getLongHTMLText
*/
public function getLongHTMLText( $linker = null ) {
return $this->getDataValueFormatter()->format( DataValueFormatter::HTML_LONG, $linker );
return $this->dataValueServiceFactory->getValueFormatter( $this )->format( DataValueFormatter::HTML_LONG, $linker );
}

/**
* @see DataValue::getWikiValue
*/
public function getWikiValue() {
return $this->getDataValueFormatter()->format( DataValueFormatter::VALUE );
return $this->dataValueServiceFactory->getValueFormatter( $this )->format( DataValueFormatter::VALUE );
}

/**
Expand Down Expand Up @@ -368,13 +363,4 @@ private function newLanguageCodeValue( $languageCode ) {
return $languageCodeValue;
}

private function getValueParser() {

if ( $this->monolingualTextValueParser === null ) {
$this->monolingualTextValueParser = ValueParserFactory::getInstance()->newMonolingualTextValueParser();
}

return $this->monolingualTextValueParser;
}

}
52 changes: 0 additions & 52 deletions src/DataValues/ValueParserFactory.php

This file was deleted.

33 changes: 33 additions & 0 deletions src/Services/DataValueServices.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@

use SMW\DataValues\ImportValue;
use SMW\DataValues\ReferenceValue;
use SMW\DataValues\MonolingualTextValue;
use SMW\DataValues\ValueParsers\ImportValueParser;
use SMW\DataValues\ValueParsers\PropertyValueParser;
use SMW\DataValues\ValueParsers\MonolingualTextValueParser;
use SMW\DataValues\ValueFormatters\PropertyValueFormatter;
use SMW\DataValues\ValueFormatters\StringValueFormatter;
use SMW\DataValues\ValueFormatters\CodeStringValueFormatter;
use SMW\DataValues\ValueFormatters\ReferenceValueFormatter;
use SMW\DataValues\ValueFormatters\MonolingualTextValueFormatter;
use SMW\DataValues\ValueParsers\AllowsPatternValueParser;
use SMW\DataValues\ValueParsers\AllowsListValueParser;
use SMW\DataValues\AllowsListValue;
Expand Down Expand Up @@ -210,4 +213,34 @@
return new ReferenceValueFormatter();
},

/**
* MonolingualTextValueParser
*
* @return callable
*/
DataValueServiceFactory::TYPE_PARSER . MonolingualTextValue::TYPE_ID => function( $containerBuilder ) {

$containerBuilder->registerExpectedReturnType(
DataValueServiceFactory::TYPE_PARSER . MonolingualTextValue::TYPE_ID,
MonolingualTextValueParser::class
);

return new MonolingualTextValueParser();
},

/**
* MonolingualTextValueFormatter
*
* @return callable
*/
DataValueServiceFactory::TYPE_FORMATTER . MonolingualTextValue::TYPE_ID => function( $containerBuilder ) {

$containerBuilder->registerExpectedReturnType(
DataValueServiceFactory::TYPE_FORMATTER . MonolingualTextValue::TYPE_ID,
MonolingualTextValueFormatter::class
);

return new MonolingualTextValueFormatter();
},

);
81 changes: 81 additions & 0 deletions tests/phpunit/Unit/DataValues/MonolingualTextValueTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use SMW\DataValues\MonolingualTextValue;
use SMW\Options;
use SMW\DataValues\ValueFormatters\MonolingualTextValueFormatter;
use SMW\DataValues\ValueParsers\MonolingualTextValueParser;

/**
* @covers \SMW\DataValues\MonolingualTextValue
Expand All @@ -16,6 +18,28 @@
*/
class MonolingualTextValueTest extends \PHPUnit_Framework_TestCase {

private $dataValueServiceFactory;

protected function setUp() {
parent::setUp();

$constraintValueValidator = $this->getMockBuilder( '\SMW\DataValues\ValueValidators\ConstraintValueValidator' )
->disableOriginalConstructor()
->getMock();

$this->dataValueServiceFactory = $this->getMockBuilder( '\SMW\Services\DataValueServiceFactory' )
->disableOriginalConstructor()
->getMock();

$this->dataValueServiceFactory->expects( $this->any() )
->method( 'getConstraintValueValidator' )
->will( $this->returnValue( $constraintValueValidator ) );

$this->dataValueServiceFactory->expects( $this->any() )
->method( 'getValueParser' )
->will( $this->returnValue( new MonolingualTextValueParser() ) );
}

public function testCanConstruct() {

$this->assertInstanceOf(
Expand All @@ -28,6 +52,10 @@ public function testErrorForMissingLanguageCode() {

$instance = new MonolingualTextValue();

$instance->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$instance->setOptions(
new Options( array( 'smwgDVFeatures' => SMW_DV_MLTV_LCODE ) )
);
Expand All @@ -43,6 +71,10 @@ public function testNoErrorForMissingLanguageCodeWhenFeatureIsDisabled() {

$instance = new MonolingualTextValue();

$instance->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$instance->setOptions(
new Options( array( 'smwgDVFeatures' => false ) )
);
Expand All @@ -61,6 +93,11 @@ public function testErrorForInvalidLanguageCode() {
}

$instance = new MonolingualTextValue();

$instance->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$instance->setUserValue( 'Foo@foobar' );

$this->assertNotEmpty(
Expand All @@ -71,6 +108,11 @@ public function testErrorForInvalidLanguageCode() {
public function testValidParsableUserValue() {

$instance = new MonolingualTextValue();

$instance->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$instance->setUserValue( 'Foo@en' );

$this->assertEmpty(
Expand Down Expand Up @@ -98,6 +140,11 @@ public function testValidParsableUserValue() {
public function testTryToGetTextValueByLanguageForUnrecognizedLanguagCode() {

$instance = new MonolingualTextValue();

$instance->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$instance->setUserValue( 'Foo@en' );

$this->assertNull(
Expand All @@ -108,6 +155,18 @@ public function testTryToGetTextValueByLanguageForUnrecognizedLanguagCode() {
public function testGetWikiValueForValidMonolingualTextValue() {

$instance = new MonolingualTextValue();

$monolingualTextValueFormatter = new MonolingualTextValueFormatter();
$monolingualTextValueFormatter->setDataValue( $instance );

$this->dataValueServiceFactory->expects( $this->any() )
->method( 'getValueFormatter' )
->will( $this->returnValue( $monolingualTextValueFormatter ) );

$instance->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$instance->setUserValue( 'Foo@en' );

$this->assertEquals(
Expand All @@ -123,6 +182,18 @@ public function testGetWikiValueForInvalidMonolingualTextValue() {
}

$instance = new MonolingualTextValue();

$monolingualTextValueFormatter = new MonolingualTextValueFormatter();
$monolingualTextValueFormatter->setDataValue( $instance );

$this->dataValueServiceFactory->expects( $this->any() )
->method( 'getValueFormatter' )
->will( $this->returnValue( $monolingualTextValueFormatter ) );

$instance->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$instance->setUserValue( 'Foo@foobar' );

$this->assertContains(
Expand Down Expand Up @@ -150,6 +221,11 @@ public function testGetProperties() {
public function testToArray() {

$instance = new MonolingualTextValue();

$instance->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$instance->setUserValue( 'Foo@en' );

$this->assertEquals(
Expand All @@ -164,6 +240,11 @@ public function testToArray() {
public function testToString() {

$instance = new MonolingualTextValue();

$instance->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$instance->setUserValue( 'Foo@en' );

$this->assertSame(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use SMW\DataValues\MonolingualTextValue;
use SMW\DataValues\ValueFormatters\MonolingualTextValueFormatter;
use SMW\DataValues\ValueParsers\MonolingualTextValueParser;

/**
* @covers \SMW\DataValues\ValueFormatters\MonolingualTextValueFormatter
Expand All @@ -16,6 +17,28 @@
*/
class MonolingualTextValueFormatterTest extends \PHPUnit_Framework_TestCase {

private $dataValueServiceFactory;

protected function setUp() {
parent::setUp();

$constraintValueValidator = $this->getMockBuilder( '\SMW\DataValues\ValueValidators\ConstraintValueValidator' )
->disableOriginalConstructor()
->getMock();

$this->dataValueServiceFactory = $this->getMockBuilder( '\SMW\Services\DataValueServiceFactory' )
->disableOriginalConstructor()
->getMock();

$this->dataValueServiceFactory->expects( $this->any() )
->method( 'getConstraintValueValidator' )
->will( $this->returnValue( $constraintValueValidator ) );

$this->dataValueServiceFactory->expects( $this->any() )
->method( 'getValueParser' )
->will( $this->returnValue( new MonolingualTextValueParser() ) );
}

public function testCanConstruct() {

$this->assertInstanceOf(
Expand All @@ -40,6 +63,11 @@ public function testIsFormatterForValidation() {
public function testToUseCaptionOutput() {

$monolingualTextValue = new MonolingualTextValue();

$monolingualTextValue->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$monolingualTextValue->setCaption( 'ABC' );

$instance = new MonolingualTextValueFormatter( $monolingualTextValue );
Expand All @@ -61,6 +89,11 @@ public function testToUseCaptionOutput() {
public function testFormat( $stringValue, $type, $linker, $expected ) {

$monolingualTextValue = new MonolingualTextValue();

$monolingualTextValue->setDataValueServiceFactory(
$this->dataValueServiceFactory
);

$monolingualTextValue->setUserValue( $stringValue );

$instance = new MonolingualTextValueFormatter( $monolingualTextValue );
Expand Down

0 comments on commit 8f5c4e8

Please sign in to comment.