1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-26 22:53:14 -04:00

Use similar-asserts for better test output

This commit is contained in:
Emil Ernerfeldt
2025-03-28 15:11:30 +01:00
parent 2ac4c93cc3
commit 79d114dfb0
4 changed files with 138 additions and 1 deletions

View File

@@ -642,6 +642,17 @@ dependencies = [
"piper",
]
[[package]]
name = "bstr"
version = "1.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0"
dependencies = [
"memchr",
"regex-automata",
"serde",
]
[[package]]
name = "bumpalo"
version = "3.16.0"
@@ -896,6 +907,18 @@ dependencies = [
"env_logger",
]
[[package]]
name = "console"
version = "0.15.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
dependencies = [
"encode_unicode",
"libc",
"once_cell",
"windows-sys 0.59.0",
]
[[package]]
name = "core-foundation"
version = "0.9.4"
@@ -1421,6 +1444,12 @@ dependencies = [
"serde",
]
[[package]]
name = "encode_unicode"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
[[package]]
name = "endi"
version = "1.1.0"
@@ -1521,6 +1550,7 @@ dependencies = [
"profiling",
"rayon",
"serde",
"similar-asserts",
]
[[package]]
@@ -2390,7 +2420,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4"
dependencies = [
"cfg-if",
"windows-targets 0.48.5",
"windows-targets 0.52.6",
]
[[package]]
@@ -3670,6 +3700,26 @@ version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]]
name = "similar"
version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa"
dependencies = [
"bstr",
"unicode-segmentation",
]
[[package]]
name = "similar-asserts"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5b441962c817e33508847a22bd82f03a30cff43642dc2fae8b050566121eb9a"
dependencies = [
"console",
"similar",
]
[[package]]
name = "simplecss"
version = "0.2.1"

View File

@@ -96,6 +96,7 @@ puffin_http = "0.16"
raw-window-handle = "0.6.0"
ron = "0.8"
serde = { version = "1", features = ["derive"] }
similar-asserts = "1.4.2"
thiserror = "1.0.37"
type-map = "0.5.0"
wasm-bindgen = "0.2"

View File

@@ -101,6 +101,7 @@ backtrace = { workspace = true, optional = true }
[dev-dependencies]
criterion.workspace = true
similar-asserts.workspace = true
[[bench]]

View File

@@ -980,3 +980,88 @@ impl FontImplCache {
.clone()
}
}
#[cfg(feature = "default_fonts")]
#[cfg(test)]
mod tests {
use core::f32;
use super::*;
use crate::{text::TextFormat, Stroke};
use ecolor::Color32;
fn jobs() -> Vec<LayoutJob> {
// TODO: add more tests here with newlines etc
vec![
LayoutJob::simple(
"Simplest test.".to_owned(),
FontId::new(14.0, FontFamily::Monospace),
Color32::WHITE,
f32::INFINITY,
),
LayoutJob::simple(
"The is some text that may be long.\nDet kanske också finns lite ÅÄÖ här."
.to_owned(),
FontId::new(14.0, FontFamily::Proportional),
Color32::WHITE,
50.0,
),
{
let mut job = LayoutJob {
first_row_min_height: 20.0,
justify: true,
..Default::default()
};
job.append(
"The first paragraph has some leading space.\n",
16.0,
TextFormat {
font_id: FontId::new(14.0, FontFamily::Proportional),
..Default::default()
},
);
job.append(
"The second paragraph has underline and strikthrough, and has some non-ASCII characters: ÅÄÖ.",
0.0,
TextFormat {
font_id: FontId::new(15.0, FontFamily::Monospace),
underline: Stroke::new(1.0, Color32::RED),
strikethrough: Stroke::new(1.0, Color32::GREEN),
..Default::default()
},
);
job.append(
"The last paragraph is kind of boring, bust has italics.",
0.0,
TextFormat {
font_id: FontId::new(10.0, FontFamily::Proportional),
italics: true,
..Default::default()
},
);
job
},
]
}
#[test]
fn test_split_paragraphs() {
for pixels_per_point in [1.0, 2.0_f32.sqrt(), 2.0] {
let max_texture_side = 4096;
let mut fonts = FontsImpl::new(
pixels_per_point,
max_texture_side,
FontDefinitions::default(),
);
for job in jobs() {
let as_whole = GalleyCache::default().layout(&mut fonts, job.clone(), false);
let split = GalleyCache::default().layout(&mut fonts, job.clone(), true);
similar_asserts::assert_eq!(split, as_whole, "Input text: '{}'", job.text);
}
}
}
}