# -*- coding: utf-8 -*- # Tests for the different contrib/localflavor/ form fields. localflavor_tests = r""" # USZipCodeField ############################################################## USZipCodeField validates that the data is either a five-digit U.S. zip code or a zip+4. >>> from django.contrib.localflavor.usa.forms import USZipCodeField >>> f = USZipCodeField() >>> f.clean('60606') u'60606' >>> f.clean(60606) u'60606' >>> f.clean('04000') u'04000' >>> f.clean('4000') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] >>> f.clean('60606-1234') u'60606-1234' >>> f.clean('6060-1234') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] >>> f.clean('60606-') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] >>> 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 = USZipCodeField(required=False) >>> f.clean('60606') u'60606' >>> f.clean(60606) u'60606' >>> f.clean('04000') u'04000' >>> f.clean('4000') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] >>> f.clean('60606-1234') u'60606-1234' >>> f.clean('6060-1234') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] >>> f.clean('60606-') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] >>> f.clean(None) u'' >>> f.clean('') u'' # USPhoneNumberField ########################################################## USPhoneNumberField validates that the data is a valid U.S. phone number, including the area code. It's normalized to XXX-XXX-XXXX format. >>> from django.contrib.localflavor.usa.forms import USPhoneNumberField >>> f = USPhoneNumberField() >>> f.clean('312-555-1212') u'312-555-1212' >>> f.clean('3125551212') u'312-555-1212' >>> f.clean('312 555-1212') u'312-555-1212' >>> f.clean('(312) 555-1212') u'312-555-1212' >>> f.clean('312 555 1212') u'312-555-1212' >>> f.clean('312.555.1212') u'312-555-1212' >>> f.clean('312.555-1212') u'312-555-1212' >>> f.clean(' (312) 555.1212 ') u'312-555-1212' >>> f.clean('555-1212') Traceback (most recent call last): ... ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] >>> f.clean('312-55-1212') Traceback (most recent call last): ... ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] >>> 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 = USPhoneNumberField(required=False) >>> f.clean('312-555-1212') u'312-555-1212' >>> f.clean('3125551212') u'312-555-1212' >>> f.clean('312 555-1212') u'312-555-1212' >>> f.clean('(312) 555-1212') u'312-555-1212' >>> f.clean('312 555 1212') u'312-555-1212' >>> f.clean('312.555.1212') u'312-555-1212' >>> f.clean('312.555-1212') u'312-555-1212' >>> f.clean(' (312) 555.1212 ') u'312-555-1212' >>> f.clean('555-1212') Traceback (most recent call last): ... ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] >>> f.clean('312-55-1212') Traceback (most recent call last): ... ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] >>> f.clean(None) u'' >>> f.clean('') u'' # USStateField ################################################################ USStateField validates that the data is either an abbreviation or name of a U.S. state. >>> from django.contrib.localflavor.usa.forms import USStateField >>> f = USStateField() >>> f.clean('il') u'IL' >>> f.clean('IL') u'IL' >>> f.clean('illinois') u'IL' >>> f.clean(' illinois ') u'IL' >>> f.clean(60606) Traceback (most recent call last): ... ValidationError: [u'Enter a U.S. state or territory.'] >>> 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 = USStateField(required=False) >>> f.clean('il') u'IL' >>> f.clean('IL') u'IL' >>> f.clean('illinois') u'IL' >>> f.clean(' illinois ') u'IL' >>> f.clean(60606) Traceback (most recent call last): ... ValidationError: [u'Enter a U.S. state or territory.'] >>> f.clean(None) u'' >>> f.clean('') u'' # USStateSelect ############################################################### USStateSelect is a Select widget that uses a list of U.S. states/territories as its choices. >>> from django.contrib.localflavor.usa.forms import USStateSelect >>> w = USStateSelect() >>> print w.render('state', 'IL') # USSocialSecurityNumberField ################################################# >>> from django.contrib.localflavor.usa.forms import USSocialSecurityNumberField >>> f = USSocialSecurityNumberField() >>> f.clean('987-65-4330') u'987-65-4330' >>> f.clean('987654330') u'987-65-4330' >>> f.clean('078-05-1120') Traceback (most recent call last): ... ValidationError: [u'Enter a valid U.S. Social Security number in XXX-XX-XXXX format.'] # UKPostcodeField ############################################################# UKPostcodeField validates that the data is a valid UK postcode. >>> from django.contrib.localflavor.uk.forms import UKPostcodeField >>> f = UKPostcodeField() >>> f.clean('BT32 4PX') u'BT32 4PX' >>> f.clean('GIR 0AA') u'GIR 0AA' >>> f.clean('BT324PX') Traceback (most recent call last): ... ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] >>> f.clean('1NV 4L1D') Traceback (most recent call last): ... ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] >>> 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 = UKPostcodeField(required=False) >>> f.clean('BT32 4PX') u'BT32 4PX' >>> f.clean('GIR 0AA') u'GIR 0AA' >>> f.clean('1NV 4L1D') Traceback (most recent call last): ... ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] >>> f.clean('BT324PX') Traceback (most recent call last): ... ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] >>> f.clean(None) u'' >>> f.clean('') u'' # FRZipCodeField ############################################################# FRZipCodeField validates that the data is a valid FR zipcode. >>> from django.contrib.localflavor.fr.forms import FRZipCodeField >>> f = FRZipCodeField() >>> f.clean('75001') u'75001' >>> f.clean('93200') u'93200' >>> f.clean('2A200') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX.'] >>> f.clean('980001') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX.'] >>> 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 = FRZipCodeField(required=False) >>> f.clean('75001') u'75001' >>> f.clean('93200') u'93200' >>> f.clean('2A200') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX.'] >>> f.clean('980001') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX.'] >>> f.clean(None) u'' >>> f.clean('') u'' # FRPhoneNumberField ########################################################## FRPhoneNumberField validates that the data is a valid french phone number. It's normalized to 0X XX XX XX XX format. Dots are valid too. >>> from django.contrib.localflavor.fr.forms import FRPhoneNumberField >>> f = FRPhoneNumberField() >>> f.clean('01 55 44 58 64') u'01 55 44 58 64' >>> f.clean('0155445864') u'01 55 44 58 64' >>> f.clean('01 5544 5864') u'01 55 44 58 64' >>> f.clean('01 55.44.58.64') u'01 55 44 58 64' >>> f.clean('01.55.44.58.64') u'01 55 44 58 64' >>> f.clean('01,55,44,58,64') Traceback (most recent call last): ... ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] >>> f.clean('555 015 544') Traceback (most recent call last): ... ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] >>> 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 = FRPhoneNumberField(required=False) >>> f.clean('01 55 44 58 64') u'01 55 44 58 64' >>> f.clean('0155445864') u'01 55 44 58 64' >>> f.clean('01 5544 5864') u'01 55 44 58 64' >>> f.clean('01 55.44.58.64') u'01 55 44 58 64' >>> f.clean('01.55.44.58.64') u'01 55 44 58 64' >>> f.clean('01,55,44,58,64') Traceback (most recent call last): ... ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] >>> f.clean('555 015 544') Traceback (most recent call last): ... ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] >>> f.clean(None) u'' >>> f.clean('') u'' # FRDepartmentSelect ############################################################### FRDepartmentSelect is a Select widget that uses a list of french departments including DOM TOM >>> from django.contrib.localflavor.fr.forms import FRDepartmentSelect >>> w = FRDepartmentSelect() >>> print w.render('dep', 'Paris') # JPPostalCodeField ############################################################### A form field that validates its input is a Japanese postcode. Accepts 7 digits(with/out hyphen). >>> from django.contrib.localflavor.jp.forms import JPPostalCodeField >>> f = JPPostalCodeField() >>> f.clean('251-0032') u'2510032' >>> f.clean('2510032') u'2510032' >>> f.clean('2510-032') Traceback (most recent call last): ... ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] >>> f.clean('251a0032') Traceback (most recent call last): ... ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] >>> f.clean('a51-0032') Traceback (most recent call last): ... ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] >>> f.clean('25100321') Traceback (most recent call last): ... ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] >>> f.clean('') Traceback (most recent call last): ... ValidationError: [u'This field is required.'] >>> f = JPPostalCodeField(required=False) >>> f.clean('251-0032') u'2510032' >>> f.clean('2510032') u'2510032' >>> f.clean('2510-032') Traceback (most recent call last): ... ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] >>> f.clean('') u'' >>> f.clean(None) u'' # JPPrefectureSelect ############################################################### A Select widget that uses a list of Japanese prefectures as its choices. >>> from django.contrib.localflavor.jp.forms import JPPrefectureSelect >>> w = JPPrefectureSelect() >>> print w.render('prefecture', 'kanagawa') # ITZipCodeField ############################################################# >>> from django.contrib.localflavor.it.forms import ITZipCodeField >>> f = ITZipCodeField() >>> f.clean('00100') u'00100' >>> f.clean(' 00100') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX.'] # ITRegionSelect ############################################################# >>> from django.contrib.localflavor.it.forms import ITRegionSelect >>> w = ITRegionSelect() >>> w.render('regions', 'PMN') u'' # FIZipCodeField ############################################################# FIZipCodeField validates that the data is a valid FI zipcode. >>> from django.contrib.localflavor.fi.forms import FIZipCodeField >>> f = FIZipCodeField() >>> f.clean('20540') u'20540' >>> f.clean('20101') u'20101' >>> f.clean('20s40') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX.'] >>> f.clean('205401') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX.'] >>> 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 = FIZipCodeField(required=False) >>> f.clean('20540') u'20540' >>> f.clean('20101') u'20101' >>> f.clean('20s40') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX.'] >>> f.clean('205401') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX.'] >>> f.clean(None) u'' >>> f.clean('') u'' # FIMunicipalitySelect ############################################################### A Select widget that uses a list of Finnish municipalities as its choices. >>> from django.contrib.localflavor.fi.forms import FIMunicipalitySelect >>> w = FIMunicipalitySelect() >>> unicode(w.render('municipalities', 'turku')) u'' # FISocialSecurityNumber ############################################################## >>> from django.contrib.localflavor.fi.forms import FISocialSecurityNumber >>> f = FISocialSecurityNumber() >>> f.clean('010101-0101') u'010101-0101' >>> f.clean('010101+0101') u'010101+0101' >>> f.clean('010101A0101') u'010101A0101' >>> f.clean('101010-0102') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Finnish social security number.'] >>> f.clean('10a010-0101') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Finnish social security number.'] >>> f.clean('101010-0\xe401') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Finnish social security number.'] >>> f.clean('101010b0101') Traceback (most recent call last): ... ValidationError: [u'Enter a valid Finnish social security number.'] >>> 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 = FISocialSecurityNumber(required=False) >>> f.clean('010101-0101') u'010101-0101' >>> f.clean(None) u'' >>> f.clean('') u'' # 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.'] >>> 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' # BRPhoneNumberField ######################################################### >>> 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'' # DEZipCodeField ############################################################## >>> from django.contrib.localflavor.de.forms import DEZipCodeField >>> f = DEZipCodeField() >>> f.clean('99423') u'99423' >>> f.clean(' 99423') Traceback (most recent call last): ... ValidationError: [u'Enter a zip code in the format XXXXX.'] # DEStateSelect ############################################################# >>> from django.contrib.localflavor.de.forms import DEStateSelect >>> w = DEStateSelect() >>> w.render('states', 'TH') u'' # DEIdentityCardNumberField ################################################# >>> from django.contrib.localflavor.de.forms import DEIdentityCardNumberField >>> f = DEIdentityCardNumberField() >>> f.clean('7549313035D-6004103-0903042-0') u'7549313035D-6004103-0903042-0' >>> f.clean('9786324830D 6104243 0910271 2') u'9786324830D-6104243-0910271-2' >>> f.clean('0434657485D-6407276-0508137-9') Traceback (most recent call last): ... ValidationError: [u'Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.'] """