1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
test_isan.doctest - more detailed doctests for stdnum.isan module
Copyright (C) 2010, 2012, 2013 Arthur de Jong
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.isan module. It
tries to test more corner cases and detailed functionality that is not
really useful as module documentation.
>>> from stdnum import isan
This is how numbers should be split (possible with and without
episode number):
>>> isan.split('000000018947000000000000')
('000000018947', '0000', '', '00000000', '')
>>> isan.split('0000-0000-D07A-0090-Q-0000-0000-X')
('00000000D07A', '0090', 'Q', '00000000', 'X')
>>> isan.split('000000018947000000000000')
('000000018947', '0000', '', '00000000', '')
>>> isan.split('1881-66C7-3420-6541-Y')
('188166C73420', '6541', 'Y', '', '')
>>> isan.split('1881-66C7-3420-6541')
('188166C73420', '6541', '', '', '')
Compacting should also work:
>>> isan.compact('000000018947000000000000')
'000000018947000000000000'
>>> isan.compact('0000-0000-D07A-0090-Q-0000-0000-X')
'00000000D07A009000000000'
>>> isan.compact('0000-0000-D07A-0090-Q-0000-0000-X', strip_check_digits=False)
'00000000D07A0090Q00000000X'
>>> isan.compact('000000018947000000000000')
'000000018947000000000000'
>>> isan.compact('1881-66C7-3420-6541-Y')
'188166C734206541'
>>> isan.compact('1881-66C7-3420-6541-Y', strip_check_digits=False)
'188166C734206541Y'
>>> isan.compact('1881-66C7-3420-6541')
'188166C734206541'
These should be valid numbers:
>>> isan.validate('0000-0000-D07A-0090-Q-0000-0000-X')
'00000000D07A0090Q00000000X'
>>> isan.validate('1881-66C7-3420-6541-Y-9F3A-0245-O')
'188166C734206541Y9F3A0245O'
>>> isan.validate('0000-0000-D07A-0090-Q-0000-0000-X')
'00000000D07A0090Q00000000X'
>>> isan.validate('0000-0000-D07A-0090-Q')
'00000000D07A0090Q'
And these should be invalid:
>>> isan.validate('00000000D07A0090-Z')
Traceback (most recent call last):
...
InvalidChecksum: ...
>>> isan.validate('3abc6800-0041X1-20')
Traceback (most recent call last):
...
InvalidFormat: ...
>>> isan.validate('3abc6800-0041')
Traceback (most recent call last):
...
InvalidLength: ...
The format() function can add the check digit if needed. It should leave
alone existing check digits (even invalid ones) and respect the presence
or absence of a version number.
>>> isan.format('00000000D07A0090')
'0000-0000-D07A-0090-Q'
>>> isan.format('1881-66C734206541-9F3A-0245')
'1881-66C7-3420-6541-Y-9F3A-0245-O'
>>> isan.format('1881-66C7-3420-6541-?-9F3A-0245-?', strip_check_digits=True, add_check_digits=False)
'1881-66C7-3420-6541-9F3A-0245'
>>> isan.format('1881-66C7-3420-6541-?-9F3A-0245-?', strip_check_digits=True, add_check_digits=True)
'1881-66C7-3420-6541-Y-9F3A-0245-O'
The validate() function also allows stripping and (re)adding check digits.
>>> isan.validate('1881-66C7-3420-6541-Y-9F3A-0245-O', strip_check_digits=True)
'188166C7342065419F3A0245'
>>> isan.validate('188166C7342065419F3A0245', add_check_digits=True)
'188166C734206541Y9F3A0245O'
>>> isan.validate('1881-66C7-3420-6541-X-9F3A-0245-A', strip_check_digits=True, add_check_digits=True)
'188166C734206541Y9F3A0245O'
A simple test for the to_binary() function.
>>> import binascii
>>> import sys
>>> x = binascii.b2a_hex(isan.to_binary('0000-0000-D07A-0090-Q'))
>>> if sys.version > '3':
... x = str(x, encoding='ascii')
>>> x
'00000000d07a0090'
|