Skip to content

Commit 7a75209

Browse files
committed
tests: add encode tests
1 parent 5104cea commit 7a75209

File tree

10 files changed

+729
-111
lines changed

10 files changed

+729
-111
lines changed

.github/workflows/main.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
runs-on: ${{ matrix.os }}
1818
strategy:
1919
matrix:
20-
rust_versions: ["stable", "1.69"]
20+
rust_versions: ["stable", "1.70"]
2121
os: [ubuntu-latest, windows-latest]
2222
steps:
2323
- name: Checkout the source code
@@ -63,7 +63,7 @@ jobs:
6363
runs-on: ubuntu-latest
6464
strategy:
6565
matrix:
66-
rust_versions: ["stable", "1.69"]
66+
rust_versions: ["stable", "1.70"]
6767
steps:
6868
- name: Checkout the source code
6969
uses: actions/checkout@v4

Cargo.toml

+1-14
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ repository = "https://github.com/estk/log4rs"
88
readme = "README.md"
99
keywords = ["log", "logger", "logging", "log4"]
1010
edition = "2018"
11-
rust-version = "1.69"
11+
rust-version = "1.70"
1212

1313
[features]
1414
default = ["all_components", "config_parsing", "yaml_format"]
@@ -68,25 +68,12 @@ thread-id = { version = "4", optional = true }
6868
typemap-ors = { version = "1.0.0", optional = true }
6969
serde_json = { version = "1.0", optional = true }
7070
serde_yaml = { version = "0.9", optional = true }
71-
<<<<<<< HEAD
72-
<<<<<<< HEAD
73-
<<<<<<< HEAD
7471
toml = { version = "<0.8.10", optional = true }
75-
=======
76-
toml = { version = "0.8.10", optional = true }
77-
>>>>>>> c3d7f42 (chore: clippy fixes + msrv bump)
78-
=======
79-
toml = { version = "0.8.9", optional = true }
80-
>>>>>>> 4486edd (chore: backout msrv bump, knock toml down)
81-
=======
82-
toml = { version = "<0.8.10", optional = true }
83-
>>>>>>> 049e2cc (limit toml)
8472
parking_lot = { version = "0.12.0", optional = true }
8573
rand = { version = "0.8", optional = true}
8674
thiserror = "1.0.15"
8775
anyhow = "1.0.28"
8876
derivative = "2.2"
89-
once_cell = "1.17.1"
9077

9178
[target.'cfg(windows)'.dependencies]
9279
winapi = { version = "0.3", optional = true, features = ["handleapi", "minwindef", "processenv", "winbase", "wincon"] }

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
[![crates.io](https://img.shields.io/crates/v/log4rs.svg)](https://crates.io/crates/log4rs)
55
[![License: MIT OR Apache-2.0](https://img.shields.io/crates/l/clippy.svg)](#license)
66
![CI](https://github.com/estk/log4rs/workflows/CI/badge.svg)
7-
[![Minimum rustc version](https://img.shields.io/badge/rustc-1.69+-green.svg)](https://github.com/estk/log4rs#rust-version-requirements)
7+
[![Minimum rustc version](https://img.shields.io/badge/rustc-1.70+-green.svg)](https://github.com/estk/log4rs#rust-version-requirements)
88

99
log4rs is a highly configurable logging framework modeled after Java's Logback
1010
and log4j libraries.
@@ -54,7 +54,7 @@ fn main() {
5454

5555
## Rust Version Requirements
5656

57-
1.69
57+
1.70
5858

5959
## Building for Dev
6060

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)