Browse Source

Added type hinting to Model::validator()

Added missing param and fixed typo in method's phpdoc.

Used 'assertSame' and 'assertNotSame'. Removed piped NULL type from phpdoc.

Simplify condition in Model::validator()
Thomas Ploch 13 years ago
parent
commit
7f0085cd4e
2 changed files with 32 additions and 8 deletions
  1. 5 8
      lib/Cake/Model/Model.php
  2. 27 0
      lib/Cake/Test/Case/Model/ModelValidationTest.php

+ 5 - 8
lib/Cake/Model/Model.php

@@ -3424,21 +3424,18 @@ class Model extends Object implements CakeEventListener {
 	}
 
 /**
- * Retunrs an instance of a model validator for this class
+ * Returns an instance of a model validator for this class
  *
  * @param ModelValidator Model validator instance.
  *  If null a new ModelValidator instance will be made using current model object
  * @return ModelValidator
  */
-	public function validator($instance = null) {
-		if ($instance instanceof ModelValidator) {
-			return $this->_validator = $instance;
-		}
-
-		if (empty($this->_validator) && is_null($instance)) {
+	public function validator(ModelValidator $instance = null) {
+		if ($instance) {
+			$this->_validator = $instance;
+		} elseif (!$this->_validator) {
 			$this->_validator = new ModelValidator($this);
 		}
-
 		return $this->_validator;
 	}
 

+ 27 - 0
lib/Cake/Test/Case/Model/ModelValidationTest.php

@@ -2116,6 +2116,33 @@ class ModelValidationTest extends BaseModelTest {
 	}
 
 /**
+ * Test that validator override works as expected
+ *
+ * @return void
+ */
+	public function testValidatorOverride() {
+		$TestModel = new Article();
+		$ValidatorA = new ModelValidator($TestModel);
+		$ValidatorB = new ModelValidator($TestModel);
+
+		$TestModel->validator($ValidatorA);
+		$TestModel->validator($ValidatorB);
+
+		$this->assertSame($ValidatorB, $TestModel->validator());
+		$this->assertNotSame($ValidatorA, $TestModel->validator());
+	}
+
+/**
+ * Test that type hint exception is thrown
+ *
+ * @expectedException PHPUnit_Framework_Error
+ * @return void
+ */
+	public function testValidatorTypehintException() {
+		$Validator = new ModelValidator('asdasds');
+	}
+
+/**
  * Tests that altering data in a beforeValidate callback will lead to saving those
  * values in database, this time with belongsTo associations
  *