From 0cd72cabab8d94b33b1dd3f72518ed7f12521c54 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 18 Dec 2010 20:29:25 +0000 Subject: [PATCH] Converted the Brazillian localflavor doctests to unittests. We have always been at war with doctests. Thanks to Idan Gazit. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14933 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- tests/regressiontests/forms/localflavor/br.py | 348 +++++++----------- .../regressiontests/forms/localflavortests.py | 3 +- tests/regressiontests/forms/tests/__init__.py | 1 + 3 files changed, 138 insertions(+), 214 deletions(-) diff --git a/tests/regressiontests/forms/localflavor/br.py b/tests/regressiontests/forms/localflavor/br.py index 757f382d64..6ae71056a4 100644 --- a/tests/regressiontests/forms/localflavor/br.py +++ b/tests/regressiontests/forms/localflavor/br.py @@ -1,220 +1,144 @@ -# -*- coding: utf-8 -*- -# Tests for the contrib/localflavor/ BR form fields. +from django.contrib.localflavor.br.forms import (BRZipCodeField, + BRCNPJField, BRCPFField, BRPhoneNumberField, BRStateSelect, + BRStateChoiceField) -tests = r""" -# BRZipCodeField ############################################################ ->>> from django.contrib.localflavor.br.forms import BRZipCodeField ->>> f = BRZipCodeField() ->>> f.clean('12345-123') -u'12345-123' ->>> f.clean('12345_123') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] ->>> f.clean('1234-123') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] ->>> f.clean('abcde-abc') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] ->>> f.clean('12345-') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] ->>> f.clean('-123') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean(None) -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] +from utils import LocalFlavorTestCase ->>> f = BRZipCodeField(required=False) ->>> f.clean(None) -u'' ->>> f.clean('') -u'' ->>> f.clean('-123') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] ->>> f.clean('12345-') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] ->>> f.clean('abcde-abc') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] ->>> f.clean('1234-123') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] ->>> f.clean('12345_123') -Traceback (most recent call last): -... -ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] ->>> f.clean('12345-123') -u'12345-123' -# BRCNPJField ############################################################ +class BRLocalFlavorTests(LocalFlavorTestCase): + def test_BRZipCodeField(self): + error_format = [u'Enter a zip code in the format XXXXX-XXX.'] + valid = { + '12345-123': '12345-123', + } + invalid = { + '12345_123': error_format, + '1234-123': error_format, + 'abcde-abc': error_format, + '12345-': error_format, + '-123': error_format, + } + self.assertFieldOutput(BRZipCodeField, valid, invalid) ->>> from django.contrib.localflavor.br.forms import BRCNPJField ->>> f = BRCNPJField(required=True) ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean('12-345-678/9012-10') -Traceback (most recent call last): -... -ValidationError: [u'Invalid CNPJ number.'] ->>> f.clean('12.345.678/9012-10') -Traceback (most recent call last): -... -ValidationError: [u'Invalid CNPJ number.'] ->>> f.clean('12345678/9012-10') -Traceback (most recent call last): -... -ValidationError: [u'Invalid CNPJ number.'] ->>> f.clean('64.132.916/0001-88') -'64.132.916/0001-88' ->>> f.clean('64-132-916/0001-88') -'64-132-916/0001-88' ->>> f.clean('64132916/0001-88') -'64132916/0001-88' ->>> f.clean('64.132.916/0001-XX') -Traceback (most recent call last): -... -ValidationError: [u'This field requires only numbers.'] ->>> f = BRCNPJField(required=False) ->>> f.clean('') -u'' + def test_BRCNPJField(self): + error_format = [u'Invalid CNPJ number.'] + error_numbersonly = [u'This field requires only numbers.'] + valid = { + '64.132.916/0001-88': '64.132.916/0001-88', + '64-132-916/0001-88': '64-132-916/0001-88', + '64132916/0001-88': '64132916/0001-88', + } + invalid = { + '12-345-678/9012-10': error_format, + '12.345.678/9012-10': error_format, + '12345678/9012-10': error_format, + '64.132.916/0001-XX': error_numbersonly, + } + self.assertFieldOutput(BRCNPJField, valid, invalid) -# BRCPFField ################################################################# + def test_BRCPFField(self): + error_format = [u'Invalid CPF number.'] + error_numbersonly = [u'This field requires only numbers.'] + error_atmost_chars = [u'Ensure this value has at most 14 characters (it has 15).'] + error_atleast_chars = [u'Ensure this value has at least 11 characters (it has 10).'] + error_atmost = [u'This field requires at most 11 digits or 14 characters.'] + valid = { + '663.256.017-26': '663.256.017-26', + '66325601726': '66325601726', + '375.788.573-20': '375.788.573-20', + '84828509895': '84828509895', + } + invalid = { + '489.294.654-54': error_format, + '295.669.575-98': error_format, + '539.315.127-22': error_format, + '375.788.573-XX': error_numbersonly, + '375.788.573-000': error_atmost_chars, + '123.456.78': error_atleast_chars, + '123456789555': error_atmost, + } + self.assertFieldOutput(BRCPFField, valid, invalid) ->>> from django.contrib.localflavor.br.forms import BRCPFField ->>> f = BRCPFField() ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean(None) -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean('489.294.654-54') -Traceback (most recent call last): -... -ValidationError: [u'Invalid CPF number.'] ->>> f.clean('295.669.575-98') -Traceback (most recent call last): -... -ValidationError: [u'Invalid CPF number.'] ->>> f.clean('539.315.127-22') -Traceback (most recent call last): -... -ValidationError: [u'Invalid CPF number.'] ->>> f.clean('663.256.017-26') -u'663.256.017-26' ->>> f.clean('66325601726') -u'66325601726' ->>> f.clean('375.788.573-20') -u'375.788.573-20' ->>> f.clean('84828509895') -u'84828509895' ->>> f.clean('375.788.573-XX') -Traceback (most recent call last): -... -ValidationError: [u'This field requires only numbers.'] ->>> f.clean('375.788.573-000') -Traceback (most recent call last): -... -ValidationError: [u'Ensure this value has at most 14 characters (it has 15).'] ->>> f.clean('123.456.78') -Traceback (most recent call last): -... -ValidationError: [u'Ensure this value has at least 11 characters (it has 10).'] ->>> f.clean('123456789555') -Traceback (most recent call last): -... -ValidationError: [u'This field requires at most 11 digits or 14 characters.'] ->>> f = BRCPFField(required=False) ->>> f.clean('') -u'' ->>> f.clean(None) -u'' + def test_BRPhoneNumberField(self): + # TODO: this doesn't test for any invalid inputs. + valid = { + '41-3562-3464': u'41-3562-3464', + '4135623464': u'41-3562-3464', + '41 3562-3464': u'41-3562-3464', + '41 3562 3464': u'41-3562-3464', + '(41) 3562 3464': u'41-3562-3464', + '41.3562.3464': u'41-3562-3464', + '41.3562-3464': u'41-3562-3464', + ' (41) 3562.3464': u'41-3562-3464', + } + invalid = {} + self.assertFieldOutput(BRPhoneNumberField, valid, invalid) -# BRPhoneNumberField ######################################################### + def test_BRStateSelect(self): + f = BRStateSelect() + out = u'''''' + self.assertEqual(f.render('states', 'PR'), out) ->>> from django.contrib.localflavor.br.forms import BRPhoneNumberField ->>> f = BRPhoneNumberField() ->>> f.clean('41-3562-3464') -u'41-3562-3464' ->>> f.clean('4135623464') -u'41-3562-3464' ->>> f.clean('41 3562-3464') -u'41-3562-3464' ->>> f.clean('41 3562 3464') -u'41-3562-3464' ->>> f.clean('(41) 3562 3464') -u'41-3562-3464' ->>> f.clean('41.3562.3464') -u'41-3562-3464' ->>> f.clean('41.3562-3464') -u'41-3562-3464' ->>> f.clean(' (41) 3562.3464') -u'41-3562-3464' ->>> f.clean(None) -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] - ->>> f = BRPhoneNumberField(required=False) ->>> f.clean('') -u'' ->>> f.clean(None) -u'' ->>> f.clean(' (41) 3562.3464') -u'41-3562-3464' ->>> f.clean('41.3562-3464') -u'41-3562-3464' ->>> f.clean('(41) 3562 3464') -u'41-3562-3464' ->>> f.clean('4135623464') -u'41-3562-3464' ->>> f.clean('41 3562-3464') -u'41-3562-3464' - -# BRStateSelect ############################################################## - ->>> from django.contrib.localflavor.br.forms import BRStateSelect ->>> w = BRStateSelect() ->>> w.render('states', 'PR') -u'' - -# BRStateChoiceField ######################################################### ->>> from django.contrib.localflavor.br.forms import BRStateChoiceField ->>> f = BRStateChoiceField() ->>> ', '.join([f.clean(s) for s, _ in f.widget.choices]) -u'AC, AL, AP, AM, BA, CE, DF, ES, GO, MA, MT, MS, MG, PA, PB, PR, PE, PI, RJ, RN, RS, RO, RR, SC, SP, SE, TO' ->>> f.clean('') -Traceback (most recent call last): -... -ValidationError: [u'This field is required.'] ->>> f.clean('pr') -Traceback (most recent call last): -... -ValidationError: [u'Select a valid brazilian state. That state is not one of the available states.'] -""" + def test_BRStateChoiceField(self): + error_invalid = [u'Select a valid brazilian state. That state is not one of the available states.'] + valid = { + 'AC': 'AC', + 'AL': 'AL', + 'AP': 'AP', + 'AM': 'AM', + 'BA': 'BA', + 'CE': 'CE', + 'DF': 'DF', + 'ES': 'ES', + 'GO': 'GO', + 'MA': 'MA', + 'MT': 'MT', + 'MS': 'MS', + 'MG': 'MG', + 'PA': 'PA', + 'PB': 'PB', + 'PR': 'PR', + 'PE': 'PE', + 'PI': 'PI', + 'RJ': 'RJ', + 'RN': 'RN', + 'RS': 'RS', + 'RO': 'RO', + 'RR': 'RR', + 'SC': 'SC', + 'SP': 'SP', + 'SE': 'SE', + 'TO': 'TO', + } + invalid = { + 'pr': error_invalid, + } + self.assertFieldOutput(BRStateChoiceField, valid, invalid) diff --git a/tests/regressiontests/forms/localflavortests.py b/tests/regressiontests/forms/localflavortests.py index c3dd07523f..b882dd35e5 100644 --- a/tests/regressiontests/forms/localflavortests.py +++ b/tests/regressiontests/forms/localflavortests.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from localflavor.br import tests as localflavor_br_tests from localflavor.ca import tests as localflavor_ca_tests from localflavor.ch import tests as localflavor_ch_tests from localflavor.cl import tests as localflavor_cl_tests @@ -30,12 +29,12 @@ from localflavor.at import ATLocalFlavorTests from localflavor.de import DELocalFlavorTests from localflavor.au import AULocalFlavorTests from localflavor.be import BELocalFlavorTests +from localflavor.br import BRLocalFlavorTests from localflavor.il import ILLocalFlavorTests from localflavor.tr import TRLocalFlavorTests __test__ = { - 'localflavor_br_tests': localflavor_br_tests, 'localflavor_ca_tests': localflavor_ca_tests, 'localflavor_ch_tests': localflavor_ch_tests, 'localflavor_cl_tests': localflavor_cl_tests, diff --git a/tests/regressiontests/forms/tests/__init__.py b/tests/regressiontests/forms/tests/__init__.py index f7ce1ef1f4..64d03175ef 100644 --- a/tests/regressiontests/forms/tests/__init__.py +++ b/tests/regressiontests/forms/tests/__init__.py @@ -17,6 +17,7 @@ from regressiontests.forms.localflavortests import ( ATLocalFlavorTests, AULocalFlavorTests, BELocalFlavorTests, + BRLocalFlavorTests, DELocalFlavorTests, ILLocalFlavorTests, TRLocalFlavorTests,