#!/usr/bin/python # -*- coding: utf-8 -*- """tests for the magic encode module :author: `Patrick Kanzler `_ :organization: `python-escpos `_ :copyright: Copyright (c) 2016 `python-escpos `_ :license: MIT """ import pytest from nose.tools import raises, assert_raises from hypothesis import given, example import hypothesis.strategies as st from escpos.magicencode import MagicEncode, Encoder from escpos.katakana import encode_katakana from escpos.exceptions import CharCodeError, Error class TestEncoder: """ Tests the single encoders. """ def test_can_encode(self): assert not Encoder({'CP437': 1}).can_encode('CP437', u'€') assert Encoder({'CP437': 1}).can_encode('CP437', u'á') assert not Encoder({'foobar': 1}).can_encode('foobar', 'a') def test_find_suitable_encoding(self): assert not Encoder({'CP437': 1}).find_suitable_encoding(u'€') assert Encoder({'CP858': 1}).find_suitable_encoding(u'€') == 'CP858' @raises(ValueError) def test_get_encoding(self): Encoder({}).get_encoding_name('latin1') class TestMagicEncode: """ Tests the magic encode functionality. """ class TestInit: """ Test initialization. """ def test_disabled_requires_encoding(self, driver): """ Test that disabled without encoder raises an error. :param driver: """ with pytest.raises(Error): MagicEncode(driver, disabled=True) class TestWriteWithEncoding: def test_init_from_none(self, driver): encode = MagicEncode(driver, encoding=None) encode.write_with_encoding('CP858', '€ ist teuro.') assert driver.output == b'\x1bt\x13\xd5 ist teuro.' def test_change_from_another(self, driver): encode = MagicEncode(driver, encoding='CP437') encode.write_with_encoding('CP858', '€ ist teuro.') assert driver.output == b'\x1bt\x13\xd5 ist teuro.' def test_no_change(self, driver): encode = MagicEncode(driver, encoding='CP858') encode.write_with_encoding('CP858', '€ ist teuro.') assert driver.output == b'\xd5 ist teuro.' class TestWrite: def test_write(self, driver): encode = MagicEncode(driver) encode.write('€ ist teuro.') assert driver.output == b'\x1bt\x0f\xa4 ist teuro.' def test_write_disabled(self, driver): encode = MagicEncode(driver, encoding='CP437', disabled=True) encode.write('€ ist teuro.') assert driver.output == b'? ist teuro.' def test_write_no_codepage(self, driver): encode = MagicEncode( driver, defaultsymbol="_", encoder=Encoder({'CP437': 1}), encoding='CP437') encode.write(u'€ ist teuro.') assert driver.output == b'_ ist teuro.' class TestForceEncoding: def test(self, driver): encode = MagicEncode(driver) encode.force_encoding('CP437') assert driver.output == b'\x1bt\x00' encode.write('€ ist teuro.') assert driver.output == b'\x1bt\x00? ist teuro.' try: import jaconv except ImportError: jaconv = None @pytest.mark.skipif(not jaconv, reason="jaconv not installed") class TestKatakana: @given(st.text()) @example("カタカナ") @example("あいうえお") @example("ハンカクカタカナ") def test_accept(self, text): encode_katakana(text) def test_result(self): assert encode_katakana('カタカナ') == b'\xb6\xc0\xb6\xc5' assert encode_katakana("あいうえお") == b'\xb1\xb2\xb3\xb4\xb5'