Finish documentation and tests

This commit is contained in:
Nathan Fisher 2025-01-10 23:56:18 -05:00
parent bd8cb8200b
commit c5e302c9b0
5 changed files with 38 additions and 18 deletions

View File

@ -43,7 +43,6 @@ use {
fn main() {
let mut decoder = Decoder::new("SGVsbG8sIFdvcmxkIQ==".as_bytes(), vec![], None, false);
let output = decoder.decode().unwrap();
assert_eq!(&output, b"Hello, World!");
assert_eq!(decoder.decode().unwrap(), b"Hello, World!");
}
```

View File

@ -4,6 +4,18 @@ use {
};
/// Decodes b64 encoded data
/// # Exammple
/// ```
/// # use {
/// # std::io::Read,
/// # b64::Decoder,
/// # };
/// #
/// # fn main() {
/// let mut decoder = Decoder::new("SGVsbG8sIFdvcmxkIQ==".as_bytes(), vec![], None, false);
/// assert_eq!(decoder.decode().unwrap(), b"Hello, World!");
/// # }
/// ```
pub struct Decoder<R: Read, W: Write> {
reader: R,
writer: W,
@ -107,31 +119,25 @@ mod tests {
#[test]
fn decode() {
let mut decoder = Decoder::new("SGVsbG8sIFdvcmxk".as_bytes(), vec![], None, false);
let mut output = decoder.decode().unwrap();
assert_eq!(output.clone(), b"Hello, World");
output.clear();
decoder = Decoder::new("SGVsbG8sIFdvcmxkIQ==".as_bytes(), output, None, false);
output = decoder.decode().unwrap();
assert_eq!(output.clone(), b"Hello, World!");
output.clear();
decoder = Decoder::new("SGVsbG8sIFdvcmxkIQo=".as_bytes(), output, None, false);
output = decoder.decode().unwrap();
assert_eq!(output, b"Hello, World!\n");
assert_eq!(decoder.decode().unwrap(), b"Hello, World");
decoder = Decoder::new("SGVsbG8sIFdvcmxkIQ==".as_bytes(), vec![], None, false);
assert_eq!(decoder.decode().unwrap(), b"Hello, World!");
decoder = Decoder::new("SGVsbG8sIFdvcmxkIQo=".as_bytes(), vec![], None, false);
assert_eq!(decoder.decode().unwrap(), b"Hello, World!\n");
}
#[test]
fn ignore_whitespace() {
let decoder = Decoder::new(" SG\tVsbG8sIFdvcmxkIQ==".as_bytes(), vec![], None, true);
let output = decoder.decode().unwrap();
assert_eq!(output, b"Hello, World!");
assert_eq!(decoder.decode().unwrap(), b"Hello, World!");
}
#[test]
fn decode_wrapped() {
let infile = File::open("src/testdata/lorem_b64.txt").unwrap();
let infile = File::open("testdata/lorem_b64.txt").unwrap();
let reader = BufReader::new(infile);
let mut outfile = vec![];
File::open("src/testdata/lorem.txt")
File::open("testdata/lorem.txt")
.unwrap()
.read_to_end(&mut outfile)
.unwrap();

View File

@ -4,6 +4,20 @@ use {
};
/// Encodes arbitraty data as b64 encoded ASCII text
/// # Example
///
/// ```
/// # use {
/// # std::io::Read,
/// # b64::Encoder,
/// # };
/// #
/// # fn main() {
/// let mut encoder = Encoder::new("Hello, World!".as_bytes(), vec![], None, Some(76));
/// encoder.encode().unwrap();
/// assert_eq!(encoder.output(), b"SGVsbG8sIFdvcmxkIQ==");
/// # }
/// ```
pub struct Encoder<R: Read, W: Write> {
reader: R,
writer: W,
@ -82,6 +96,7 @@ impl<R: Read, W: Write> Encoder<R, W> {
break;
}
}
self.writer.flush()?;
Ok(())
}
}
@ -114,9 +129,9 @@ mod tests {
#[test]
fn wrapping() {
let infile = File::open("src/testdata/lorem.txt").unwrap();
let infile = File::open("testdata/lorem.txt").unwrap();
let reader = BufReader::new(infile);
let outfile = fs::read_to_string("src/testdata/lorem_b64.txt").unwrap();
let outfile = fs::read_to_string("testdata/lorem_b64.txt").unwrap();
let mut encoder = Encoder::new(reader, vec![], None, Some(76));
encoder.encode().unwrap();
assert_eq!(encoder.writer, outfile.as_bytes());