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

Reply via email to