expectation_shared/
lib.rs

1#[macro_use]
2extern crate serde_derive;
3extern crate serde;
4extern crate walkdir;
5
6pub mod filesystem;
7
8use std::path::PathBuf;
9
10#[derive(Serialize, Deserialize, Debug, PartialEq)]
11pub struct Double {
12    pub actual: PathBuf,
13    pub expected: PathBuf,
14}
15
16#[derive(Serialize, Deserialize, Debug, PartialEq)]
17pub struct Tripple {
18    pub actual: PathBuf,
19    pub expected: PathBuf,
20    pub diffs: Vec<PathBuf>,
21}
22
23#[derive(Serialize, Deserialize, Debug, PartialEq)]
24pub enum ResultKind {
25    Ok,
26    ExpectedNotFound(Double),
27    ActualNotFound(Double),
28    Difference(Tripple),
29    IoError(String),
30}
31
32#[derive(Serialize, Deserialize, Debug, PartialEq)]
33pub struct Result {
34    pub test_name: String,
35    pub file_name: PathBuf,
36    pub kind: ResultKind,
37}
38
39
40impl Result {
41    pub fn is_ok(&self) -> bool {
42        match &self.kind {
43            ResultKind::Ok => true,
44            _ => false,
45        }
46    }
47
48    pub fn ok<N, P>(name: N, file: P) -> Self
49    where
50        N: Into<String>,
51        P: Into<PathBuf>,
52    {
53        Result {
54            test_name: name.into(),
55            file_name: file.into(),
56            kind: ResultKind::Ok,
57        }
58    }
59
60    pub fn expected_not_found<N, P1, P2, P3>(name: N, file: P1, actual: P2, expected: P3) -> Self
61    where
62        N: Into<String>,
63        P1: Into<PathBuf>,
64        P2: Into<PathBuf>,
65        P3: Into<PathBuf>,
66    {
67        Result {
68            test_name: name.into(),
69            file_name: file.into(),
70            kind: ResultKind::ExpectedNotFound(Double {
71                actual: actual.into(),
72                expected: expected.into(),
73            }),
74        }
75    }
76
77    pub fn actual_not_found<N, P1, P2, P3>(name: N, file: P1, actual: P2, expected: P3) -> Self
78    where
79        N: Into<String>,
80        P1: Into<PathBuf>,
81        P2: Into<PathBuf>,
82        P3: Into<PathBuf>,
83    {
84        Result {
85            test_name: name.into(),
86            file_name: file.into(),
87            kind: ResultKind::ActualNotFound(Double {
88                actual: actual.into(),
89                expected: expected.into(),
90            }),
91        }
92    }
93
94    pub fn difference<N, P1, P2, P3>(
95        name: N,
96        file: P1,
97        actual: P2,
98        expected: P3,
99        diffs: Vec<PathBuf>,
100    ) -> Self
101    where
102        N: Into<String>,
103        P1: Into<PathBuf>,
104        P2: Into<PathBuf>,
105        P3: Into<PathBuf>,
106    {
107        Result {
108            test_name: name.into(),
109            file_name: file.into(),
110            kind: ResultKind::Difference(Tripple {
111                actual: actual.into(),
112                expected: expected.into(),
113                diffs: diffs,
114            }),
115        }
116    }
117
118    pub fn io_error<N, P>(name: N, file: P, io_error: std::io::Error) -> Self
119    where
120        N: Into<String>,
121        P: Into<PathBuf>,
122    {
123        Result {
124            test_name: name.into(),
125            file_name: file.into(),
126            kind: ResultKind::IoError(format!("{:?}", io_error)),
127        }
128    }
129}