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}