Skip to content

Commit ce794b3

Browse files
committed
tests: add encode tests
1 parent 049e2cc commit ce794b3

File tree

7 files changed

+535
-47
lines changed

7 files changed

+535
-47
lines changed

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ streaming-stats = "0.2.3"
8888
humantime = "2.1"
8989
tempfile = "3.8"
9090
mock_instant = "0.3"
91+
serde_test = "1.0.176"
9192

9293
[[example]]
9394
name = "json_logger"

src/encode/json.rs

+28-6
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,15 @@ impl JsonEncoder {
8585

8686
impl Encode for JsonEncoder {
8787
fn encode(&self, w: &mut dyn Write, record: &Record) -> anyhow::Result<()> {
88-
self.encode_inner(w, Local::now(), record)
88+
#[cfg(test)]
89+
let time = DateTime::parse_from_rfc3339("2016-03-20T14:22:20.644420340-08:00")
90+
.unwrap()
91+
.with_timezone(&Local);
92+
93+
#[cfg(not(test))]
94+
let time = Local::now();
95+
96+
self.encode_inner(w, time, record)
8997
}
9098
}
9199

@@ -168,13 +176,17 @@ impl Deserialize for JsonEncoderDeserializer {
168176
mod test {
169177
#[cfg(feature = "chrono")]
170178
use chrono::{DateTime, Local};
171-
use log::Level;
179+
use log::{Level, Record};
172180

173181
use super::*;
182+
183+
#[cfg(feature = "config_parsing")]
184+
use crate::config::Deserializers;
185+
174186
use crate::encode::writer::simple::SimpleWriter;
175187

176188
#[test]
177-
fn default() {
189+
fn test_json_encode() {
178190
let time = DateTime::parse_from_rfc3339("2016-03-20T14:22:20.644420340-08:00")
179191
.unwrap()
180192
.with_timezone(&Local);
@@ -184,16 +196,15 @@ mod test {
184196
let file = "file";
185197
let line = 100;
186198
let message = "message";
187-
let thread = "encode::json::test::default";
199+
let thread = "encode::json::test::test_json_encode";
188200
log_mdc::insert("foo", "bar");
189201

190202
let encoder = JsonEncoder::new();
191203

192204
let mut buf = vec![];
193205
encoder
194-
.encode_inner(
206+
.encode(
195207
&mut SimpleWriter(&mut buf),
196-
time,
197208
&Record::builder()
198209
.level(level)
199210
.target(target)
@@ -221,4 +232,15 @@ mod test {
221232
);
222233
assert_eq!(expected, String::from_utf8(buf).unwrap().trim());
223234
}
235+
236+
#[test]
237+
#[cfg(feature = "config_parsing")]
238+
fn test_cfg_deserializer() {
239+
let json_cfg = JsonEncoderConfig { _p: () };
240+
241+
let deserializer = JsonEncoderDeserializer;
242+
243+
let res = deserializer.deserialize(json_cfg, &Deserializers::default());
244+
assert!(res.is_ok());
245+
}
224246
}

src/encode/mod.rs

+77
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,80 @@ impl<'a, W: Write + ?Sized> Write for &'a mut W {
154154
<W as Write>::set_style(*self, style)
155155
}
156156
}
157+
158+
#[cfg(test)]
159+
mod test {
160+
#[cfg(feature = "config_parsing")]
161+
use serde_test::{assert_de_tokens, assert_de_tokens_error, Token};
162+
163+
#[test]
164+
#[cfg(feature = "config_parsing")]
165+
fn test_cfg_deserialize() {
166+
use super::*;
167+
use std::collections::BTreeMap;
168+
169+
let pattern = "[{d(%Y-%m-%dT%H:%M:%S%.6f)} {h({l}):<5.5} {M}] {m}{n}".to_owned();
170+
171+
let mut config = BTreeMap::new();
172+
config.insert(Value::String("pattern".to_owned()), Value::String(pattern));
173+
174+
let encoder_cfg = EncoderConfig {
175+
kind: "pattern".to_owned(),
176+
config: Value::Map(config),
177+
};
178+
179+
assert_de_tokens(
180+
&encoder_cfg,
181+
&[
182+
Token::Struct {
183+
name: "EncoderConfig",
184+
len: 2,
185+
},
186+
Token::Str("kind"),
187+
Token::Str("pattern"),
188+
Token::Str("pattern"),
189+
Token::Str("[{d(%Y-%m-%dT%H:%M:%S%.6f)} {h({l}):<5.5} {M}] {m}{n}"),
190+
Token::StructEnd,
191+
],
192+
);
193+
194+
// No pattern defined, should fail to deserializez into a map
195+
assert_de_tokens_error::<EncoderConfig>(
196+
&[
197+
Token::Struct {
198+
name: "EncoderConfig",
199+
len: 2,
200+
},
201+
Token::Str("kind"),
202+
Token::Str("pattern"),
203+
Token::Str("pattern"),
204+
Token::StructEnd,
205+
],
206+
"deserialization did not expect this token: StructEnd",
207+
);
208+
}
209+
210+
#[test]
211+
#[cfg(feature = "console_writer")]
212+
fn test_set_console_writer_style() {
213+
use super::*;
214+
use crate::encode::writer::console::ConsoleWriter;
215+
216+
let w = match ConsoleWriter::stdout() {
217+
Some(w) => w,
218+
None => return,
219+
};
220+
let mut w = w.lock();
221+
222+
assert!(w
223+
.set_style(
224+
Style::new()
225+
.text(Color::Red)
226+
.background(Color::Blue)
227+
.intense(true),
228+
)
229+
.is_ok());
230+
231+
w.set_style(&Style::new()).unwrap();
232+
}
233+
}

0 commit comments

Comments
 (0)