def _fld_checker(self, field): """ Expected results from validate QValidator::Invalid 0 The string is clearly invalid. QValidator::Intermediate 1 The string is a plausible intermediate value. QValidator::Acceptable 2 The string is acceptable as a final result; i.e. it is valid. """ DECIMAL_SEPARATOR = QLocale().decimalPoint() OTHER_SEPARATOR = ',' if DECIMAL_SEPARATOR == '.' else '.' validator = QgsFieldValidator(None, field, '0.0', '') def _test(value, expected): ret = validator.validate(value, 0) self.assertEqual(ret[0], expected, "%s != %s" % (ret[0], expected)) if value: self.assertEqual( validator.validate('-' + value, 0)[0], expected, '-' + value) # Valid _test('0.1234', QValidator.Acceptable) # Apparently we accept comma only when locale say so if DECIMAL_SEPARATOR != '.': _test('0,1234', QValidator.Acceptable) # If precision is > 0, regexp validator is used (and it does not support sci notation) if field.precision() == 0: _test('12345.1234e+123', QValidator.Acceptable) _test('12345.1234e-123', QValidator.Acceptable) if DECIMAL_SEPARATOR != '.': _test('12345,1234e+123', QValidator.Acceptable) _test('12345,1234e-123', QValidator.Acceptable) _test('', QValidator.Acceptable) # Out of range _test('12345.1234e+823', QValidator.Intermediate) _test('12345.1234e-823', QValidator.Intermediate) if DECIMAL_SEPARATOR != '.': _test('12345,1234e+823', QValidator.Intermediate) _test('12345,1234e-823', QValidator.Intermediate) # Invalid _test('12345-1234', QValidator.Invalid) _test('onetwothree', QValidator.Invalid) int_field = self.vl.fields()[self.vl.fields().indexFromName( 'int_field')] self.assertEqual(int_field.precision(), 0) # this is what the provider reports :( self.assertEqual(int_field.length(), 0) # not set self.assertEqual(int_field.type(), QVariant.Int) validator = QgsFieldValidator(None, int_field, '0', '') # Valid _test('0', QValidator.Acceptable) _test('1234', QValidator.Acceptable) _test('', QValidator.Acceptable) # Invalid _test('12345-1234', QValidator.Invalid) _test('12345%s1234' % DECIMAL_SEPARATOR, QValidator.Invalid) _test('onetwothree', QValidator.Invalid)
def test_validator(self): # Test the double """ Expected results from validate QValidator::Invalid 0 The string is clearly invalid. QValidator::Intermediate 1 The string is a plausible intermediate value. QValidator::Acceptable 2 The string is acceptable as a final result; i.e. it is valid. """ double_field = self.vl.fields()[self.vl.fields().indexFromName( 'double_field')] self.assertEqual(double_field.precision(), 0) # this is what the provider reports :( self.assertEqual(double_field.length(), 0) # not set self.assertEqual(double_field.type(), QVariant.Double) validator = QgsFieldValidator(None, double_field, '0.0', '') def _test(value, expected): ret = validator.validate(value, 0) self.assertEqual(ret[0], expected, value) if value: self.assertEqual( validator.validate('-' + value, 0)[0], expected, '-' + value) # Check the decimal comma separator has been properly transformed if expected != QValidator.Invalid: self.assertEqual(ret[1], value.replace(',', '.')) # Valid _test('0.1234', QValidator.Acceptable) _test('0,1234', QValidator.Acceptable) _test('12345.1234e+123', QValidator.Acceptable) _test('12345.1234e-123', QValidator.Acceptable) _test('12345,1234e+123', QValidator.Acceptable) _test('12345,1234e-123', QValidator.Acceptable) _test('', QValidator.Acceptable) # Out of range _test('12345.1234e+823', QValidator.Intermediate) _test('12345.1234e-823', QValidator.Intermediate) _test('12345,1234e+823', QValidator.Intermediate) _test('12345,1234e-823', QValidator.Intermediate) # Invalid _test('12345-1234', QValidator.Invalid) _test('onetwothree', QValidator.Invalid) int_field = self.vl.fields()[self.vl.fields().indexFromName( 'int_field')] self.assertEqual(int_field.precision(), 0) # this is what the provider reports :( self.assertEqual(int_field.length(), 0) # not set self.assertEqual(int_field.type(), QVariant.Int) validator = QgsFieldValidator(None, int_field, '0', '') # Valid _test('0', QValidator.Acceptable) _test('1234', QValidator.Acceptable) _test('', QValidator.Acceptable) # Invalid _test('12345-1234', QValidator.Invalid) _test('12345.1234', QValidator.Invalid) _test('onetwothree', QValidator.Invalid)