Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-tui/tests/text.rs')
-rw-r--r--helix-tui/tests/text.rs128
1 files changed, 128 insertions, 0 deletions
diff --git a/helix-tui/tests/text.rs b/helix-tui/tests/text.rs
new file mode 100644
index 00000000..c5fbde8d
--- /dev/null
+++ b/helix-tui/tests/text.rs
@@ -0,0 +1,128 @@
+use helix_tui::text::{Span, Spans, StyledGrapheme, Text};
+use helix_view::graphics::{Color, Modifier, Style};
+
+// Text
+#[test]
+fn text_width() {
+ let text = Text::from("The first line\nThe second line");
+ assert_eq!(15, text.width());
+}
+
+#[test]
+fn text_height() {
+ let text = Text::from("The first line\nThe second line");
+ assert_eq!(2, text.height());
+}
+
+#[test]
+fn patch_style() {
+ let style1 = Style::default().fg(Color::Yellow);
+ let style2 = Style::default().fg(Color::Yellow).bg(Color::Black);
+ let mut half_styled_text =
+ Text::styled(String::from("The first line\nThe second line"), style1);
+ let full_styled_text = Text::styled(String::from("The first line\nThe second line"), style2);
+ assert_ne!(half_styled_text, full_styled_text);
+
+ half_styled_text.patch_style(Style::default().bg(Color::Black));
+ assert_eq!(half_styled_text, full_styled_text);
+}
+
+#[test]
+fn set_style() {
+ let style = Style::default()
+ .fg(Color::Yellow)
+ .add_modifier(Modifier::ITALIC);
+ let mut raw_text = Text::raw("The first line\nThe second line");
+ let styled_text = Text::styled(String::from("The first line\nThe second line"), style);
+ assert_ne!(raw_text, styled_text);
+
+ raw_text.set_style(style);
+ assert_eq!(raw_text, styled_text);
+}
+
+#[test]
+fn text_extend() {
+ let style = Style::default()
+ .fg(Color::Yellow)
+ .add_modifier(Modifier::ITALIC);
+ let mut text = Text::from("The first line\nThe second line");
+ assert_eq!(2, text.height());
+
+ // Adding two more unstyled lines
+ text.extend(Text::raw("These are two\nmore lines!"));
+ assert_eq!(4, text.height());
+
+ // Adding a final two styled lines
+ text.extend(Text::styled("Some more lines\nnow with more style!", style));
+ assert_eq!(6, text.height());
+}
+
+// Span
+
+#[test]
+fn styled_graphemes() {
+ let style = Style::default().fg(Color::Yellow);
+ let span = Span::styled("Text", style);
+ let style = Style::default().fg(Color::Green).bg(Color::Black);
+ let styled_graphemes = span.styled_graphemes(style);
+ assert_eq!(
+ vec![
+ StyledGrapheme {
+ symbol: "T",
+ style: Style {
+ fg: Some(Color::Yellow),
+ bg: Some(Color::Black),
+ underline_color: None,
+ underline_style: None,
+ add_modifier: Modifier::empty(),
+ sub_modifier: Modifier::empty(),
+ },
+ },
+ StyledGrapheme {
+ symbol: "e",
+ style: Style {
+ fg: Some(Color::Yellow),
+ bg: Some(Color::Black),
+ underline_color: None,
+ underline_style: None,
+ add_modifier: Modifier::empty(),
+ sub_modifier: Modifier::empty(),
+ },
+ },
+ StyledGrapheme {
+ symbol: "x",
+ style: Style {
+ fg: Some(Color::Yellow),
+ bg: Some(Color::Black),
+ underline_color: None,
+ underline_style: None,
+ add_modifier: Modifier::empty(),
+ sub_modifier: Modifier::empty(),
+ },
+ },
+ StyledGrapheme {
+ symbol: "t",
+ style: Style {
+ fg: Some(Color::Yellow),
+ bg: Some(Color::Black),
+ underline_color: None,
+ underline_style: None,
+ add_modifier: Modifier::empty(),
+ sub_modifier: Modifier::empty(),
+ },
+ },
+ ],
+ styled_graphemes.collect::<Vec<StyledGrapheme>>()
+ );
+}
+
+// Spans
+
+#[test]
+fn spans_width() {
+ let spans = Spans::from(vec![
+ Span::styled("My", Style::default().fg(Color::Yellow)),
+ Span::raw(" text"),
+ ]);
+ assert_eq!(7, spans.width());
+}