Dominic.sauer has submitted this change and it was merged.
Change subject: Resolved further hints from code review from Daniel (see change
219243).
......................................................................
Resolved further hints from code review from Daniel (see change 219243).
Change-Id: I8f2288c5d8060a5b6bcbe65e622b504a868b3b31
---
M composer.json
D includes/CrossCheck/ComparativeValueParser/BasicComparativeValueParser.php
D
includes/CrossCheck/ComparativeValueParser/ComparativeMultilingualTextValueParser.php
D includes/CrossCheck/ComparativeValueParser/ComparativeStringValueParser.php
D includes/CrossCheck/ComparativeValueParser/ComparativeValueParser.php
D includes/CrossCheck/ComparativeValueParser/ComparativeValueParserFactory.php
D
includes/CrossCheck/ComparativeValueParser/DispatchingComparativeValueParser.php
M includes/CrossCheck/Comparer/DataValueComparer.php
M includes/CrossCheck/Comparer/DataValueComparerFactory.php
M includes/CrossCheck/Comparer/QuantityValueComparer.php
M includes/CrossCheck/Comparer/StringComparer.php
M includes/CrossCheck/CrossChecker.php
A includes/CrossCheck/ValueParser/ComparativeValueParser.php
A includes/CrossCheck/ValueParser/ComparativeValueParserFactory.php
A includes/CrossCheck/ValueParser/MultilingualTextValueParser.php
A includes/CrossCheck/ValueParser/StringValueParser.php
M includes/DumpMetaInformation/SqlDumpMetaInformationRepo.php
M includes/ExternalValidationServices.php
M includes/UpdateExternalData/ExternalDataImporter.php
M specials/SpecialExternalDbs.php
D
tests/phpunit/CrossCheck/ComparativeValueParser/BasicComparativeValueParserTest.php
D
tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeMultilingualTextValueParserTest.php
D
tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeStringValueParserTest.php
D
tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserFactoryTest.php
D
tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserTestBase.php
D
tests/phpunit/CrossCheck/ComparativeValueParser/DispatchingComparativeValueParserTest.php
M tests/phpunit/CrossCheck/Comparer/DataValueComparerFactoryTest.php
M tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
M tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php
M tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
M tests/phpunit/CrossCheck/Comparer/StringComparerTest.php
M tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php
M tests/phpunit/CrossCheck/CrossCheckerTest.php
A tests/phpunit/CrossCheck/ValueParser/ComparativeValueParserFactoryTest.php
A tests/phpunit/CrossCheck/ValueParser/MultilingualTextValueParserTest.php
A tests/phpunit/CrossCheck/ValueParser/StringValueParserTest.php
A tests/phpunit/CrossCheck/ValueParser/ValueParserTestBase.php
M tests/phpunit/ExternalValidationServicesTest.php
M tests/phpunit/Specials/SpecialCrossCheckTest.php
39 files changed, 660 insertions(+), 1,088 deletions(-)
Approvals:
Dominic.sauer: Looks good to me, approved
diff --git a/composer.json b/composer.json
index ab0713a..e047d0c 100755
--- a/composer.json
+++ b/composer.json
@@ -18,7 +18,7 @@
"wikibase/data-model": "~3.0",
"serialization/serialization": "3.*,>=3.2.1",
"wikibase/data-model-serialization": "~1.3",
- "wikimedia/assert": "~0.2.2"
+ "wikimedia/assert": "~0.2.2"
},
"require-dev": {
"phpunit/phpunit": "~3.7,>=3.7.37",
diff --git
a/includes/CrossCheck/ComparativeValueParser/BasicComparativeValueParser.php
b/includes/CrossCheck/ComparativeValueParser/BasicComparativeValueParser.php
deleted file mode 100644
index 210e5da..0000000
--- a/includes/CrossCheck/ComparativeValueParser/BasicComparativeValueParser.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-namespace WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser;
-
-use InvalidArgumentException;
-use DataValues\DataValue;
-use ValueParsers\ParserOptions;
-use ValueParsers\ValueParser;
-use Wikibase\Repo\ValueParserFactory;
-use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
-
-/**
- * Class BasicComparativeValueParser
- * @package
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-class BasicComparativeValueParser implements ComparativeValueParser {
-
- /**
- * @var ValueParserFactory
- */
- private $valueParserFactory;
-
- /**
- * @var array
- */
- private $conversionTypeMapping;
-
- /**
- * @param ValueParserFactory $valueParserFactory
- * @param array $conversionTypeMapping
- */
- public function __construct( ValueParserFactory $valueParserFactory,
array $conversionTypeMapping ) {
- $this->valueParserFactory = $valueParserFactory;
- $this->conversionTypeMapping = $conversionTypeMapping;
- }
-
- /**
- * @see ComparativeValueParser::isParserFor
- *
- * @param DataValue $dataValue
- * @return bool
- */
- public function isParserFor( DataValue $dataValue ) {
- return in_array( $dataValue->getType(), array_keys(
$this->conversionTypeMapping ) );
- }
-
- /**
- * @see ComparativeValueParser::parseForComparison
- *
- * @param DataValue $dataValue
- * @param string $comparativeValue
- * @param DumpMetaInformation $dumpMetaInformation
- * @return DataValue
- */
- public function parseForComparison( DataValue $dataValue,
$comparativeValue, DumpMetaInformation $dumpMetaInformation ) {
- if( !$this->isParserFor( $dataValue ) ) {
- throw new InvalidArgumentException( 'Parser can not
parse values as comparative value for given DataValue.' );
- }
-
- $options = new ParserOptions();
- $options->setOption( 'valuelang',
$dumpMetaInformation->getLanguageCode() );
- $options->setOption( ValueParser::OPT_LANG,
$dumpMetaInformation->getLanguageCode() );
- $targetType =
$this->conversionTypeMapping[$dataValue->getType()];
- $parser = $this->valueParserFactory->newParser( $targetType,
$options );
-
- return $parser->parse( $comparativeValue );
- }
-}
\ No newline at end of file
diff --git
a/includes/CrossCheck/ComparativeValueParser/ComparativeMultilingualTextValueParser.php
b/includes/CrossCheck/ComparativeValueParser/ComparativeMultilingualTextValueParser.php
deleted file mode 100644
index df84f39..0000000
---
a/includes/CrossCheck/ComparativeValueParser/ComparativeMultilingualTextValueParser.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-namespace WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser;
-
-use InvalidArgumentException;
-use DataValues\DataValue;
-use DataValues\MultilingualTextValue;
-use ValueParsers\ParserOptions;
-use Wikibase\Repo\ValueParserFactory;
-use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
-
-/**
- * Class MultilingualStringValueParser
- * @package
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-class ComparativeMultilingualTextValueParser implements ComparativeValueParser
{
-
- /**
- * @var ValueParserFactory
- */
- private $valueParserFactory;
-
- /**
- * @param ValueParserFactory $valueParserFactory
- */
- public function __construct( ValueParserFactory $valueParserFactory ) {
- $this->valueParserFactory = $valueParserFactory;
- }
-
- /**
- * @see ComparativeValueParser::isParserFor
- *
- * @param DataValue $dataValue
- * @return bool
- */
- public function isParserFor( DataValue $dataValue ) {
- return $dataValue->getType() === 'multilingualtext';
- }
-
- /**
- * @see ComparativeValueParser::parseForComparison
- *
- * @param DataValue $dataValue
- * @param string $comparativeValue
- * @param DumpMetaInformation $dumpMetaInformation
- * @return DataValue
- */
- public function parseForComparison( DataValue $dataValue,
$comparativeValue, DumpMetaInformation $dumpMetaInformation ) {
- if( !$this->isParserFor( $dataValue ) ) {
- throw new InvalidArgumentException( 'Parser can not
parse values as comparative value for given DataValue.' );
- }
-
- $options = new ParserOptions();
- $options->setOption( 'valuelang',
$dumpMetaInformation->getLanguageCode() );
- $parser = $this->valueParserFactory->newParser(
'monolingualtext', $options );
-
- return new MultilingualTextValue(
- array( $parser->parse( $comparativeValue ) )
- );
- }
-}
\ No newline at end of file
diff --git
a/includes/CrossCheck/ComparativeValueParser/ComparativeStringValueParser.php
b/includes/CrossCheck/ComparativeValueParser/ComparativeStringValueParser.php
deleted file mode 100644
index 74de2a2..0000000
---
a/includes/CrossCheck/ComparativeValueParser/ComparativeStringValueParser.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-namespace WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser;
-
-use DataValues\StringValue;
-use InvalidArgumentException;
-use DataValues\DataValue;
-use Wikibase\StringNormalizer;
-use Wikibase\Test\StringNormalizerTest;
-use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
-
-class ComparativeStringValueParser implements ComparativeValueParser {
-
- /**
- * @var StringNormalizer
- */
- private $stringNormalizer;
-
- /**
- * @param StringNormalizer $stringNormalizer
- */
- public function __construct( StringNormalizer $stringNormalizer ) {
- $this->stringNormalizer = $stringNormalizer;
- }
-
- /**
- * @see ComparativeValueParser::isParserFor
- *
- * @param DataValue $dataValue
- * @return bool
- */
- public function isParserFor( DataValue $dataValue ) {
- return $dataValue->getType() === 'string';
- }
-
- /**
- * @see ComparativeValueParser::parseForComparison
- *
- * @param DataValue $dataValue
- * @param string $comparativeValue
- * @param DumpMetaInformation $dumpMetaInformation
- * @return DataValue
- */
- public function parseForComparison( DataValue $dataValue,
$comparativeValue, DumpMetaInformation $dumpMetaInformation ) {
- if( !$this->isParserFor( $dataValue ) ) {
- throw new InvalidArgumentException( 'Parser can not
parse values as comparative value for given DataValue.' );
- }
-
- return new StringValue( $this->stringNormalizer->trimToNFC(
$comparativeValue ) );
- }
-}
\ No newline at end of file
diff --git
a/includes/CrossCheck/ComparativeValueParser/ComparativeValueParser.php
b/includes/CrossCheck/ComparativeValueParser/ComparativeValueParser.php
deleted file mode 100644
index 790cbe0..0000000
--- a/includes/CrossCheck/ComparativeValueParser/ComparativeValueParser.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-namespace WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser;
-
-use DataValues\DataValue;
-use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
-
-/**
- * Interface ExternalValueParser
- * @package
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-interface ComparativeValueParser {
-
- /**
- * Determines, whether this parser can be used to parse strings for
comparison with given DataValue.
- *
- * @param DataValue $dataValue
- * @return mixed
- */
- public function isParserFor( DataValue $dataValue ) ;
-
- /**
- * Parses string to DataValue for comparison with the given DataValue.
- *
- * @param DataValue $dataValue
- * @param string $comparativeValue
- * @param DumpMetaInformation $dumpMetaInformation
- * @return DataValue
- */
- public function parseForComparison( DataValue $dataValue,
$comparativeValue, DumpMetaInformation $dumpMetaInformation );
-}
\ No newline at end of file
diff --git
a/includes/CrossCheck/ComparativeValueParser/ComparativeValueParserFactory.php
b/includes/CrossCheck/ComparativeValueParser/ComparativeValueParserFactory.php
deleted file mode 100644
index 4effd42..0000000
---
a/includes/CrossCheck/ComparativeValueParser/ComparativeValueParserFactory.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-namespace WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser;
-
-use Wikibase\Repo\ValueParserFactory;
-use Wikibase\StringNormalizer;
-
-/**
- * Class ComparativeValueParserFactory
- * @package
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-class ComparativeValueParserFactory {
-
- /**
- * @var ValueParserFactory
- */
- private $valueParserFactory;
-
- /**
- * @var StringNormalizer
- */
- private $stringNormalizer;
-
- /**
- * @param ValueParserFactory $valueParserFactory
- */
- public function __construct( ValueParserFactory $valueParserFactory,
StringNormalizer $stringNormalizer ) {
- $this->valueParserFactory = $valueParserFactory;
- $this->stringNormalizer = $stringNormalizer;
- }
-
- /**
- * @return ComparativeValueParser
- */
- public function newBasicComparativeValueParser() {
- return new BasicComparativeValueParser(
- $this->valueParserFactory,
- array(
- 'time' => 'time',
- 'quantity' => 'quantity',
- 'globecoordinate' => 'globecoordinate',
- 'monolingualtext' => 'monolingualtext',
- 'wikibase-entityid' => 'monolingualtext'
- )
- );
- }
-
- /**
- * @return ComparativeValueParser
- */
- public function newComparativeStringValueParser() {
- return new ComparativeStringValueParser(
$this->stringNormalizer );
- }
-
- /**
- * @return ComparativeValueParser
- */
- public function newComparativeMultilingualTextValueParser() {
- return new ComparativeMultilingualTextValueParser(
$this->valueParserFactory );
- }
-
- /**
- * @return ComparativeValueParser
- */
- public function newDispatchingComparativeValueParser() {
- return new DispatchingComparativeValueParser(
- array(
- $this->newBasicComparativeValueParser(),
- $this->newComparativeStringValueParser(),
-
$this->newComparativeMultilingualTextValueParser()
- )
- );
- }
-}
\ No newline at end of file
diff --git
a/includes/CrossCheck/ComparativeValueParser/DispatchingComparativeValueParser.php
b/includes/CrossCheck/ComparativeValueParser/DispatchingComparativeValueParser.php
deleted file mode 100644
index 24ab882..0000000
---
a/includes/CrossCheck/ComparativeValueParser/DispatchingComparativeValueParser.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-namespace WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser;
-
-use InvalidArgumentException;
-use DataValues\DataValue;
-use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
-
-/**
- * Class DispatchingComparativeValueParser
- * @package
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-class DispatchingComparativeValueParser implements ComparativeValueParser {
-
- /**
- * @var ComparativeValueParser[]
- */
- private $comparativeValueParsers;
-
- /**
- * @param ComparativeValueParser[] $comparativeValueParsers
- */
- public function __construct( $comparativeValueParsers ) {
- $this->comparativeValueParsers = $comparativeValueParsers;
- }
-
- /**
- * @see ComparativeValueParser::isParserFor
- *
- * @param DataValue $dataValue
- * @return bool
- */
- public function isParserFor( DataValue $dataValue ) {
- foreach ( $this->comparativeValueParsers as
$comparativeValueParser ) {
- if( $comparativeValueParser->isParserFor( $dataValue )
) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * @see ComparativeValueParser::parseForComparison
- *
- * @param DataValue $dataValue
- * @param string $comparativeValue
- * @param DumpMetaInformation $dumpMetaInformation
- * @return DataValue
- */
- public function parseForComparison( DataValue $dataValue,
$comparativeValue, DumpMetaInformation $dumpMetaInformation ) {
- return $this->getParserFor( $dataValue )->parseForComparison(
$dataValue, $comparativeValue, $dumpMetaInformation );
- }
-
- /**
- * @param DataValue $dataValue
- * @return ComparativeValueParser
- */
- private function getParserFor( DataValue $dataValue ) {
- foreach ( $this->comparativeValueParsers as
$comparativeValueParser ) {
- if( $comparativeValueParser->isParserFor( $dataValue )
) {
- return $comparativeValueParser;
- }
- }
-
- throw new InvalidArgumentException( 'There is no
ComparativeValueParser registered for given DataValue.' );
- }
-}
\ No newline at end of file
diff --git a/includes/CrossCheck/Comparer/DataValueComparer.php
b/includes/CrossCheck/Comparer/DataValueComparer.php
index 51e4f9c..4725691 100755
--- a/includes/CrossCheck/Comparer/DataValueComparer.php
+++ b/includes/CrossCheck/Comparer/DataValueComparer.php
@@ -3,8 +3,6 @@
namespace WikibaseQuality\ExternalValidation\CrossCheck\Comparer;
use DataValues\DataValue;
-use WikibaseQuality\ExternalValidation\CrossCheck\Result\ComparisonResult;
-use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
/**
@@ -29,7 +27,7 @@
* @param DataValue $value
* @param DataValue $comparativeValue
*
- * @return string
+ * @return string (one of the status constants of ComparisonResult)
*/
public function compare( DataValue $value, DataValue $comparativeValue
);
}
\ No newline at end of file
diff --git a/includes/CrossCheck/Comparer/DataValueComparerFactory.php
b/includes/CrossCheck/Comparer/DataValueComparerFactory.php
index b778033..bc27cb7 100755
--- a/includes/CrossCheck/Comparer/DataValueComparerFactory.php
+++ b/includes/CrossCheck/Comparer/DataValueComparerFactory.php
@@ -3,6 +3,7 @@
namespace WikibaseQuality\ExternalValidation\CrossCheck\Comparer;
use Wikibase\Lib\Store\EntityLookup;
+use Wikibase\StringNormalizer;
use Wikibase\TermIndex;
/**
@@ -20,10 +21,17 @@
private $termIndex;
/**
- * @param TermIndex $termIndex
+ * @var StringNormalizer
*/
- public function __construct( TermIndex $termIndex ) {
+ private $stringNormalizer;
+
+ /**
+ * @param TermIndex $termIndex
+ * @param StringNormalizer $stringNormalizer
+ */
+ public function __construct( TermIndex $termIndex, StringNormalizer
$stringNormalizer ) {
$this->termIndex = $termIndex;
+ $this->stringNormalizer = $stringNormalizer;
}
/**
@@ -63,7 +71,7 @@
* @return StringComparer
*/
private function newStringComparer() {
- return new StringComparer();
+ return new StringComparer( $this->stringNormalizer );
}
/**
diff --git a/includes/CrossCheck/Comparer/QuantityValueComparer.php
b/includes/CrossCheck/Comparer/QuantityValueComparer.php
index 792157d..caee4bf 100755
--- a/includes/CrossCheck/Comparer/QuantityValueComparer.php
+++ b/includes/CrossCheck/Comparer/QuantityValueComparer.php
@@ -28,8 +28,8 @@
throw new InvalidArgumentException( 'Given values can
not be compared using this comparer.' );
}
- if ( $comparativeValue->getLowerBound()->compare(
$value->getUpperBound() ) !== 1 &&
- $comparativeValue->getUpperBound()->compare(
$value->getLowerBound() ) !== -1
+ if ( $comparativeValue->getLowerBound()->compare(
$value->getUpperBound() ) <= 0 &&
+ $comparativeValue->getUpperBound()->compare(
$value->getLowerBound() ) >= 0
) {
return ComparisonResult::STATUS_MATCH;
}
diff --git a/includes/CrossCheck/Comparer/StringComparer.php
b/includes/CrossCheck/Comparer/StringComparer.php
index 4fb3850..05ee8e9 100755
--- a/includes/CrossCheck/Comparer/StringComparer.php
+++ b/includes/CrossCheck/Comparer/StringComparer.php
@@ -3,6 +3,7 @@
namespace WikibaseQuality\ExternalValidation\CrossCheck\Comparer;
use InvalidArgumentException;
+use Wikibase\StringNormalizer;
use WikibaseQuality\ExternalValidation\CrossCheck\Result\ComparisonResult;
use Wikimedia\Assert\Assert;
@@ -19,6 +20,18 @@
* Threshold for matching compliance in prefix/suffix similarity checks
*/
const SIMILARITY_THRESHOLD = 0.75;
+
+ /**
+ * @var StringNormalizer
+ */
+ private $stringNormalizer;
+
+ /**
+ * @param StringNormalizer $stringNormalizer
+ */
+ public function __construct( StringNormalizer $stringNormalizer ) {
+ $this->stringNormalizer = $stringNormalizer;
+ }
/**
* Compares two strings with each other.
@@ -92,7 +105,7 @@
* @return string
*/
private function cleanDataString( $value ) {
- $value = trim( $value );
+ $value = $this->stringNormalizer->trimToNFC( $value );
return mb_strtolower( $value );
}
diff --git a/includes/CrossCheck/CrossChecker.php
b/includes/CrossCheck/CrossChecker.php
index 8ccba9b..38f0ebd 100755
--- a/includes/CrossCheck/CrossChecker.php
+++ b/includes/CrossCheck/CrossChecker.php
@@ -13,14 +13,14 @@
use Wikibase\DataModel\Statement\Statement;
use Wikibase\DataModel\Statement\StatementList;
use Wikibase\Lib\Store\EntityLookup;
-use
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParser;
+use
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\ComparativeValueParser;
+use
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\ComparativeValueParserFactory;
use WikibaseQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer;
use WikibaseQuality\ExternalValidation\CrossCheck\Result\ComparisonResult;
use WikibaseQuality\ExternalValidation\CrossCheck\Result\CrossCheckResult;
use WikibaseQuality\ExternalValidation\CrossCheck\Result\CrossCheckResultList;
use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
use
WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformationLookup;
-use
WikibaseQuality\ExternalValidation\DumpMetaInformation\SqlDumpMetaInformationRepo;
use WikibaseQuality\ExternalValidation\ExternalDataRepo;
@@ -41,9 +41,9 @@
private $entityLookup;
/**
- * @var ComparativeValueParser
+ * @var ComparativeValueParserFactory
*/
- private $comparativeValueParser;
+ private $valueParserFactory;
/**
* @var DataValueComparer
@@ -67,20 +67,22 @@
/**
* @param EntityLookup $entityLookup
- * @param ComparativeValueParser $comparativeValueParser
+ * @param ComparativeValueParserFactory $comparativeValueParserFactory
* @param DataValueComparer $dataValueComparer
* @param ReferenceChecker $referenceHandler
* @param DumpMetaInformationLookup $dumpMetaInformationLookup
* @param ExternalDataRepo $externalDataRepo
*/
- public function __construct( EntityLookup $entityLookup,
-
ComparativeValueParser $comparativeValueParser,
-
DataValueComparer $dataValueComparer,
-
ReferenceChecker $referenceHandler,
-
DumpMetaInformationLookup $dumpMetaInformationLookup,
-
ExternalDataRepo $externalDataRepo ) {
+ public function __construct(
+ EntityLookup $entityLookup,
+ ComparativeValueParserFactory $comparativeValueParserFactory,
+ DataValueComparer $dataValueComparer,
+ ReferenceChecker $referenceHandler,
+ DumpMetaInformationLookup $dumpMetaInformationLookup,
+ ExternalDataRepo $externalDataRepo
+ ) {
$this->entityLookup = $entityLookup;
- $this->comparativeValueParser = $comparativeValueParser;
+ $this->valueParserFactory = $comparativeValueParserFactory;
$this->dataValueComparer = $dataValueComparer;
$this->referenceHandler = $referenceHandler;
$this->dumpMetaInformationLookup = $dumpMetaInformationLookup;
@@ -159,10 +161,12 @@
*
* @return CrossCheckResultList
*/
- private function crossCheckStatementsWithIdentifier( Entity $entity,
-
StatementList $statements,
-
PropertyId $identifierPropertyId,
-
array $dumpMetaInformationList ) {
+ private function crossCheckStatementsWithIdentifier(
+ Entity $entity,
+ StatementList $statements,
+ PropertyId $identifierPropertyId,
+ array $dumpMetaInformationList
+ ) {
$resultList = new CrossCheckResultList();
$externalIds = $this->getExternalIds( $entity,
$identifierPropertyId );
@@ -180,6 +184,7 @@
foreach ( $externalData as $dumpId => $externalDataPerDump ) {
$dumpMetaInformation = $dumpMetaInformationList[
$dumpId ];
+ $comparativeValueParser =
$this->valueParserFactory->newComparativeValueParser( $dumpMetaInformation );
foreach ( $externalDataPerDump as $externalId =>
$externalDataPerId ) {
$externalId = (string)$externalId;
@@ -191,7 +196,8 @@
$identifierPropertyId,
$externalId,
$externalValues,
-
$statements->getByPropertyId( $propertyId )
+
$statements->getByPropertyId( $propertyId ),
+ $comparativeValueParser
)
);
}
@@ -207,19 +213,29 @@
* @param string $externalId
* @param array $externalValues
* @param StatementList $statements
+ * @param ComparativeValueParser $comparativeValueParser
+ *
* @return CrossCheckResultList
*/
- private function crossCheckExternalValues( DumpMetaInformation
$dumpMetaInformation,
-
PropertyId $identifierPropertyId,
-
$externalId,
-
array $externalValues,
-
StatementList $statements ) {
+ private function crossCheckExternalValues(
+ DumpMetaInformation $dumpMetaInformation,
+ PropertyId $identifierPropertyId,
+ $externalId,
+ array $externalValues,
+ StatementList $statements,
+ ComparativeValueParser $comparativeValueParser
+ ) {
$resultList = new CrossCheckResultList();
foreach ( $statements as $statement ) {
- $comparisonResult = $this->compareStatement(
$statement, $externalValues, $dumpMetaInformation );
+ $comparisonResult = $this->compareStatement(
$statement, $externalValues, $comparativeValueParser );
if ( $comparisonResult ) {
- $referencesResult =
$this->referenceHandler->checkForReferences( $statement, $identifierPropertyId,
$externalId, $dumpMetaInformation );
+ $referencesResult =
$this->referenceHandler->checkForReferences(
+ $statement,
+ $identifierPropertyId,
+ $externalId,
+ $dumpMetaInformation
+ );
$resultList->add(
new CrossCheckResult(
@@ -242,19 +258,20 @@
*
* @param Statement $statement
* @param array $externalValues
- * @param DumpMetaInformation $dumpMetaInformation
+ * @param ComparativeValueParser $comparativeValueParser
*
* @return ComparisonResult|bool
*/
- private function compareStatement( Statement $statement,
-
array $externalValues,
-
DumpMetaInformation $dumpMetaInformation ) {
+ private function compareStatement(
+ Statement $statement,array $externalValues,
+ ComparativeValueParser $comparativeValueParser
+ ) {
$mainSnak = $statement->getMainSnak();
if ( $mainSnak instanceof PropertyValueSnak ) {
$dataValue = $mainSnak->getDataValue();
$results = array();
- $comparativeValues = $this->parseExternalValues(
$dataValue, $externalValues, $dumpMetaInformation );
+ $comparativeValues = $this->parseExternalValues(
$dataValue, $externalValues, $comparativeValueParser );
foreach ( $comparativeValues as $comparativeValue ) {
$result = $this->dataValueComparer->compare(
$dataValue, $comparativeValue );
if( $result ) {
@@ -281,20 +298,19 @@
/**
* @param DataValue $dataValue
* @param array $externalValues
- * @param DumpMetaInformation $dumpMetaInformation
+ * @param ComparativeValueParser $comparativeValueParser
+ *
* @return DataValue[]
*/
- private function parseExternalValues( DataValue $dataValue,
-
array $externalValues,
-
DumpMetaInformation $dumpMetaInformation ) {
+ private function parseExternalValues(
+ DataValue $dataValue,
+ array $externalValues,
+ ComparativeValueParser $comparativeValueParser
+ ) {
$parsedValues = array();
foreach ( $externalValues as $externalValue ) {
try {
- $parsedValue =
$this->comparativeValueParser->parseForComparison(
- $dataValue,
- $externalValue,
- $dumpMetaInformation
- );
+ $parsedValue = $comparativeValueParser->parse(
$externalValue, $dataValue->getType() );
if( $parsedValue ) {
$parsedValues[] = $parsedValue;
}
diff --git a/includes/CrossCheck/ValueParser/ComparativeValueParser.php
b/includes/CrossCheck/ValueParser/ComparativeValueParser.php
new file mode 100644
index 0000000..a9a62bc
--- /dev/null
+++ b/includes/CrossCheck/ValueParser/ComparativeValueParser.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace WikibaseQuality\ExternalValidation\CrossCheck\ValueParser;
+
+use DataValues\DataValue;
+use ValueParsers\ValueParser;
+use ValueParsers\ParserOptions;
+use Wikibase\Repo\ValueParserFactory;
+use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
+use Wikimedia\Assert\Assert;
+
+
+/**
+ * Class NewComparativeValueParser
+ *
+ * @package
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser
+ * @author BP2014N1
+ * @license GNU GPL v2+
+ */
+class ComparativeValueParser {
+
+ /**
+ * @var DumpMetaInformation
+ */
+ private $dumpMetaInformation;
+
+ /**
+ * @var ValueParserFactory
+ */
+ private $comparativeValueParserFactory;
+
+ /**
+ * @var ValueParser[]
+ */
+ private $valueParsers = array();
+
+ /**
+ * @param DumpMetaInformation $dumpMetaInformation
+ * @param ValueParserFactory $comparativeValueParserFactory
+ */
+ public function __construct(
+ DumpMetaInformation $dumpMetaInformation,
+ ValueParserFactory $comparativeValueParserFactory
+ ) {
+ $this->dumpMetaInformation = $dumpMetaInformation;
+ $this->comparativeValueParserFactory =
$comparativeValueParserFactory;
+ }
+
+ /**
+ * Parses given string into DataValue for comparison with DataValues of
$propertyType.
+ *
+ * @param string $value
+ * @param string $propertyType
+ *
+ * @return DataValue
+ */
+ public function parse( $value, $propertyType ) {
+ Assert::parameterType( 'string', $value, '$value' );
+ Assert::parameterType( 'string', $propertyType, '$propertyType'
);
+
+ return $this->getValueParser( $propertyType )->parse( $value );
+ }
+
+ /**
+ * @param string $type
+ *
+ * @return ValueParser
+ */
+ private function getValueParser( $type ) {
+ if( !array_key_exists( $type, $this->valueParsers ) ) {
+ $parserOptions = $this->getParserOptions();
+ $this->valueParsers[$type] =
$this->comparativeValueParserFactory->newParser( $type, $parserOptions );
+ }
+
+ return $this->valueParsers[$type];
+ }
+
+ /**
+ * @return ParserOptions
+ */
+ private function getParserOptions() {
+ $options = new ParserOptions();
+ $options->setOption( 'valuelang',
$this->dumpMetaInformation->getLanguageCode() );
+ $options->setOption( ValueParser::OPT_LANG,
$this->dumpMetaInformation->getLanguageCode() );
+
+ return $options;
+ }
+}
\ No newline at end of file
diff --git a/includes/CrossCheck/ValueParser/ComparativeValueParserFactory.php
b/includes/CrossCheck/ValueParser/ComparativeValueParserFactory.php
new file mode 100644
index 0000000..f1b84d2
--- /dev/null
+++ b/includes/CrossCheck/ValueParser/ComparativeValueParserFactory.php
@@ -0,0 +1,94 @@
+<?php
+
+namespace WikibaseQuality\ExternalValidation\CrossCheck\ValueParser;
+
+use ValueParsers\ParserOptions;
+use Wikibase\Repo\ValueParserFactory;
+use Wikibase\StringNormalizer;
+use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
+
+
+/**
+ * Class ComparativeValueParserFactory
+ * @package
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser
+ * @author BP2014N1
+ * @license GNU GPL v2+
+ */
+class ComparativeValueParserFactory {
+
+ /**
+ * @var ValueParserFactory
+ */
+ private $valueParserFactory;
+
+ /**
+ * @var StringNormalizer
+ */
+ private $stringNormalizer;
+
+ /**
+ * @param ValueParserFactory $valueParserFactory
+ * @param StringNormalizer $stringNormalizer
+ */
+ public function __construct( ValueParserFactory $valueParserFactory,
StringNormalizer $stringNormalizer ) {
+ $this->valueParserFactory = $valueParserFactory;
+ $this->stringNormalizer = $stringNormalizer;
+ }
+
+ /**
+ * @param ParserOptions|null $options
+ *
+ * @return MultilingualTextValueParser
+ */
+ public function newMultilingualTextValueParser( ParserOptions $options
= null ) {
+ $options = $options ?: new ParserOptions();
+ $monolingualTextValueParser =
$this->valueParserFactory->newParser( 'monolingualtext', $options );
+
+ return new MultilingualTextValueParser(
$monolingualTextValueParser );
+ }
+
+ /**
+ * @return StringValueParser
+ */
+ public function newStringValueParser() {
+ return new StringValueParser( $this->stringNormalizer );
+ }
+
+ /**
+ * @param DumpMetaInformation $dumpMetaInformation
+ *
+ * @return ComparativeValueParser
+ */
+ public function newComparativeValueParser( DumpMetaInformation
$dumpMetaInformation ) {
+ return new ComparativeValueParser(
+ $dumpMetaInformation,
+ $this->buildComparativeValueParserFactory(
$this->valueParserFactory )
+ );
+ }
+
+ /**
+ * Creates new ValueParserFactory, that parses strings to DataValues
for comparison with DataValues of given type.
+ * Factory is build based on given factory, but extends it to support
parsing into StringValues and
+ * MultilingualTextValues. Parser for EntityIdValue is overwritten by
MonolingualTextValueParser to meet
+ * requirements of EntityIdValueComparer.
+ *
+ * @param ValueParserFactory $valueParserFactory
+ *
+ * @return ValueParserFactory
+ */
+ private function buildComparativeValueParserFactory( ValueParserFactory
$valueParserFactory ) {
+ $valueParsers = array();
+ foreach ( $valueParserFactory->getParserIds() as $parserId ) {
+ $valueParsers[$parserId] =
$valueParserFactory->getParserBuilder( $parserId );
+ }
+
+ $valueParsers['string'] = array( $this, 'newStringValueParser'
);
+ $valueParsers['multilingualtext'] = array( $this,
'newMultilingualTextValueParser' );
+ $monolingualTextParserBuilder =
$valueParserFactory->getParserBuilder( 'monolingualtext' );
+ if( $monolingualTextParserBuilder ) {
+ $valueParsers['wikibase-entityid'] =
$monolingualTextParserBuilder;
+ }
+
+ return new ValueParserFactory( $valueParsers );
+ }
+}
\ No newline at end of file
diff --git a/includes/CrossCheck/ValueParser/MultilingualTextValueParser.php
b/includes/CrossCheck/ValueParser/MultilingualTextValueParser.php
new file mode 100644
index 0000000..8f6f2ba
--- /dev/null
+++ b/includes/CrossCheck/ValueParser/MultilingualTextValueParser.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace WikibaseQuality\ExternalValidation\CrossCheck\ValueParser;
+
+use InvalidArgumentException;
+use DataValues\DataValue;
+use DataValues\MultilingualTextValue;
+use ValueParsers\ParserOptions;
+use ValueParsers\ValueParser;
+use Wikibase\Repo\ValueParserFactory;
+use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
+use Wikimedia\Assert\Assert;
+
+
+/**
+ * Class MultilingualStringValueParser
+ * @package
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser
+ * @author BP2014N1
+ * @license GNU GPL v2+
+ */
+class MultilingualTextValueParser implements ValueParser {
+
+ /**
+ * @var ValueParser
+ */
+ private $monolingualTextValueParser;
+
+ /**
+ * @param ValueParser $monolingualTextValueParser
+ */
+ public function __construct( ValueParser $monolingualTextValueParser ) {
+ $this->monolingualTextValueParser = $monolingualTextValueParser;
+ }
+
+ /**
+ * @see ValueParser::parse
+ *
+ * @param string $value
+ *
+ * @return MultilingualTextValue
+ */
+ public function parse( $value ) {
+ Assert::parameterType( 'string', $value, '$value' );
+
+ return new MultilingualTextValue(
+ array( $this->monolingualTextValueParser->parse( $value
) )
+ );
+ }
+}
\ No newline at end of file
diff --git a/includes/CrossCheck/ValueParser/StringValueParser.php
b/includes/CrossCheck/ValueParser/StringValueParser.php
new file mode 100644
index 0000000..c838a15
--- /dev/null
+++ b/includes/CrossCheck/ValueParser/StringValueParser.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace WikibaseQuality\ExternalValidation\CrossCheck\ValueParser;
+
+use DataValues\StringValue;
+use InvalidArgumentException;
+use DataValues\DataValue;
+use ValueParsers\ValueParser;
+use Wikibase\StringNormalizer;
+use Wikibase\Test\StringNormalizerTest;
+use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
+use Wikimedia\Assert\Assert;
+
+
+class StringValueParser implements ValueParser {
+
+ /**
+ * @var StringNormalizer
+ */
+ private $stringNormalizer;
+
+ /**
+ * @param StringNormalizer $stringNormalizer
+ */
+ public function __construct( StringNormalizer $stringNormalizer ) {
+ $this->stringNormalizer = $stringNormalizer;
+ }
+
+ /**
+ * @see ValueParser::parse
+ *
+ * @param string $value
+ *
+ * @return StringValue
+ */
+ public function parse( $value ) {
+ Assert::parameterType( 'string', $value, '$value' );
+
+ return new StringValue( $this->stringNormalizer->trimToNFC(
$value ) );
+ }
+}
\ No newline at end of file
diff --git a/includes/DumpMetaInformation/SqlDumpMetaInformationRepo.php
b/includes/DumpMetaInformation/SqlDumpMetaInformationRepo.php
index fa246c3..890ed0a 100755
--- a/includes/DumpMetaInformation/SqlDumpMetaInformationRepo.php
+++ b/includes/DumpMetaInformation/SqlDumpMetaInformationRepo.php
@@ -27,19 +27,6 @@
const IDENTIFIER_PROPERTIES_TABLE_NAME = 'wbqev_identifier_properties';
/**
- * @var EntityIdParser
- */
- private $entityIdParser;
-
- /**
- * @param EntityIdParser $entityIdParser
- */
- public function __construct( EntityIdParser $entityIdParser ) {
- $this->entityIdParser = $entityIdParser;
- }
-
-
- /**
* Gets DumpMetaInformation for specific dump id from database.
*
* @param $dumpId
@@ -201,11 +188,11 @@
$aggregatedRows = array();
foreach ( $result as $row ) {
if ( array_key_exists( $row->id, $aggregatedRows ) ) {
- $propertyId = $this->entityIdParser->parse(
$row->identifier_pid );
+ $propertyId = new PropertyId(
$row->identifier_pid );
$aggregatedRows[$row->id]->identifier_pid[] =
$propertyId;
} else {
if ( $row->identifier_pid !== null ) {
- $propertyId =
$this->entityIdParser->parse( $row->identifier_pid );
+ $propertyId = new PropertyId(
$row->identifier_pid );
$row->identifier_pid = array(
$propertyId );
}
$aggregatedRows[$row->id] = $row;
diff --git a/includes/ExternalValidationServices.php
b/includes/ExternalValidationServices.php
index b8a112b..ce2be68 100755
--- a/includes/ExternalValidationServices.php
+++ b/includes/ExternalValidationServices.php
@@ -3,20 +3,10 @@
namespace WikibaseQuality\ExternalValidation;
use DataValues\Serializers\DataValueSerializer;
-use ValueFormatters\FormatterOptions;
-use ValueFormatters\ValueFormatter;
-use Wikibase\DataModel\Statement\StatementGuidParser;
-use Wikibase\DataModel\Entity\EntityIdParser;
-use Wikibase\Lib\OutputFormatValueFormatterFactory;
-use Wikibase\Lib\Store\EntityLookup;
-use Wikibase\Lib\Store\EntityRevisionLookup;
-use Wikibase\Lib\Store\EntityTitleLookup;
-use Wikibase\Lib\Store\TermLookup;
use Wikibase\Repo\ValueParserFactory;
use Wikibase\Repo\WikibaseRepo;
use Wikibase\StringNormalizer;
-use Wikibase\TermIndex;
-use
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParserFactory;
+use
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\ComparativeValueParserFactory;
use
WikibaseQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparerFactory;
use WikibaseQuality\ExternalValidation\CrossCheck\CrossChecker;
use WikibaseQuality\ExternalValidation\CrossCheck\CrossCheckInteractor;
@@ -38,49 +28,9 @@
{
/**
- * @var EntityLookup
+ * @var WikibaseRepo
*/
- private $entityLookup;
-
- /**
- * @var EntityRevisionLookup
- */
- private $entityRevisionLookup;
-
- /**
- * @var TermIndex
- */
- private $termIndex;
-
- /**
- * @var TermLookup
- */
- private $termLookup;
-
- /**
- * @var EntityTitleLookup
- */
- private $entityTitleLookup;
-
- /**
- * @var EntityIdParser
- */
- private $entityIdParser;
-
- /**
- * @var StatementGuidParser
- */
- private $statementGuidParser;
-
- /**
- * @var ValueFormatter
- */
- private $valueFormatterFactory;
-
- /**
- * @var ValueParserFactory
- */
- private $valueParserFactory;
+ private $wikibaseRepo;
/**
* @var CrossChecker
@@ -123,34 +73,11 @@
private $serializerFactory;
/**
- * @param EntityLookup $entityLookup
- * @param EntityRevisionLookup $entityRevisionLookup
- * @param TermLookup $termLookup
- * @param EntityTitleLookup $entityTitleLookup
- * @param EntityIdParser $entityIdParser
- * @param StatementGuidParser $statementGuidParser
- * @param OutputFormatValueFormatterFactory $valueFormatterFactory
+ * @param WikibaseRepo $wikibaseRepo
* @param ValueParserFactory $valueParserFactory
*/
- public function __construct(
- EntityLookup $entityLookup,
- EntityRevisionLookup $entityRevisionLookup,
- TermIndex $termIndex,
- TermLookup $termLookup,
- EntityTitleLookup $entityTitleLookup,
- EntityIdParser $entityIdParser,
- StatementGuidParser $statementGuidParser,
- OutputFormatValueFormatterFactory $valueFormatterFactory,
- ValueParserFactory $valueParserFactory
- ) {
- $this->entityLookup = $entityLookup;
- $this->entityRevisionLookup = $entityRevisionLookup;
- $this->termLookup = $termLookup;
- $this->termIndex = $termIndex;
- $this->entityTitleLookup = $entityTitleLookup;
- $this->entityIdParser = $entityIdParser;
- $this->statementGuidParser = $statementGuidParser;
- $this->valueFormatterFactory = $valueFormatterFactory;
+ public function __construct( WikibaseRepo $wikibaseRepo,
ValueParserFactory $valueParserFactory ) {
+ $this->wikibaseRepo = $wikibaseRepo;
$this->valueParserFactory = $valueParserFactory;
}
@@ -165,16 +92,8 @@
static $instance = null;
if ($instance === null) {
- $repo =
WikibaseRepo::getDefaultInstance()->getDefaultInstance();
$instance = new self(
- $repo->getEntityLookup(),
- $repo->getEntityRevisionLookup(),
- $repo->getStore()->getTermIndex(),
- $repo->getTermLookup(),
- $repo->getEntityTitleLookup(),
- $repo->getEntityIdParser(),
- $repo->getStatementGuidParser(),
- $repo->getValueFormatterFactory(),
+ WikibaseRepo::getDefaultInstance(),
new
ValueParserFactory($GLOBALS['wgValueParsers'])
);
}
@@ -189,8 +108,8 @@
{
if ($this->crossChecker === null) {
$this->crossChecker = new CrossChecker(
- $this->entityLookup,
-
$this->getComparativeValueParserFactory()->newDispatchingComparativeValueParser(),
+ $this->wikibaseRepo->getEntityLookup(),
+ $this->getComparativeValueParserFactory(),
$this->getDataValueComparerFactory()->newDispatchingDataValueComparer(),
new ReferenceChecker(),
$this->getDumpMetaInformationLookup(),
@@ -208,8 +127,8 @@
{
if ($this->crossCheckInteractor === null) {
$this->crossCheckInteractor = new CrossCheckInteractor(
- $this->entityLookup,
- $this->statementGuidParser,
+ $this->wikibaseRepo->getEntityLookup(),
+ $this->wikibaseRepo->getStatementGuidParser(),
$this->getCrossChecker());
}
@@ -237,7 +156,10 @@
public function getDataValueComparerFactory()
{
if ($this->dataValueComparerFactory === null) {
- $this->dataValueComparerFactory = new
DataValueComparerFactory($this->termIndex);
+ $this->dataValueComparerFactory = new
DataValueComparerFactory(
+ $this->wikibaseRepo->getStore()->getTermIndex(),
+ $this->wikibaseRepo->getStringNormalizer()
+ );
}
return $this->dataValueComparerFactory;
@@ -249,7 +171,7 @@
public function getDumpMetaInformationLookup()
{
if ($this->dumpMetaInformationLookup === null) {
- $this->dumpMetaInformationLookup = new
SqlDumpMetaInformationRepo($this->entityIdParser);
+ $this->dumpMetaInformationLookup = new
SqlDumpMetaInformationRepo();
}
return $this->dumpMetaInformationLookup;
@@ -261,7 +183,7 @@
public function getDumpMetaInformationStore()
{
if ($this->dumpMetaInformationStore === null) {
- $this->dumpMetaInformationStore = new
SqlDumpMetaInformationRepo($this->entityIdParser);
+ $this->dumpMetaInformationStore = new
SqlDumpMetaInformationRepo();
}
return $this->dumpMetaInformationStore;
diff --git a/includes/UpdateExternalData/ExternalDataImporter.php
b/includes/UpdateExternalData/ExternalDataImporter.php
index 46f2c73..44249aa 100755
--- a/includes/UpdateExternalData/ExternalDataImporter.php
+++ b/includes/UpdateExternalData/ExternalDataImporter.php
@@ -42,7 +42,11 @@
* @param DumpMetaInformationStore $dumpMetaInformationStore
* @param ExternalDataRepo $externalDataRepo
*/
- public function __construct( CsvImportSettings $importSettings,
DumpMetaInformationStore $dumpMetaInformationStore, ExternalDataRepo
$externalDataRepo ) {
+ public function __construct(
+ CsvImportSettings $importSettings,
+ DumpMetaInformationStore $dumpMetaInformationStore,
+ ExternalDataRepo $externalDataRepo
+ ) {
$this->importSettings = $importSettings;
$this->dumpMetaInformationStore = $dumpMetaInformationStore;
$this->externalDataRepo = $externalDataRepo;
diff --git a/specials/SpecialExternalDbs.php b/specials/SpecialExternalDbs.php
index 0a65c3a..03754a4 100755
--- a/specials/SpecialExternalDbs.php
+++ b/specials/SpecialExternalDbs.php
@@ -180,7 +180,7 @@
$rows[0],
new HtmlTableCellBuilder(
$this->entityIdLinkFormatter->formatEntityId(
$dumpMetaInformationGroup[0]->getSourceItemId() ),
- array( 'rowspan' => count(
$dumpMetaInformationGroup ) ),
+ array( 'rowspan' => (string)count(
$dumpMetaInformationGroup ) ),
true
)
);
diff --git
a/tests/phpunit/CrossCheck/ComparativeValueParser/BasicComparativeValueParserTest.php
b/tests/phpunit/CrossCheck/ComparativeValueParser/BasicComparativeValueParserTest.php
deleted file mode 100644
index 9fadaad..0000000
---
a/tests/phpunit/CrossCheck/ComparativeValueParser/BasicComparativeValueParserTest.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-
-namespace
WikibaseQuality\ExternalValidation\Tests\CrossCheck\ComparativeValueParser;
-
-use
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\BasicComparativeValueParser;
-
-/**
- * @covers
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\BasicComparativeValueParser
- *
- * @group WikibaseQualityExternalValidation
- *
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-class BasicComparativeValueParserTest extends ComparativeValueParserTestBase {
-
- public function parseableProvider() {
- return array(
- array(
- $this->getDataValueMock( 'StringValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- ),
- array(
- $this->getDataValueMock( 'MonolingualTextValue'
),
- 'foo',
- $this->getDumpMetaInformationMock()
- ),
- array(
- $this->getDataValueMock( 'QuantityValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- public function nonParseableProvider() {
- return array(
- array(
- $this->getDataValueMock( 'TimeValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- ),
- array(
- $this->getDataValueMock(
'MultilingualTextValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- public function parsingProvider() {
- return array(
- array(
- 'foo',
- $this->getDataValueMock( 'StringValue' ),
- null,
- $this->getDumpMetaInformationMock()
- ),
- array(
- 'bar',
- $this->getDataValueMock( 'MonolingualTextValue'
),
- null,
- $this->getDumpMetaInformationMock()
- ),
- array(
- 'foo',
- $this->getDataValueMock( 'QuantityValue' ),
- null,
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- protected function buildParser() {
- $parserFoo = $this->getValueParserMock( 'foo' );
- $parserBar = $this->getValueParserMock( 'bar' );
- $valueParserFactory = $this->getMockBuilder(
'Wikibase\Repo\ValueParserFactory' )
- ->setMethods( array( 'newParser' ) )
- ->disableOriginalConstructor()
- ->getMock();
- $valueParserFactory->expects( $this->any() )
- ->method( 'newParser' )
- ->will( $this->returnCallback(
- function( $parserId, $parserOptions ) use (
$parserFoo, $parserBar ) {
- return $parserId === 'foo' ? $parserFoo
: $parserBar;
- } ) );
-
-
- return new BasicComparativeValueParser(
- $valueParserFactory,
- array(
- 'string' => 'foo',
- 'monolingualtext' => 'bar',
- 'quantity' => 'foo'
- )
- );
- }
-}
diff --git
a/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeMultilingualTextValueParserTest.php
b/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeMultilingualTextValueParserTest.php
deleted file mode 100644
index 2cae965..0000000
---
a/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeMultilingualTextValueParserTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-namespace
WikibaseQuality\ExternalValidation\Tests\CrossCheck\ComparativeValueParser;
-
-use DataValues\MonolingualTextValue;
-use DataValues\MultilingualTextValue;
-use
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeMultilingualTextValueParser;
-
-/**
- * @covers
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeMultilingualTextValueParser
- *
- * @group WikibaseQualityExternalValidation
- *
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-class ComparativeMultilingualTextValueParserTest extends
ComparativeValueParserTestBase {
-
- public function parseableProvider() {
- return array(
- array(
- $this->getDataValueMock(
'MultilingualTextValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- public function nonParseableProvider() {
- return array(
- array(
- $this->getDataValueMock( 'TimeValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- ),
- array(
- $this->getDataValueMock( 'StringValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- public function parsingProvider() {
- return array(
- array(
- new MultilingualTextValue( array( new
MonolingualTextValue( 'en', 'foo' ) ) ),
- $this->getDataValueMock(
'MultilingualTextValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- ),
- array(
- new MultilingualTextValue( array( new
MonolingualTextValue( 'en', 'foo' ) ) ),
- $this->getDataValueMock(
'MultilingualTextValue' ),
- 'bar',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- protected function buildParser() {
- $valueParserFactory = $this->getMockBuilder(
'Wikibase\Repo\ValueParserFactory' )
- ->setMethods( array( 'newParser' ) )
- ->disableOriginalConstructor()
- ->getMock();
- $valueParserFactory->expects( $this->any() )
- ->method( 'newParser' )
- ->will( $this->returnValue( $this->getValueParserMock(
new MonolingualTextValue( 'en', 'foo' ) ) ) );
-
-
- return new ComparativeMultilingualTextValueParser(
$valueParserFactory );
- }
-}
diff --git
a/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeStringValueParserTest.php
b/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeStringValueParserTest.php
deleted file mode 100644
index 7bad9d5..0000000
---
a/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeStringValueParserTest.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-namespace
WikibaseQuality\ExternalValidation\Tests\CrossCheck\ComparativeValueParser;
-use
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeStringValueParser;
-use DataValues\StringValue;
-
-/**
- * @covers
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeStringValueParser
- *
- * @group WikibaseQualityExternalValidation
- *
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-class ComparativeStringValueParserTest extends ComparativeValueParserTestBase {
-
- public function parseableProvider() {
- return array(
- array(
- $this->getDataValueMock( 'StringValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- public function nonParseableProvider() {
- return array(
- array(
- $this->getDataValueMock( 'TimeValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- ),
- array(
- $this->getDataValueMock(
'MultilingualTextValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- public function parsingProvider() {
- return array(
- array(
- new StringValue( 'foo' ),
- $this->getDataValueMock( 'StringValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- ),
- array(
- new StringValue( 'bar' ),
- $this->getDataValueMock( 'StringValue' ),
- 'bar',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- protected function buildParser() {
- $stringNormalizer = $this->getMockBuilder(
'Wikibase\StringNormalizer' )
- ->setMethods( array( 'trimToNFC' ) )
- ->getMock();
- $stringNormalizer->expects( $this->any() )
- ->method( 'trimToNFC' )
- ->will( $this->returnArgument( 0 ) );
-
- return new ComparativeStringValueParser( $stringNormalizer );
- }
-}
diff --git
a/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserFactoryTest.php
b/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserFactoryTest.php
deleted file mode 100644
index b076991..0000000
---
a/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserFactoryTest.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-namespace
WikibaseQuality\ExternalValidation\Tests\CrossCheck\ComparativeValueParser;
-
-use
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParserFactory;
-
-/**
- * @covers
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParserFactory
- *
- * @group WikibaseQualityExternalValidation
- *
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-class ComparativeValueParserFactoryTest extends \MediaWikiTestCase {
-
- public function testNewBasicComparativeValueParser() {
- $parser = $this->getFactory()->newBasicComparativeValueParser();
- $this->assertInstanceOf(
'WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\BasicComparativeValueParser',
$parser );
- }
-
- public function testNewComparativeStringValueParser() {
- $parser =
$this->getFactory()->newComparativeStringValueParser();
- $this->assertInstanceOf(
'WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeStringValueParser',
$parser );
- }
-
- public function testNewComparativeMultilingualTextValueParser() {
- $parser =
$this->getFactory()->newComparativeMultilingualTextValueParser();
- $this->assertInstanceOf(
'WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeMultilingualTextValueParser',
$parser );
- }
-
- public function testNewDispatchingComparativeValueParser() {
- $parser =
$this->getFactory()->newDispatchingComparativeValueParser();
- $this->assertInstanceOf(
'WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\DispatchingComparativeValueParser',
$parser );
- }
-
- /**
- * @return ComparativeValueParserFactory
- */
- private function getFactory() {
- $valueParserFactory = $this->getMockBuilder(
'Wikibase\Repo\ValueParserFactory' )
- ->disableOriginalConstructor()
- ->getMock();
- $stringNormalizer = $this->getMock( 'Wikibase\StringNormalizer'
);
-
- return new ComparativeValueParserFactory( $valueParserFactory,
$stringNormalizer );
- }
-}
diff --git
a/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserTestBase.php
b/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserTestBase.php
deleted file mode 100755
index e6fd12a..0000000
---
a/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserTestBase.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-namespace
WikibaseQuality\ExternalValidation\Tests\CrossCheck\ComparativeValueParser;
-
-use DataValues\DataValue;
-use
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParser;
-use WikibaseQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer;
-use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
-
-
-/**
- * @group WikibaseQualityExternalValidation
- *
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-abstract class ComparativeValueParserTestBase extends \MediaWikiTestCase {
-
- /**
- * @return ComparativeValueParser
- */
- protected abstract function buildParser();
-
- public function testImplementsDataValueComparerInterface() {
- $this->assertInstanceOf(
'WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParser',
$this->buildParser() );
- }
-
- /**
- * @dataProvider parseableProvider
- */
- public function testIsParserForReturnsTrue( DataValue $dataValue ) {
- $comparer = $this->buildParser();
- $this->assertTrue( $comparer->isParserFor( $dataValue ) );
- }
-
- public abstract function parseableProvider();
-
- /**
- * @dataProvider nonParseableProvider
- */
- public function testCanCompareReturnsFalse( DataValue $dataValue ) {
- $comparer = $this->buildParser();
- $this->assertFalse( $comparer->isParserFor( $dataValue ) );
- }
-
- public abstract function nonParseableProvider();
-
- /**
- * @dataProvider nonParseableProvider
- */
- public function testParserThrowsInvalidArgumentException( DataValue
$value, $comparativeValue, DumpMetaInformation $dumpMetaInformation ) {
- $this->setExpectedException( 'InvalidArgumentException' );
- $this->buildParser()->parseForComparison( $value,
$comparativeValue, $dumpMetaInformation );
- }
-
- /**
- * @dataProvider parsingProvider
- */
- public function testParsing( $expectedResult, DataValue $value,
$comparativeValue, DumpMetaInformation $dumpMetaInformation ) {
-
- $actualResult = $this->buildParser()->parseForComparison(
$value, $comparativeValue, $dumpMetaInformation );
-
- $this->assertEquals( $expectedResult, $actualResult );
- }
-
- public abstract function parsingProvider();
-
- /**
- * @param $name
- * @return \PHPUnit_Framework_MockObject_MockObject
- */
- protected function getDataValueMock( $name ) {
- return $this->getMockBuilder( sprintf( 'DataValues\%s', $name )
)
- ->setMethods( null )
- ->disableOriginalConstructor()
- ->getMock();
- }
-
- /**
- * @param string $returnValue
- * @return \PHPUnit_Framework_MockObject_MockObject
- */
- protected function getValueParserMock( $returnValue ) {
- $mock = $this->getMockBuilder( 'ValueParsers\ValueParser' )
- ->setMethods( array( 'parse' ) )
- ->getMock();
- $mock->expects( $this->any() )
- ->method( 'parse' )
- ->will( $this->returnValue( $returnValue ) );
-
- return $mock;
- }
-
- /**
- * @param string $language
- * @return \PHPUnit_Framework_MockObject_MockObject
- */
- protected function getDumpMetaInformationMock( $language = 'en' ) {
- $mock = $this->getMockBuilder(
'WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation' )
- ->disableOriginalConstructor()
- ->setMethods( array( 'getLanguage' ) )
- ->getMock();
- $mock->expects( $this->any() )
- ->method( 'getLanguage' )
- ->will( $this->returnValue( $language ) );
- return $mock;
- }
-}
\ No newline at end of file
diff --git
a/tests/phpunit/CrossCheck/ComparativeValueParser/DispatchingComparativeValueParserTest.php
b/tests/phpunit/CrossCheck/ComparativeValueParser/DispatchingComparativeValueParserTest.php
deleted file mode 100644
index d182154..0000000
---
a/tests/phpunit/CrossCheck/ComparativeValueParser/DispatchingComparativeValueParserTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-namespace
WikibaseQuality\ExternalValidation\Tests\CrossCheck\ComparativeValueParser;
-use DataValues\DataValue;
-use
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\DispatchingComparativeValueParser;
-
-/**
- * @covers
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\DispatchingComparativeValueParser
- *
- * @group WikibaseQualityExternalValidation
- *
- * @author BP2014N1
- * @license GNU GPL v2+
- */
-class DispatchingComparativeValueParserTest extends
ComparativeValueParserTestBase {
-
- public function parseableProvider() {
- return array(
- array(
- $this->getDataValueMock( 'StringValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- ),
- array(
- $this->getDataValueMock( 'QuantityValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- public function nonParseableProvider() {
- return array(
- array(
- $this->getDataValueMock( 'TimeValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- ),
- array(
- $this->getDataValueMock(
'MultilingualTextValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- public function parsingProvider() {
- return array(
- array(
- 'foo',
- $this->getDataValueMock( 'StringValue' ),
- 'foo',
- $this->getDumpMetaInformationMock()
- ),
- array(
- 'bar',
- $this->getDataValueMock( 'QuantityValue' ),
- 'bar',
- $this->getDumpMetaInformationMock()
- )
- );
- }
-
- protected function buildParser() {
- return new DispatchingComparativeValueParser(
- array(
- $this->getComparativeValueParserMock( 'string',
'foo' ),
- $this->getComparativeValueParserMock(
'quantity', 'bar' )
- )
- );
- }
-
- /**
- * @param string $acceptedType
- * @return \PHPUnit_Framework_MockObject_MockObject
- */
- private function getComparativeValueParserMock( $acceptedType,
$parseResult ) {
- $mock = $this->getMock(
'WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParser'
);
- $mock->expects( $this->any() )
- ->method( 'isParserFor' )
- ->will( $this->returnCallback(
- function( DataValue $dataValue ) use (
$acceptedType ) {
- return $dataValue->getType() ===
$acceptedType;
- } ) );
- $mock->expects( $this->any() )
- ->method( 'parseForComparison' )
- ->will( $this->returnValue( $parseResult ) );
-
- return $mock;
- }
-}
diff --git a/tests/phpunit/CrossCheck/Comparer/DataValueComparerFactoryTest.php
b/tests/phpunit/CrossCheck/Comparer/DataValueComparerFactoryTest.php
index 9c4115e..15d08c9 100755
--- a/tests/phpunit/CrossCheck/Comparer/DataValueComparerFactoryTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/DataValueComparerFactoryTest.php
@@ -75,7 +75,9 @@
->method( 'getTermsOfEntity' )
->will( $this->returnValue( array() ) );
- return new DataValueComparerFactory( $termIndex );
+ $stringNormalizer = $this->getMock( 'Wikibase\StringNormalizer'
);
+
+ return new DataValueComparerFactory( $termIndex,
$stringNormalizer );
}
private function assertComparesWithoutException( DataValueComparer
$comparer, DataValue $value, DataValue $comparativeValue ) {
diff --git a/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
b/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
index 047acbf..757895c 100755
--- a/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
@@ -127,19 +127,20 @@
) );
$stringComparer = $this->getMockBuilder(
'WikibaseQuality\ExternalValidation\CrossCheck\Comparer\StringComparer' )
- ->setMethods( array(
'compareWithArray' ) )
- ->getMock();
+ ->disableOriginalConstructor()
+ ->setMethods( array( 'compareWithArray' ) )
+ ->getMock();
$stringComparer->expects( $this->any() )
- ->method( 'compareWithArray' )
- ->will( $this->returnCallback(
- function ( $value, array
$values ) {
- if ( in_array(
$value, $values ) ) {
- return
ComparisonResult::STATUS_MATCH;
- } else {
- return
ComparisonResult::STATUS_MISMATCH;
+ ->method( 'compareWithArray' )
+ ->will( $this->returnCallback(
+ function ( $value,
array $values ) {
+ if ( in_array(
$value, $values ) ) {
+ return
ComparisonResult::STATUS_MATCH;
+ } else {
+ return
ComparisonResult::STATUS_MISMATCH;
}
- }
- ) );
+ }
+ ) );
return new EntityIdValueComparer( $termIndex, $stringComparer );
}
diff --git
a/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php
b/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php
index 35efbea..0be319d 100755
--- a/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php
@@ -77,19 +77,20 @@
protected function buildComparer() {
$stringComparer = $this->getMockBuilder(
'WikibaseQuality\ExternalValidation\CrossCheck\Comparer\StringComparer' )
- ->setMethods( array
( 'compare' ) )
- ->getMock();
+ ->disableOriginalConstructor()
+ ->setMethods( array ( 'compare' ) )
+ ->getMock();
$stringComparer->expects( $this->any() )
- ->method( 'compare' )
- ->will( $this->returnCallback(
- function (
$value1, $value2 ) {
- if (
$value1 === $value2 ) {
-
return ComparisonResult::STATUS_MATCH;
- }
else {
-
return ComparisonResult::STATUS_MISMATCH;
- }
- }
- ) );
+ ->method( 'compare' )
+ ->will( $this->returnCallback(
+
function ( $value1, $value2 ) {
+
if ( $value1 === $value2 ) {
+
return ComparisonResult::STATUS_MATCH;
+
} else {
+
return ComparisonResult::STATUS_MISMATCH;
+
}
+ }
+ ) );
return new MonolingualTextValueComparer( $stringComparer );
}
diff --git
a/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
b/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
index 634866d..f8c37d3 100755
--- a/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
@@ -131,19 +131,20 @@
protected function buildComparer() {
$stringComparer = $this->getMockBuilder(
'WikibaseQuality\ExternalValidation\CrossCheck\Comparer\StringComparer' )
- ->setMethods( array
( 'compareArray' ) )
- ->getMock();
+ ->disableOriginalConstructor()
+ ->setMethods( array ( 'compare' ) )
+ ->getMock();
$stringComparer->expects( $this->any() )
- ->method( 'compareArray' )
- ->will( $this->returnCallback(
- function (
$values1, array $values2 ) {
- if (
in_array( $values1, $values2 ) ) {
-
return ComparisonResult::STATUS_MATCH;
- }
else {
-
return ComparisonResult::STATUS_MISMATCH;
- }
- }
- ) );
+ ->method( 'compare' )
+ ->will( $this->returnCallback(
+ function (
$value1, $value2 ) {
+
if ( $value1 === $value2 ) {
+
return ComparisonResult::STATUS_MATCH;
+
} else {
+
return ComparisonResult::STATUS_MISMATCH;
+
}
+ }
+ ) );
return new MultilingualTextValueComparer( $stringComparer );
}
diff --git a/tests/phpunit/CrossCheck/Comparer/StringComparerTest.php
b/tests/phpunit/CrossCheck/Comparer/StringComparerTest.php
index 919b1f3..1dc7f56 100755
--- a/tests/phpunit/CrossCheck/Comparer/StringComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/StringComparerTest.php
@@ -2,6 +2,7 @@
namespace WikibaseQuality\ExternalValidation\Tests\CrossCheck\Comparer;
+use Wikibase\StringNormalizer;
use WikibaseQuality\ExternalValidation\CrossCheck\Comparer\StringComparer;
use WikibaseQuality\ExternalValidation\CrossCheck\Result\ComparisonResult;
@@ -22,11 +23,12 @@
public function setUp() {
parent::setUp();
- $this->stringComparer = new StringComparer();
+ $this->stringComparer = new StringComparer( new
StringNormalizer() );
}
public function tearDown() {
unset( $this->stringComparer );
+
parent::tearDown();
}
diff --git a/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php
b/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php
index 4fc46a0..d2864e8 100755
--- a/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php
@@ -69,19 +69,20 @@
protected function buildComparer() {
$stringComparer = $this->getMockBuilder(
'WikibaseQuality\ExternalValidation\CrossCheck\Comparer\StringComparer' )
- ->setMethods( array
( 'compare' ) )
- ->getMock();
+ ->disableOriginalConstructor()
+ ->setMethods( array ( 'compare' ) )
+ ->getMock();
$stringComparer->expects( $this->any() )
- ->method( 'compare' )
- ->will( $this->returnCallback(
- function (
$value1, $value2 ) {
- if (
$value1 === $value2 ) {
-
return ComparisonResult::STATUS_MATCH;
- }
else {
-
return ComparisonResult::STATUS_MISMATCH;
- }
- }
- ) );
+ ->method( 'compare' )
+ ->will( $this->returnCallback(
+ function ( $value1, $value2 ) {
+ if ( $value1 === $value2 ) {
+ return
ComparisonResult::STATUS_MATCH;
+ } else {
+ return
ComparisonResult::STATUS_MISMATCH;
+ }
+ }
+ ) );
return new StringValueComparer( $stringComparer );
}
diff --git a/tests/phpunit/CrossCheck/CrossCheckerTest.php
b/tests/phpunit/CrossCheck/CrossCheckerTest.php
index 7321405..2496776 100755
--- a/tests/phpunit/CrossCheck/CrossCheckerTest.php
+++ b/tests/phpunit/CrossCheck/CrossCheckerTest.php
@@ -301,12 +301,19 @@
private function getCrossChecker() {
$dataValue = $this->getMockForAbstractClass(
'DataValues\DataValue' );
- $comparativeValueParser = $this->getMockBuilder(
'WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParser'
)
- ->disableOriginalConstructor()
- ->getMock();
+ $comparativeValueParser = $this->getMockBuilder(
'WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\ComparativeValueParser'
)
+ ->disableOriginalConstructor()
+ ->getMock();
$comparativeValueParser->expects( $this->any() )
- ->method( 'parseForComparison' )
- ->will( $this->returnValue( $dataValue ) );
+ ->method( 'parse' )
+ ->will( $this->returnValue( $dataValue ) );
+ $comparativeValueParserFactory = $this->getMockBuilder(
'WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\ComparativeValueParserFactory'
)
+ ->disableOriginalConstructor()
+ ->setMethods( array( 'newComparativeValueParser' ) )
+ ->getMock();
+ $comparativeValueParserFactory->expects( $this->any() )
+ ->method( 'newComparativeValueParser' )
+ ->will( $this->returnValue( $comparativeValueParser ) );
$dataValueComparer = $this->getMockBuilder(
'WikibaseQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer' )
->setMethods( array( 'compare' ) )
@@ -327,7 +334,7 @@
return new CrossChecker(
new JsonFileEntityLookup( __DIR__ . '/testdata' ),
- $comparativeValueParser,
+ $comparativeValueParserFactory,
$dataValueComparer,
$referenceHandler,
$this->getDumpMetaInformationLookupMock(),
diff --git
a/tests/phpunit/CrossCheck/ValueParser/ComparativeValueParserFactoryTest.php
b/tests/phpunit/CrossCheck/ValueParser/ComparativeValueParserFactoryTest.php
new file mode 100644
index 0000000..7902313
--- /dev/null
+++ b/tests/phpunit/CrossCheck/ValueParser/ComparativeValueParserFactoryTest.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace WikibaseQuality\ExternalValidation\Tests\CrossCheck\ValueParser;
+
+use
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\ComparativeValueParserFactory;
+
+/**
+ * @covers
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\ComparativeValueParserFactory
+ *
+ * @group WikibaseQualityExternalValidation
+ *
+ * @author BP2014N1
+ * @license GNU GPL v2+
+ */
+class ComparativeValueParserFactoryTest extends \MediaWikiTestCase {
+
+ public function testNewComparativeStringValueParser() {
+ $parser = $this->getFactory()->newStringValueParser();
+ $this->assertInstanceOf(
'WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\StringValueParser',
$parser );
+ }
+
+ public function testNewComparativeMultilingualTextValueParser() {
+ $parser = $this->getFactory()->newMultilingualTextValueParser();
+ $this->assertInstanceOf(
'WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\MultilingualTextValueParser',
$parser );
+ }
+
+ public function testNewComparativeValueParser() {
+ $dumpMetaInformation = $this->getMockBuilder(
'WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $parser = $this->getFactory()->newComparativeValueParser(
$dumpMetaInformation );
+ $this->assertInstanceOf(
'WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\ComparativeValueParser',
$parser );
+ }
+
+ /**
+ * @return ComparativeValueParserFactory
+ */
+ private function getFactory() {
+ $valueParserMock = $this->getMockForAbstractClass(
'ValueParsers\ValueParser' );
+ $valueParserFactory = $this->getMockBuilder(
'Wikibase\Repo\ValueParserFactory' )
+ ->disableOriginalConstructor()
+ ->setMethods( array( 'newParser' ) )
+ ->getMock();
+ $valueParserFactory->expects( $this->any() )
+ ->method( 'newParser' )
+ ->will( $this->returnValue( $valueParserMock ) );
+ $stringNormalizer = $this->getMock( 'Wikibase\StringNormalizer'
);
+
+ return new ComparativeValueParserFactory( $valueParserFactory,
$stringNormalizer );
+ }
+}
diff --git
a/tests/phpunit/CrossCheck/ValueParser/MultilingualTextValueParserTest.php
b/tests/phpunit/CrossCheck/ValueParser/MultilingualTextValueParserTest.php
new file mode 100644
index 0000000..6c6043d
--- /dev/null
+++ b/tests/phpunit/CrossCheck/ValueParser/MultilingualTextValueParserTest.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace WikibaseQuality\ExternalValidation\Tests\CrossCheck\ValueParser;
+
+use DataValues\MonolingualTextValue;
+use DataValues\MultilingualTextValue;
+use
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\MultilingualTextValueParser;
+
+/**
+ * @covers
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\MultilingualTextValueParser
+ *
+ * @group WikibaseQualityExternalValidation
+ *
+ * @author BP2014N1
+ * @license GNU GPL v2+
+ */
+class MultilingualTextValueParserTest extends ValueParserTestBase {
+
+ public function nonParseableProvider() {
+ return array(
+ array(
+ 42
+ ),
+ array(
+ true
+ )
+ );
+ }
+
+ public function parsingProvider() {
+ return array(
+ array(
+ new MultilingualTextValue( array( new
MonolingualTextValue( 'en', 'foo' ) ) ),
+ 'foo'
+ ),
+ array(
+ new MultilingualTextValue( array( new
MonolingualTextValue( 'en', 'foo' ) ) ),
+ 'foo'
+ )
+ );
+ }
+
+ protected function buildParser() {
+ $valueParserMock = $this->getMockBuilder(
'ValueParsers\ValueParser' )
+ ->setMethods( array( 'parse' ) )
+ ->getMock();
+ $valueParserMock->expects( $this->any() )
+ ->method( 'parse' )
+ ->will( $this->returnValue( new MonolingualTextValue(
'en', 'foo' ) ) );
+
+
+ return new MultilingualTextValueParser( $valueParserMock );
+ }
+}
diff --git a/tests/phpunit/CrossCheck/ValueParser/StringValueParserTest.php
b/tests/phpunit/CrossCheck/ValueParser/StringValueParserTest.php
new file mode 100644
index 0000000..1b24ba9
--- /dev/null
+++ b/tests/phpunit/CrossCheck/ValueParser/StringValueParserTest.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace WikibaseQuality\ExternalValidation\Tests\CrossCheck\ValueParser;
+
+use
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\StringValueParser;
+use DataValues\StringValue;
+
+/**
+ * @covers
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\StringValueParser
+ *
+ * @group WikibaseQualityExternalValidation
+ *
+ * @author BP2014N1
+ * @license GNU GPL v2+
+ */
+class StringValueParserTest extends ValueParserTestBase {
+
+ public function nonParseableProvider() {
+ return array(
+ array(
+ 42
+ ),
+ array(
+ true
+ )
+ );
+ }
+
+ public function parsingProvider() {
+ return array(
+ array(
+ new StringValue( 'foo' ),
+ 'foo'
+ ),
+ array(
+ new StringValue( 'bar' ),
+ 'bar'
+ )
+ );
+ }
+
+ protected function buildParser() {
+ $stringNormalizer = $this->getMockBuilder(
'Wikibase\StringNormalizer' )
+ ->setMethods( array( 'trimToNFC' ) )
+ ->getMock();
+ $stringNormalizer->expects( $this->any() )
+ ->method( 'trimToNFC' )
+ ->will( $this->returnArgument( 0 ) );
+
+ return new StringValueParser( $stringNormalizer );
+ }
+}
diff --git a/tests/phpunit/CrossCheck/ValueParser/ValueParserTestBase.php
b/tests/phpunit/CrossCheck/ValueParser/ValueParserTestBase.php
new file mode 100755
index 0000000..e671623
--- /dev/null
+++ b/tests/phpunit/CrossCheck/ValueParser/ValueParserTestBase.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace WikibaseQuality\ExternalValidation\Tests\CrossCheck\ValueParser;
+
+use DataValues\DataValue;
+use ValueParsers\ValueParser;
+use
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParser;
+use WikibaseQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer;
+use WikibaseQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation;
+
+
+/**
+ * @group WikibaseQualityExternalValidation
+ *
+ * @author BP2014N1
+ * @license GNU GPL v2+
+ */
+abstract class ValueParserTestBase extends \MediaWikiTestCase {
+
+ /**
+ * @return ValueParser
+ */
+ protected abstract function buildParser();
+
+ public function testImplementsDataValueComparerInterface() {
+ $this->assertInstanceOf( 'ValueParsers\ValueParser',
$this->buildParser() );
+ }
+
+ public abstract function nonParseableProvider();
+
+ /**
+ * @dataProvider nonParseableProvider
+ */
+ public function testParserThrowsInvalidArgumentException( $value ) {
+ $this->setExpectedException( 'InvalidArgumentException' );
+ $this->buildParser()->parse( $value );
+ }
+
+ public abstract function parsingProvider();
+
+ /**
+ * @dataProvider parsingProvider
+ */
+ public function testParsing( $expectedResult, $value ) {
+ $actualResult = $this->buildParser()->parse( $value );
+
+ $this->assertEquals( $expectedResult, $actualResult );
+ }
+}
\ No newline at end of file
diff --git a/tests/phpunit/ExternalValidationServicesTest.php
b/tests/phpunit/ExternalValidationServicesTest.php
index f268938..0365b99 100755
--- a/tests/phpunit/ExternalValidationServicesTest.php
+++ b/tests/phpunit/ExternalValidationServicesTest.php
@@ -2,7 +2,9 @@
namespace WikibaseQuality\ExternalValidation\Tests;
+use Wikibase\Repo\WikibaseRepo;
use WikibaseQuality\ExternalValidation\ExternalValidationServices;
+
/**
* @covers WikibaseQuality\ExternalValidation\ExternalValidationServices
@@ -86,28 +88,8 @@
private function getFactory()
{
return new ExternalValidationServices(
-
$this->getMockForAbstractClass('Wikibase\Lib\Store\EntityLookup'),
-
$this->getMockForAbstractClass('Wikibase\Lib\Store\EntityRevisionLookup'),
- $this->getMockForAbstractClass('Wikibase\TermIndex'),
-
$this->getMockForAbstractClass('Wikibase\Lib\Store\TermLookup'),
-
$this->getMockForAbstractClass('Wikibase\Lib\Store\EntityTitleLookup'),
-
$this->getMockForAbstractClass('Wikibase\DataModel\Entity\EntityIdParser'),
-
$this->getMockBuilder('Wikibase\DataModel\Claim\ClaimGuidParser')->disableOriginalConstructor()->getMock(),
- $this->getValueFormatterFactoryMock(),
+ WikibaseRepo::getDefaultInstance(),
$this->getMockBuilder('Wikibase\Repo\ValueParserFactory')->disableOriginalConstructor()->getMock()
);
- }
-
- private function getValueFormatterFactoryMock()
- {
- $mock =
$this->getMockBuilder('Wikibase\Lib\OutputFormatValueFormatterFactory')
- ->setMethods(array('getValueFormatter'))
- ->disableOriginalConstructor()
- ->getMock();
- $mock->expects($this->any())
- ->method('getValueFormatter')
- ->will( $this->returnValue(
$this->getMockForAbstractClass('ValueFormatters\ValueFormatter') ) );
-
- return $mock;
}
}
diff --git a/tests/phpunit/Specials/SpecialCrossCheckTest.php
b/tests/phpunit/Specials/SpecialCrossCheckTest.php
index f8c3669..5878bdd 100755
--- a/tests/phpunit/Specials/SpecialCrossCheckTest.php
+++ b/tests/phpunit/Specials/SpecialCrossCheckTest.php
@@ -19,7 +19,6 @@
use Wikibase\Lib\ClaimGuidGenerator;
use Wikibase\Repo\WikibaseRepo;
use Wikibase\DataModel\Entity\EntityId;
-use WikibaseQuality\WikibaseQualityFactory;
/**
--
To view, visit https://gerrit.wikimedia.org/r/221624
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I8f2288c5d8060a5b6bcbe65e622b504a868b3b31
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/WikibaseQualityExternalValidation
Gerrit-Branch: v1
Gerrit-Owner: Soeren.oldag <[email protected]>
Gerrit-Reviewer: Dominic.sauer <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Soeren.oldag <[email protected]>
Gerrit-Reviewer: Tamslo <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits