Skip to content

Commit

Permalink
tests: add encode tests
Browse files Browse the repository at this point in the history
  • Loading branch information
bconn98 committed Mar 3, 2024
1 parent 5104cea commit 56728ac
Show file tree
Hide file tree
Showing 10 changed files with 727 additions and 110 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
rust_versions: ["stable", "1.69"]
rust_versions: ["stable", "1.70"]
os: [ubuntu-latest, windows-latest]
steps:
- name: Checkout the source code
Expand Down Expand Up @@ -63,7 +63,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
rust_versions: ["stable", "1.69"]
rust_versions: ["stable", "1.70"]
steps:
- name: Checkout the source code
uses: actions/checkout@v4
Expand Down
15 changes: 1 addition & 14 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ repository = "https://github.com/estk/log4rs"
readme = "README.md"
keywords = ["log", "logger", "logging", "log4"]
edition = "2018"
rust-version = "1.69"
rust-version = "1.70"

[features]
default = ["all_components", "config_parsing", "yaml_format"]
Expand Down Expand Up @@ -68,25 +68,12 @@ thread-id = { version = "4", optional = true }
typemap-ors = { version = "1.0.0", optional = true }
serde_json = { version = "1.0", optional = true }
serde_yaml = { version = "0.9", optional = true }
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
toml = { version = "<0.8.10", optional = true }
=======
toml = { version = "0.8.10", optional = true }
>>>>>>> c3d7f42 (chore: clippy fixes + msrv bump)
=======
toml = { version = "0.8.9", optional = true }
>>>>>>> 4486edd (chore: backout msrv bump, knock toml down)
=======
toml = { version = "<0.8.10", optional = true }
>>>>>>> 049e2cc (limit toml)
parking_lot = { version = "0.12.0", optional = true }
rand = { version = "0.8", optional = true}
thiserror = "1.0.15"
anyhow = "1.0.28"
derivative = "2.2"
once_cell = "1.17.1"

[target.'cfg(windows)'.dependencies]
winapi = { version = "0.3", optional = true, features = ["handleapi", "minwindef", "processenv", "winbase", "wincon"] }
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
[![crates.io](https://img.shields.io/crates/v/log4rs.svg)](https://crates.io/crates/log4rs)
[![License: MIT OR Apache-2.0](https://img.shields.io/crates/l/clippy.svg)](#license)
![CI](https://github.com/estk/log4rs/workflows/CI/badge.svg)
[![Minimum rustc version](https://img.shields.io/badge/rustc-1.69+-green.svg)](https://github.com/estk/log4rs#rust-version-requirements)
[![Minimum rustc version](https://img.shields.io/badge/rustc-1.70+-green.svg)](https://github.com/estk/log4rs#rust-version-requirements)

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

## Rust Version Requirements

1.69
1.70

## Building for Dev

Expand Down
34 changes: 28 additions & 6 deletions src/encode/json.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,15 @@ impl JsonEncoder {

impl Encode for JsonEncoder {
fn encode(&self, w: &mut dyn Write, record: &Record) -> anyhow::Result<()> {
self.encode_inner(w, Local::now(), record)
#[cfg(test)]
let time = DateTime::parse_from_rfc3339("2016-03-20T14:22:20.644420340-08:00")
.unwrap()
.with_timezone(&Local);

#[cfg(not(test))]
let time = Local::now();

self.encode_inner(w, time, record)
}
}

Expand Down Expand Up @@ -168,13 +176,17 @@ impl Deserialize for JsonEncoderDeserializer {
mod test {
#[cfg(feature = "chrono")]
use chrono::{DateTime, Local};
use log::Level;
use log::{Level, Record};

use super::*;

#[cfg(feature = "config_parsing")]
use crate::config::Deserializers;

use crate::encode::writer::simple::SimpleWriter;

#[test]
fn default() {
fn test_json_encode() {
let time = DateTime::parse_from_rfc3339("2016-03-20T14:22:20.644420340-08:00")
.unwrap()
.with_timezone(&Local);
Expand All @@ -184,16 +196,15 @@ mod test {
let file = "file";
let line = 100;
let message = "message";
let thread = "encode::json::test::default";
let thread = "encode::json::test::test_json_encode";
log_mdc::insert("foo", "bar");

let encoder = JsonEncoder::new();

let mut buf = vec![];
encoder
.encode_inner(
.encode(
&mut SimpleWriter(&mut buf),
time,
&Record::builder()
.level(level)
.target(target)
Expand Down Expand Up @@ -221,4 +232,15 @@ mod test {
);
assert_eq!(expected, String::from_utf8(buf).unwrap().trim());
}

#[test]
#[cfg(feature = "config_parsing")]
fn test_cfg_deserializer() {
let json_cfg = JsonEncoderConfig { _p: () };

let deserializer = JsonEncoderDeserializer;

let res = deserializer.deserialize(json_cfg, &Deserializers::default());
assert!(res.is_ok());
}
}
77 changes: 77 additions & 0 deletions src/encode/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,3 +154,80 @@ impl<'a, W: Write + ?Sized> Write for &'a mut W {
<W as Write>::set_style(*self, style)
}
}

#[cfg(test)]
mod test {
#[cfg(feature = "config_parsing")]
use serde_test::{assert_de_tokens, assert_de_tokens_error, Token};

#[test]
#[cfg(feature = "config_parsing")]
fn test_cfg_deserialize() {
use super::*;
use std::collections::BTreeMap;

let pattern = "[{d(%Y-%m-%dT%H:%M:%S%.6f)} {h({l}):<5.5} {M}] {m}{n}".to_owned();

let mut config = BTreeMap::new();
config.insert(Value::String("pattern".to_owned()), Value::String(pattern));

let encoder_cfg = EncoderConfig {
kind: "pattern".to_owned(),
config: Value::Map(config),
};

assert_de_tokens(
&encoder_cfg,
&[
Token::Struct {
name: "EncoderConfig",
len: 2,
},
Token::Str("kind"),
Token::Str("pattern"),
Token::Str("pattern"),
Token::Str("[{d(%Y-%m-%dT%H:%M:%S%.6f)} {h({l}):<5.5} {M}] {m}{n}"),
Token::StructEnd,
],
);

// No pattern defined, should fail to deserializez into a map
assert_de_tokens_error::<EncoderConfig>(
&[
Token::Struct {
name: "EncoderConfig",
len: 2,
},
Token::Str("kind"),
Token::Str("pattern"),
Token::Str("pattern"),
Token::StructEnd,
],
"deserialization did not expect this token: StructEnd",
);
}

#[test]
#[cfg(feature = "console_writer")]
fn test_set_console_writer_style() {
use super::*;
use crate::encode::writer::console::ConsoleWriter;

let w = match ConsoleWriter::stdout() {
Some(w) => w,
None => return,
};
let mut w = w.lock();

assert!(w
.set_style(
Style::new()
.text(Color::Red)
.background(Color::Blue)
.intense(true),
)
.is_ok());

w.set_style(&Style::new()).unwrap();
}
}
Loading

0 comments on commit 56728ac

Please sign in to comment.