mirror of
https://github.com/python-escpos/python-escpos
synced 2025-12-02 09:43:30 +00:00
ensure that the code to print is compatible with the ESC/POS formats and also automatically check this format before printing (barcode() method).
273 lines
7.1 KiB
Python
273 lines
7.1 KiB
Python
#!/usr/bin/python
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
from __future__ import unicode_literals
|
|
|
|
import escpos.printer as printer
|
|
import pytest
|
|
|
|
|
|
def test_barcode_upca():
|
|
bc = 'UPC-A'
|
|
|
|
valid_codes = [
|
|
"01234567890",
|
|
"012345678905"
|
|
]
|
|
|
|
invalid_codes = [
|
|
"01234567890123", # too long
|
|
"0123456789", # too short
|
|
"72527273-711", # invalid '-'
|
|
"A12345678901", # invalid 'A'
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_upce():
|
|
bc = 'UPC-E'
|
|
|
|
valid_codes = [
|
|
"01234567",
|
|
"0123456",
|
|
"012345678905"
|
|
]
|
|
invalid_codes = [
|
|
"01234567890123", # too long
|
|
"012345", # too short
|
|
"72527-2", # invalid '-'
|
|
"A123456", # invalid 'A'
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_ean13():
|
|
bc = 'EAN13'
|
|
|
|
valid_codes = [
|
|
"0123456789012",
|
|
"012345678901"
|
|
]
|
|
invalid_codes = [
|
|
"0123456789", # too short
|
|
"A123456789012" # invalid 'A'
|
|
"012345678901234", # too long
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_ean8():
|
|
bc = 'EAN8'
|
|
|
|
valid_codes = [
|
|
"01234567",
|
|
"0123456"
|
|
]
|
|
invalid_codes = [
|
|
"012345", # too short
|
|
"A123456789012" # invalid 'A'
|
|
"012345678901234", # too long
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_code39():
|
|
bc = 'CODE39'
|
|
|
|
valid_codes = [
|
|
"ABC-1234",
|
|
"ABC-1234-$$-+A",
|
|
"*WIKIPEDIA*" # the '*' symbol is not part of the actual code, but it is handled properly by ESCPOS
|
|
]
|
|
invalid_codes = [
|
|
"ALKJ_34", # invalid '_'
|
|
"A" * 256, # too long
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_itf():
|
|
bc = 'ITF'
|
|
|
|
valid_codes = [
|
|
"010203040506070809",
|
|
"11221133113344556677889900",
|
|
]
|
|
invalid_codes = [
|
|
"010203040", # odd length
|
|
"0" * 256, # too long
|
|
"AB01", # invalid 'A'
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_codabar():
|
|
bc = 'CODABAR'
|
|
|
|
valid_codes = [
|
|
"A2030405060B",
|
|
"C11221133113344556677889900D",
|
|
"D0D",
|
|
]
|
|
invalid_codes = [
|
|
"010203040", # no start/stop
|
|
"0" * 256, # too long
|
|
"AB-01F", # invalid 'B'
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_nw7():
|
|
bc = 'NW7' # same as CODABAR
|
|
|
|
valid_codes = [
|
|
"A2030405060B",
|
|
"C11221133113344556677889900D",
|
|
"D0D",
|
|
]
|
|
invalid_codes = [
|
|
"010203040", # no start/stop
|
|
"0" * 256, # too long
|
|
"AB-01F", # invalid 'B'
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_code93():
|
|
bc = 'CODE93'
|
|
|
|
valid_codes = [
|
|
"A2030405060B",
|
|
"+:$&23-7@$",
|
|
"D0D",
|
|
]
|
|
invalid_codes = [
|
|
"é010203040", # invalid 'é'
|
|
"0" * 256, # too long
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_code128():
|
|
bc = 'CODE128'
|
|
|
|
valid_codes = [
|
|
"{A2030405060B",
|
|
"{C+:$&23-7@$",
|
|
"{B0D",
|
|
]
|
|
invalid_codes = [
|
|
"010203040", # missing leading {
|
|
"0" * 256, # too long
|
|
"{D2354AA", # second char not between A-C
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_gs1_128():
|
|
bc = 'GS1-128' # same as code 128
|
|
|
|
valid_codes = [
|
|
"{A2030405060B",
|
|
"{C+:$&23-7@$",
|
|
"{B0D",
|
|
]
|
|
invalid_codes = [
|
|
"010203040", # missing leading {
|
|
"0" * 256, # too long
|
|
"{D2354AA", # second char not between A-C
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_gs1_omni():
|
|
bc = 'GS1 DATABAR OMNIDIRECTIONAL'
|
|
|
|
valid_codes = [
|
|
"0123456789123",
|
|
]
|
|
invalid_codes = [
|
|
"01234567891234", # too long
|
|
"012345678912", # too short
|
|
"012345678A1234", # invalid 'A'
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_gs1_trunc():
|
|
bc = 'GS1 DATABAR TRUNCATED' # same as OMNIDIRECTIONAL
|
|
|
|
valid_codes = [
|
|
"0123456789123",
|
|
]
|
|
invalid_codes = [
|
|
"01234567891234", # too long
|
|
"012345678912", # too short
|
|
"012345678A1234", # invalid 'A'
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_gs1_limited():
|
|
bc = 'GS1 DATABAR LIMITED'
|
|
|
|
valid_codes = [
|
|
"0123456789123",
|
|
"0123456789123",
|
|
]
|
|
invalid_codes = [
|
|
"01234567891234", # too long
|
|
"012345678912", # too short
|
|
"012345678A1234", # invalid 'A'
|
|
"02345678912341", # invalid start (should be 01)
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|
|
|
|
|
|
def test_barcode_gs1_expanded():
|
|
bc = 'GS1 DATABAR EXPANDED'
|
|
|
|
valid_codes = [
|
|
"(9A{A20304+-%&06a0B",
|
|
"(1 {C+:$a23-7%",
|
|
"(00000001234567678",
|
|
]
|
|
invalid_codes = [
|
|
"010203040", # missing leading {
|
|
"0" * 256, # too long
|
|
"0{D2354AA", # second char not between A-za-z0-9
|
|
"IT will fail", # first char not between 0-9
|
|
]
|
|
|
|
assert (all([printer.Escpos.check_barcode(bc, code) for code in valid_codes]))
|
|
assert (not any([printer.Escpos.check_barcode(bc, code) for code in invalid_codes]))
|