def test_encode_iso_i3(): # ISO/IEC 18004:2015(E) - page 96 # 01234567 as M2-L symbol qr = encoder.encode('01234567', error='l', version='m2', mask=1, micro=True, boost_error=False) assert consts.ERROR_LEVEL_L == qr.error assert consts.VERSION_M2 == qr.version assert 1 == qr.mask, 'Wrong mask, got: {0}'.format(qr.mask) qr = encoder.encode('01234567', error='l', version=None, mask=1, micro=True, boost_error=False) assert consts.ERROR_LEVEL_L == qr.error assert consts.VERSION_M2 == qr.version assert 1 == qr.mask, 'Wrong mask, got: {0}'.format(qr.mask) ref_matrix = read_matrix('iso-i3') assert ref_matrix == qr.matrix
def test_encode_iso_i3(): # ISO/IEC 18004:2015(E) - page 96 # 01234567 as M2-L symbol qr = encoder.encode('01234567', error='l', version='m2', mask=1, micro=True, boost_error=False) assert consts.ERROR_LEVEL_L == qr.error assert consts.VERSION_M2 == qr.version assert 1 == qr.mask, 'Wrong mask, got: {0}'.format(qr.mask) qr = encoder.encode('01234567', error='l', version=None, mask=1, micro=True, boost_error=False) assert consts.ERROR_LEVEL_L == qr.error assert consts.VERSION_M2 == qr.version assert 1 == qr.mask, 'Wrong mask, got: {0}'.format(qr.mask) ref_matrix = read_matrix('iso-i3') assert ref_matrix == qr.matrix
def test_detect_hanzi_encoder2(): # detect as utf8 qr = encoder.encode('汉字') assert 1 == len(qr.segments) segment = qr.segments[0] assert consts.MODE_BYTE == segment.mode assert 6 == segment.char_count
def test_no_darkmodule_mqr(): # Micro QR Codes don't have a dark module. qr = encoder.encode('A', micro=True) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=0): res.extend([v == utils.TYPE_DARKMODULE for v in row]) assert True not in res
def test_timing_dark_qr(): qr = encoder.encode('A', micro=False) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x1)[v == utils.TYPE_TIMING_DARK] for v in row])) expected = read_matrix('v1-timing-dark') assert expected == res
def test_no_darkmodule_mqr(): # Micro QR Codes don't have a dark module. qr = encoder.encode('A', micro=True) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=0): res.extend([v == consts.TYPE_DARKMODULE for v in row]) assert True not in res
def test_timing_light_mqr(): qr = encoder.encode('A', micro=True) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x0)[v == utils.TYPE_TIMING_LIGHT] for v in row])) expected = read_matrix('m2-timing-light') assert expected == res
def test_version_dark_and_light(): qr = encoder.encode('A', version=7) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x1)[v in (consts.TYPE_VERSION_LIGHT, consts.TYPE_VERSION_DARK)] for v in row])) expected = read_matrix('v7-version-dark-and-light') assert expected == res
def test_version_no_version(): # The version information is not available in QR Codes < 7 qr = encoder.encode('A', version=6) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=0): res.extend([v in (consts.TYPE_VERSION_LIGHT, consts.TYPE_VERSION_DARK) for v in row]) assert True not in res
def test_alignment_dark_and_light(): qr = encoder.encode('A', version=12) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x1)[v in (consts.TYPE_ALIGNMENT_PATTERN_LIGHT, consts.TYPE_ALIGNMENT_PATTERN_DARK)] for v in row])) expected = read_matrix('v12-alignment-dark-and-light') assert expected == res
def test_timing_light_mqr(): qr = encoder.encode('A', micro=True) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x0)[v == consts.TYPE_TIMING_LIGHT] for v in row])) expected = read_matrix('m2-timing-light') assert expected == res
def test_timing_dark_qr(): qr = encoder.encode('A', micro=False) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x1)[v == consts.TYPE_TIMING_DARK] for v in row])) expected = read_matrix('v1-timing-dark') assert expected == res
def test_format_dark_and_light_qr(): qr = encoder.encode('A', micro=False) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x1)[v in (consts.TYPE_FORMAT_DARK, consts.TYPE_FORMAT_LIGHT)] for v in row])) expected = read_matrix('v1-format-dark-and-light') assert expected == res
def test_separator_mqr(): qr = encoder.encode('A', micro=True) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x0)[v == consts.TYPE_SEPARATOR] for v in row])) expected = read_matrix('m2-separator') assert expected == res
def test_quietzone_default_mqr(): qr = encoder.encode('A', micro=True) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version): res.append(bytearray([(0x1, 0x0)[v == utils.TYPE_QUIET_ZONE] for v in row])) expected = read_matrix('m2-quietzone-2') assert expected == res
def test_finder_pattern_dark_and_light_mqr(): qr = encoder.encode('A', micro=True) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x1)[v in (utils.TYPE_FINDER_PATTERN_DARK, utils.TYPE_FINDER_PATTERN_LIGHT)] for v in row])) expected = read_matrix('m2-finder-dark-and-light') assert expected == res
def test_alignment_dark_and_light(): qr = encoder.encode('A', version=12) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x1)[v in (utils.TYPE_ALIGNMENT_PATTERN_LIGHT, utils.TYPE_ALIGNMENT_PATTERN_DARK)] for v in row])) expected = read_matrix('v12-alignment-dark-and-light') assert expected == res
def test_quietzone_default_mqr(): qr = encoder.encode('A', micro=True) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version): res.append(bytearray([(0x1, 0x0)[v == consts.TYPE_QUIET_ZONE] for v in row])) expected = read_matrix('m2-quietzone-2') assert expected == res
def test_version_no_version(): # The version information is not available in QR Codes < 7 qr = encoder.encode('A', version=6) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=0): res.extend([v in (utils.TYPE_VERSION_LIGHT, utils.TYPE_VERSION_DARK) for v in row]) assert True not in res
def test_separator_mqr(): qr = encoder.encode('A', micro=True) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x0)[v == utils.TYPE_SEPARATOR] for v in row])) expected = read_matrix('m2-separator') assert expected == res
def test_format_dark_and_light_qr(): qr = encoder.encode('A', micro=False) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x1)[v in (utils.TYPE_FORMAT_DARK, utils.TYPE_FORMAT_LIGHT)] for v in row])) expected = read_matrix('v1-format-dark-and-light') assert expected == res
def test_finder_pattern_dark_light_qr(): qr = encoder.encode('A', micro=False) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x0)[v == utils.TYPE_FINDER_PATTERN_LIGHT] for v in row])) expected = read_matrix('v1-finder-light') assert expected == res
def test_finder_pattern_dark_and_light_mqr(): qr = encoder.encode('A', micro=True) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x1)[v in (consts.TYPE_FINDER_PATTERN_DARK, consts.TYPE_FINDER_PATTERN_LIGHT)] for v in row])) expected = read_matrix('m2-finder-dark-and-light') assert expected == res
def test_finder_pattern_dark_light_qr(): qr = encoder.encode('A', micro=False) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x0)[v == consts.TYPE_FINDER_PATTERN_LIGHT] for v in row])) expected = read_matrix('v1-finder-light') assert expected == res
def test_version_dark_and_light(): qr = encoder.encode('A', version=7) res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=0): res.append(bytearray([(0x2, 0x1)[v in (utils.TYPE_VERSION_LIGHT, utils.TYPE_VERSION_DARK)] for v in row])) expected = read_matrix('v7-version-dark-and-light') assert expected == res
def test_encode_kanji_byte2(): qr = encoder.encode('漢字'.encode(consts.KANJI_ENCODING), encoding=consts.KANJI_ENCODING) assert 1 == len(qr.segments) segment = qr.segments[0] assert consts.MODE_KANJI == segment.mode assert 2 == segment.char_count
def test_encode_iso_i2(): # ISO/IEC 18004:2015(E) - page 94 # 01234567 as 1-M symbol #TODO: Without the mask param Segno chooses mask 3 which seems to be correct # Mask 2 is IMO an error in the standard qr = encoder.encode('01234567', error='m', version=1, mask=2, micro=False, boost_error=False) assert consts.ERROR_LEVEL_M == qr.error assert 1 == qr.version assert 2 == qr.mask, 'Wrong mask, got: {0}'.format(qr.mask) qr = encoder.encode('01234567', error='m', mask=2, micro=False, boost_error=False) assert consts.ERROR_LEVEL_M == qr.error assert 1 == qr.version assert 2 == qr.mask, 'Wrong mask, got: {0}'.format(qr.mask) ref_matrix = read_matrix('iso-i2') assert ref_matrix == qr.matrix
def test_convert_to_boolean(): qr = encoder.encode('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', error='m', mask=4, boost_error=False) res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version): res.append(bytearray([bool(v >> 8) for v in row])) expected = read_matrix('iso-fig-29') assert expected == res
def test_encode_iso_i2(): # ISO/IEC 18004:2015(E) - page 94 # 01234567 as 1-M symbol #TODO: Without the mask param Segno chooses mask 3 which seems to be correct # Mask 2 is IMO an error in the standard qr = encoder.encode('01234567', error='m', version=1, mask=2, micro=False, boost_error=False) assert consts.ERROR_LEVEL_M == qr.error assert 1 == qr.version assert 2 == qr.mask, 'Wrong mask, got: {0}'.format(qr.mask) qr = encoder.encode('01234567', error='m', mask=2, micro=False, boost_error=False) assert consts.ERROR_LEVEL_M == qr.error assert 1 == qr.version assert 2 == qr.mask, 'Wrong mask, got: {0}'.format(qr.mask) ref_matrix = read_matrix('iso-i2') assert ref_matrix == qr.matrix
def test_quietzone_custom_qr(): qr = encoder.encode('A', micro=False) border = 1 res = [] for row in utils.matrix_iter_verbose(qr.matrix, qr.version, border=border): res.append(bytearray([(0x2, 0x0)[v == consts.TYPE_QUIET_ZONE] for v in row])) expected = read_matrix('v1-quietzone-1') assert expected == res
def test_quietzone_custom_qr(): qr = encoder.encode('A', micro=False) border = 1 res = [] for row in utils.matrix_iter_detail(qr.matrix, qr.version, border=border): res.append(bytearray([(0x2, 0x0)[v == utils.TYPE_QUIET_ZONE] for v in row])) expected = read_matrix('v1-quietzone-1') assert expected == res
def test_encode_iso_fig29(): # ISO/IEC 18004:2015(E) - page 60 # ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ #TODO: If mask is None, Segno chooses mask 3, but the figure uses mask 4... qr = encoder.encode('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', error='m', mask=4, boost_error=False) assert qr.mask == 4 ref_matrix = read_matrix('iso-fig-29') assert ref_matrix == qr.matrix
def test_encode_iso_fig29(): # ISO/IEC 18004:2015(E) - page 60 # ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ #TODO: If mask is None, Segno chooses mask 3, but the figure uses mask 4... qr = encoder.encode('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', error='m', mask=4, boost_error=False) assert qr.mask == 4 ref_matrix = read_matrix('iso-fig-29') assert ref_matrix == qr.matrix
def test_version_as_str(): qr = encoder.encode('test', version='1', error=None, mode=None, mask=None, eci=None, micro=None, encoding=None) assert 1 == qr.version
def test_encode_iso_fig1(): # ISO/IEC 18004:2015(E) - page 7 # 'QR Code Symbol' as 1-M symbol qr = encoder.encode('QR Code Symbol', error='M', mask=None, micro=False, boost_error=False) assert consts.ERROR_LEVEL_M == qr.error assert 1 == qr.version assert 5 == qr.mask, 'Wrong mask, got: {0}'.format(qr.mask) ref_matrix = read_matrix('iso-fig-1') assert ref_matrix == qr.matrix
def test_encode_iso_fig1(): # ISO/IEC 18004:2015(E) - page 7 # 'QR Code Symbol' as 1-M symbol qr = encoder.encode('QR Code Symbol', error='M', mask=None, micro=False, boost_error=False) assert consts.ERROR_LEVEL_M == qr.error assert 1 == qr.version assert 5 == qr.mask, 'Wrong mask, got: {0}'.format(qr.mask) ref_matrix = read_matrix('iso-fig-1') assert ref_matrix == qr.matrix
def test_detect_kanji_encoder2(): qr = encoder.encode('漢字') assert 1 == len(qr.segments) segment = qr.segments[0] assert consts.MODE_KANJI == segment.mode assert 2 == segment.char_count
def test_version_as_str(): qr = encoder.encode('test', version='1', error=None, mode=None, mask=None, eci=None, micro=None, encoding=None) assert 1 == qr.version
def test_kanji_bytes(): qr = encoder.encode('続きを読む'.encode(consts.KANJI_ENCODING)) assert 1 == len(qr.segments) segment = qr.segments[0] assert consts.MODE_KANJI == segment.mode assert 5 == segment.char_count
def test_issue_4_explicit_error2(): qr = encoder.encode(1, error='m') assert consts.VERSION_M2 == qr.version assert consts.ERROR_LEVEL_M == qr.error
def test_issue_4_explicit_error(): qr = encoder.encode(1, error=None) assert consts.VERSION_M1 == qr.version assert qr.error is None
def test_issue_4(): qr = encoder.encode(0) assert consts.VERSION_M1 == qr.version assert qr.error is None
def test_hanzi_bytes(): qr = encoder.encode('书读百遍其义自现'.encode(consts.HANZI_ENCODING), mode='hanzi') assert 1 == len(qr.segments) segment = qr.segments[0] assert consts.MODE_HANZI == segment.mode assert 8 == segment.char_count
def test_issue_4_autodetect_micro(): qr = encoder.encode(1) assert consts.VERSION_M1 == qr.version assert qr.error is None
def test_force_hanzi_encoder(): qr = encoder.encode('书读百遍其义自现', mode='hanzi') assert 1 == len(qr.segments) segment = qr.segments[0] assert consts.MODE_HANZI == segment.mode assert 8 == segment.char_count
def test_issue_4_explicit_error(): qr = encoder.encode(1, error=None) assert consts.VERSION_M1 == qr.version assert qr.error is None
def test_issue_4_autodetect_micro(): qr = encoder.encode(1) assert consts.VERSION_M1 == qr.version assert qr.error is None
def test_issue_4(): qr = encoder.encode(0) assert consts.VERSION_M1 == qr.version assert qr.error is None
def test_issue_4_explicit_error2(): qr = encoder.encode(1, error='m') assert consts.VERSION_M2 == qr.version assert consts.ERROR_LEVEL_M == qr.error
def test_default_utf8_encoder(): qr = encoder.encode('书读百遍其义自现') assert 1 == len(qr.segments) segment = qr.segments[0] assert consts.MODE_BYTE == segment.mode assert 24 == segment.char_count