jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/363798 )

Change subject: Add ConstraintChecker::checkConstraintParameters method
......................................................................


Add ConstraintChecker::checkConstraintParameters method

This method returns a list of ConstraintParameterExceptions thrown by
ConstraintParameterParser. The implementation is fairly straightforward:
copy the invocations from the checkConstraint method and wrap them in
try-catch blocks.

The only complication is in RangeChecker, where the parameter parsing
depends on the type of the data (quantity or time). To solve this,
RangeChecker gets a PropertyDataTypeLookup injected, where it can look
up the data type of the property that the constraint belongs to.
(Strictly speaking, this is not exactly equivalent to the
checkConstraint method, which checks the data value type, but for
quantity and time types there is no difference between the two; the
documentation of parseRangeParameter() is amended to explicitly state
this.) ConstraintReportFactory also gets a PropertyDataTypeLookup
injected which it can pass to RangeChecker; the tests simply use a
lookup that wraps the already available EntityLookup.

The added tests for the new method each just check that the method
returns the right number of ConstraintParameterExceptions.

This new method constitutes the first part of T169531; later commits
will add a new API action to call this method, and make the gadget use
this API action to display parameter errors on the constraint statement.

Bug: T169531
Change-Id: I338577883d9bccfc2ea990f1ccc7173a3a503136
---
M api/CheckConstraints.php
M includes/ConstraintCheck/Checker/CommonsLinkChecker.php
M includes/ConstraintCheck/Checker/ConflictsWithChecker.php
M includes/ConstraintCheck/Checker/DiffWithinRangeChecker.php
M includes/ConstraintCheck/Checker/FormatChecker.php
M includes/ConstraintCheck/Checker/InverseChecker.php
M includes/ConstraintCheck/Checker/ItemChecker.php
M includes/ConstraintCheck/Checker/MandatoryQualifiersChecker.php
M includes/ConstraintCheck/Checker/MultiValueChecker.php
M includes/ConstraintCheck/Checker/OneOfChecker.php
M includes/ConstraintCheck/Checker/QualifierChecker.php
M includes/ConstraintCheck/Checker/QualifiersChecker.php
M includes/ConstraintCheck/Checker/RangeChecker.php
M includes/ConstraintCheck/Checker/SingleValueChecker.php
M includes/ConstraintCheck/Checker/SymmetricChecker.php
M includes/ConstraintCheck/Checker/TargetRequiredClaimChecker.php
M includes/ConstraintCheck/Checker/TypeChecker.php
M includes/ConstraintCheck/Checker/UniqueValueChecker.php
M includes/ConstraintCheck/Checker/ValueTypeChecker.php
M includes/ConstraintCheck/ConstraintChecker.php
M includes/ConstraintCheck/Helper/ConstraintParameterParser.php
M includes/ConstraintReportFactory.php
M tests/phpunit/Checker/CommonsLinkChecker/CommonsLinkCheckerTest.php
M tests/phpunit/Checker/ConnectionChecker/ConflictsWithCheckerTest.php
M tests/phpunit/Checker/ConnectionChecker/InverseCheckerTest.php
M tests/phpunit/Checker/ConnectionChecker/ItemCheckerTest.php
M tests/phpunit/Checker/ConnectionChecker/SymmetricCheckerTest.php
M tests/phpunit/Checker/ConnectionChecker/TargetRequiredClaimCheckerTest.php
M tests/phpunit/Checker/FormatChecker/FormatCheckerTest.php
M tests/phpunit/Checker/OneOfChecker/OneOfCheckerTest.php
M tests/phpunit/Checker/QualifierChecker/MandatoryQualifiersCheckerTest.php
M tests/phpunit/Checker/QualifierChecker/QualifierCheckerTest.php
M tests/phpunit/Checker/QualifierChecker/QualifiersCheckerTest.php
M tests/phpunit/Checker/RangeChecker/DiffWithinRangeCheckerTest.php
A tests/phpunit/Checker/RangeChecker/P1.json
A tests/phpunit/Checker/RangeChecker/P2.json
M tests/phpunit/Checker/RangeChecker/RangeCheckerTest.php
M tests/phpunit/Checker/TypeChecker/TypeCheckerTest.php
M tests/phpunit/Checker/TypeChecker/ValueTypeCheckerTest.php
M tests/phpunit/Checker/ValueCountChecker/MultiValueCheckerTest.php
M tests/phpunit/Checker/ValueCountChecker/SingleValueCheckerTest.php
M tests/phpunit/Checker/ValueCountChecker/UniqueValueCheckerTest.php
M tests/phpunit/DelegatingConstraintCheckerTest.php
M tests/phpunit/Fake/FakeChecker.php
44 files changed, 430 insertions(+), 3 deletions(-)

Approvals:
  Jonas Kress (WMDE): Looks good to me, approved
  jenkins-bot: Verified



diff --git a/api/CheckConstraints.php b/api/CheckConstraints.php
index ad70e90..9c69aa8 100644
--- a/api/CheckConstraints.php
+++ b/api/CheckConstraints.php
@@ -134,6 +134,7 @@
                $titleParser = 
MediaWikiServices::getInstance()->getTitleParser();
                $constraintReportFactory = new ConstraintReportFactory(
                        $repo->getEntityLookup(),
+                       $repo->getPropertyDataTypeLookup(),
                        $statementGuidParser,
                        $config,
                        $constraintParameterRenderer,
diff --git a/includes/ConstraintCheck/Checker/CommonsLinkChecker.php 
b/includes/ConstraintCheck/Checker/CommonsLinkChecker.php
index d84762c..d626450 100644
--- a/includes/ConstraintCheck/Checker/CommonsLinkChecker.php
+++ b/includes/ConstraintCheck/Checker/CommonsLinkChecker.php
@@ -9,6 +9,7 @@
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Statement\StatementListProvider;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
 use WikibaseQuality\ConstraintReport\Constraint;
@@ -124,6 +125,17 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint,  $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       
$this->constraintParameterParser->parseNamespaceParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
        /**
         * @param TitleValue $title
         *
diff --git a/includes/ConstraintCheck/Checker/ConflictsWithChecker.php 
b/includes/ConstraintCheck/Checker/ConflictsWithChecker.php
index 6f0e794..96b8c7f 100644
--- a/includes/ConstraintCheck/Checker/ConflictsWithChecker.php
+++ b/includes/ConstraintCheck/Checker/ConflictsWithChecker.php
@@ -8,6 +8,7 @@
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConnectionCheckerHelper;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
 use WikibaseQuality\ConstraintReport\ConstraintParameterRenderer;
@@ -115,4 +116,20 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint,  $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       
$this->constraintParameterParser->parsePropertyParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               try {
+                       $this->constraintParameterParser->parseItemsParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId(), false );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/DiffWithinRangeChecker.php 
b/includes/ConstraintCheck/Checker/DiffWithinRangeChecker.php
index 9597437..e47631a 100644
--- a/includes/ConstraintCheck/Checker/DiffWithinRangeChecker.php
+++ b/includes/ConstraintCheck/Checker/DiffWithinRangeChecker.php
@@ -7,6 +7,7 @@
 use Wikibase\DataModel\Statement\StatementListProvider;
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\RangeCheckerHelper;
@@ -156,4 +157,24 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint,  $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       $this->constraintParameterParser->parseRangeParameter(
+                               $constraintParameters,
+                               $constraint->getConstraintTypeItemId(),
+                               'quantity'
+                       );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               try {
+                       
$this->constraintParameterParser->parsePropertyParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/FormatChecker.php 
b/includes/ConstraintCheck/Checker/FormatChecker.php
index 7299c24..b437046 100644
--- a/includes/ConstraintCheck/Checker/FormatChecker.php
+++ b/includes/ConstraintCheck/Checker/FormatChecker.php
@@ -9,6 +9,7 @@
 use Wikibase\DataModel\Statement\StatementListProvider;
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\SparqlHelper;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
@@ -137,4 +138,15 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       $this->constraintParameterParser->parseFormatParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/InverseChecker.php 
b/includes/ConstraintCheck/Checker/InverseChecker.php
index b8b9b5c..8c0cbfe 100644
--- a/includes/ConstraintCheck/Checker/InverseChecker.php
+++ b/includes/ConstraintCheck/Checker/InverseChecker.php
@@ -9,6 +9,7 @@
 use Wikibase\DataModel\Statement\StatementListProvider;
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConnectionCheckerHelper;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
@@ -130,4 +131,15 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       
$this->constraintParameterParser->parsePropertyParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/ItemChecker.php 
b/includes/ConstraintCheck/Checker/ItemChecker.php
index cf554a3..ec89cf0 100644
--- a/includes/ConstraintCheck/Checker/ItemChecker.php
+++ b/includes/ConstraintCheck/Checker/ItemChecker.php
@@ -8,6 +8,7 @@
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConnectionCheckerHelper;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
 use WikibaseQuality\ConstraintReport\ConstraintParameterRenderer;
@@ -112,4 +113,20 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       
$this->constraintParameterParser->parsePropertyParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               try {
+                       $this->constraintParameterParser->parseItemsParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId(), false );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/MandatoryQualifiersChecker.php 
b/includes/ConstraintCheck/Checker/MandatoryQualifiersChecker.php
index c9c676b..65ebb67 100644
--- a/includes/ConstraintCheck/Checker/MandatoryQualifiersChecker.php
+++ b/includes/ConstraintCheck/Checker/MandatoryQualifiersChecker.php
@@ -7,6 +7,7 @@
 use Wikibase\DataModel\Statement\StatementListProvider;
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
 use WikibaseQuality\ConstraintReport\ConstraintParameterRenderer;
@@ -77,4 +78,15 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       
$this->constraintParameterParser->parsePropertyParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/MultiValueChecker.php 
b/includes/ConstraintCheck/Checker/MultiValueChecker.php
index 7edaa21..de62282 100644
--- a/includes/ConstraintCheck/Checker/MultiValueChecker.php
+++ b/includes/ConstraintCheck/Checker/MultiValueChecker.php
@@ -53,4 +53,9 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               // no parameters
+               return [];
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/OneOfChecker.php 
b/includes/ConstraintCheck/Checker/OneOfChecker.php
index a289593..905bcdc 100644
--- a/includes/ConstraintCheck/Checker/OneOfChecker.php
+++ b/includes/ConstraintCheck/Checker/OneOfChecker.php
@@ -6,6 +6,7 @@
 use Wikibase\DataModel\Statement\StatementListProvider;
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
 use WikibaseQuality\ConstraintReport\ConstraintParameterRenderer;
@@ -76,4 +77,15 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       $this->constraintParameterParser->parseItemsParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId(), true );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/QualifierChecker.php 
b/includes/ConstraintCheck/Checker/QualifierChecker.php
index a3095bb..914fc0b 100644
--- a/includes/ConstraintCheck/Checker/QualifierChecker.php
+++ b/includes/ConstraintCheck/Checker/QualifierChecker.php
@@ -34,4 +34,9 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, [], CheckResult::STATUS_VIOLATION, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               // no parameters
+               return [];
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/QualifiersChecker.php 
b/includes/ConstraintCheck/Checker/QualifiersChecker.php
index a1d6ed3..677bc98 100644
--- a/includes/ConstraintCheck/Checker/QualifiersChecker.php
+++ b/includes/ConstraintCheck/Checker/QualifiersChecker.php
@@ -7,6 +7,7 @@
 use Wikibase\DataModel\Statement\StatementListProvider;
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
 use WikibaseQuality\ConstraintReport\ConstraintParameterRenderer;
@@ -93,4 +94,15 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       
$this->constraintParameterParser->parsePropertiesParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/RangeChecker.php 
b/includes/ConstraintCheck/Checker/RangeChecker.php
index 12758c3..7f3361d 100644
--- a/includes/ConstraintCheck/Checker/RangeChecker.php
+++ b/includes/ConstraintCheck/Checker/RangeChecker.php
@@ -3,10 +3,12 @@
 namespace WikibaseQuality\ConstraintReport\ConstraintCheck\Checker;
 
 use Wikibase\DataModel\Entity\EntityDocument;
+use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Statement\StatementListProvider;
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\RangeCheckerHelper;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
@@ -19,6 +21,11 @@
  * @license GNU GPL v2+
  */
 class RangeChecker implements ConstraintChecker {
+
+       /**
+        * @var PropertyDataTypeLookup
+        */
+       private $propertyDataTypeLookup;
 
        /**
         * @var ConstraintParameterParser
@@ -36,15 +43,18 @@
        private $constraintParameterRenderer;
 
        /**
+        * @param PropertyDataTypeLookup $propertyDataTypeLookup
         * @param ConstraintParameterParser $constraintParameterParser
         * @param RangeCheckerHelper $rangeCheckerHelper
         * @param ConstraintParameterRenderer $constraintParameterRenderer
         */
        public function __construct(
+               PropertyDataTypeLookup $propertyDataTypeLookup,
                ConstraintParameterParser $constraintParameterParser,
                RangeCheckerHelper $rangeCheckerHelper,
                ConstraintParameterRenderer $constraintParameterRenderer
        ) {
+               $this->propertyDataTypeLookup = $propertyDataTypeLookup;
                $this->constraintParameterParser = $constraintParameterParser;
                $this->rangeCheckerHelper = $rangeCheckerHelper;
                $this->constraintParameterRenderer = 
$constraintParameterRenderer;
@@ -124,4 +134,22 @@
                );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       // we don’t have a data value here, so get the type 
from the property instead
+                       // (the distinction between data type and data value 
type is irrelevant for 'quantity' and 'time')
+                       $type = 
$this->propertyDataTypeLookup->getDataTypeIdForProperty( 
$constraint->getPropertyId() );
+                       $this->constraintParameterParser->parseRangeParameter(
+                               $constraintParameters,
+                               $constraint->getConstraintTypeItemId(),
+                               $type
+                       );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/SingleValueChecker.php 
b/includes/ConstraintCheck/Checker/SingleValueChecker.php
index 0c880e4..68bde11 100644
--- a/includes/ConstraintCheck/Checker/SingleValueChecker.php
+++ b/includes/ConstraintCheck/Checker/SingleValueChecker.php
@@ -53,4 +53,9 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               // no parameters
+               return [];
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/SymmetricChecker.php 
b/includes/ConstraintCheck/Checker/SymmetricChecker.php
index 3b6be78..0534f8a 100644
--- a/includes/ConstraintCheck/Checker/SymmetricChecker.php
+++ b/includes/ConstraintCheck/Checker/SymmetricChecker.php
@@ -118,4 +118,9 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               // no parameters
+               return [];
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/TargetRequiredClaimChecker.php 
b/includes/ConstraintCheck/Checker/TargetRequiredClaimChecker.php
index 516a381..9b987fb 100644
--- a/includes/ConstraintCheck/Checker/TargetRequiredClaimChecker.php
+++ b/includes/ConstraintCheck/Checker/TargetRequiredClaimChecker.php
@@ -10,6 +10,7 @@
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConnectionCheckerHelper;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
 use WikibaseQuality\ConstraintReport\ConstraintParameterRenderer;
@@ -152,4 +153,20 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       
$this->constraintParameterParser->parsePropertyParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               try {
+                       $this->constraintParameterParser->parseItemsParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId(), false );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/TypeChecker.php 
b/includes/ConstraintCheck/Checker/TypeChecker.php
index d561098..1ed8829 100644
--- a/includes/ConstraintCheck/Checker/TypeChecker.php
+++ b/includes/ConstraintCheck/Checker/TypeChecker.php
@@ -9,6 +9,7 @@
 use Wikibase\DataModel\Statement\StatementListProvider;
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\SparqlHelperException;
@@ -108,4 +109,20 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       $this->constraintParameterParser->parseClassParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               try {
+                       
$this->constraintParameterParser->parseRelationParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/UniqueValueChecker.php 
b/includes/ConstraintCheck/Checker/UniqueValueChecker.php
index 9d8fc53..30bf0e8 100644
--- a/includes/ConstraintCheck/Checker/UniqueValueChecker.php
+++ b/includes/ConstraintCheck/Checker/UniqueValueChecker.php
@@ -78,4 +78,9 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               // no parameters
+               return [];
+       }
+
 }
diff --git a/includes/ConstraintCheck/Checker/ValueTypeChecker.php 
b/includes/ConstraintCheck/Checker/ValueTypeChecker.php
index 5a773ed..6f5dcfb 100644
--- a/includes/ConstraintCheck/Checker/ValueTypeChecker.php
+++ b/includes/ConstraintCheck/Checker/ValueTypeChecker.php
@@ -11,6 +11,7 @@
 use Wikibase\DataModel\Statement\StatementListProvider;
 use WikibaseQuality\ConstraintReport\Constraint;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\SparqlHelperException;
@@ -142,4 +143,20 @@
                return new CheckResult( $entity->getId(), $statement, 
$constraint, $parameters, $status, $message );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+               $constraintParameters = $constraint->getConstraintParameters();
+               $exceptions = [];
+               try {
+                       $this->constraintParameterParser->parseClassParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               try {
+                       
$this->constraintParameterParser->parseRelationParameter( 
$constraintParameters, $constraint->getConstraintTypeItemId() );
+               } catch ( ConstraintParameterException $e ) {
+                       $exceptions[] = $e;
+               }
+               return $exceptions;
+       }
+
 }
diff --git a/includes/ConstraintCheck/ConstraintChecker.php 
b/includes/ConstraintCheck/ConstraintChecker.php
index b2d60d5..1c2779c 100644
--- a/includes/ConstraintCheck/ConstraintChecker.php
+++ b/includes/ConstraintCheck/ConstraintChecker.php
@@ -24,4 +24,15 @@
         */
        public function checkConstraint( Statement $statement, Constraint 
$constraint, EntityDocument $entity );
 
+       /**
+        * Check if the constraint parameters of $constraint are valid.
+        * Returns a list of ConstraintParameterExceptions, one for each 
problematic parameter;
+        * if the list is empty, all constraint parameters are okay.
+        *
+        * @param Constraint $constraint
+        *
+        * @return ConstraintParameterException[]
+        */
+       public function checkConstraintParameters( Constraint $constraint );
+
 }
diff --git a/includes/ConstraintCheck/Helper/ConstraintParameterParser.php 
b/includes/ConstraintCheck/Helper/ConstraintParameterParser.php
index 10e7d5f..2899ae7 100644
--- a/includes/ConstraintCheck/Helper/ConstraintParameterParser.php
+++ b/includes/ConstraintCheck/Helper/ConstraintParameterParser.php
@@ -513,7 +513,7 @@
        /**
         * @param array $constraintParameters see {@link 
\WikibaseQuality\Constraint::getConstraintParameters()}
         * @param string $constraintTypeItemId used in error messages
-        * @param string $type 'quantity' or 'time'
+        * @param string $type 'quantity' or 'time' (can be data type or data 
value type)
         * @throws ConstraintParameterException if the parameter is invalid or 
missing
         * @return DataValue[] a pair of two quantity-type data values, either 
of which may be null to signify an open range
         */
diff --git a/includes/ConstraintReportFactory.php 
b/includes/ConstraintReportFactory.php
index e3b923a..be61867 100644
--- a/includes/ConstraintReportFactory.php
+++ b/includes/ConstraintReportFactory.php
@@ -8,6 +8,7 @@
 use ValueFormatters\FormatterOptions;
 use Wikibase\DataModel\Entity\EntityIdParser;
 use Wikibase\DataModel\Services\Lookup\EntityLookup;
+use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
 use Wikibase\Lib\SnakFormatter;
 use Wikibase\Rdf\RdfVocabulary;
 use Wikibase\Repo\WikibaseRepo;
@@ -59,6 +60,11 @@
         * @var EntityLookup
         */
        private $lookup;
+
+       /**
+        * @var PropertyDataTypeLookup
+        */
+       private $propertyDataTypeLookup;
 
        /**
         * @var array[]|null
@@ -127,6 +133,7 @@
                        );
                        $instance = new self(
                                $wikibaseRepo->getEntityLookup(),
+                               $wikibaseRepo->getPropertyDataTypeLookup(),
                                $wikibaseRepo->getStatementGuidParser(),
                                $config,
                                $constraintParameterRenderer,
@@ -146,6 +153,7 @@
 
        public function __construct(
                EntityLookup $lookup,
+               PropertyDataTypeLookup $propertyDataTypeLookup,
                StatementGuidParser $statementGuidParser,
                Config $config,
                ConstraintParameterRenderer $constraintParameterRenderer,
@@ -155,6 +163,7 @@
                TitleParser $titleParser
        ) {
                $this->lookup = $lookup;
+               $this->propertyDataTypeLookup = $propertyDataTypeLookup;
                $this->statementGuidParser = $statementGuidParser;
                $this->config = $config;
                $this->constraintParameterRenderer = 
$constraintParameterRenderer;
@@ -215,7 +224,7 @@
                                'Qualifier' => new QualifierChecker(),
                                'Qualifiers' => new QualifiersChecker( 
$this->constraintParameterParser, $this->constraintParameterRenderer ),
                                'Mandatory qualifiers' => new 
MandatoryQualifiersChecker( $this->constraintParameterParser, 
$this->constraintParameterRenderer ),
-                               'Range' => new RangeChecker( 
$this->constraintParameterParser, $rangeCheckerHelper, 
$this->constraintParameterRenderer ),
+                               'Range' => new RangeChecker( 
$this->propertyDataTypeLookup, $this->constraintParameterParser, 
$rangeCheckerHelper, $this->constraintParameterRenderer ),
                                'Diff within range' => new 
DiffWithinRangeChecker( $this->constraintParameterParser, $rangeCheckerHelper, 
$this->constraintParameterRenderer ),
                                'Type' => new TypeChecker( $this->lookup, 
$this->constraintParameterParser, $typeCheckerHelper, $this->config ),
                                'Value type' => new ValueTypeChecker( 
$this->lookup, $this->constraintParameterParser, $typeCheckerHelper, 
$this->config ),
diff --git 
a/tests/phpunit/Checker/CommonsLinkChecker/CommonsLinkCheckerTest.php 
b/tests/phpunit/Checker/CommonsLinkChecker/CommonsLinkCheckerTest.php
index 569c978..66b037a 100644
--- a/tests/phpunit/Checker/CommonsLinkChecker/CommonsLinkCheckerTest.php
+++ b/tests/phpunit/Checker/CommonsLinkChecker/CommonsLinkCheckerTest.php
@@ -179,6 +179,15 @@
                $this->assertViolation( $result, 
'wbqc-violation-message-value-needed' );
        }
 
+       public function testCheckConstraintParameters() {
+               $namespaceId = $this->getDefaultConfig()->get( 
'WBQualityConstraintsNamespaceId' );
+               $constraint = $this->getConstraintMock( [ $namespaceId => [] ] 
);
+
+               $result = $this->commonsLinkChecker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 1, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git 
a/tests/phpunit/Checker/ConnectionChecker/ConflictsWithCheckerTest.php 
b/tests/phpunit/Checker/ConnectionChecker/ConflictsWithCheckerTest.php
index bd84e4f..a7194a4 100644
--- a/tests/phpunit/Checker/ConnectionChecker/ConflictsWithCheckerTest.php
+++ b/tests/phpunit/Checker/ConnectionChecker/ConflictsWithCheckerTest.php
@@ -149,6 +149,14 @@
                $this->assertViolation( $checkResult, 
'wbqc-violation-message-conflicts-with-claim' );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 1, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/ConnectionChecker/InverseCheckerTest.php 
b/tests/phpunit/Checker/ConnectionChecker/InverseCheckerTest.php
index ea7c749..5ab0cff 100644
--- a/tests/phpunit/Checker/ConnectionChecker/InverseCheckerTest.php
+++ b/tests/phpunit/Checker/ConnectionChecker/InverseCheckerTest.php
@@ -138,6 +138,14 @@
                $this->assertViolation( $checkResult, 
'wbqc-violation-message-value-needed' );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 1, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/ConnectionChecker/ItemCheckerTest.php 
b/tests/phpunit/Checker/ConnectionChecker/ItemCheckerTest.php
index 719015e..991a30f 100644
--- a/tests/phpunit/Checker/ConnectionChecker/ItemCheckerTest.php
+++ b/tests/phpunit/Checker/ConnectionChecker/ItemCheckerTest.php
@@ -127,6 +127,14 @@
                $this->assertCompliance( $checkResult );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 1, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/ConnectionChecker/SymmetricCheckerTest.php 
b/tests/phpunit/Checker/ConnectionChecker/SymmetricCheckerTest.php
index a1a8099..41d26ab 100644
--- a/tests/phpunit/Checker/ConnectionChecker/SymmetricCheckerTest.php
+++ b/tests/phpunit/Checker/ConnectionChecker/SymmetricCheckerTest.php
@@ -97,6 +97,14 @@
                $this->assertViolation( $checkResult, 
'wbqc-violation-message-value-needed' );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 0, $result );
+       }
+
        /**
         * @return Constraint
         */
diff --git 
a/tests/phpunit/Checker/ConnectionChecker/TargetRequiredClaimCheckerTest.php 
b/tests/phpunit/Checker/ConnectionChecker/TargetRequiredClaimCheckerTest.php
index 7045099..0935970 100644
--- a/tests/phpunit/Checker/ConnectionChecker/TargetRequiredClaimCheckerTest.php
+++ b/tests/phpunit/Checker/ConnectionChecker/TargetRequiredClaimCheckerTest.php
@@ -156,6 +156,14 @@
                $this->assertCompliance( $checkResult );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 1, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/FormatChecker/FormatCheckerTest.php 
b/tests/phpunit/Checker/FormatChecker/FormatCheckerTest.php
index 02802ae..9e7139e 100644
--- a/tests/phpunit/Checker/FormatChecker/FormatCheckerTest.php
+++ b/tests/phpunit/Checker/FormatChecker/FormatCheckerTest.php
@@ -333,6 +333,14 @@
                $this->assertTodo( $result );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->formatChecker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 1, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/OneOfChecker/OneOfCheckerTest.php 
b/tests/phpunit/Checker/OneOfChecker/OneOfCheckerTest.php
index 302eeec..db23773 100644
--- a/tests/phpunit/Checker/OneOfChecker/OneOfCheckerTest.php
+++ b/tests/phpunit/Checker/OneOfChecker/OneOfCheckerTest.php
@@ -112,6 +112,14 @@
                }
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->oneOfChecker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 1, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git 
a/tests/phpunit/Checker/QualifierChecker/MandatoryQualifiersCheckerTest.php 
b/tests/phpunit/Checker/QualifierChecker/MandatoryQualifiersCheckerTest.php
index 59cd25d..6d3dc16 100644
--- a/tests/phpunit/Checker/QualifierChecker/MandatoryQualifiersCheckerTest.php
+++ b/tests/phpunit/Checker/QualifierChecker/MandatoryQualifiersCheckerTest.php
@@ -74,6 +74,14 @@
                $this->assertViolation( $checkResult, 
'wbqc-violation-message-mandatory-qualifier' );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 1, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/QualifierChecker/QualifierCheckerTest.php 
b/tests/phpunit/Checker/QualifierChecker/QualifierCheckerTest.php
index 838659b..c4fec64 100644
--- a/tests/phpunit/Checker/QualifierChecker/QualifierCheckerTest.php
+++ b/tests/phpunit/Checker/QualifierChecker/QualifierCheckerTest.php
@@ -53,6 +53,15 @@
                $this->assertViolation( $checkResult, 
'wbqc-violation-message-qualifier' );
        }
 
+       public function testCheckConstraintParameters() {
+               $checker = new QualifierChecker();
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $checker->checkConstraintParameters( $constraint );
+
+               $this->assertCount( 0, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/QualifierChecker/QualifiersCheckerTest.php 
b/tests/phpunit/Checker/QualifierChecker/QualifiersCheckerTest.php
index dd4cf27..ebfc764 100644
--- a/tests/phpunit/Checker/QualifierChecker/QualifiersCheckerTest.php
+++ b/tests/phpunit/Checker/QualifierChecker/QualifiersCheckerTest.php
@@ -92,6 +92,14 @@
                $this->assertCompliance( $checkResult );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 1, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/RangeChecker/DiffWithinRangeCheckerTest.php 
b/tests/phpunit/Checker/RangeChecker/DiffWithinRangeCheckerTest.php
index 861b8ac..4b9159d 100644
--- a/tests/phpunit/Checker/RangeChecker/DiffWithinRangeCheckerTest.php
+++ b/tests/phpunit/Checker/RangeChecker/DiffWithinRangeCheckerTest.php
@@ -169,6 +169,14 @@
                $this->assertViolation( $checkResult, 
'wbqc-violation-message-diff-within-range-rightopen' );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 2, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/RangeChecker/P1.json 
b/tests/phpunit/Checker/RangeChecker/P1.json
new file mode 100644
index 0000000..c5c32ad
--- /dev/null
+++ b/tests/phpunit/Checker/RangeChecker/P1.json
@@ -0,0 +1,5 @@
+{
+  "id": "P1",
+  "type": "property",
+  "datatype": "time"
+}
diff --git a/tests/phpunit/Checker/RangeChecker/P2.json 
b/tests/phpunit/Checker/RangeChecker/P2.json
new file mode 100644
index 0000000..13ce8a6
--- /dev/null
+++ b/tests/phpunit/Checker/RangeChecker/P2.json
@@ -0,0 +1,5 @@
+{
+  "id": "P1",
+  "type": "property",
+  "datatype": "quantity"
+}
diff --git a/tests/phpunit/Checker/RangeChecker/RangeCheckerTest.php 
b/tests/phpunit/Checker/RangeChecker/RangeCheckerTest.php
index 0cb2920..340c069 100644
--- a/tests/phpunit/Checker/RangeChecker/RangeCheckerTest.php
+++ b/tests/phpunit/Checker/RangeChecker/RangeCheckerTest.php
@@ -3,6 +3,7 @@
 namespace WikibaseQuality\ConstraintReport\Test\RangeChecker;
 
 use Wikibase\DataModel\Entity\EntityDocument;
+use Wikibase\DataModel\Services\Lookup\EntityRetrievingDataTypeLookup;
 use Wikibase\DataModel\Snak\PropertyNoValueSnak;
 use Wikibase\DataModel\Statement\Statement;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
@@ -55,6 +56,7 @@
                $this->lookup = new JsonFileEntityLookup( __DIR__ );
                $this->timeValue = new TimeValue( 
'+00000001970-01-01T00:00:00Z', 0, 0, 0, 11, 
'http://www.wikidata.org/entity/Q1985727' );
                $this->checker = new RangeChecker(
+                       new EntityRetrievingDataTypeLookup( $this->lookup ),
                        $this->getConstraintParameterParser(),
                        new RangeCheckerHelper( $this->getDefaultConfig() ),
                        $this->getConstraintParameterRenderer()
@@ -270,11 +272,27 @@
        }
 
        /**
+        * @dataProvider propertyIdProvider
+        */
+       public function testCheckConstraintParameters( $propertyId ) {
+               $constraint = $this->getConstraintMock( [], $propertyId );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 1, $result );
+       }
+
+       public function propertyIdProvider() {
+               return [ [ 'P1' ], [ 'P2' ] ];
+       }
+
+       /**
         * @param string[] $parameters
+        * @param string $propertyId
         *
         * @return Constraint
         */
-       private function getConstraintMock( array $parameters ) {
+       private function getConstraintMock( array $parameters, $propertyId = 
'P1' ) {
                $mock = $this
                        ->getMockBuilder( Constraint::class )
                        ->disableOriginalConstructor()
@@ -285,6 +303,9 @@
                $mock->expects( $this->any() )
                         ->method( 'getConstraintTypeItemId' )
                         ->will( $this->returnValue( 'Range' ) );
+               $mock->expects( $this->any() )
+                        ->method( 'getPropertyId' )
+                        ->will( $this->returnValue( new PropertyId( 
$propertyId ) ) );
 
                return $mock;
        }
diff --git a/tests/phpunit/Checker/TypeChecker/TypeCheckerTest.php 
b/tests/phpunit/Checker/TypeChecker/TypeCheckerTest.php
index 209df32..b5c42da 100644
--- a/tests/phpunit/Checker/TypeChecker/TypeCheckerTest.php
+++ b/tests/phpunit/Checker/TypeChecker/TypeCheckerTest.php
@@ -233,6 +233,14 @@
                $this->assertViolation( $checkResult, 
'wbqc-violation-message-type-instance' );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 2, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/TypeChecker/ValueTypeCheckerTest.php 
b/tests/phpunit/Checker/TypeChecker/ValueTypeCheckerTest.php
index 88eb7e2..d7e51af 100644
--- a/tests/phpunit/Checker/TypeChecker/ValueTypeCheckerTest.php
+++ b/tests/phpunit/Checker/TypeChecker/ValueTypeCheckerTest.php
@@ -258,6 +258,14 @@
                $this->assertViolation( $checkResult, 
'wbqc-violation-message-value-needed' );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 2, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/ValueCountChecker/MultiValueCheckerTest.php 
b/tests/phpunit/Checker/ValueCountChecker/MultiValueCheckerTest.php
index b549633..3a0eeda 100644
--- a/tests/phpunit/Checker/ValueCountChecker/MultiValueCheckerTest.php
+++ b/tests/phpunit/Checker/ValueCountChecker/MultiValueCheckerTest.php
@@ -70,6 +70,14 @@
                $this->assertViolation( $checkResult, 
'wbqc-violation-message-multi-value' );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 0, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/ValueCountChecker/SingleValueCheckerTest.php 
b/tests/phpunit/Checker/ValueCountChecker/SingleValueCheckerTest.php
index c917c74..fd3876e 100644
--- a/tests/phpunit/Checker/ValueCountChecker/SingleValueCheckerTest.php
+++ b/tests/phpunit/Checker/ValueCountChecker/SingleValueCheckerTest.php
@@ -70,6 +70,14 @@
                $this->assertCompliance( $checkResult );
        }
 
+       public function testCheckConstraintParameters() {
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 0, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/Checker/ValueCountChecker/UniqueValueCheckerTest.php 
b/tests/phpunit/Checker/ValueCountChecker/UniqueValueCheckerTest.php
index 358c731..ac7a4dd 100644
--- a/tests/phpunit/Checker/ValueCountChecker/UniqueValueCheckerTest.php
+++ b/tests/phpunit/Checker/ValueCountChecker/UniqueValueCheckerTest.php
@@ -92,6 +92,15 @@
                $this->assertTodo( $checkResult );
        }
 
+       public function testCheckConstraintParameters() {
+               $this->checker = new UniqueValueChecker( 
$this->getConstraintParameterRenderer(), null );
+               $constraint = $this->getConstraintMock( [] );
+
+               $result = $this->checker->checkConstraintParameters( 
$constraint );
+
+               $this->assertCount( 0, $result );
+       }
+
        /**
         * @param string[] $parameters
         *
diff --git a/tests/phpunit/DelegatingConstraintCheckerTest.php 
b/tests/phpunit/DelegatingConstraintCheckerTest.php
index fd00b95..19b4298 100644
--- a/tests/phpunit/DelegatingConstraintCheckerTest.php
+++ b/tests/phpunit/DelegatingConstraintCheckerTest.php
@@ -4,6 +4,7 @@
 
 use Wikibase\DataModel\Entity\ItemId;
 use Wikibase\DataModel\Entity\ItemIdParser;
+use Wikibase\DataModel\Services\Lookup\EntityRetrievingDataTypeLookup;
 use Wikibase\DataModel\Services\Statement\StatementGuidParser;
 use Wikibase\Rdf\RdfVocabulary;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\DelegatingConstraintChecker;
@@ -69,6 +70,7 @@
                $titleParser = $this->getTitleParserMock();
                $factory = new ConstraintReportFactory(
                        $this->lookup,
+                       new EntityRetrievingDataTypeLookup( $this->lookup ),
                        new StatementGuidParser( $itemIdParser ),
                        $config,
                        $this->getConstraintParameterRenderer(),
diff --git a/tests/phpunit/Fake/FakeChecker.php 
b/tests/phpunit/Fake/FakeChecker.php
index d0e317e..eefd96a 100644
--- a/tests/phpunit/Fake/FakeChecker.php
+++ b/tests/phpunit/Fake/FakeChecker.php
@@ -35,4 +35,7 @@
                );
        }
 
+       public function checkConstraintParameters( Constraint $constraint ) {
+       }
+
 }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I338577883d9bccfc2ea990f1ccc7173a3a503136
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/extensions/WikibaseQualityConstraints
Gerrit-Branch: master
Gerrit-Owner: Lucas Werkmeister (WMDE) <[email protected]>
Gerrit-Reviewer: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: Lucas Werkmeister (WMDE) <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to