Soeren.oldag has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/205261

Change subject: DataValueComparer now return CompareResults instead of booleans.
......................................................................

DataValueComparer now return CompareResults instead of booleans.

Change-Id: I23fa8eeb59a02188933e07b2aae721dc44fdaeb5
---
M includes/CrossCheck/Comparer/DataValueComparer.php
M includes/CrossCheck/Comparer/EntityIdValueComparer.php
M includes/CrossCheck/Comparer/GlobeCoordinateValueComparer.php
M includes/CrossCheck/Comparer/MonolingualTextValueComparer.php
M includes/CrossCheck/Comparer/MultilingualTextValueComparer.php
M includes/CrossCheck/Comparer/QuantityValueComparer.php
M includes/CrossCheck/Comparer/StringValueComparer.php
M includes/CrossCheck/Comparer/TimeValueComparer.php
M includes/CrossCheck/CrossChecker.php
M tests/phpunit/CrossCheck/Comparer/DataValueComparerTest.php
M tests/phpunit/CrossCheck/Comparer/DataValueComparerTestBase.php
M tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
M tests/phpunit/CrossCheck/Comparer/GlobeCoordinateValueComparerTest.php
M tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php
M tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
M tests/phpunit/CrossCheck/Comparer/QuantityValueComparerTest.php
M tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php
M tests/phpunit/CrossCheck/Comparer/TimeValueComparerTest.php
18 files changed, 483 insertions(+), 484 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikidataQualityExternalValidation
 refs/changes/61/205261/1

diff --git a/includes/CrossCheck/Comparer/DataValueComparer.php 
b/includes/CrossCheck/Comparer/DataValueComparer.php
index 39aad33..bee1543 100644
--- a/includes/CrossCheck/Comparer/DataValueComparer.php
+++ b/includes/CrossCheck/Comparer/DataValueComparer.php
@@ -8,6 +8,7 @@
 use ValueParsers\ParserOptions;
 use ValueParsers\ValueParser;
 use Wikibase\Parsers\MonolingualTextParser;
+use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult;
 use WikidataQuality\ExternalValidation\DumpMetaInformation;
 
 
@@ -20,132 +21,147 @@
  */
 abstract class DataValueComparer {
 
-       /**
-        * Array of registered comparers
-        *
-        * @var array
-        */
-       private static $comparers = array (
-               
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\EntityIdValueComparer',
-               
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\MonolingualTextValueComparer',
-               
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\MultilingualTextValueComparer',
-               
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\StringValueComparer',
-               
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\TimeValueComparer',
-               
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\QuantityValueComparer',
-               
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\GlobeCoordinateValueComparer'
-       );
+    /**
+     * Array of registered comparers
+     *
+     * @var array
+     */
+    private static $comparers = array(
+        
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\EntityIdValueComparer',
+        
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\MonolingualTextValueComparer',
+        
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\MultilingualTextValueComparer',
+        
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\StringValueComparer',
+        
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\TimeValueComparer',
+        
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\QuantityValueComparer',
+        
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\GlobeCoordinateValueComparer'
+    );
 
-       /**
-        * Meta information of the current dump.
-        *
-        * @var DumpMetaInformation
-        */
-       protected $dumpMetaInformation;
+    /**
+     * Meta information of the current dump.
+     *
+     * @var DumpMetaInformation
+     */
+    protected $dumpMetaInformation;
 
-       /**
-        * Wikibase data value for comparison.
-        *
-        * @var array
-        */
-       protected $localValue;
+    /**
+     * Wikibase data value for comparison.
+     *
+     * @var array
+     */
+    protected $localValue;
 
-       /**
-        * Data values from external database for comparison.
-        *
-        * @var array
-        */
-       protected $externalValues;
+    /**
+     * Data values from external database for comparison.
+     *
+     * @var array
+     */
+    protected $externalValues;
 
-       /**
-        * @param DumpMetaInformation $dumpMetaInformation
-        * @param DataValue $localValue - Wikibase data value
-        * @param array $externalValues - external database data values
-        */
-       public function __construct( DumpMetaInformation $dumpMetaInformation, 
DataValue $localValue, $externalValues ) {
-               if ( $externalValues && !is_array( $externalValues ) ) {
-                       throw new InvalidArgumentException( '$externalValues 
must be null or array.' );
-               }
-               $this->dumpMetaInformation = $dumpMetaInformation;
-               $this->localValue = $localValue;
-               $this->externalValues = $externalValues;
-       }
+    /**
+     * @param DumpMetaInformation $dumpMetaInformation
+     * @param DataValue $localValue - Wikibase data value
+     * @param array $externalValues - external database data values
+     */
+    public function __construct( DumpMetaInformation $dumpMetaInformation, 
DataValue $localValue, $externalValues ) {
+        if ( $externalValues && !is_array( $externalValues ) ) {
+            throw new InvalidArgumentException( '$externalValues must be null 
or array.' );
+        }
+        $this->dumpMetaInformation = $dumpMetaInformation;
+        $this->localValue = $localValue;
+        $this->externalValues = $externalValues;
+    }
 
-       /**
-        * Starts the comparison of given DataValue and values of external 
database
-        *
-        * @return bool - result of the comparison.
-        */
-       public abstract function execute();
+    /**
+     * Starts the comparison of given DataValue and values of external database
+     *
+     * @return CompareResult
+     */
+    public abstract function execute();
 
-       /**
-        * Returns parser that is used to parse strings of external values to 
Wikibase DataValues
-        *
-        * @return ValueParser
-        */
-       protected function getExternalValueParser() {
-               $options = new ParserOptions();
-               $options->setOption( 'valuelang', 
$this->dumpMetaInformation->getLanguage() );
-               return new MonolingualTextParser( $options );
-       }
+    /**
+     * Builds CompareResult instance for current comparison with given value
+     *
+     * @param $dataMismatch
+     * @return CompareResult
+     */
+    protected function buildCompareResult( $dataMismatch ) {
+        return new CompareResult(
+            $this->localValue,
+            $this->externalValues,
+            $dataMismatch
+        );
+    }
 
-       /**
-        * Parses each string in externalValues array to Wikibase DataValue
-        */
-       protected function parseExternalValues() {
-               if ( $this->externalValues ) {
-                       foreach ( $this->externalValues as $index => 
$externalValue ) {
-                               if ( is_string( $externalValue ) ) {
-                                       $parsedValue = 
$this->getExternalValueParser()->parse( $externalValue );
-                                       $this->externalValues[ $index ] = 
$parsedValue;
-                               }
-                       }
-               }
-       }
+    /**
+     * Returns parser that is used to parse strings of external values to 
Wikibase DataValues
+     *
+     * @return ValueParser
+     */
+    protected function getExternalValueParser() {
+        $options = new ParserOptions();
+        $options->setOption( 'valuelang', 
$this->dumpMetaInformation->getLanguage() );
+        return new MonolingualTextParser( $options );
+    }
 
-       /**
-        * Meta information of the current dump.
-        *
-        * @return DumpMetaInformation
-        */
-       public function getDumpMetaInformation() {
-               return $this->dumpMetaInformation;
-       }
+    /**
+     * Parses each string in externalValues array to Wikibase DataValue.
+     * Must be called in DataValueComparer::execute() once.
+     */
+    protected function parseExternalValues() {
+        if ( $this->externalValues ) {
+            foreach ( $this->externalValues as $index => $externalValue ) {
+                if ( is_string( $externalValue ) ) {
+                    $parsedValue = $this->getExternalValueParser()->parse( 
$externalValue );
+                    $this->externalValues[ $index ] = $parsedValue;
+                }
+            }
+        }
+    }
 
-       /**
-        * Returns Wikibase data value.
-        *
-        * @return array
-        */
-       public function getLocalValue() {
-               return $this->localValue;
-       }
+    /**
+     * Meta information of the current dump.
+     *
+     * @return DumpMetaInformation
+     */
+    public function getDumpMetaInformation() {
+        return $this->dumpMetaInformation;
+    }
 
-       /**
-        * Returns external database data values.
-        *
-        * @return array
-        */
-       public function getExternalValues() {
-               return $this->externalValues;
-       }
+    /**
+     * Returns Wikibase data value.
+     *
+     * @return array
+     */
+    public function getLocalValue() {
+        return $this->localValue;
+    }
 
-       /**
-        * Returns an instance of a comparer suitable to the given DataValue
-        *
-        * @param DumpMetaInformation $dumpMetaInformation
-        * @param DataValue $localValue - Wikibase data value
-        * @param array $externalValues - external database data values
-        *
-        * @return DataValueComparer|null
-        */
-       public static function getComparer( DumpMetaInformation 
$dumpMetaInformation, DataValue $localValue, array $externalValues ) {
-               foreach ( self::$comparers as $comparer ) {
-                       $reflector = new ReflectionClass( $comparer );
-                       $acceptedDataValues = 
$reflector->getStaticPropertyValue( 'acceptedDataValues' );
-                       $dataValueClass = get_class( $localValue );
-                       if ( in_array( $dataValueClass, $acceptedDataValues ) ) 
{
-                               return new $comparer( $dumpMetaInformation, 
$localValue, $externalValues );
-                       }
-               }
-       }
+    /**
+     * Returns external database data values.
+     *
+     * @return array
+     */
+    public function getExternalValues() {
+        return $this->externalValues;
+    }
+
+    /**
+     * Returns an instance of a comparer suitable to the given DataValue
+     *
+     * @param DumpMetaInformation $dumpMetaInformation
+     * @param DataValue $localValue - Wikibase data value
+     * @param array $externalValues - external database data values
+     *
+     * @return DataValueComparer|null
+     */
+    public static function getComparer( DumpMetaInformation 
$dumpMetaInformation, DataValue $localValue, array $externalValues ) {
+        foreach ( self::$comparers as $comparer ) {
+            $reflector = new ReflectionClass( $comparer );
+            $acceptedDataValues = $reflector->getStaticPropertyValue( 
'acceptedDataValues' );
+            $dataValueClass = get_class( $localValue );
+            if ( in_array( $dataValueClass, $acceptedDataValues ) ) {
+                return new $comparer( $dumpMetaInformation, $localValue, 
$externalValues );
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/includes/CrossCheck/Comparer/EntityIdValueComparer.php 
b/includes/CrossCheck/Comparer/EntityIdValueComparer.php
index b11bf8d..91627f7 100644
--- a/includes/CrossCheck/Comparer/EntityIdValueComparer.php
+++ b/includes/CrossCheck/Comparer/EntityIdValueComparer.php
@@ -4,6 +4,7 @@
 
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\Repo\WikibaseRepo;
+use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult;
 
 
 /**
@@ -15,60 +16,60 @@
  */
 class EntityIdValueComparer extends DataValueComparer {
 
-       /**
-        * Array of DataValue classes that are supported by the current comparer
-        *
-        * @var array
-        */
-       public static $acceptedDataValues = array ( 
'Wikibase\DataModel\Entity\EntityIdValue' );
+    /**
+     * Array of DataValue classes that are supported by the current comparer
+     *
+     * @var array
+     */
+    public static $acceptedDataValues = array( 
'Wikibase\DataModel\Entity\EntityIdValue' );
 
-       /**
-        * Starts the comparison of given EntityIdValue and values of external 
database
-        *
-        * @return bool - result of the comparison.
-        */
-       public function execute() {
-               $entityId = $this->localValue->getEntityId();
-               $terms = $this->getTerms( $entityId, 
$this->dumpMetaInformation->getLanguage() );
+    /**
+     * Starts the comparison of given EntityIdValue and values of external 
database
+     *
+     * @return CompareResult
+     */
+    public function execute() {
+        $entityId = $this->localValue->getEntityId();
+        $terms = $this->getTerms( $entityId, 
$this->dumpMetaInformation->getLanguage() );
 
-               $result = false;
-               if ( $this->externalValues && $terms && count( array_intersect( 
$terms, $this->externalValues ) ) > 0 ) {
-                       $result = true;
-               }
+        $dataMismatch = true;
+        if ( $this->externalValues && $terms && count( array_intersect( 
$terms, $this->externalValues ) ) > 0 ) {
+            $dataMismatch = false;
+        }
 
-               $this->parseExternalValues();
+        $this->parseExternalValues();
 
-               return $result;
-       }
+        return $this->buildCompareResult( $dataMismatch );
+    }
 
-       /**
-        * Retrieves terms (label and aliases) of a given entity in the given 
language
-        *
-        * @param EntityId $entityId
-        * @param string $language
-        *
-        * @return array
-        */
-       private function getTerms( EntityId $entityId, $language ) {
-               $entity = $this->getEntityLookup()->getEntity( $entityId );
-               if ( $entity ) {
-                       $aliases = $entity->getAliases( $language );
-                       $label = $entity->getLabel( $language );
+    /**
+     * Retrieves terms (label and aliases) of a given entity in the given 
language
+     *
+     * @param EntityId $entityId
+     * @param string $language
+     *
+     * @return array
+     */
+    private function getTerms( EntityId $entityId, $language ) {
+        $entity = $this->getEntityLookup()->getEntity( $entityId );
+        if ( $entity ) {
+            $aliases = $entity->getAliases( $language );
+            $label = $entity->getLabel( $language );
 
-                       $terms = $aliases;
-                       if ( $label != false ) {
-                               $terms[ ] = $label;
-                       }
+            $terms = $aliases;
+            if ( $label != false ) {
+                $terms[ ] = $label;
+            }
 
-                       return $terms;
-               }
-       }
+            return $terms;
+        }
+    }
 
-       /**
-        * @return \Wikibase\Lib\Store\EntityLookup
-        * @codeCoverageIgnore
-        */
-       protected function getEntityLookup() {
-               return WikibaseRepo::getDefaultInstance()->getEntityLookup();
-       }
+    /**
+     * @return \Wikibase\Lib\Store\EntityLookup
+     * @codeCoverageIgnore
+     */
+    protected function getEntityLookup() {
+        return WikibaseRepo::getDefaultInstance()->getEntityLookup();
+    }
 }
\ No newline at end of file
diff --git a/includes/CrossCheck/Comparer/GlobeCoordinateValueComparer.php 
b/includes/CrossCheck/Comparer/GlobeCoordinateValueComparer.php
index c1c7cdb..abe47b3 100644
--- a/includes/CrossCheck/Comparer/GlobeCoordinateValueComparer.php
+++ b/includes/CrossCheck/Comparer/GlobeCoordinateValueComparer.php
@@ -4,6 +4,7 @@
 
 use DataValues\Geo\Formatters\GlobeCoordinateFormatter;
 use DataValues\Geo\Parsers\GlobeCoordinateParser;
+use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult;
 
 
 /**
@@ -15,42 +16,44 @@
  */
 class GlobeCoordinateValueComparer extends DataValueComparer {
 
-       /**
-        * Array of DataValue classes that are supported by the current comparer
-        *
-        * @var array
-        */
-       public static $acceptedDataValues = array ( 
'DataValues\Geo\Values\GlobeCoordinateValue' );
+    /**
+     * Array of DataValue classes that are supported by the current comparer
+     *
+     * @var array
+     */
+    public static $acceptedDataValues = array( 
'DataValues\Geo\Values\GlobeCoordinateValue' );
 
-       /**
-        * Starts the comparison of given GlobeCoordinateValue and values of 
external database
-        *
-        * @return bool - result of the comparison.
-        */
-       public function execute() {
-               $globeFormatter = new GlobeCoordinateFormatter();
-               $formattedDataValue = $globeFormatter->format( 
$this->localValue );
+    /**
+     * Starts the comparison of given GlobeCoordinateValue and values of 
external database
+     *
+     * @return CompareResult
+     */
+    public function execute() {
+        $globeFormatter = new GlobeCoordinateFormatter();
+        $formattedDataValue = $globeFormatter->format( $this->localValue );
 
-               $this->parseExternalValues();
+        $this->parseExternalValues();
 
-               if ( $this->externalValues ) {
-                       foreach ( $this->externalValues as $externalValue ) {
-                               $formattedExternalValue = 
$globeFormatter->format( $externalValue );
-                               if ( $formattedDataValue === 
$formattedExternalValue ) {
-                                       return true;
-                               }
-                       }
-               }
+        $dataMismatch = true;
+        if ( $this->externalValues ) {
+            foreach ( $this->externalValues as $externalValue ) {
+                $formattedExternalValue = $globeFormatter->format( 
$externalValue );
+                if ( $formattedDataValue === $formattedExternalValue ) {
+                    $dataMismatch = false;
+                    break;
+                }
+            }
+        }
 
-               return false;
-       }
+        return $this->buildCompareResult( $dataMismatch );
+    }
 
-       /**
-        * Returns parser that is used to parse strings of external values to 
Wikibase DataValues
-        *
-        * @return GlobeCoordinateParser
-        */
-       protected function getExternalValueParser() {
-               return new GlobeCoordinateParser();
-       }
+    /**
+     * Returns parser that is used to parse strings of external values to 
Wikibase DataValues
+     *
+     * @return GlobeCoordinateParser
+     */
+    protected function getExternalValueParser() {
+        return new GlobeCoordinateParser();
+    }
 }
\ No newline at end of file
diff --git a/includes/CrossCheck/Comparer/MonolingualTextValueComparer.php 
b/includes/CrossCheck/Comparer/MonolingualTextValueComparer.php
index f7b27d2..fbed35c 100644
--- a/includes/CrossCheck/Comparer/MonolingualTextValueComparer.php
+++ b/includes/CrossCheck/Comparer/MonolingualTextValueComparer.php
@@ -2,6 +2,8 @@
 
 namespace WikidataQuality\ExternalValidation\CrossCheck\Comparer;
 
+use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult;
+
 /**
  * Class MonolingualTextValueComparer
  *
@@ -11,26 +13,26 @@
  */
 class MonolingualTextValueComparer extends DataValueComparer {
 
-       /**
-        * Array of DataValue classes that are supported by the current comparer
-        *
-        * @var array
-        */
-       public static $acceptedDataValues = array ( 
'DataValues\MonolingualTextValue' );
+    /**
+     * Array of DataValue classes that are supported by the current comparer
+     *
+     * @var array
+     */
+    public static $acceptedDataValues = array( 
'DataValues\MonolingualTextValue' );
 
-       /**
-        * Starts the comparison of given MonolingualTextValue and values of 
external database
-        *
-        * @return bool - result of the comparison.
-        */
-       public function execute() {
-               $result = false;
-               if ( $this->externalValues && in_array( 
$this->localValue->getText(), $this->externalValues ) ) {
-                       $result = true;
-               }
+    /**
+     * Starts the comparison of given MonolingualTextValue and values of 
external database
+     *
+     * @return CompareResult
+     */
+    public function execute() {
+        $dataMismatch = true;
+        if ( $this->externalValues && in_array( $this->localValue->getText(), 
$this->externalValues ) ) {
+            $dataMismatch = false;
+        }
 
-               $this->parseExternalValues();
+        $this->parseExternalValues();
 
-               return $result;
-       }
+        return $this->buildCompareResult( $dataMismatch );
+    }
 }
\ No newline at end of file
diff --git a/includes/CrossCheck/Comparer/MultilingualTextValueComparer.php 
b/includes/CrossCheck/Comparer/MultilingualTextValueComparer.php
index 434ff7f..c525a13 100644
--- a/includes/CrossCheck/Comparer/MultilingualTextValueComparer.php
+++ b/includes/CrossCheck/Comparer/MultilingualTextValueComparer.php
@@ -3,6 +3,7 @@
 namespace WikidataQuality\ExternalValidation\CrossCheck\Comparer;
 
 use DataValues\MultilingualTextValue;
+use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult;
 use WikidataQuality\ExternalValidation\DumpMetaInformation;
 
 
@@ -15,47 +16,46 @@
  */
 class MultilingualTextValueComparer extends MonolingualTextValueComparer {
 
-       /**
-        * Array of DataValue classes that are supported by the current comparer
-        *
-        * @var array
-        */
-       public static $acceptedDataValues = array ( 
'DataValues\MultilingualTextValue' );
+    /**
+     * Array of DataValue classes that are supported by the current comparer
+     *
+     * @var array
+     */
+    public static $acceptedDataValues = array( 
'DataValues\MultilingualTextValue' );
 
-       /**
-        * @var MonolingualTextValueComparer
-        */
-       private $monolingualTextValueComparer;
+    /**
+     * @var MonolingualTextValueComparer
+     */
+    private $monolingualTextValueComparer;
 
-       /**
-        * @param DumpMetaInformation $dumpMetaInformation
-        * @param MultilingualTextValue $localValue
-        * @param array $externalValues
-        */
-       public function __construct( DumpMetaInformation $dumpMetaInformation, 
MultilingualTextValue $localValue, array $externalValues ) {
-               parent::__construct( $dumpMetaInformation, $localValue, 
$externalValues );
+    /**
+     * @param DumpMetaInformation $dumpMetaInformation
+     * @param MultilingualTextValue $localValue
+     * @param array $externalValues
+     */
+    public function __construct( DumpMetaInformation $dumpMetaInformation, 
MultilingualTextValue $localValue, array $externalValues ) {
+        parent::__construct( $dumpMetaInformation, $localValue, 
$externalValues );
 
-               foreach ( $localValue->getTexts() as $textValue ) {
-                       if ( $textValue->getLanguageCode() === 
$dumpMetaInformation->getLanguage() ) {
-                               $this->monolingualTextValueComparer = new 
MonolingualTextValueComparer( $dumpMetaInformation, $textValue, $externalValues 
);
-                               return;
-                       }
-               }
-       }
+        foreach ( $localValue->getTexts() as $textValue ) {
+            if ( $textValue->getLanguageCode() === 
$dumpMetaInformation->getLanguage() ) {
+                $this->monolingualTextValueComparer = new 
MonolingualTextValueComparer( $dumpMetaInformation, $textValue, $externalValues 
);
+                break;
+            }
+        }
+    }
 
-       /**
-        * Starts the comparison of given DataValue and values of external 
database
-        *
-        * @return bool - result of the comparison.
-        */
-       public function execute() {
-               $this->parseExternalValues();
+    /**
+     * Starts the comparison of given DataValue and values of external database
+     *
+     * @return CompareResult
+     */
+    public function execute() {
+        $this->parseExternalValues();
 
-               $result = false;
-               if ( $this->monolingualTextValueComparer ) {
-                       $result = 
$this->monolingualTextValueComparer->execute();
-               }
-
-               return $result;
-       }
+        if ( $this->monolingualTextValueComparer ) {
+            return $this->buildCompareResult(
+                
$this->monolingualTextValueComparer->execute()->hasDataMismatchOccurred()
+            );
+        }
+    }
 }
\ No newline at end of file
diff --git a/includes/CrossCheck/Comparer/QuantityValueComparer.php 
b/includes/CrossCheck/Comparer/QuantityValueComparer.php
index 83d5f0f..2fbcf44 100644
--- a/includes/CrossCheck/Comparer/QuantityValueComparer.php
+++ b/includes/CrossCheck/Comparer/QuantityValueComparer.php
@@ -5,6 +5,7 @@
 use ValueParsers\ParserOptions;
 use ValueParsers\QuantityParser;
 use ValueParsers\ValueParser;
+use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult;
 
 
 /**
@@ -16,43 +17,45 @@
  */
 class QuantityValueComparer extends DataValueComparer {
 
-       /**
-        * Array of DataValue classes that are supported by the current comparer
-        *
-        * @var array
-        */
-       public static $acceptedDataValues = array ( 'DataValues\QuantityValue' 
);
+    /**
+     * Array of DataValue classes that are supported by the current comparer
+     *
+     * @var array
+     */
+    public static $acceptedDataValues = array( 'DataValues\QuantityValue' );
 
-       /**
-        * Starts the comparison of given QuantityValue and values of external 
database
-        *
-        * @return bool - result of the comparison.
-        */
-       public function execute() {
-               $this->parseExternalValues();
+    /**
+     * Starts the comparison of given QuantityValue and values of external 
database
+     *
+     * @return CompareResult
+     */
+    public function execute() {
+        $this->parseExternalValues();
 
-               if ( $this->externalValues ) {
-                       foreach ( $this->externalValues as $externalValue ) {
-                               if ( $externalValue->getLowerBound() <= 
$this->localValue->getUpperBound() &&
-                                        $externalValue->getUpperBound() >= 
$this->localValue->getLowerBound()
-                               ) {
-                                       return true;
-                               }
-                       }
-               }
+        $dataMismatch = true;
+        if ( $this->externalValues ) {
+            foreach ( $this->externalValues as $externalValue ) {
+                if ( $externalValue->getLowerBound() <= 
$this->localValue->getUpperBound() &&
+                    $externalValue->getUpperBound() >= 
$this->localValue->getLowerBound()
+                ) {
+                    $dataMismatch = false;
+                    break;
+                }
+            }
+        }
 
-               return false;
-       }
+        return $this->buildCompareResult( $dataMismatch );
+    }
 
-       /**
-        * Returns parser that is used to parse strings of external values to 
Wikibase DataValues
-        *
-        * @return GlobeCoordinateParser
-        */
-       protected function getExternalValueParser() {
-               $parserOptions = new ParserOptions();
-               $parserOptions->setOption( ValueParser::OPT_LANG, 
$this->dumpMetaInformation->getLanguage() );
+    /**
+     * Returns parser that is used to parse strings of external values to 
Wikibase DataValues
+     *
+     * @return GlobeCoordinateParser
+     */
+    protected function getExternalValueParser() {
+        $parserOptions = new ParserOptions();
+        $parserOptions->setOption( ValueParser::OPT_LANG, 
$this->dumpMetaInformation->getLanguage() );
 
-               return new QuantityParser( $parserOptions );
-       }
+        return new QuantityParser( $parserOptions );
+    }
 }
\ No newline at end of file
diff --git a/includes/CrossCheck/Comparer/StringValueComparer.php 
b/includes/CrossCheck/Comparer/StringValueComparer.php
index 2d6fbcc..cbfd91c 100644
--- a/includes/CrossCheck/Comparer/StringValueComparer.php
+++ b/includes/CrossCheck/Comparer/StringValueComparer.php
@@ -2,6 +2,9 @@
 
 namespace WikidataQuality\ExternalValidation\CrossCheck\Comparer;
 
+use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult;
+
+
 /**
  * Class StringValueComparer
  *
@@ -11,26 +14,26 @@
  */
 class StringValueComparer extends DataValueComparer {
 
-       /**
-        * Array of DataValue classes that are supported by the current comparer
-        *
-        * @var array
-        */
-       public static $acceptedDataValues = array ( 'DataValues\StringValue' );
+    /**
+     * Array of DataValue classes that are supported by the current comparer
+     *
+     * @var array
+     */
+    public static $acceptedDataValues = array( 'DataValues\StringValue' );
 
-       /**
-        * Starts the comparison of given StringValue and values of external 
database
-        *
-        * @return bool - result of the comparison
-        */
-       public function execute() {
-               $result = false;
-               if ( $this->externalValues && in_array( 
$this->localValue->getValue(), $this->externalValues ) ) {
-                       $result = true;
-               }
+    /**
+     * Starts the comparison of given StringValue and values of external 
database
+     *
+     * @return CompareResult
+     */
+    public function execute() {
+        $dataMismatch = true;
+        if ( $this->externalValues && in_array( $this->localValue->getValue(), 
$this->externalValues ) ) {
+            $dataMismatch = false;
+        }
 
-               $this->parseExternalValues();
+        $this->parseExternalValues();
 
-               return $result;
-       }
+        return $this->buildCompareResult( $dataMismatch );
+    }
 }
\ No newline at end of file
diff --git a/includes/CrossCheck/Comparer/TimeValueComparer.php 
b/includes/CrossCheck/Comparer/TimeValueComparer.php
index 29ab8fc..e69fd35 100644
--- a/includes/CrossCheck/Comparer/TimeValueComparer.php
+++ b/includes/CrossCheck/Comparer/TimeValueComparer.php
@@ -4,12 +4,12 @@
 
 use ValueFormatters\FormatterOptions;
 use ValueFormatters\ValueFormatter;
-use ValueParsers\CalendarModelParser;
-use ValueParsers\TimeParser;
 use ValueParsers\ParserOptions;
+use ValueParsers\TimeParser;
 use ValueParsers\ValueParser;
 use Wikibase\Lib\MwTimeIsoFormatter;
 use Wikibase\Lib\Parsers\TimeParserFactory;
+use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult;
 
 
 /**
@@ -21,49 +21,51 @@
  */
 class TimeValueComparer extends DataValueComparer {
 
-       /**
-        * Array of DataValue classes that are supported by the current comparer
-        *
-        * @var array
-        */
-       public static $acceptedDataValues = array ( 'DataValues\TimeValue' );
+    /**
+     * Array of DataValue classes that are supported by the current comparer
+     *
+     * @var array
+     */
+    public static $acceptedDataValues = array( 'DataValues\TimeValue' );
 
-       /**
-        * Starts the comparison of given TimeValue and values of external 
database
-        *
-        * @return bool - result of the comparison.
-        */
-       public function execute() {
-               $formatterOptions = new FormatterOptions();
-               $formatterOptions->setOption( ValueFormatter::OPT_LANG, 
$this->dumpMetaInformation->getLanguage() );
-               $timeFormatter = new MwTimeIsoFormatter( $formatterOptions );
+    /**
+     * Starts the comparison of given TimeValue and values of external database
+     *
+     * @return CompareResult
+     */
+    public function execute() {
+        $formatterOptions = new FormatterOptions();
+        $formatterOptions->setOption( ValueFormatter::OPT_LANG, 
$this->dumpMetaInformation->getLanguage() );
+        $timeFormatter = new MwTimeIsoFormatter( $formatterOptions );
 
-               $formattedDataValue = $timeFormatter->format( $this->localValue 
);
+        $formattedDataValue = $timeFormatter->format( $this->localValue );
 
-               $this->parseExternalValues();
+        $this->parseExternalValues();
 
-               if ( $this->externalValues ) {
-                       foreach ( $this->externalValues as $externalValue ) {
-                               $formattedExternalValue = 
$timeFormatter->format( $externalValue );
-                               if ( $formattedDataValue === 
$formattedExternalValue ) {
-                                       return true;
-                               }
-                       }
-               }
+        $dataMismatch = true;
+        if ( $this->externalValues ) {
+            foreach ( $this->externalValues as $externalValue ) {
+                $formattedExternalValue = $timeFormatter->format( 
$externalValue );
+                if ( $formattedDataValue === $formattedExternalValue ) {
+                    $dataMismatch = false;
+                    break;
+                }
+            }
+        }
 
-               return false;
-       }
+        return $this->buildCompareResult( $dataMismatch );
+    }
 
-       /**
-        * Returns parser that is used to parse strings of external values to 
Wikibase DataValues
-        *
-        * @return TimeParser
-        */
-       protected function getExternalValueParser() {
-               $parserOptions = new ParserOptions();
-               $parserOptions->setOption( ValueParser::OPT_LANG, 
$this->dumpMetaInformation->getLanguage() );
-               $timeParserFactory = new TimeParserFactory( $parserOptions );
+    /**
+     * Returns parser that is used to parse strings of external values to 
Wikibase DataValues
+     *
+     * @return TimeParser
+     */
+    protected function getExternalValueParser() {
+        $parserOptions = new ParserOptions();
+        $parserOptions->setOption( ValueParser::OPT_LANG, 
$this->dumpMetaInformation->getLanguage() );
+        $timeParserFactory = new TimeParserFactory( $parserOptions );
 
-               return $timeParserFactory->getTimeParser();
-       }
+        return $timeParserFactory->getTimeParser();
+    }
 }
\ No newline at end of file
diff --git a/includes/CrossCheck/CrossChecker.php 
b/includes/CrossCheck/CrossChecker.php
index cd748ba..33063db 100644
--- a/includes/CrossCheck/CrossChecker.php
+++ b/includes/CrossCheck/CrossChecker.php
@@ -191,9 +191,7 @@
                        $comparer = DataValueComparer::getComparer( 
$dumpMetaInformation, $dataValue, $externalValues );
 
                        if ( $comparer ) {
-                               $result = $comparer->execute();
-
-                               return new CompareResult( 
$comparer->getLocalValue(), $comparer->getExternalValues(), !$result );
+                               return $comparer->execute();
                        }
                }
        }
diff --git a/tests/phpunit/CrossCheck/Comparer/DataValueComparerTest.php 
b/tests/phpunit/CrossCheck/Comparer/DataValueComparerTest.php
index a79466f..962f3fb 100644
--- a/tests/phpunit/CrossCheck/Comparer/DataValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/DataValueComparerTest.php
@@ -26,13 +26,11 @@
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class DataValueComparerTest extends \MediaWikiTestCase
-{
+class DataValueComparerTest extends \MediaWikiTestCase {
     /**
      * @dataProvider constructValidArgumentsDataProvider
      */
-    public function testConstructValidArguments( $dumpMetaInformation, 
$localValue, $externalValues )
-    {
+    public function testConstructValidArguments( $dumpMetaInformation, 
$localValue, $externalValues ) {
         $comparerMock = $this->getDataValueComparerMock( $dumpMetaInformation, 
$localValue, $externalValues );
 
         $this->assertEquals( $dumpMetaInformation, 
$comparerMock->getDumpMetaInformation() );
@@ -44,8 +42,7 @@
      * Test cases for testConstructValidArguments
      * @return array
      */
-    public function constructValidArgumentsDataProvider()
-    {
+    public function constructValidArgumentsDataProvider() {
         return array(
             array(
                 $this->getDumpMetaInformationMock(),
@@ -59,8 +56,7 @@
     /**
      * @dataProvider constructInvalidArgumentsDataProvider
      */
-    public function testConstructInvalidArguments( $dumpMetaInformation, 
$localValue, $externalValues )
-    {
+    public function testConstructInvalidArguments( $dumpMetaInformation, 
$localValue, $externalValues ) {
         $this->setExpectedException( 'InvalidArgumentException' );
 
         $this->getDataValueComparerMock( $dumpMetaInformation, $localValue, 
$externalValues );
@@ -70,8 +66,7 @@
      * Test cases for testConstructInvalidArguments
      * @return array
      */
-    public function constructInvalidArgumentsDataProvider()
-    {
+    public function constructInvalidArgumentsDataProvider() {
         $dumpMetaInformation = $this->getDumpMetaInformationMock();
         $localValue = new StringValue( 'foo' );
 
@@ -93,8 +88,7 @@
     /**
      * @dataProvider getComparerDataProvider
      */
-    public function testGetComparer( $dumpMetaInformation, $localValue, 
$externalValues, $comparerClass )
-    {
+    public function testGetComparer( $dumpMetaInformation, $localValue, 
$externalValues, $comparerClass ) {
         $comparer = DataValueComparer::getComparer( $dumpMetaInformation, 
$localValue, $externalValues );
         if ( $comparerClass ) {
             $this->assertInstanceOf( $comparerClass, $comparer );
@@ -107,8 +101,7 @@
      * Test cases for testGetComparer
      * @return array
      */
-    public function getComparerDataProvider()
-    {
+    public function getComparerDataProvider() {
         $dumpMetaInformation = $this->getDumpMetaInformationMock();
 
         return array(
@@ -171,8 +164,7 @@
      * @param array $externalValues
      * @return \PHPUnit_Framework_MockObject_MockObject
      */
-    private function getDataValueComparerMock( $dumpMetaInformation, 
$localValue, $externalValues )
-    {
+    private function getDataValueComparerMock( $dumpMetaInformation, 
$localValue, $externalValues ) {
         return $this->getMockForAbstractClass(
             
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer',
             array( $dumpMetaInformation, $localValue, $externalValues )
@@ -183,8 +175,7 @@
      * Returns DumpMetaInformation mock.
      * @return \PHPUnit_Framework_MockObject_MockObject
      */
-    public function getDumpMetaInformationMock()
-    {
+    public function getDumpMetaInformationMock() {
         $mock = $this->getMockBuilder( 
'WikidataQuality\ExternalValidation\DumpMetaInformation' )
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/tests/phpunit/CrossCheck/Comparer/DataValueComparerTestBase.php 
b/tests/phpunit/CrossCheck/Comparer/DataValueComparerTestBase.php
index 72098d8..a7380ae 100644
--- a/tests/phpunit/CrossCheck/Comparer/DataValueComparerTestBase.php
+++ b/tests/phpunit/CrossCheck/Comparer/DataValueComparerTestBase.php
@@ -7,22 +7,28 @@
  * @group WikidataQuality
  * @group WikidataQuality\ExternalValidation
  *
+ * @uses   WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult
+ * @uses   
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
+ *
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-abstract class DataValueComparerTestBase extends \MediaWikiTestCase
-{
+abstract class DataValueComparerTestBase extends \MediaWikiTestCase {
     /**
-     * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer::getExternalValueParser
-     * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer::parseExternalValues
      * @dataProvider executeDataProvider
      */
-    public function testExecute( $dumpMetaInformation, $localValue, 
$externalValues, $expectedResult, $expectedExternalValues )
-    {
+    public function testExecute( $dumpMetaInformation, $localValue, 
$externalValues, $expectedDataMismatch, $expectedExternalValues ) {
         $comparer = $this->createComparer( $dumpMetaInformation, $localValue, 
$externalValues );
+        $result = $comparer->execute();
 
-        $this->assertEquals( $expectedResult, $comparer->execute() );
-        $this->assertEquals( $expectedExternalValues, 
$comparer->getExternalValues() );
+        if ( $result ) {
+            $this->assertEquals( $localValue, $result->getLocalValue() );
+            $this->assertEquals( $expectedExternalValues, 
$result->getExternalValues() );
+            $this->assertEquals( $expectedDataMismatch, 
$result->hasDataMismatchOccurred() );
+        } else {
+            $this->assertNull( $expectedDataMismatch );
+            $this->assertNull( $expectedExternalValues );
+        }
     }
 
     /*
@@ -45,8 +51,7 @@
      * @param $language
      * @return \PHPUnit_Framework_MockObject_MockObject
      */
-    protected function getDumpMetaInformationMock( $language )
-    {
+    protected function getDumpMetaInformationMock( $language ) {
         $mock = $this->getMockBuilder( 
'WikidataQuality\ExternalValidation\DumpMetaInformation' )
             ->setMethods( array( 'getLanguage' ) )
             ->disableOriginalConstructor()
diff --git a/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php 
b/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
index 099c29f..5920b45 100644
--- a/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
@@ -10,22 +10,21 @@
 
 
 /**
+ * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\EntityIdValueComparer
  *
- * @uses   WikidataQuality\ExternalValidation\DumpMetaInformation
+ * @uses   WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult
  * @uses   
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  *
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class EntityIdValueComparerTest extends DataValueComparerTestBase
-{
+class EntityIdValueComparerTest extends DataValueComparerTestBase {
     /**
      * Test cases for testExecute
      * @return array
      */
-    public function executeDataProvider()
-    {
+    public function executeDataProvider() {
         $dumpMetaInformationEn = $this->getDumpMetaInformationMock( 'en' );
         $dumpMetaInformationDe = $this->getDumpMetaInformationMock( 'de' );
         $dumpMetaInformationEs = $this->getDumpMetaInformationMock( 'es' );
@@ -37,8 +36,8 @@
                 $dumpMetaInformationEn,
                 $localValueQ1,
                 array( 'foo' ),
-                true,
-                array (
+                false,
+                array(
                     new MonolingualTextValue( 'en', 'foo' )
                 )
             ),
@@ -46,7 +45,7 @@
                 $dumpMetaInformationEn,
                 $localValueQ1,
                 array( 'baz' ),
-                false,
+                true,
                 array(
                     new MonolingualTextValue( 'en', 'baz' )
                 )
@@ -55,7 +54,7 @@
                 $dumpMetaInformationDe,
                 $localValueQ1,
                 array( 'Fubar' ),
-                true,
+                false,
                 array(
                     new MonolingualTextValue( 'de', 'Fubar' )
                 )
@@ -64,7 +63,7 @@
                 $dumpMetaInformationEs,
                 $localValueQ1,
                 array( 'foo' ),
-                false,
+                true,
                 array(
                     new MonolingualTextValue( 'es', 'foo' )
                 )
@@ -73,7 +72,7 @@
                 $dumpMetaInformationEn,
                 $localValueQ2,
                 array( 'foo' ),
-                false,
+                true,
                 array(
                     new MonolingualTextValue( 'en', 'foo' )
                 )
@@ -82,8 +81,7 @@
     }
 
 
-    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues )
-    {
+    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues ) {
         $mock = $this->getMockBuilder( 
'WikidataQuality\ExternalValidation\CrossCheck\Comparer\EntityIdValueComparer' )
             ->setMethods( array( 'getEntityLookup' ) )
             ->setConstructorArgs( array( $dumpMetaInformation, $localValue, 
$externalValues ) )
diff --git 
a/tests/phpunit/CrossCheck/Comparer/GlobeCoordinateValueComparerTest.php 
b/tests/phpunit/CrossCheck/Comparer/GlobeCoordinateValueComparerTest.php
index 5c5ebd6..8a8814f 100644
--- a/tests/phpunit/CrossCheck/Comparer/GlobeCoordinateValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/GlobeCoordinateValueComparerTest.php
@@ -6,26 +6,24 @@
 use DataValues\Geo\Values\GlobeCoordinateValue;
 use DataValues\Geo\Values\LatLongValue;
 use 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\GlobeCoordinateValueComparer;
-use WikidataQuality\ExternalValidation\DumpMetaInformation;
 
 
 /**
+ * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\GlobeCoordinateValueComparer
  *
- * @uses   WikidataQuality\ExternalValidation\DumpMetaInformation
+ * @uses   WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult
  * @uses   
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  *
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class GlobeCoordinateValueComparerTest extends DataValueComparerTestBase
-{
+class GlobeCoordinateValueComparerTest extends DataValueComparerTestBase {
     /**
      * Test cases for testExecute
      * @return array
      */
-    public function executeDataProvider()
-    {
+    public function executeDataProvider() {
         $dumpMetaInformation = $this->getDumpMetaInformationMock( 'en' );
         $localValue = new GlobeCoordinateValue( new LatLongValue( 64, 26 ), 1 
);
 
@@ -34,7 +32,7 @@
                 $dumpMetaInformation,
                 $localValue,
                 array( '64.000000 N, 26.000000 E' ),
-                true,
+                false,
                 array(
                     new GlobeCoordinateValue( new LatLongValue( 64, 26 ), 1 )
                 )
@@ -43,7 +41,7 @@
                 $dumpMetaInformation,
                 $localValue,
                 array( '64 N, 26 E' ),
-                true,
+                false,
                 array(
                     new GlobeCoordinateValue( new LatLongValue( 64, 26 ), 1 )
                 )
@@ -52,7 +50,7 @@
                 $dumpMetaInformation,
                 $localValue,
                 array( '42.000000 N, 32.000000 E' ),
-                false,
+                true,
                 array(
                     new GlobeCoordinateValue( new LatLongValue( 42, 32 ), 1 )
                 )
@@ -60,8 +58,7 @@
         );
     }
 
-    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues )
-    {
+    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues ) {
         return new GlobeCoordinateValueComparer( $dumpMetaInformation, 
$localValue, $externalValues );
     }
 }
\ No newline at end of file
diff --git 
a/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php 
b/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php
index e5d7a91..e8535e8 100644
--- a/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php
@@ -5,26 +5,24 @@
 
 use DataValues\MonolingualTextValue;
 use 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\MonolingualTextValueComparer;
-use WikidataQuality\ExternalValidation\DumpMetaInformation;
 
 
 /**
+ * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\MonolingualTextValueComparer
  *
- * @uses   WikidataQuality\ExternalValidation\DumpMetaInformation
+ * @uses   WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult
  * @uses   
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  *
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class MonolingualTextValueComparerTest extends DataValueComparerTestBase
-{
+class MonolingualTextValueComparerTest extends DataValueComparerTestBase {
     /**
      * Test cases for testExecute
      * @return array
      */
-    public function executeDataProvider()
-    {
+    public function executeDataProvider() {
         $dumpMetaInformationEn = $this->getDumpMetaInformationMock( 'en' );
         $dumpMetaInformationDe = $this->getDumpMetaInformationMock( 'de' );
         $localValue = new MonolingualTextValue( 'en', 'foo' );
@@ -34,7 +32,7 @@
                 $dumpMetaInformationEn,
                 $localValue,
                 array( 'foo', 'bar' ),
-                true,
+                false,
                 array(
                     new MonolingualTextValue( 'en', 'foo' ),
                     new MonolingualTextValue( 'en', 'bar' )
@@ -44,7 +42,7 @@
                 $dumpMetaInformationEn,
                 $localValue,
                 array( 'foobar', 'bar' ),
-                false,
+                true,
                 array(
                     new MonolingualTextValue( 'en', 'foobar' ),
                     new MonolingualTextValue( 'en', 'bar' )
@@ -54,7 +52,7 @@
                 $dumpMetaInformationDe,
                 $localValue,
                 array( 'foo', 'bar' ),
-                true,
+                false,
                 array(
                     new MonolingualTextValue( 'de', 'foo' ),
                     new MonolingualTextValue( 'de', 'bar' )
@@ -63,8 +61,7 @@
         );
     }
 
-    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues )
-    {
+    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues ) {
         return new MonolingualTextValueComparer( $dumpMetaInformation, 
$localValue, $externalValues );
     }
 }
\ No newline at end of file
diff --git 
a/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php 
b/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
index 97c2b16..567ce28 100644
--- a/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
@@ -6,26 +6,24 @@
 use DataValues\MonolingualTextValue;
 use DataValues\MultilingualTextValue;
 use 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\MultilingualTextValueComparer;
-use WikidataQuality\ExternalValidation\DumpMetaInformation;
 
 
 /**
+ * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\MultilingualTextValueComparer
  *
- * @uses   WikidataQuality\ExternalValidation\DumpMetaInformation
+ * @uses   WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult
  * @uses   
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  * @uses   
WikidataQuality\ExternalValidation\CrossCheck\Comparer\MonolingualTextValueComparer
  *
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class MultilingualTextValueComparerTest extends DataValueComparerTestBase
-{
+class MultilingualTextValueComparerTest extends DataValueComparerTestBase {
     /**
      * @dataProvider constructDataProvider
      */
-    public function testConstruct( $dumpMetaInformation, $localValue, 
$externalValues )
-    {
+    public function testConstruct( $dumpMetaInformation, $localValue, 
$externalValues ) {
         $comparer = $this->createComparer( $dumpMetaInformation, $localValue, 
$externalValues );
 
         $this->assertEquals( $dumpMetaInformation, 
$comparer->getDumpMetaInformation() );
@@ -33,8 +31,7 @@
         $this->assertEquals( $externalValues, $comparer->getExternalValues() );
     }
 
-    public function constructDataProvider()
-    {
+    public function constructDataProvider() {
         $monolingualTextValue = new MonolingualTextValue( 'en', 'foo' );
 
         return array(
@@ -56,59 +53,54 @@
      * Test cases for testExecute
      * @return array
      */
-    public function executeDataProvider()
-    {
+    public function executeDataProvider() {
         $dumpMetaInformationEn = $this->getDumpMetaInformationMock( 'en' );
         $dumpMetaInformationDe = $this->getDumpMetaInformationMock( 'de' );
         $localValueEn = new MultilingualTextValue( array( new 
MonolingualTextValue( 'en', 'foo' ) ) );
         $localValueDe = new MultilingualTextValue( array( new 
MonolingualTextValue( 'de', 'foo' ) ) );
 
         return array(
-            array(
-                $dumpMetaInformationEn,
-                $localValueEn,
-                array( 'foo', 'bar' ),
-                true,
-                array(
-                    new MonolingualTextValue( 'en', 'foo' ),
-                    new MonolingualTextValue( 'en', 'bar' )
-                )
-            ),
+            // Data mismatch
             array(
                 $dumpMetaInformationEn,
                 $localValueEn,
                 array( 'foobar', 'bar' ),
-                false,
+                true,
                 array(
                     new MonolingualTextValue( 'en', 'foobar' ),
                     new MonolingualTextValue( 'en', 'bar' )
                 )
             ),
-            array(
-                $dumpMetaInformationDe,
-                $localValueEn,
-                array( 'foo', 'bar' ),
-                false,
-                array(
-                    new MonolingualTextValue( 'de', 'foo' ),
-                    new MonolingualTextValue( 'de', 'bar' )
-                )
-            ),
+            // No data mismatch
             array(
                 $dumpMetaInformationEn,
-                $localValueDe,
+                $localValueEn,
                 array( 'foo', 'bar' ),
                 false,
                 array(
                     new MonolingualTextValue( 'en', 'foo' ),
                     new MonolingualTextValue( 'en', 'bar' )
                 )
+            ),
+            // DataValue contains no text in language of data source
+            array(
+                $dumpMetaInformationDe,
+                $localValueEn,
+                array( 'foo', 'bar' ),
+                null,
+                null
+            ),
+            array(
+                $dumpMetaInformationEn,
+                $localValueDe,
+                array( 'foo', 'bar' ),
+                null,
+                null
             )
         );
     }
 
-    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues )
-    {
+    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues ) {
         return new MultilingualTextValueComparer( $dumpMetaInformation, 
$localValue, $externalValues );
     }
 }
\ No newline at end of file
diff --git a/tests/phpunit/CrossCheck/Comparer/QuantityValueComparerTest.php 
b/tests/phpunit/CrossCheck/Comparer/QuantityValueComparerTest.php
index 31cd825..eb0346c 100644
--- a/tests/phpunit/CrossCheck/Comparer/QuantityValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/QuantityValueComparerTest.php
@@ -5,26 +5,24 @@
 
 use DataValues\QuantityValue;
 use 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\QuantityValueComparer;
-use WikidataQuality\ExternalValidation\DumpMetaInformation;
 
 
 /**
+ * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\QuantityValueComparer
  *
- * @uses   WikidataQuality\ExternalValidation\DumpMetaInformation
+ * @uses   WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult
  * @uses   
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  *
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class QuantityValueComparerTest extends DataValueComparerTestBase
-{
+class QuantityValueComparerTest extends DataValueComparerTestBase {
     /**
      * Test cases for testExecute
      * @return array
      */
-    public function executeDataProvider()
-    {
+    public function executeDataProvider() {
         $dumpMetaInformation = $this->getDumpMetaInformationMock( 'en' );
 
         return array(
@@ -32,7 +30,7 @@
                 $dumpMetaInformation,
                 QuantityValue::newFromNumber( 42, '1', 44, 40 ),
                 array( '42' ),
-                true,
+                false,
                 array(
                     QuantityValue::newFromNumber( 42, '1', 43, 41 )
                 )
@@ -41,7 +39,7 @@
                 $dumpMetaInformation,
                 QuantityValue::newFromNumber( 42, '1', 44, 40 ),
                 array( '41' ),
-                true,
+                false,
                 array(
                     QuantityValue::newFromNumber( 41, '1', 42, 40 )
                 )
@@ -50,7 +48,7 @@
                 $dumpMetaInformation,
                 QuantityValue::newFromNumber( 42, '1' ),
                 array( '23' ),
-                false,
+                true,
                 array(
                     QuantityValue::newFromNumber( 23, '1', 24, 22 )
                 )
@@ -59,7 +57,7 @@
                 $dumpMetaInformation,
                 QuantityValue::newFromNumber( 42, '1' ),
                 array( '42' ),
-                true,
+                false,
                 array(
                     QuantityValue::newFromNumber( 42, '1', 43, 41 )
                 )
@@ -68,7 +66,7 @@
                 $dumpMetaInformation,
                 QuantityValue::newFromNumber( 42, '1' ),
                 array( '44' ),
-                false,
+                true,
                 array(
                     QuantityValue::newFromNumber( 44, '1', 45, 43 )
                 )
@@ -76,8 +74,7 @@
         );
     }
 
-    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues )
-    {
+    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues ) {
         return new QuantityValueComparer( $dumpMetaInformation, $localValue, 
$externalValues );
     }
 }
\ No newline at end of file
diff --git a/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php 
b/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php
index f86e896..117e62c 100644
--- a/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php
@@ -6,26 +6,24 @@
 use DataValues\MonolingualTextValue;
 use DataValues\StringValue;
 use WikidataQuality\ExternalValidation\CrossCheck\Comparer\StringValueComparer;
-use WikidataQuality\ExternalValidation\DumpMetaInformation;
 
 
 /**
+ * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\StringValueComparer
  *
- * @uses   WikidataQuality\ExternalValidation\DumpMetaInformation
+ * @uses   WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult
  * @uses   
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  *
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class StringValueComparerTest extends DataValueComparerTestBase
-{
+class StringValueComparerTest extends DataValueComparerTestBase {
     /**
      * Test cases for testExecute
      * @return array
      */
-    public function executeDataProvider()
-    {
+    public function executeDataProvider() {
         $dumpMetaInformationEn = $this->getDumpMetaInformationMock( 'en' );
         $dumpMetaInformationDe = $this->getDumpMetaInformationMock( 'de' );
 
@@ -34,7 +32,7 @@
                 $dumpMetaInformationEn,
                 new StringValue( 'foo' ),
                 array( 'foo', 'bar' ),
-                true,
+                false,
                 array(
                     new MonolingualTextValue( 'en', 'foo' ),
                     new MonolingualTextValue( 'en', 'bar' )
@@ -44,7 +42,7 @@
                 $dumpMetaInformationEn,
                 new StringValue( 'foo' ),
                 array( 'foobar', 'bar' ),
-                false,
+                true,
                 array(
                     new MonolingualTextValue( 'en', 'foobar' ),
                     new MonolingualTextValue( 'en', 'bar' )
@@ -54,7 +52,7 @@
                 $dumpMetaInformationDe,
                 new StringValue( 'foobar' ),
                 array( 'foobar', 'bar' ),
-                true,
+                false,
                 array(
                     new MonolingualTextValue( 'de', 'foobar' ),
                     new MonolingualTextValue( 'de', 'bar' )
@@ -63,8 +61,7 @@
         );
     }
 
-    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues )
-    {
+    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues ) {
         return new StringValueComparer( $dumpMetaInformation, $localValue, 
$externalValues );
     }
 }
\ No newline at end of file
diff --git a/tests/phpunit/CrossCheck/Comparer/TimeValueComparerTest.php 
b/tests/phpunit/CrossCheck/Comparer/TimeValueComparerTest.php
index cf3b08f..3c6223b 100644
--- a/tests/phpunit/CrossCheck/Comparer/TimeValueComparerTest.php
+++ b/tests/phpunit/CrossCheck/Comparer/TimeValueComparerTest.php
@@ -5,26 +5,24 @@
 
 use DataValues\TimeValue;
 use WikidataQuality\ExternalValidation\CrossCheck\Comparer\TimeValueComparer;
-use WikidataQuality\ExternalValidation\DumpMetaInformation;
 
 
 /**
+ * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  * @covers 
WikidataQuality\ExternalValidation\CrossCheck\Comparer\TimeValueComparer
  *
- * @uses   WikidataQuality\ExternalValidation\DumpMetaInformation
+ * @uses   WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult
  * @uses   
WikidataQuality\ExternalValidation\CrossCheck\Comparer\DataValueComparer
  *
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class TimeValueComparerTest extends DataValueComparerTestBase
-{
+class TimeValueComparerTest extends DataValueComparerTestBase {
     /**
      * Test cases for testExecute
      * @return array
      */
-    public function executeDataProvider()
-    {
+    public function executeDataProvider() {
         $dumpMetaInformation = $this->getDumpMetaInformationMock( 'en' );
         $localValue1955 = new TimeValue( '+0000000000001955-03-11T00:00:00Z', 
0, 0, 0, 11, 'http://www.wikidata.org/entity/Q1985727' );
         $localValue2015 = new TimeValue( '+0000000000002015-00-00T00:00:00Z', 
0, 0, 0, 9, 'http://www.wikidata.org/entity/Q1985727' );
@@ -34,7 +32,7 @@
                 $dumpMetaInformation,
                 $localValue1955,
                 array( '11.03.1955' ),
-                true,
+                false,
                 array(
                     new TimeValue( '+0000000000001955-03-11T00:00:00Z', 0, 0, 
0, 11, 'http://www.wikidata.org/entity/Q1985727' )
                 )
@@ -43,7 +41,7 @@
                 $dumpMetaInformation,
                 $localValue1955,
                 array( '1955-03-11' ),
-                true,
+                false,
                 array(
                     new TimeValue( '+0000000000001955-03-11T00:00:00Z', 0, 0, 
0, 11, 'http://www.wikidata.org/entity/Q1985727' )
                 )
@@ -52,7 +50,7 @@
                 $dumpMetaInformation,
                 $localValue1955,
                 array( '1991-05-23' ),
-                false,
+                true,
                 array(
                     new TimeValue( '+0000000000001991-05-23T00:00:00Z', 0, 0, 
0, 11, 'http://www.wikidata.org/entity/Q1985727' )
                 )
@@ -61,7 +59,7 @@
                 $dumpMetaInformation,
                 $localValue2015,
                 array( '2015' ),
-                true,
+                false,
                 array(
                     new TimeValue( '+0000000000002015-00-00T00:00:00Z', 0, 0, 
0, 9, 'http://www.wikidata.org/entity/Q1985727' )
                 )
@@ -69,8 +67,7 @@
         );
     }
 
-    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues )
-    {
+    protected function createComparer( $dumpMetaInformation, $localValue, 
$externalValues ) {
         return new TimeValueComparer( $dumpMetaInformation, $localValue, 
$externalValues );
     }
 }
\ No newline at end of file

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I23fa8eeb59a02188933e07b2aae721dc44fdaeb5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikidataQualityExternalValidation
Gerrit-Branch: master
Gerrit-Owner: Soeren.oldag <soeren_ol...@freenet.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to