extern crate byteorder;
#[derive(Debug)]
pub enum Chunk {
Output(Vec<u8>),
Error(Vec<u8>),
Debug(Vec<u8>),
Result(i32),
Input(i32),
LineInput(i32),
}
pub mod connection;
pub mod cmdserver;
#[cfg(test)]
mod tests {
use super::cmdserver::*;
use super::Chunk;
#[test]
fn capabilities() {
let cmdserver = CommandServer::new().unwrap();
assert!(cmdserver.capabilities.len() > 0);
assert!(cmdserver.capabilities.iter().any(|cap| cap == "runcommand"));
}
#[test]
fn run_command() {
let mut cmdserver = CommandServer::new().unwrap();
let run = cmdserver.connection.raw_command(vec![b"summary"]).unwrap();
let (mut result, mut output) = (-1i32, vec![]);
for chunk in run {
match chunk {
Ok(Chunk::Output(s)) => output.extend(s),
Ok(Chunk::Error(_)) => continue,
Ok(Chunk::Result(r)) => result = r,
Ok(c) => panic!("unexpected chunk: {:?}", c),
Err(e) => panic!("failed to read command results: {}", e),
}
}
assert!(output.starts_with(b"parent:"));
assert_eq!(result, 0);
}
#[test]
fn run_command_error() {
let mut cmdserver = CommandServer::new().unwrap();
let run = cmdserver.connection.raw_command(vec![b"noexist"]).unwrap();
let (mut result, mut error) =
(-1i32, vec![]);
for chunk in run {
match chunk {
Ok(Chunk::Output(_)) => continue,
Ok(Chunk::Error(s)) => error.extend(s),
Ok(Chunk::Result(r)) => { result = r },
Ok(c) => panic!("unexpected chunk: {:?}", c),
Err(e) => panic!("failed to read command results: {}", e),
}
}
assert_eq!(result, 255);
assert!(error.starts_with(b"hg: unknown command 'noexist'"));
}
}