mirror of
https://github.com/OCA/report-print-send.git
synced 2025-02-16 07:11:31 +02:00
1191 lines
36 KiB
Python
1191 lines
36 KiB
Python
# Copyright 2016 LasLabs Inc.
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
import logging
|
|
|
|
import mock
|
|
|
|
from odoo import exceptions
|
|
from odoo.tests.common import TransactionCase
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
try:
|
|
import zpl2
|
|
except ImportError:
|
|
_logger.debug("Cannot `import zpl2`.")
|
|
|
|
model = "odoo.addons.base_report_to_printer.models.printing_server"
|
|
|
|
|
|
class TestPrintingLabelZpl2(TransactionCase):
|
|
def setUp(self):
|
|
super(TestPrintingLabelZpl2, self).setUp()
|
|
self.Model = self.env["printing.label.zpl2"]
|
|
self.ComponentModel = self.env["printing.label.zpl2.component"]
|
|
self.server = self.env["printing.server"].create({})
|
|
self.printer = self.env["printing.printer"].create(
|
|
{
|
|
"name": "Printer",
|
|
"server_id": self.server.id,
|
|
"system_name": "Sys Name",
|
|
"default": True,
|
|
"status": "unknown",
|
|
"status_message": "Msg",
|
|
"model": "res.users",
|
|
"location": "Location",
|
|
"uri": "URI",
|
|
}
|
|
)
|
|
self.label_vals = {
|
|
"name": "ZPL II Label",
|
|
"model_id": self.env.ref(
|
|
"base_report_to_printer.model_printing_printer"
|
|
).id,
|
|
}
|
|
self.component_vals = {"name": "ZPL II Label Component"}
|
|
|
|
def new_label(self, vals=None):
|
|
values = self.label_vals.copy()
|
|
if vals:
|
|
values.update(vals)
|
|
return self.Model.create(values)
|
|
|
|
def new_component(self, vals=None):
|
|
values = self.component_vals.copy()
|
|
if vals:
|
|
values.update(vals)
|
|
return self.ComponentModel.create(values)
|
|
|
|
def test_print_on_bad_model(self):
|
|
""" Check that printing on the bad model raises an exception """
|
|
label = self.new_label()
|
|
with self.assertRaises(exceptions.UserError):
|
|
label.print_label(self.printer, label)
|
|
|
|
@mock.patch("%s.cups" % model)
|
|
def test_print_empty_label(self, cups):
|
|
""" Check that printing an empty label works """
|
|
label = self.new_label()
|
|
label.print_label(self.printer, self.printer)
|
|
cups.Connection().printFile.assert_called_once()
|
|
|
|
def test_empty_label_contents(self):
|
|
""" Check contents of an empty label """
|
|
label = self.new_label()
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ",
|
|
)
|
|
|
|
def test_sublabel_label_contents(self):
|
|
""" Check contents of a sublabel label component """
|
|
sublabel = self.new_label({"name": "Sublabel"})
|
|
data = "Some text"
|
|
self.new_component({"label_id": sublabel.id, "data": '"' + data + '"'})
|
|
label = self.new_label()
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"name": "Sublabel contents",
|
|
"component_type": "sublabel",
|
|
"sublabel_id": sublabel.id,
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Sublabel component position
|
|
# Position 30x30 because the default values are :
|
|
# - 10x10 for the sublabel component in the main label
|
|
# - 10x10 for the sublabel in the sublabel component
|
|
# - 10x10 for the component in the sublabel
|
|
"^FO30,30"
|
|
# Sublabel component format
|
|
"^A0N,10,10"
|
|
# Sublabel component contents
|
|
"^FD{contents}"
|
|
# Sublabel component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_repeatable_component_label_fixed_contents(self):
|
|
"""Check contents of a repeatable label component
|
|
|
|
Check that a fixed value is repeated each time
|
|
"""
|
|
label = self.new_label(
|
|
{"model_id": self.env.ref("printer_zpl2.model_printing_label_zpl2").id}
|
|
)
|
|
data = "Some text"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"data": '"' + data + '"',
|
|
"repeat": True,
|
|
"repeat_count": 3,
|
|
"repeat_offset_y": 15,
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(label).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# First component position
|
|
"^FO10,10"
|
|
# First component format
|
|
"^A0N,10,10"
|
|
# First component contents
|
|
"^FD{contents}"
|
|
# First component end
|
|
"^FS\n"
|
|
# Second component position
|
|
"^FO10,25"
|
|
# Second component format
|
|
"^A0N,10,10"
|
|
# Second component contents
|
|
"^FD{contents}"
|
|
# Second component end
|
|
"^FS\n"
|
|
# Third component position
|
|
"^FO10,40"
|
|
# Third component format
|
|
"^A0N,10,10"
|
|
# Third component contents
|
|
"^FD{contents}"
|
|
# Third component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_repeatable_component_label_iterable_contents(self):
|
|
"""Check contents of a repeatable label component
|
|
|
|
Check that an iterable contents (list, tuple, etc.) is browsed
|
|
If the repeat_count is higher than the value length, all values are
|
|
displayed
|
|
"""
|
|
label = self.new_label(
|
|
{"model_id": self.env.ref("printer_zpl2.model_printing_label_zpl2").id}
|
|
)
|
|
data = ["First text", "Second text", "Third text"]
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"data": str(data),
|
|
"repeat": True,
|
|
"repeat_offset": 1,
|
|
"repeat_count": 3,
|
|
"repeat_offset_y": 15,
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(label).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# First component position
|
|
"^FO10,10"
|
|
# First component format
|
|
"^A0N,10,10"
|
|
# First component contents
|
|
"^FD{contents[1]}"
|
|
# First component end
|
|
"^FS\n"
|
|
# Second component position
|
|
"^FO10,25"
|
|
# Second component format
|
|
"^A0N,10,10"
|
|
# Second component contents
|
|
"^FD{contents[2]}"
|
|
# Second component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_repeatable_component_label_iterable_offset(self):
|
|
"""Check contents of a repeatable label component with an offset
|
|
|
|
Check that an iterable contents (list, tuple, etc.) is browsed
|
|
If the repeat_count is higher than the value length, all values are
|
|
displayed
|
|
"""
|
|
label = self.new_label(
|
|
{"model_id": self.env.ref("printer_zpl2.model_printing_label_zpl2").id}
|
|
)
|
|
data = ["Text {value}".format(value=ind) for ind in range(20)]
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"data": str(data),
|
|
"repeat": True,
|
|
"repeat_offset": 10,
|
|
"repeat_count": 3,
|
|
"repeat_offset_y": 15,
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(label).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# First component position
|
|
"^FO10,10"
|
|
# First component format
|
|
"^A0N,10,10"
|
|
# First component contents
|
|
"^FD{contents[10]}"
|
|
# First component end
|
|
"^FS\n"
|
|
# Second component position
|
|
"^FO10,25"
|
|
# Second component format
|
|
"^A0N,10,10"
|
|
# Second component contents
|
|
"^FD{contents[11]}"
|
|
# Second component end
|
|
"^FS\n"
|
|
# Third component position
|
|
"^FO10,40"
|
|
# Third component format
|
|
"^A0N,10,10"
|
|
# Third component contents
|
|
"^FD{contents[12]}"
|
|
# Third component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_repeatable_sublabel_contents(self):
|
|
""" Check contents of a repeatable sublabel label component """
|
|
sublabel = self.new_label(
|
|
{
|
|
"name": "Sublabel",
|
|
"model_id": self.env.ref(
|
|
"printer_zpl2.model_printing_label_zpl2_component"
|
|
).id,
|
|
}
|
|
)
|
|
self.new_component(
|
|
{"label_id": sublabel.id, "name": "Components name", "data": "object.name"}
|
|
)
|
|
self.new_component(
|
|
{
|
|
"label_id": sublabel.id,
|
|
"name": "Components data",
|
|
"data": "object.data",
|
|
"origin_x": 50,
|
|
}
|
|
)
|
|
label = self.new_label(
|
|
{"model_id": self.env.ref("printer_zpl2.model_printing_label_zpl2").id}
|
|
)
|
|
self.new_component(
|
|
{"label_id": label.id, "name": "Label name", "data": "object.name"}
|
|
)
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"name": "Label components",
|
|
"component_type": "sublabel",
|
|
"origin_x": 15,
|
|
"origin_y": 30,
|
|
"data": "object.component_ids",
|
|
"sublabel_id": sublabel.id,
|
|
"repeat": True,
|
|
"repeat_count": 3,
|
|
"repeat_offset_y": 15,
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(label).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Label name component position
|
|
"^FO10,10"
|
|
# Label name component format
|
|
"^A0N,10,10"
|
|
# Label name component contents
|
|
"^FD{label.name}"
|
|
# Label name component end
|
|
"^FS\n"
|
|
# First component name component position
|
|
"^FO35,50"
|
|
# First component name component format
|
|
"^A0N,10,10"
|
|
# First component name component contents
|
|
"^FD{label.component_ids[0].name}"
|
|
# First component name component end
|
|
"^FS\n"
|
|
# First component data component position
|
|
"^FO75,50"
|
|
# First component data component format
|
|
"^A0N,10,10"
|
|
# First component data component contents
|
|
"^FD{label.component_ids[0].data}"
|
|
# First component data component end
|
|
"^FS\n"
|
|
# Second component name component position
|
|
"^FO35,65"
|
|
# Second component name component format
|
|
"^A0N,10,10"
|
|
# Second component name component contents
|
|
"^FD{label.component_ids[1].name}"
|
|
# Second component name component end
|
|
"^FS\n"
|
|
# Second component data component position
|
|
"^FO75,65"
|
|
# Second component data component format
|
|
"^A0N,10,10"
|
|
# Second component data component contents
|
|
"^FD{label.component_ids[1].data}"
|
|
# Second component data component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(label=label),
|
|
)
|
|
|
|
def test_text_label_contents(self):
|
|
""" Check contents of a text label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component({"label_id": label.id, "data": '"%s"' % data})
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^A0N,10,10"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_reversed_text_label_contents(self):
|
|
""" Check contents of a text label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{"label_id": label.id, "data": '"' + data + '"', "reverse_print": True}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^A0N,10,10"
|
|
# Reverse print argument
|
|
"^FR"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_block_text_label_contents(self):
|
|
""" Check contents of a text label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{"label_id": label.id, "data": '"' + data + '"', "in_block": True}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^A0N,10,10"
|
|
# Block definition
|
|
"^FB0,1,0,L,0"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_rectangle_label_contents(self):
|
|
""" Check contents of a rectangle label """
|
|
label = self.new_label()
|
|
self.new_component({"label_id": label.id, "component_type": "rectangle"})
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^GB1,1,1,B,0"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ",
|
|
)
|
|
|
|
def test_diagonal_line_label_contents(self):
|
|
""" Check contents of a diagonal line label """
|
|
label = self.new_label()
|
|
self.new_component({"label_id": label.id, "component_type": "diagonal"})
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^GD3,3,1,B,L"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ",
|
|
)
|
|
|
|
def test_circle_label_contents(self):
|
|
""" Check contents of a circle label """
|
|
label = self.new_label()
|
|
self.new_component({"label_id": label.id, "component_type": "circle"})
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^GC3,2,B"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ",
|
|
)
|
|
|
|
def test_code11_barcode_label_contents(self):
|
|
""" Check contents of a code 11 barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "code_11",
|
|
"data": '"' + data + '"',
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^B1N,N,0,N,N"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_2of5_barcode_label_contents(self):
|
|
""" Check contents of a interleaved 2 of 5 barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "interleaved_2_of_5",
|
|
"data": '"' + data + '"',
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^B2N,0,N,N,N"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_code39_barcode_label_contents(self):
|
|
""" Check contents of a code 39 barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "code_39",
|
|
"data": '"' + data + '"',
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^B3N,N,0,N,N"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_code49_barcode_label_contents(self):
|
|
""" Check contents of a code 49 barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "code_49",
|
|
"data": '"' + data + '"',
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^B4N,0,N"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_code49_barcode_label_contents_line(self):
|
|
""" Check contents of a code 49 barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "code_49",
|
|
"data": '"' + data + '"',
|
|
"interpretation_line": True,
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^B4N,0,B"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_code49_barcode_label_contents_with_above(self):
|
|
"""Check contents of a code 49 barconde label
|
|
with interpretation line above
|
|
"""
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "code_49",
|
|
"data": '"' + data + '"',
|
|
"interpretation_line": True,
|
|
"interpretation_line_above": True,
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^B4N,0,A"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_pdf417_barcode_label_contents(self):
|
|
""" Check contents of a pdf417 barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{"label_id": label.id, "component_type": "pdf417", "data": '"' + data + '"'}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^B7N,0,0,0,0,N"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_ean8_barcode_label_contents(self):
|
|
""" Check contents of a ean-8 barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{"label_id": label.id, "component_type": "ean-8", "data": '"' + data + '"'}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^B8N,0,N,N"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_upce_barcode_label_contents(self):
|
|
""" Check contents of a upc-e barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{"label_id": label.id, "component_type": "upc-e", "data": '"' + data + '"'}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^B9N,0,N,N,N"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_code128_barcode_label_contents(self):
|
|
""" Check contents of a code 128 barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "code_128",
|
|
"data": '"' + data + '"',
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^BCN,0,N,N,N"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_ean13_barcode_label_contents(self):
|
|
""" Check contents of a ean-13 barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{"label_id": label.id, "component_type": "ean-13", "data": '"' + data + '"'}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^BEN,0,N,N"
|
|
# Component contents
|
|
"^FD{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_qrcode_barcode_label_contents(self):
|
|
""" Check contents of a qr code barcode label """
|
|
label = self.new_label()
|
|
data = "Some text"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "qr_code",
|
|
"data": '"' + data + '"',
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
# Label start
|
|
"^XA\n"
|
|
# Print width
|
|
"^PW480\n"
|
|
# UTF-8 encoding
|
|
"^CI28\n"
|
|
# Label position
|
|
"^LH10,10\n"
|
|
# Barcode default format
|
|
"^BY2,3.0"
|
|
# Component position
|
|
"^FO10,10"
|
|
# Component format
|
|
"^BQN,2,1,Q,7"
|
|
# Component contents
|
|
"^FDQA,{contents}"
|
|
# Component end
|
|
"^FS\n"
|
|
# Recall last saved parameters
|
|
"^JUR\n"
|
|
# Label end
|
|
"^XZ".format(contents=data),
|
|
)
|
|
|
|
def test_graphic_label_contents_blank(self):
|
|
""" Check contents of a image label """
|
|
label = self.new_label()
|
|
data = "R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "graphic",
|
|
"data": '"' + data + '"',
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
"^XA\n"
|
|
"^PW480\n"
|
|
"^CI28\n"
|
|
"^LH10,10\n"
|
|
"^FO10,10^GFA,1.0,1.0,1.0,b'00'^FS\n"
|
|
"^JUR\n"
|
|
"^XZ",
|
|
)
|
|
|
|
def test_graphic_label_contents_blank_rotated(self):
|
|
""" Check contents of image rotated label """
|
|
label = self.new_label()
|
|
data = "R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "graphic",
|
|
"data": '"' + data + '"',
|
|
"height": 10,
|
|
"width": 10,
|
|
"reverse_print": 1,
|
|
"orientation": zpl2.ORIENTATION_ROTATED,
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
"^XA\n"
|
|
"^PW480\n"
|
|
"^CI28\n"
|
|
"^LH10,10\n"
|
|
"^FO10,10^GFA,20.0,20.0,2.0,"
|
|
"b'FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0'^FS\n"
|
|
"^JUR\n"
|
|
"^XZ",
|
|
)
|
|
|
|
def test_graphic_label_contents_blank_inverted(self):
|
|
""" Check contents of a image inverted label """
|
|
label = self.new_label()
|
|
data = "R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "graphic",
|
|
"data": '"' + data + '"',
|
|
"orientation": zpl2.ORIENTATION_INVERTED,
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
"^XA\n"
|
|
"^PW480\n"
|
|
"^CI28\n"
|
|
"^LH10,10\n"
|
|
"^FO10,10^GFA,1.0,1.0,1.0,b'00'^FS\n"
|
|
"^JUR\n"
|
|
"^XZ",
|
|
)
|
|
|
|
def test_graphic_label_contents_blank_bottom(self):
|
|
""" Check contents of a image bottom label """
|
|
label = self.new_label()
|
|
data = "R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "graphic",
|
|
"data": '"' + data + '"',
|
|
"orientation": zpl2.ORIENTATION_BOTTOM_UP,
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
"^XA\n"
|
|
"^PW480\n"
|
|
"^CI28\n"
|
|
"^LH10,10\n"
|
|
"^FO10,10^GFA,1.0,1.0,1.0,b'00'^FS\n"
|
|
"^JUR\n"
|
|
"^XZ",
|
|
)
|
|
|
|
def test_zpl2_raw_contents_blank(self):
|
|
""" Check contents of a image label """
|
|
label = self.new_label()
|
|
data = "^FO50,50^GB100,100,100^FS"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "zpl2_raw",
|
|
"data": '"' + data + '"',
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents,
|
|
"^XA\n"
|
|
"^PW480\n"
|
|
"^CI28\n"
|
|
"^LH10,10\n"
|
|
"^FO50,50^GB100,100,100^FS\n"
|
|
"^JUR\n"
|
|
"^XZ",
|
|
)
|
|
|
|
def test_zpl2_component_not_show(self):
|
|
""" Check to don't show no things """
|
|
label = self.new_label()
|
|
data = "component_not_show"
|
|
self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "zpl2_raw",
|
|
"data": '"' + data + '"',
|
|
}
|
|
)
|
|
contents = label._generate_zpl2_data(self.printer).decode("utf-8")
|
|
self.assertEqual(
|
|
contents, "^XA\n" "^PW480\n" "^CI28\n" "^LH10,10\n" "^JUR\n" "^XZ"
|
|
)
|
|
|
|
def test_zpl2_component_quick_move(self):
|
|
""" Check component quick move """
|
|
label = self.new_label()
|
|
component = self.new_component(
|
|
{
|
|
"label_id": label.id,
|
|
"component_type": "zpl2_raw",
|
|
"data": '""',
|
|
"origin_x": 20,
|
|
"origin_y": 30,
|
|
}
|
|
)
|
|
component.action_plus_origin_x()
|
|
self.assertEqual(30, component.origin_x)
|
|
component.action_minus_origin_x()
|
|
self.assertEqual(20, component.origin_x)
|
|
component.action_plus_origin_y()
|
|
self.assertEqual(40, component.origin_y)
|
|
component.action_minus_origin_y()
|
|
self.assertEqual(30, component.origin_y)
|