jenkins-bot 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: I7b5c2692bf95afecf84f30b8db04c28ae84912cd
---
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/UpdateTable/ExternalDataImporter.php
M specials/SpecialCrossCheck.php
D 
tests/phpunit/CrossCheck/ComparativeValueParser/BasicComparativeValueParserTest.php
D 
tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeMultilingualTextValueParserTest.php
D 
tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeStringValueParserTest.php
M 
tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserFactoryTest.php
D 
tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserTestBase.php
D 
tests/phpunit/CrossCheck/ComparativeValueParser/DispatchingComparativeValueParserTest.php
A 
tests/phpunit/CrossCheck/ComparativeValueParser/MultilingualTextValueParserTest.php
A tests/phpunit/CrossCheck/ComparativeValueParser/StringValueParserTest.php
A tests/phpunit/CrossCheck/ComparativeValueParser/ValueParserTestBase.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
M tests/phpunit/ExternalValidationServicesTest.php
M tests/phpunit/Specials/SpecialCrossCheckTest.php
38 files changed, 805 insertions(+), 1,219 deletions(-)

Approvals:
  Dominic.sauer: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/composer.json b/composer.json
index b4699a6..f03a304 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|~4.5",
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 11e4041..0dd7404 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;
 
 
 /**
@@ -30,7 +28,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 3a82f0e..53a287d 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;
 
 
@@ -21,10 +22,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;
        }
 
        /**
@@ -37,6 +45,15 @@
                        $this->termIndex,
                        $this->newStringComparer()
                );
+       }
+
+       /**
+        * Returns a StringComparer that can compare various number of strings 
with each other.
+        *
+        * @return StringComparer
+        */
+       private function newStringComparer() {
+               return new StringComparer( $this->stringNormalizer );
        }
 
        /**
@@ -97,15 +114,6 @@
         */
        public function newTimeValueComparer() {
                return new TimeValueComparer();
-       }
-
-       /**
-        * Returns a StringComparer that can compare various number of strings 
with each other.
-        *
-        * @return StringComparer
-        */
-       private function newStringComparer() {
-               return new StringComparer();
        }
 
        /**
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 0f4305a..d51205d 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;
 
@@ -20,6 +21,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.
@@ -96,7 +109,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 e980db0..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,21 +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,
+       public function __construct(
+               EntityLookup $entityLookup,
+               ComparativeValueParserFactory $comparativeValueParserFactory,
                DataValueComparer $dataValueComparer,
-               ReferenceChecker $referenceHandler,
+               ReferenceChecker $referenceHandler,
                DumpMetaInformationLookup $dumpMetaInformationLookup,
                ExternalDataRepo $externalDataRepo
        ) {
                $this->entityLookup = $entityLookup;
-               $this->comparativeValueParser = $comparativeValueParser;
+               $this->valueParserFactory = $comparativeValueParserFactory;
                $this->dataValueComparer = $dataValueComparer;
                $this->referenceHandler = $referenceHandler;
                $this->dumpMetaInformationLookup = $dumpMetaInformationLookup;
@@ -160,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 );
@@ -181,6 +184,7 @@
 
                foreach ( $externalData as $dumpId => $externalDataPerDump ) {
                        $dumpMetaInformation = $dumpMetaInformationList[ 
$dumpId ];
+                       $comparativeValueParser = 
$this->valueParserFactory->newComparativeValueParser( $dumpMetaInformation );
 
                        foreach ( $externalDataPerDump as $externalId => 
$externalDataPerId ) {
                                $externalId = (string)$externalId;
@@ -192,7 +196,8 @@
                                                        $identifierPropertyId,
                                                        $externalId,
                                                        $externalValues,
-                                                       
$statements->getByPropertyId( $propertyId )
+                                                       
$statements->getByPropertyId( $propertyId ),
+                                                       $comparativeValueParser
                                                )
                                        );
                                }
@@ -208,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(
@@ -243,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 ) {
@@ -282,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 6ef238e..8e41cf5 100755
--- a/includes/ExternalValidationServices.php
+++ b/includes/ExternalValidationServices.php
@@ -6,23 +6,12 @@
 use DataValues\Deserializers\DataValueDeserializer;
 use DataValues\Serializers\DataValueSerializer;
 use ValueFormatters\FormatterOptions;
-use ValueFormatters\ValueFormatter;
-use Wikibase\DataModel\Statement\StatementGuidParser;
-use Wikibase\DataModel\Entity\EntityIdParser;
-use Wikibase\Lib\EntityIdHtmlLinkFormatter;
-use Wikibase\Lib\LanguageNameLookup;
-use Wikibase\Lib\OutputFormatValueFormatterFactory;
 use Wikibase\Lib\SnakFormatter;
-use Wikibase\Lib\Store\EntityLookup;
-use Wikibase\Lib\Store\EntityRevisionLookup;
-use Wikibase\Lib\Store\EntityTitleLookup;
 use Wikibase\Lib\Store\LanguageLabelDescriptionLookup;
-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;
@@ -45,180 +34,118 @@
  */
 class ExternalValidationServices {
 
-    /**
-     * @var EntityLookup
-     */
-    private $entityLookup;
-
-    /**
-     * @var EntityRevisionLookup
-     */
-    private $entityRevisionLookup;
+       /**
+        * @var WikibaseRepo
+        */
+       private $wikibaseRepo;
 
        /**
-        * @var TermIndex
+        * @var CrossChecker
         */
-       private $termIndex;
-
-    /**
-     * @var TermLookup
-     */
-    private $termLookup;
-
-    /**
-     * @var EntityTitleLookup
-     */
-    private $entityTitleLookup;
-
-    /**
-     * @var EntityIdParser
-     */
-    private $entityIdParser;
-
-    /**
-     * @var StatementGuidParser
-     */
-    private $statementGuidParser;
-
-    /**
-     * @var ValueFormatter
-     */
-    private $valueFormatterFactory;
+       private $crossChecker;
 
        /**
-        * @var ValueParserFactory
+        * @var CrossCheckInteractor
         */
-       private $valueParserFactory;
+       private $crossCheckInteractor;
 
-    /**
-     * @var CrossChecker
-     */
-    private $crossChecker;
-
-    /**
-     * @var CrossCheckInteractor
-     */
-    private $crossCheckInteractor;
-
-    /**
-     * @var DataValueComparerFactory
-     */
-    private $dataValueComparerFactory;
+       /**
+        * @var DataValueComparerFactory
+        */
+       private $dataValueComparerFactory;
 
        /**
         * @var ComparativeValueParserFactory
         */
        private $comparativeValueParserFactory;
 
-    /**
-     * @var DumpMetaInformationLookup
-     */
-    private $dumpMetaInformationLookup;
+       /**
+        * @var DumpMetaInformationLookup
+        */
+       private $dumpMetaInformationLookup;
 
-    /**
-     * @var DumpMetaInformationStore
-     */
-    private $dumpMetaInformationStore;
+       /**
+        * @var DumpMetaInformationStore
+        */
+       private $dumpMetaInformationStore;
 
-    /**
-     * @var ExternalDataRepo
-     */
-    private $externalDataRepo;
+       /**
+        * @var ExternalDataRepo
+        */
+       private $externalDataRepo;
 
-    /**
-     * @var SerializerFactory
-     */
-    private $serializerFactory;
+       /**
+        * @var SerializerFactory
+        */
+       private $serializerFactory;
 
-    /**
-     * @var CrossCheckResultToViolationTranslator
-     */
-    private $crossCheckResultToViolationTranslator;
+       /**
+        * @var CrossCheckResultToViolationTranslator
+        */
+       private $crossCheckResultToViolationTranslator;
 
-    /**
-     * @param EntityLookup $entityLookup
-     * @param EntityRevisionLookup $entityRevisionLookup
-     * @param TermLookup $termLookup
-     * @param EntityTitleLookup $entityTitleLookup
-     * @param EntityIdParser $entityIdParser
-     * @param StatementGuidParser $statementGuidParser
-     * @param OutputFormatValueFormatterFactory $valueFormatterFactory
-     * @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;
+       /**
+        * @param WikibaseRepo $wikibaseRepo
+        * @param ValueParserFactory $valueParserFactory
+        */
+       public function __construct( WikibaseRepo $wikibaseRepo, 
ValueParserFactory $valueParserFactory ) {
+               $this->wikibaseRepo = $wikibaseRepo;
                $this->valueParserFactory = $valueParserFactory;
-    }
+       }
 
-    /**
-     * Returns the default instance.
-     * IMPORTANT: Use only when it is not feasible to inject an instance 
properly.
-     *
-     * @return ExternalValidationServices
-     */
-    public static function getDefaultInstance() {
-        static $instance = null;
+       /**
+        * Returns the default instance.
+        * IMPORTANT: Use only when it is not feasible to inject an instance 
properly.
+        *
+        * @return ExternalValidationServices
+        */
+       public static function getDefaultInstance()
+       {
+               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(),
-                               new ValueParserFactory( 
$GLOBALS['wgValueParsers'] )
-            );
-        }
+               if ($instance === null) {
+                       $instance = new self(
+                               WikibaseRepo::getDefaultInstance(),
+                               new 
ValueParserFactory($GLOBALS['wgValueParsers'])
+                       );
+               }
 
-        return $instance;
-    }
+               return $instance;
+       }
 
-    /**
-     * @return CrossChecker
-     */
-    public function getCrossChecker() {
-        if ( $this->crossChecker === null ) {
-            $this->crossChecker = new CrossChecker(
-                               $this->entityLookup,
-                               
$this->getComparativeValueParserFactory()->newDispatchingComparativeValueParser(),
+       /**
+        * @return CrossChecker
+        */
+       public function getCrossChecker()
+       {
+               if ($this->crossChecker === null) {
+                       $this->crossChecker = new CrossChecker(
+                               $this->wikibaseRepo->getEntityLookup(),
+                               $this->getComparativeValueParserFactory(),
                                
$this->getDataValueComparerFactory()->newDispatchingDataValueComparer(),
-                new ReferenceChecker(),
-                $this->getDumpMetaInformationLookup(),
-                $this->getExternalDataRepo()
-            );
-        }
+                               new ReferenceChecker(),
+                               $this->getDumpMetaInformationLookup(),
+                               $this->getExternalDataRepo()
+                       );
+               }
 
-        return $this->crossChecker;
-    }
+               return $this->crossChecker;
+       }
 
-    /**
-     * @return CrossCheckInteractor
-     */
-    public function getCrossCheckInteractor() {
-        if ( $this->crossCheckInteractor === null ) {
-            $this->crossCheckInteractor = new CrossCheckInteractor(
-                $this->entityLookup,
-                $this->statementGuidParser,
-                $this->getCrossChecker() );
-        }
+       /**
+        * @return CrossCheckInteractor
+        */
+       public function getCrossCheckInteractor()
+       {
+               if ($this->crossCheckInteractor === null) {
+                       $this->crossCheckInteractor = new CrossCheckInteractor(
+                               $this->wikibaseRepo->getEntityLookup(),
+                               $this->wikibaseRepo->getStatementGuidParser(),
+                               $this->getCrossChecker());
+               }
 
-        return $this->crossCheckInteractor;
-    }
+               return $this->crossCheckInteractor;
+       }
 
        /**
         * @return ComparativeValueParserFactory
@@ -234,112 +161,120 @@
                return $this->comparativeValueParserFactory;
        }
 
-    /**
-     * @return DataValueComparerFactory
-     */
-    public function getDataValueComparerFactory() {
-        if ( $this->dataValueComparerFactory === null ) {
-            $this->dataValueComparerFactory = new DataValueComparerFactory( 
$this->termIndex );
-        }
+       /**
+        * @return CrossCheckResultToViolationTranslator
+        */
+       public function getCrossCheckResultToViolationTranslator() {
+               if ( $this->crossCheckResultToViolationTranslator === null ) {
+                       $this->crossCheckResultToViolationTranslator = new 
CrossCheckResultToViolationTranslator(
+                               $this->wikibaseRepo->getEntityRevisionLookup()
+                       );
+               }
 
-        return $this->dataValueComparerFactory;
-    }
+               return $this->crossCheckResultToViolationTranslator;
+       }
 
-    /**
-     * @return DumpMetaInformationLookup
-     */
-    public function getDumpMetaInformationLookup() {
-        if( $this->dumpMetaInformationLookup === null ) {
-            $this->dumpMetaInformationLookup = new SqlDumpMetaInformationRepo( 
$this->entityIdParser );
-        }
+       /**
+        * @return ViolationFormatter
+        */
+       public function getViolationFormatter() {
+               $languageCode = 
RequestContext::getMain()->getLanguage()->getCode();
 
-        return $this->dumpMetaInformationLookup;
-    }
+               $dataValueDeserializer = new DataValueDeserializer(
+                       array (
+                               'boolean' => 'DataValues\BooleanValue',
+                               'number' => 'DataValues\NumberValue',
+                               'string' => 'DataValues\StringValue',
+                               'unknown' => 'DataValues\UnknownValue',
+                               'globecoordinate' => 
'DataValues\GlobeCoordinateValue',
+                               'monolingualtext' => 
'DataValues\MonolingualTextValue',
+                               'multilingualtext' => 
'DataValues\MultilingualTextValue',
+                               'quantity' => 'DataValues\QuantityValue',
+                               'time' => 'DataValues\TimeValue',
+                               'wikibase-entityid' => 
'Wikibase\DataModel\Entity\EntityIdValue',
+                       )
+               );
+               $entityIdLinkFormatter = 
$this->wikibaseRepo->getEntityIdHtmlLinkFormatterFactory()->getEntityIdFormater(
+                       new LanguageLabelDescriptionLookup( 
$this->wikibaseRepo->getTermLookup(), $languageCode )
+               );
+               $formatterOptions = new FormatterOptions();
+               $formatterOptions->setOption( SnakFormatter::OPT_LANG, 
$languageCode );
+               $valueFormatterFactory = 
$this->wikibaseRepo->getValueFormatterFactory();
+               $dataValueFormatter = 
$valueFormatterFactory->getValueFormatter( SnakFormatter::FORMAT_HTML, 
$formatterOptions );
 
-    /**
-     * @return DumpMetaInformationStore
-     */
-    public function getDumpMetaInformationStore() {
-        if( $this->dumpMetaInformationStore === null ) {
-            $this->dumpMetaInformationStore = new SqlDumpMetaInformationRepo( 
$this->entityIdParser );
-        }
+               return new CrossCheckViolationFormatter(
+                       $dataValueDeserializer,
+                       $entityIdLinkFormatter,
+                       $dataValueFormatter,
+                       $this->getDumpMetaInformationLookup()
+               );
+       }
 
-        return $this->dumpMetaInformationStore;
-    }
+       /**
+        * @return DataValueComparerFactory
+        */
+       public function getDataValueComparerFactory()
+       {
+               if ($this->dataValueComparerFactory === null) {
+                       $this->dataValueComparerFactory = new 
DataValueComparerFactory(
+                               $this->wikibaseRepo->getStore()->getTermIndex(),
+                               $this->wikibaseRepo->getStringNormalizer()
+                       );
+               }
 
-    /**
-     * @return ExternalDataRepo
-     */
-    public function getExternalDataRepo() {
-        if( $this->externalDataRepo === null ) {
-            $this->externalDataRepo = new ExternalDataRepo();
-        }
+               return $this->dataValueComparerFactory;
+       }
 
-        return $this->externalDataRepo;
-    }
+       /**
+        * @return DumpMetaInformationLookup
+        */
+       public function getDumpMetaInformationLookup()
+       {
+               if ($this->dumpMetaInformationLookup === null) {
+                       $this->dumpMetaInformationLookup = new 
SqlDumpMetaInformationRepo();
+               }
 
-    /**
-     * @return SerializerFactory
-     */
-    public function getSerializerFactory() {
-        if ( $this->serializerFactory === null ) {
-            $dataValueSerializer = new DataValueSerializer();
-            $dataModelSerializerFactory = new 
\Wikibase\DataModel\SerializerFactory( $dataValueSerializer );
-            $this->serializerFactory = new SerializerFactory(
-                $dataValueSerializer,
-                $dataModelSerializerFactory->newReferenceSerializer()
-            );
-        }
+               return $this->dumpMetaInformationLookup;
+       }
 
-        return $this->serializerFactory;
-    }
+       /**
+        * @return DumpMetaInformationStore
+        */
+       public function getDumpMetaInformationStore()
+       {
+               if ($this->dumpMetaInformationStore === null) {
+                       $this->dumpMetaInformationStore = new 
SqlDumpMetaInformationRepo();
+               }
 
-    /**
-     * @return CrossCheckResultToViolationTranslator
-     */
-    public function getCrossCheckResultToViolationTranslator() {
-        if ( $this->crossCheckResultToViolationTranslator === null ) {
-            $this->crossCheckResultToViolationTranslator = new 
CrossCheckResultToViolationTranslator( $this->entityRevisionLookup );
-        }
+               return $this->dumpMetaInformationStore;
+       }
 
-        return $this->crossCheckResultToViolationTranslator;
-    }
+       /**
+        * @return ExternalDataRepo
+        */
+       public function getExternalDataRepo()
+       {
+               if ($this->externalDataRepo === null) {
+                       $this->externalDataRepo = new ExternalDataRepo();
+               }
 
-    /**
-     * @return ViolationFormatter
-     */
-    public function getViolationFormatter() {
-        $languageCode = RequestContext::getMain()->getLanguage()->getCode();
+               return $this->externalDataRepo;
+       }
 
-        $dataValueDeserializer = new DataValueDeserializer(
-            array (
-                'boolean' => 'DataValues\BooleanValue',
-                'number' => 'DataValues\NumberValue',
-                'string' => 'DataValues\StringValue',
-                'unknown' => 'DataValues\UnknownValue',
-                'globecoordinate' => 'DataValues\GlobeCoordinateValue',
-                'monolingualtext' => 'DataValues\MonolingualTextValue',
-                'multilingualtext' => 'DataValues\MultilingualTextValue',
-                'quantity' => 'DataValues\QuantityValue',
-                'time' => 'DataValues\TimeValue',
-                'wikibase-entityid' => 
'Wikibase\DataModel\Entity\EntityIdValue',
-            )
-        );
-        $labelLookup = new LanguageLabelDescriptionLookup( $this->termLookup, 
$languageCode );
-        $entityIdLinkFormatter = new EntityIdHtmlLinkFormatter(
-            $labelLookup,
-            $this->entityTitleLookup,
-            new LanguageNameLookup()
-        );
-        $formatterOptions = new FormatterOptions();
-        $formatterOptions->setOption( SnakFormatter::OPT_LANG, $languageCode );
-        $dataValueFormatter = $this->valueFormatterFactory->getValueFormatter( 
SnakFormatter::FORMAT_HTML, $formatterOptions );
+       /**
+        * @return SerializerFactory
+        */
+       public function getSerializerFactory()
+       {
+               if ($this->serializerFactory === null) {
+                       $dataValueSerializer = new DataValueSerializer();
+                       $dataModelSerializerFactory = new 
\Wikibase\DataModel\SerializerFactory($dataValueSerializer);
+                       $this->serializerFactory = new SerializerFactory(
+                               $dataValueSerializer,
+                               
$dataModelSerializerFactory->newReferenceSerializer()
+                       );
+               }
 
-        return new CrossCheckViolationFormatter(
-            $dataValueDeserializer,
-            $entityIdLinkFormatter,
-            $dataValueFormatter,
-            $this->getDumpMetaInformationLookup()
-        );
-    }
+               return $this->serializerFactory;
+       }
 }
\ No newline at end of file
diff --git a/includes/UpdateTable/ExternalDataImporter.php 
b/includes/UpdateTable/ExternalDataImporter.php
index d015c7a..b4de222 100755
--- a/includes/UpdateTable/ExternalDataImporter.php
+++ b/includes/UpdateTable/ExternalDataImporter.php
@@ -40,7 +40,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/SpecialCrossCheck.php b/specials/SpecialCrossCheck.php
index 34376bb..4e858ad 100755
--- a/specials/SpecialCrossCheck.php
+++ b/specials/SpecialCrossCheck.php
@@ -35,7 +35,7 @@
 use WikibaseQuality\Html\HtmlTableCellBuilder;
 use WikibaseQuality\Html\HtmlTableHeaderBuilder;
 use WikibaseQuality\Violations\ViolationStore;
-use WikibaseQuality\WikibaseQualityFactory;
+use WikibaseQuality\WikibaseQualityServices;
 
 
 class SpecialCrossCheck extends SpecialPage {
@@ -86,7 +86,7 @@
         */
        public static function newFromGlobalState() {
                $repo = WikibaseRepo::getDefaultInstance();
-               $qualityServices = WikibaseQualityFactory::getDefaultInstance();
+               $qualityServices = 
WikibaseQualityServices::getDefaultInstance();
                $externalValidationServices = 
ExternalValidationServices::getDefaultInstance();
 
                return new self(
diff --git 
a/tests/phpunit/CrossCheck/ComparativeValueParser/BasicComparativeValueParserTest.php
 
b/tests/phpunit/CrossCheck/ComparativeValueParser/BasicComparativeValueParserTest.php
deleted file mode 100644
index de97958..0000000
--- 
a/tests/phpunit/CrossCheck/ComparativeValueParser/BasicComparativeValueParserTest.php
+++ /dev/null
@@ -1,98 +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
index b076991..df7f2c7 100644
--- 
a/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserFactoryTest.php
+++ 
b/tests/phpunit/CrossCheck/ComparativeValueParser/ComparativeValueParserFactoryTest.php
@@ -2,10 +2,10 @@
 
 namespace 
WikibaseQuality\ExternalValidation\Tests\CrossCheck\ComparativeValueParser;
 
-use 
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParserFactory;
+use 
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\ComparativeValueParserFactory;
 
 /**
- * @covers 
WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeValueParserFactory
+ * @covers 
WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\ComparativeValueParserFactory
  *
  * @group WikibaseQualityExternalValidation
  *
@@ -14,33 +14,37 @@
  */
 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 );
+               $parser = $this->getFactory()->newStringValueParser();
+               $this->assertInstanceOf( 
'WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\StringValueParser', 
$parser );
        }
 
        public function testNewComparativeMultilingualTextValueParser() {
-               $parser = 
$this->getFactory()->newComparativeMultilingualTextValueParser();
-               $this->assertInstanceOf( 
'WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\ComparativeMultilingualTextValueParser',
 $parser );
+               $parser = $this->getFactory()->newMultilingualTextValueParser();
+               $this->assertInstanceOf( 
'WikibaseQuality\ExternalValidation\CrossCheck\ValueParser\MultilingualTextValueParser',
 $parser );
        }
 
-       public function testNewDispatchingComparativeValueParser() {
-               $parser = 
$this->getFactory()->newDispatchingComparativeValueParser();
-               $this->assertInstanceOf( 
'WikibaseQuality\ExternalValidation\CrossCheck\ComparativeValueParser\DispatchingComparativeValueParser',
 $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/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 21f58e7..0000000
--- 
a/tests/phpunit/CrossCheck/ComparativeValueParser/DispatchingComparativeValueParserTest.php
+++ /dev/null
@@ -1,90 +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/ComparativeValueParser/MultilingualTextValueParserTest.php
 
b/tests/phpunit/CrossCheck/ComparativeValueParser/MultilingualTextValueParserTest.php
new file mode 100644
index 0000000..4f25811
--- /dev/null
+++ 
b/tests/phpunit/CrossCheck/ComparativeValueParser/MultilingualTextValueParserTest.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace 
WikibaseQuality\ExternalValidation\Tests\CrossCheck\ComparativeValueParser;
+
+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/ComparativeValueParser/StringValueParserTest.php 
b/tests/phpunit/CrossCheck/ComparativeValueParser/StringValueParserTest.php
new file mode 100644
index 0000000..fb32239
--- /dev/null
+++ b/tests/phpunit/CrossCheck/ComparativeValueParser/StringValueParserTest.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace 
WikibaseQuality\ExternalValidation\Tests\CrossCheck\ComparativeValueParser;
+
+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/ComparativeValueParser/ValueParserTestBase.php 
b/tests/phpunit/CrossCheck/ComparativeValueParser/ValueParserTestBase.php
new file mode 100755
index 0000000..2bbe743
--- /dev/null
+++ b/tests/phpunit/CrossCheck/ComparativeValueParser/ValueParserTestBase.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace 
WikibaseQuality\ExternalValidation\Tests\CrossCheck\ComparativeValueParser;
+
+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/CrossCheck/Comparer/DataValueComparerFactoryTest.php 
b/tests/phpunit/CrossCheck/Comparer/DataValueComparerFactoryTest.php
index 8bd6ba0..116709c 100755
--- a/tests/phpunit/CrossCheck/Comparer/DataValueComparerFactoryTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/DataValueComparerFactoryTest.php
@@ -74,7 +74,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 d117f55..a7b90d1 100755
--- a/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
@@ -126,19 +126,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 a43c176..79e912a 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 965a982..3fdaca2 100755
--- a/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
@@ -116,19 +116,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 3375d60..1e73e36 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;
 
@@ -23,11 +24,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 5096815..cec9a67 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 72ee912..3ecb32a 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/ExternalValidationServicesTest.php 
b/tests/phpunit/ExternalValidationServicesTest.php
index 3d7f4ff..afe08e7 100755
--- a/tests/phpunit/ExternalValidationServicesTest.php
+++ b/tests/phpunit/ExternalValidationServicesTest.php
@@ -2,6 +2,7 @@
 
 namespace WikibaseQuality\ExternalValidation\Tests;
 
+use Wikibase\Repo\WikibaseRepo;
 use WikibaseQuality\ExternalValidation\ExternalValidationServices;
 
 
@@ -107,28 +108,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(),
-                       
$this->getMockBuilder('Wikibase\Repo\ValueParserFactory')->disableOriginalConstructor()->getMock()
+                       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 e5b0c2a..323f220 100755
--- a/tests/phpunit/Specials/SpecialCrossCheckTest.php
+++ b/tests/phpunit/Specials/SpecialCrossCheckTest.php
@@ -19,7 +19,7 @@
 use Wikibase\Lib\ClaimGuidGenerator;
 use Wikibase\Repo\WikibaseRepo;
 use Wikibase\DataModel\Entity\EntityId;
-use WikibaseQuality\WikibaseQualityFactory;
+use WikibaseQuality\WikibaseQualityServices;
 
 
 /**
@@ -79,7 +79,7 @@
 
        protected function newSpecialPage()
        {
-               $wikibaseQuality = WikibaseQualityFactory::getDefaultInstance();
+               $wikibaseQualityServices = 
WikibaseQualityServices::getDefaultInstance();
                $externalValidationFactory = 
ExternalValidationServices::getDefaultInstance();
                $wikibaseRepo = WikibaseRepo::getDefaultInstance();
 
@@ -92,7 +92,7 @@
                        $wikibaseRepo->getValueFormatterFactory(),
                        $externalValidationFactory->getCrossCheckInteractor(),
                        
$externalValidationFactory->getCrossCheckResultToViolationTranslator(),
-                       $wikibaseQuality->getViolationStore()
+                       $wikibaseQualityServices->getViolationStore()
                );
        }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/221627
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I7b5c2692bf95afecf84f30b8db04c28ae84912cd
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/WikibaseQualityExternalValidation
Gerrit-Branch: master
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