test_ad_nrt.doctest - more detailed doctests for stdnum.ad.nrt module

Copyright (C) 2019 Leandro Regueiro

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA


This file contains more detailed doctests for the stdnum.ad.nrt module. It
tries to test more corner cases and detailed functionality that is not really
useful as module documentation.

>>> from stdnum.ad import nrt


Tests for some corner cases.

>>> nrt.validate('U132950X')
'U132950X'
>>> nrt.validate('U-132950-X')
'U132950X'
>>> nrt.validate('U 132950 X')
'U132950X'
>>> nrt.validate('U 132.950 X')
'U132950X'
>>> nrt.format('D 059.888 N')
'D-059888-N'
>>> nrt.format('D059888N')
'D-059888-N'
>>> nrt.validate('A123B')
Traceback (most recent call last):
    ...
InvalidLength: ...
>>> nrt.validate('0123456N')  # First character is not a letter.
Traceback (most recent call last):
    ...
InvalidFormat: ...
>>> nrt.validate('A1234567')  # Last character is not a letter.
Traceback (most recent call last):
    ...
InvalidFormat: ...
>>> nrt.validate('LABCDEFX')  # Central characters are not digits.
Traceback (most recent call last):
    ...
InvalidFormat: ...
>>> nrt.validate('X123456A')  # Invalid first letter.
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> nrt.validate('F700000A')  # Invalid digits for natural resident person.
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> nrt.validate('A699999X')  # Invalid digits for "Societat Anonima".
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> nrt.validate('A800000X')  # Invalid digits for "Societat Anonima".
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> nrt.validate('L699999X')  # Invalid digits for "Societat Limitada".
Traceback (most recent call last):
    ...
InvalidComponent: ...
>>> nrt.validate('L800000X')  # Invalid digits for "Societat Limitada".
Traceback (most recent call last):
    ...
InvalidComponent: ...


These have been found online and should all be valid numbers.

>>> numbers = '''
...
... A-700555-R
... A-700747-F
... A-700814-R
... A-701315-C
... A-702792-H
... A-703168-T
... A-704683-Z
... A-704834-X
... A-705 321-C
... A-706010-J
... A-707871-V
... A-710.646-J
... A700071W
... A700527F
... A701485T
... D-059888 –N
... D-800044-K
... D-800383-X
... D059888N
... F-000429-F
... F-037945-M
... F-044646-J
... F-175669-X
... F-221117-V
... F-245998-L
... L-701412-V
... L-702597-Z
... L-706185-U
... L-707969-P
... L-709222-X
... L-709418-H
... L-709869-T
... L-710605-S
... L-711019-X
... L-711063-H
... L-711847-V
... L-712255-G
... L-712456-J
... L-713298-F
... L709811-C
... O-801585-O
... U-132950-X
... U-186013-P
... U-800428-R
... U-800584-Z
... U-801585-U
... U-801663-B
... U-801667-X
... U800301-M
...
... '''
>>> [x for x in numbers.splitlines() if x and not nrt.is_valid(x)]
[]