def test_encode_all_linear64_double_chunk(): content = ((b"\x40\x00\x00\x40" * 127) + b"\x40\x00\x00") * 2 result = varipacker.encode(content) assert result == "".join([ varipacker.encode_chunk(content[0:511], varipacker.Encoding.LINEAR64), varipacker.encode_chunk(content[0:511], varipacker.Encoding.LINEAR64) ])
def test_compare_different(): clean_content = varipacker.encode(bytes(range(0, 100))) content1 = clean_content[:20] + "Z " + clean_content[ 20:30] + "\r\n" + clean_content[30:] content2 = "#comment1\n" + clean_content[: 40] + "# coment 2 \r\n" + clean_content[ 40:] assert varipacker.compare(content1, content2) == 20
def test_encode_all_sextet_run_double_chunk(): content = b"\x39" * 1022 result = varipacker.encode(content) assert result == "".join([ varipacker.encode_chunk(content[0:511], varipacker.Encoding.SEXTET_RUN), varipacker.encode_chunk(content[0:511], varipacker.Encoding.SEXTET_RUN) ])
def test_encode_alternating_sextet_octet_run(): content = (b"\x39" * 10) + (b"\x40" * 10) + (b"\x39" * 10) + (b"\x40" * 10) result = varipacker.encode(content) assert result == "".join([ varipacker.encode_chunk(b"\x39" * 10, varipacker.Encoding.SEXTET_RUN), varipacker.encode_chunk(b"\x40" * 10, varipacker.Encoding.OCTET_RUN), varipacker.encode_chunk(b"\x39" * 10, varipacker.Encoding.SEXTET_RUN), varipacker.encode_chunk(b"\x40" * 10, varipacker.Encoding.OCTET_RUN) ])
def test_encode_sextet_octet_run_with_linear64(): content = (b"\x39" * 10) + b"\x61\x62" + (b"\x40" * 10) + b"\x77" + ( b"\x39" * 10) + (b"\x40" * 10) result = varipacker.encode(content) assert result == "".join([ varipacker.encode_chunk(b"\x39" * 10, varipacker.Encoding.SEXTET_RUN), varipacker.encode_chunk(b"\x61\x62", varipacker.Encoding.LINEAR64), varipacker.encode_chunk(b"\x40" * 10, varipacker.Encoding.OCTET_RUN), varipacker.encode_chunk(b"\x77", varipacker.Encoding.LINEAR64), varipacker.encode_chunk(b"\x39" * 10, varipacker.Encoding.SEXTET_RUN), varipacker.encode_chunk(b"\x40" * 10, varipacker.Encoding.OCTET_RUN) ])
def test_encode_all_but_sextet_stream(): content = (b"\x39" * 10) + b"\x61\x62\x01\x02\x03\x04\x05\x06" + ( b"\x40" * 10) + b"\x77" + (b"\x39" * 10) + (b"\x40" * 10) result = varipacker.encode(content) assert result == "".join([ varipacker.encode_chunk(b"\x39" * 10, varipacker.Encoding.SEXTET_RUN), varipacker.encode_chunk(b"\x61\x62", varipacker.Encoding.LINEAR64), varipacker.encode_chunk(b"\x01\x02\x03\x04\x05\x06", varipacker.Encoding.TRIAD_STREAM), varipacker.encode_chunk(b"\x40" * 10, varipacker.Encoding.OCTET_RUN), varipacker.encode_chunk(b"\x77", varipacker.Encoding.LINEAR64), varipacker.encode_chunk(b"\x39" * 10, varipacker.Encoding.SEXTET_RUN), varipacker.encode_chunk(b"\x40" * 10, varipacker.Encoding.OCTET_RUN) ])
def test_encode_all(): content = b"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e" + ( b"\x39" * 10) + b"\x61\x62\x01\x02\x03\x04\x05\x06" + ( b"\x40" * 10) + b"\x77" + (b"\x39" * 10) + (b"\x40" * 10) result = varipacker.encode(content) assert result == "".join([ varipacker.encode_chunk( b"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e", varipacker.Encoding.SEXTET_STREAM), varipacker.encode_chunk(b"\x39" * 10, varipacker.Encoding.SEXTET_RUN), varipacker.encode_chunk(b"\x61\x62", varipacker.Encoding.LINEAR64), varipacker.encode_chunk(b"\x01\x02\x03\x04\x05\x06", varipacker.Encoding.TRIAD_STREAM), varipacker.encode_chunk(b"\x40" * 10, varipacker.Encoding.OCTET_RUN), varipacker.encode_chunk(b"\x77", varipacker.Encoding.LINEAR64), varipacker.encode_chunk(b"\x39" * 10, varipacker.Encoding.SEXTET_RUN), varipacker.encode_chunk(b"\x40" * 10, varipacker.Encoding.OCTET_RUN) ])
def main(): """ Program entry point """ parser = argparse.ArgumentParser( description="Packs/unpacks Hextream content to/from the Varipacker format" ) commands = parser.add_mutually_exclusive_group(required=True) commands.add_argument("-p", "--pack", action="store_true", help="Pack Hextream content into Varipacker format") commands.add_argument("-u", "--unpack", action="store_true", help="Unpack Varipacker content into Hextream format") parser.add_argument('infile', nargs='?', type=argparse.FileType('r', encoding="UTF-8"), help="Name of file with content to be packed/unpacked", default=sys.stdin) parser.add_argument('outfile', nargs='?', type=argparse.FileType('w', encoding="UTF-8"), help="Name of file in which to write packed/unpacked content", default=sys.stdout) parser.add_argument("-c", "--comment", type=str, help="Prepend the output with specified comment string") parser.add_argument("-n", "--omit-newline", action="store_true", help="The ending newline character(s) will be omitted from the output") args = parser.parse_args() source_content = args.infile.read() if args.pack: binary_content = hextream.decode(source_content) output_content = varipacker.encode(binary_content) else: binary_content = varipacker.decode(varipacker.distill(source_content)) output_content = hextream.encode(binary_content) if args.comment: args.outfile.write("# {}\n".format(args.comment)) args.outfile.write(output_content) if not args.omit_newline: args.outfile.write("\n")
def test_distill_comments(): clean_content = varipacker.encode(bytes(range(0, 100))) dirty_content = "#comment1\n" + clean_content[: 40] + "# coment 2 \r\n" + clean_content[ 40:] assert varipacker.distill(dirty_content) == clean_content
def test_distill_whitespace(): clean_content = varipacker.encode(bytes(range(0, 100))) dirty_content = clean_content[:20] + " " + clean_content[ 20:30] + "\r\n" + clean_content[30:] assert varipacker.distill(dirty_content) == clean_content
def test_encode_all_sextet_run_single_chunk(): content = b"\x39" * 511 result = varipacker.encode(content) assert result == "".join( [varipacker.encode_chunk(content, varipacker.Encoding.SEXTET_RUN)])
def test_encode_all_linear64_single_chunk(): content = (b"\x40\x00\x00\x40" * 127) + b"\x40\x00\x00" result = varipacker.encode(content) assert result == "".join( [varipacker.encode_chunk(content, varipacker.Encoding.LINEAR64)])
def test_encode_empty(): result = varipacker.encode(b"") assert result == ""