setExpectedException('yii\base\InvalidConfigException'); $val = new CompareValidator; $val->validateValue('val'); } public function testValidateValue() { $value = 18449; // default config $val = new CompareValidator(array('compareValue' => $value)); $this->assertTrue($val->validateValue($value)); $this->assertTrue($val->validateValue((string)$value)); $this->assertFalse($val->validateValue($value + 1)); foreach ($this->getOperationTestData($value) as $op => $tests) { $val = new CompareValidator(array('compareValue' => $value)); $val->operator = $op; foreach ($tests as $test) { $this->assertEquals($test[1], $val->validateValue($test[0])); } } } protected function getOperationTestData($value) { return array( '===' => array( array($value, true), array((string)$value, false), array((float)$value, false), array($value + 1, false), ), '!=' => array( array($value, false), array((string)$value, false), array((float)$value, false), array($value + 0.00001, true), array(false, true), ), '!==' => array( array($value, false), array((string)$value, true), array((float)$value, true), array(false, true), ), '>' => array( array($value, false), array($value + 1, true), array($value - 1, false), ), '>=' => array( array($value, true), array($value + 1, true), array($value - 1, false), ), '<' => array( array($value, false), array($value + 1, false), array($value - 1, true), ), '<=' => array( array($value, true), array($value + 1, false), array($value - 1, true), ), //'non-op' => array( // array($value, false), // array($value + 1, false), // array($value - 1, false), //), ); } public function testValidateAttribute() { // invalid-array $val = new CompareValidator; $model = new FakedValidationModel; $model->attr = array('test_val'); $val->validateAttribute($model, 'attr'); $this->assertTrue($model->hasErrors('attr')); $val = new CompareValidator(array('compareValue' => 'test-string')); $model = new FakedValidationModel; $model->attr_test = 'test-string'; $val->validateAttribute($model, 'attr_test'); $this->assertFalse($model->hasErrors('attr_test')); $val = new CompareValidator(array('compareAttribute' => 'attr_test_val')); $model = new FakedValidationModel; $model->attr_test = 'test-string'; $model->attr_test_val = 'test-string'; $val->validateAttribute($model, 'attr_test'); $this->assertFalse($model->hasErrors('attr_test')); $this->assertFalse($model->hasErrors('attr_test_val')); $val = new CompareValidator(array('compareAttribute' => 'attr_test_val')); $model = new FakedValidationModel; $model->attr_test = 'test-string'; $model->attr_test_val = 'test-string-false'; $val->validateAttribute($model, 'attr_test'); $this->assertTrue($model->hasErrors('attr_test')); $this->assertFalse($model->hasErrors('attr_test_val')); // assume: _repeat $val = new CompareValidator; $model = new FakedValidationModel; $model->attr_test = 'test-string'; $model->attr_test_repeat = 'test-string'; $val->validateAttribute($model, 'attr_test'); $this->assertFalse($model->hasErrors('attr_test')); $this->assertFalse($model->hasErrors('attr_test_repeat')); $val = new CompareValidator; $model = new FakedValidationModel; $model->attr_test = 'test-string'; $model->attr_test_repeat = 'test-string2'; $val->validateAttribute($model, 'attr_test'); $this->assertTrue($model->hasErrors('attr_test')); $this->assertFalse($model->hasErrors('attr_test_repeat')); // not existing op $val = new CompareValidator(); $val->operator = '<>'; $model = FakedValidationModel::createWithAttributes(array('attr_o' => 5, 'attr_o_repeat' => 5 )); $val->validateAttribute($model, 'attr_o'); $this->assertTrue($model->hasErrors('attr_o')); } public function testValidateAttributeOperators() { $value = 55; foreach ($this->getOperationTestData($value) as $operator => $tests) { $val = new CompareValidator(array('operator' => $operator, 'compareValue' => $value)); foreach ($tests as $test) { $model = new FakedValidationModel; $model->attr_test = $test[0]; $val->validateAttribute($model, 'attr_test'); $this->assertEquals($test[1], !$model->hasErrors('attr_test')); } } } public function testEnsureMessageSetOnInit() { foreach ($this->getOperationTestData(1337) as $operator => $tests) { $val = new CompareValidator(array('operator' => $operator)); $this->assertTrue(strlen($val->message) > 1); } try { $val = new CompareValidator(array('operator' => '<>')); } catch (InvalidConfigException $e) { return; } catch (\Exception $e) { $this->fail('InvalidConfigException expected' . get_class($e) . 'received'); return; } $this->fail('InvalidConfigException expected none received'); } }