Skip to content

Commit 9b0ff5f

Browse files
authored
Test leading white space collapsing (#260)
Adds `tree_builder` to `TestEnv` to be able to set white space collapsing mode. A quick follow-up to #254.
1 parent c961a82 commit 9b0ff5f

File tree

4 files changed

+51
-8
lines changed

4 files changed

+51
-8
lines changed

parley/src/tests/test_basic.rs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// Copyright 2024 the Parley Authors
22
// SPDX-License-Identifier: Apache-2.0 OR MIT
33

4-
use crate::{testenv, Alignment, InlineBox};
4+
use crate::{testenv, Alignment, InlineBox, WhiteSpaceCollapse};
55

66
#[test]
77
fn plain_multiline_text() {
88
let mut env = testenv!();
99

1010
let text = "Hello world!\nLine 2\nLine 4";
11-
let mut builder = env.builder(text);
11+
let mut builder = env.ranged_builder(text);
1212
let mut layout = builder.build(text);
1313
layout.break_all_lines(None);
1414
layout.align(
@@ -31,7 +31,7 @@ fn placing_inboxes() {
3131
(13, "start_nl"),
3232
] {
3333
let text = "Hello world!\nLine 2\nLine 4";
34-
let mut builder = env.builder(text);
34+
let mut builder = env.ranged_builder(text);
3535
builder.push_inline_box(InlineBox {
3636
id: 0,
3737
index: position,
@@ -54,7 +54,7 @@ fn only_inboxes_wrap() {
5454
let mut env = testenv!();
5555

5656
let text = "";
57-
let mut builder = env.builder(text);
57+
let mut builder = env.ranged_builder(text);
5858
for id in 0..10 {
5959
builder.push_inline_box(InlineBox {
6060
id,
@@ -80,7 +80,7 @@ fn full_width_inbox() {
8080

8181
for (width, test_case_name) in [(99., "smaller"), (100., "exact"), (101., "larger")] {
8282
let text = "ABC";
83-
let mut builder = env.builder(text);
83+
let mut builder = env.ranged_builder(text);
8484
builder.push_inline_box(InlineBox {
8585
id: 0,
8686
index: 1,
@@ -115,7 +115,7 @@ fn trailing_whitespace() {
115115
let mut env = testenv!();
116116

117117
let text = "AAA BBB";
118-
let mut builder = env.builder(text);
118+
let mut builder = env.ranged_builder(text);
119119
let mut layout = builder.build(text);
120120
layout.break_all_lines(Some(45.));
121121
layout.align(None, Alignment::Start, false);
@@ -127,3 +127,31 @@ fn trailing_whitespace() {
127127

128128
env.check_layout_snapshot(&layout);
129129
}
130+
131+
#[test]
132+
fn leading_whitespace() {
133+
let mut env = testenv!();
134+
135+
for (mode, test_case_name) in [
136+
(WhiteSpaceCollapse::Preserve, "preserve"),
137+
(WhiteSpaceCollapse::Collapse, "collapse"),
138+
] {
139+
let mut builder = env.tree_builder();
140+
builder.set_white_space_mode(mode);
141+
builder.push_text("Line 1");
142+
builder.push_style_modification_span(None);
143+
builder.set_white_space_mode(WhiteSpaceCollapse::Preserve);
144+
builder.push_text("\n");
145+
builder.pop_style_span();
146+
builder.set_white_space_mode(mode);
147+
builder.push_text(" Line 2");
148+
let (mut layout, _) = builder.build();
149+
layout.break_all_lines(None);
150+
layout.align(
151+
None,
152+
Alignment::Start,
153+
false, /* align_when_overflowing */
154+
);
155+
env.with_name(test_case_name).check_layout_snapshot(&layout);
156+
}
157+
}

parley/src/tests/utils/env.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
use crate::tests::utils::renderer::{render_layout, ColorBrush, RenderingConfig};
55
use crate::{
66
FontContext, FontFamily, FontStack, Layout, LayoutContext, PlainEditor, PlainEditorDriver,
7-
RangedBuilder, Rect, StyleProperty,
7+
RangedBuilder, Rect, StyleProperty, TextStyle, TreeBuilder,
88
};
99
use fontique::{Collection, CollectionOptions};
1010
use std::path::{Path, PathBuf};
@@ -148,7 +148,7 @@ impl TestEnv {
148148
]
149149
}
150150

151-
pub(crate) fn builder<'a>(&'a mut self, text: &'a str) -> RangedBuilder<'a, ColorBrush> {
151+
pub(crate) fn ranged_builder<'a>(&'a mut self, text: &'a str) -> RangedBuilder<'a, ColorBrush> {
152152
let default_style = self.default_style();
153153
let mut builder = self.layout_cx.ranged_builder(&mut self.font_cx, text, 1.0);
154154
for style in default_style {
@@ -157,6 +157,15 @@ impl TestEnv {
157157
builder
158158
}
159159

160+
pub(crate) fn tree_builder(&mut self) -> TreeBuilder<'_, ColorBrush> {
161+
let default_style = self.default_style();
162+
let mut builder =
163+
self.layout_cx
164+
.tree_builder(&mut self.font_cx, 1.0, &TextStyle::default());
165+
builder.push_style_modification_span(&default_style);
166+
builder
167+
}
168+
160169
pub(crate) fn driver<'a>(
161170
&'a mut self,
162171
editor: &'a mut PlainEditor<ColorBrush>,
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)