mirror of
				https://github.com/python-escpos/python-escpos
				synced 2025-10-23 09:30:00 +00:00 
			
		
		
		
	Add test_printer_lp.py
This commit is contained in:
		
							
								
								
									
										168
									
								
								test/test_printers/test_printer_lp.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								test/test_printers/test_printer_lp.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,168 @@
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
#  -*- coding: utf-8 -*-
 | 
			
		||||
"""tests for the LP printer
 | 
			
		||||
 | 
			
		||||
:author: Benito López and the python-escpos developers
 | 
			
		||||
:organization: `python-escpos <https://github.com/python-escpos>`_
 | 
			
		||||
:copyright: Copyright (c) 2023 `python-escpos <https://github.com/python-escpos>`_
 | 
			
		||||
:license: MIT
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import logging
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
import pytest
 | 
			
		||||
 | 
			
		||||
# skip all the tests if the platform is Windows
 | 
			
		||||
pytestmark = pytest.mark.skipif(
 | 
			
		||||
    sys.platform == "win32", reason="skipping non Windows platform specific tests"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_device_not_initialized(lpprinter):
 | 
			
		||||
    """
 | 
			
		||||
    GIVEN a lp printer object
 | 
			
		||||
    WHEN it is not initialized
 | 
			
		||||
    THEN check the device property is False
 | 
			
		||||
    """
 | 
			
		||||
    assert lpprinter._device is False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_open_raise_exception(lpprinter, devicenotfounderror):
 | 
			
		||||
    """
 | 
			
		||||
    GIVEN a lp printer object
 | 
			
		||||
    WHEN open() is set to raise a DeviceNotFoundError on error
 | 
			
		||||
    THEN check the exception is raised
 | 
			
		||||
    """
 | 
			
		||||
    lpprinter.printer_name = "fakeprinter"
 | 
			
		||||
 | 
			
		||||
    with pytest.raises(devicenotfounderror):
 | 
			
		||||
        lpprinter.open(raise_not_found=True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_open_not_raise_exception(lpprinter, caplog):
 | 
			
		||||
    """
 | 
			
		||||
    GIVEN a lp printer object
 | 
			
		||||
    WHEN open() is set to not raise on error but simply cancel
 | 
			
		||||
    THEN check the error is logged and open() canceled
 | 
			
		||||
    """
 | 
			
		||||
    lpprinter.printer_name = "fakeprinter"
 | 
			
		||||
 | 
			
		||||
    with caplog.at_level(logging.ERROR):
 | 
			
		||||
        lpprinter.open(raise_not_found=False)
 | 
			
		||||
 | 
			
		||||
    assert "not available" in caplog.text
 | 
			
		||||
    assert lpprinter.device is None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_open(lpprinter, caplog, mocker):
 | 
			
		||||
    """
 | 
			
		||||
    GIVEN a lp printer object and a mocked connection
 | 
			
		||||
    WHEN a valid connection to a device is opened
 | 
			
		||||
    THEN check the success is logged and the device property is set
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("subprocess.Popen")
 | 
			
		||||
    mocker.patch("escpos.printer.LP.printers", new={"test_printer": "Test"})
 | 
			
		||||
 | 
			
		||||
    lpprinter.printer_name = "test_printer"
 | 
			
		||||
 | 
			
		||||
    with caplog.at_level(logging.INFO):
 | 
			
		||||
        lpprinter.open()
 | 
			
		||||
 | 
			
		||||
    assert "enabled" in caplog.text
 | 
			
		||||
    assert lpprinter.device
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_close_on_reopen(lpprinter, mocker):
 | 
			
		||||
    """
 | 
			
		||||
    GIVEN a lp printer object and a mocked connection
 | 
			
		||||
    WHEN a valid connection to a device is reopened before close
 | 
			
		||||
    THEN check the close method is called if _device
 | 
			
		||||
    """
 | 
			
		||||
    spy = mocker.spy(lpprinter, "close")
 | 
			
		||||
    mocker.patch("subprocess.Popen")
 | 
			
		||||
    mocker.patch("escpos.printer.LP.printers", new={"test_printer": "Test"})
 | 
			
		||||
 | 
			
		||||
    lpprinter.printer_name = "test_printer"
 | 
			
		||||
 | 
			
		||||
    lpprinter.open()
 | 
			
		||||
    assert lpprinter._device
 | 
			
		||||
 | 
			
		||||
    lpprinter.open()
 | 
			
		||||
    spy.assert_called_once_with()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_flush(lpprinter, mocker):
 | 
			
		||||
    """
 | 
			
		||||
    GIVEN a lp printer object and a mocked connection
 | 
			
		||||
    WHEN auto_flush is disabled and flush() issued manually
 | 
			
		||||
    THEN check the flush method is called only one time.
 | 
			
		||||
    """
 | 
			
		||||
    spy = mocker.spy(lpprinter, "flush")
 | 
			
		||||
    mocker.patch("subprocess.Popen")
 | 
			
		||||
    mocker.patch("escpos.printer.LP.printers", new={"test_printer": "Test"})
 | 
			
		||||
 | 
			
		||||
    lpprinter.printer_name = "test_printer"
 | 
			
		||||
    lpprinter.auto_flush = False
 | 
			
		||||
    lpprinter.open()
 | 
			
		||||
    lpprinter.textln("python-escpos")
 | 
			
		||||
    lpprinter.flush()
 | 
			
		||||
 | 
			
		||||
    assert spy.call_count == 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_auto_flush_on_command(lpprinter, mocker):
 | 
			
		||||
    """
 | 
			
		||||
    GIVEN a lp printer object and a mocked connection
 | 
			
		||||
    WHEN auto_flush is enabled and flush() not issued manually
 | 
			
		||||
    THEN check the flush method is called automatically
 | 
			
		||||
    """
 | 
			
		||||
    spy = mocker.spy(lpprinter, "flush")
 | 
			
		||||
    mocker.patch("subprocess.Popen")
 | 
			
		||||
    mocker.patch("escpos.printer.LP.printers", new={"test_printer": "Test"})
 | 
			
		||||
 | 
			
		||||
    lpprinter.printer_name = "test_printer"
 | 
			
		||||
    lpprinter.auto_flush = True
 | 
			
		||||
    lpprinter.open()
 | 
			
		||||
    lpprinter.textln("python-escpos")
 | 
			
		||||
    lpprinter.textln("test")
 | 
			
		||||
 | 
			
		||||
    assert spy.call_count > 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_auto_flush_on_close(lpprinter, mocker, caplog, capsys):
 | 
			
		||||
    """
 | 
			
		||||
    GIVEN a lp printer object and a mocked connection
 | 
			
		||||
    WHEN auto_flush is disabled and flush() not issued manually
 | 
			
		||||
    THEN check the flush method is called automatically on close
 | 
			
		||||
    """
 | 
			
		||||
    spy = mocker.spy(lpprinter, "flush")
 | 
			
		||||
    mocker.patch("subprocess.Popen")
 | 
			
		||||
    mocker.patch("escpos.printer.LP.printers", new={"test_printer": "Test"})
 | 
			
		||||
 | 
			
		||||
    lpprinter.printer_name = "test_printer"
 | 
			
		||||
    lpprinter.auto_flush = False
 | 
			
		||||
    lpprinter.open()
 | 
			
		||||
    lpprinter.textln("python-escpos")
 | 
			
		||||
    lpprinter.close()
 | 
			
		||||
 | 
			
		||||
    assert spy.call_count == 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_close(lpprinter, caplog, mocker):
 | 
			
		||||
    """
 | 
			
		||||
    GIVEN a lp printer object and a mocked connection
 | 
			
		||||
    WHEN a connection is opened and closed
 | 
			
		||||
    THEN check the closing is logged and the device property is False
 | 
			
		||||
    """
 | 
			
		||||
    mocker.patch("subprocess.Popen")
 | 
			
		||||
    mocker.patch("escpos.printer.LP.printers", new={"test_printer": "Test"})
 | 
			
		||||
 | 
			
		||||
    lpprinter.printer_name = "test_printer"
 | 
			
		||||
    lpprinter.open()
 | 
			
		||||
 | 
			
		||||
    with caplog.at_level(logging.INFO):
 | 
			
		||||
        lpprinter.close()
 | 
			
		||||
 | 
			
		||||
    assert "Closing" in caplog.text
 | 
			
		||||
    assert lpprinter._device is False
 | 
			
		||||
		Reference in New Issue
	
	Block a user