tick-encoding 0.1.4

A simple encoding scheme to encode binary data into ASCII strings
Documentation
#![cfg(feature = "alloc")]

use assert_matches::assert_matches;
use tick_encoding::{decode, DecodeError, EscapedHex};

#[test]
fn test_decode() {
    assert_eq!(decode(b"").unwrap(), &b""[..]);
    assert_eq!(decode(b"hello").unwrap(), &b"hello"[..]);
    assert_eq!(decode(b"``").unwrap(), &b"`"[..]);
    assert_eq!(decode(b"`FF").unwrap(), &[0xFF][..]);
    assert_eq!(
        decode(b"hello world!\r\n\thi there").unwrap(),
        &b"hello world!\r\n\thi there"[..]
    );
    assert_eq!(
        decode(b"foo bar `F0`9F`99`82").unwrap(),
        "foo bar 🙂".as_bytes()
    );
}

#[test]
fn test_decode_invalid_byte_error() {
    assert_matches!(decode(&[0xFF]), Err(DecodeError::InvalidByte(0xFF)));
    assert_matches!(decode(&[0x00]), Err(DecodeError::InvalidByte(0x00)));
}

#[test]
fn test_decode_unexpected_end_error() {
    assert_matches!(decode(b"`"), Err(DecodeError::UnexpectedEnd));
    assert_matches!(decode(b"`F"), Err(DecodeError::UnexpectedEnd));
    assert_matches!(decode(b"`F0`"), Err(DecodeError::UnexpectedEnd));
    assert_matches!(decode(b"`F0`9"), Err(DecodeError::UnexpectedEnd));
}

#[test]
fn test_decode_lowercase_hex_error() {
    assert_matches!(
        decode(b"`fe"),
        Err(DecodeError::LowercaseHex(EscapedHex(b'f', b'e')))
    );
    assert_matches!(
        decode(b"`0e"),
        Err(DecodeError::LowercaseHex(EscapedHex(b'0', b'e')))
    );
    assert_matches!(
        decode(b"`f0"),
        Err(DecodeError::LowercaseHex(EscapedHex(b'f', b'0')))
    );
}

#[test]
fn test_decode_invalid_hex_error() {
    assert_matches!(
        decode(b"`GE"),
        Err(DecodeError::InvalidHex(EscapedHex(b'G', b'E')))
    );
    assert_matches!(
        decode(b"`0G"),
        Err(DecodeError::InvalidHex(EscapedHex(b'0', b'G')))
    );
    assert_matches!(
        decode(b"`G0"),
        Err(DecodeError::InvalidHex(EscapedHex(b'G', b'0')))
    );

    assert_matches!(
        decode(b"`fG"),
        Err(DecodeError::InvalidHex(EscapedHex(b'f', b'G')))
    );
    assert_matches!(
        decode(b"`gF"),
        Err(DecodeError::InvalidHex(EscapedHex(b'g', b'F')))
    );
}

#[test]
fn test_decode_unexpected_escape_error() {
    assert_matches!(
        decode(b"`65"),
        Err(DecodeError::UnexpectedEscape(EscapedHex(b'6', b'5'), 'e'))
    );
}

#[test]
fn test_decode_unexpected_tick_escape_error() {
    assert_matches!(
        decode(b"`60"),
        Err(DecodeError::UnexpectedEscape(EscapedHex(b'6', b'0'), '`'))
    );
}