use serde::Deserialize;
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
#[serde(tag = "type")]
pub enum Event {
Suite(Suite),
Test(Test),
Bench(Bench),
#[cfg(not(feature = "strict_unstable"))]
#[doc(hidden)]
#[serde(other)]
Unknown,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
#[serde(tag = "event")]
pub enum Suite {
Started(SuiteStarted),
Ok(SuiteOk),
Failed(SuiteFailed),
#[cfg(not(feature = "strict_unstable"))]
#[doc(hidden)]
#[serde(other)]
Unknown,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct SuiteStarted {
pub test_count: usize,
#[doc(hidden)]
#[serde(skip)]
__do_not_match_exhaustively: (),
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct SuiteOk {
pub passed: usize,
pub failed: usize,
pub allowed_fail: usize,
pub ignored: usize,
pub measured: usize,
pub filtered_out: usize,
#[doc(hidden)]
#[serde(skip)]
__do_not_match_exhaustively: (),
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct SuiteFailed {
pub passed: usize,
pub failed: usize,
pub allowed_fail: usize,
pub ignored: usize,
pub measured: usize,
pub filtered_out: usize,
#[doc(hidden)]
#[serde(skip)]
__do_not_match_exhaustively: (),
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
#[serde(tag = "event")]
pub enum Test {
Started(TestStarted),
Ok(TestOk),
Failed(TestFailed),
Ignored(TestIgnored),
AllowedFailure(TestAllowedFailured),
Timeout(TestTimeout),
#[cfg(not(feature = "strict_unstable"))]
#[doc(hidden)]
#[serde(other)]
Unknown,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct TestStarted {
pub name: String,
#[doc(hidden)]
#[serde(skip)]
__do_not_match_exhaustively: (),
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct TestOk {
pub name: String,
#[doc(hidden)]
#[serde(skip)]
__do_not_match_exhaustively: (),
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct TestFailed {
pub name: String,
pub stdout: Option<String>,
pub message: Option<String>,
#[doc(hidden)]
#[serde(skip)]
__do_not_match_exhaustively: (),
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct TestIgnored {
pub name: String,
#[doc(hidden)]
#[serde(skip)]
__do_not_match_exhaustively: (),
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct TestAllowedFailured {
pub name: String,
#[doc(hidden)]
#[serde(skip)]
__do_not_match_exhaustively: (),
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct TestTimeout {
pub name: String,
#[doc(hidden)]
#[serde(skip)]
__do_not_match_exhaustively: (),
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct Bench {
pub name: String,
pub median: usize,
pub deviation: usize,
pub mib_per_second: Option<usize>,
#[doc(hidden)]
#[serde(skip)]
__do_not_match_exhaustively: (),
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json;
#[test]
fn suite_started() {
let input = r#"{ "type": "suite", "event": "started", "test_count": 10 }"#;
let _data: Event = serde_json::from_str(input).unwrap();
}
#[test]
fn suite_ok() {
let input = "{ \"type\": \"suite\", \
\"event\": \"ok\", \
\"passed\": 6, \
\"failed\": 5, \
\"allowed_fail\": 4, \
\"ignored\": 3, \
\"measured\": 2, \
\"filtered_out\": 1 }";
let _data: Event = serde_json::from_str(input).unwrap();
}
#[test]
fn suite_failed() {
let input = "{ \"type\": \"suite\", \
\"event\": \"failed\", \
\"passed\": 6, \
\"failed\": 5, \
\"allowed_fail\": 4, \
\"ignored\": 3, \
\"measured\": 2, \
\"filtered_out\": 1 }";
let _data: Event = serde_json::from_str(input).unwrap();
}
#[test]
fn test_started() {
let input = r#"{ "type": "test", "event": "started", "name": "foo" }"#;
let _data: Event = serde_json::from_str(input).unwrap();
}
#[test]
fn test_timeout() {
let input = r#"{ "type": "test", "event": "timeout", "name": "foo" }"#;
let _data: Event = serde_json::from_str(input).unwrap();
}
#[test]
fn bench() {
let input = "{ \"type\": \"bench\", \
\"name\": \"foo\", \
\"median\": 10, \
\"deviation\": 2 }";
let _data: Event = serde_json::from_str(input).unwrap();
}
#[test]
fn bench_full() {
let input = "{ \"type\": \"bench\", \
\"name\": \"foo\", \
\"median\": 10, \
\"deviation\": 2, \
\"mib_per_second\": 1 }";
let _data: Event = serde_json::from_str(input).unwrap();
}
}