tui: Disable tests for now.

This commit is contained in:
Blaž Hrastnik 2021-05-10 17:30:06 +09:00
parent dbbc341931
commit e541a75630
5 changed files with 1208 additions and 1208 deletions

View file

@ -58,17 +58,17 @@
//! use helix_tui::layout::{Layout, Constraint, Direction};
//!
//! fn main() -> Result<(), io::Error> {
//! terminal::enable_raw_mode()?;
//! terminal::enable_raw_mode().unwrap();
//! let stdout = io::stdout();
//! let backend = CrosstermBackend::new(stdout);
//! let mut terminal = Terminal::new(backend)?;
//! terminal.draw(|f| {
//! let size = f.size();
//! let block = Block::default()
//! .title("Block")
//! .borders(Borders::ALL);
//! f.render_widget(block, size);
//! })?;
//! // terminal.draw(|f| {
//! // let size = f.size();
//! // let block = Block::default()
//! // .title("Block")
//! // .borders(Borders::ALL);
//! // f.render_widget(block, size);
//! // })?;
//! Ok(())
//! }
//! ```
@ -88,31 +88,31 @@
//! use helix_tui::layout::{Layout, Constraint, Direction};
//!
//! fn main() -> Result<(), io::Error> {
//! terminal::enable_raw_mode()?;
//! terminal::enable_raw_mode().unwrap();
//! let stdout = io::stdout();
//! let backend = CrosstermBackend::new(stdout);
//! let mut terminal = Terminal::new(backend)?;
//! terminal.draw(|f| {
//! let chunks = Layout::default()
//! .direction(Direction::Vertical)
//! .margin(1)
//! .constraints(
//! [
//! Constraint::Percentage(10),
//! Constraint::Percentage(80),
//! Constraint::Percentage(10)
//! ].as_ref()
//! )
//! .split(f.size());
//! let block = Block::default()
//! .title("Block")
//! .borders(Borders::ALL);
//! f.render_widget(block, chunks[0]);
//! let block = Block::default()
//! .title("Block 2")
//! .borders(Borders::ALL);
//! f.render_widget(block, chunks[1]);
//! })?;
//! // terminal.draw(|f| {
//! // let chunks = Layout::default()
//! // .direction(Direction::Vertical)
//! // .margin(1)
//! // .constraints(
//! // [
//! // Constraint::Percentage(10),
//! // Constraint::Percentage(80),
//! // Constraint::Percentage(10)
//! // ].as_ref()
//! // )
//! // .split(f.size());
//! // let block = Block::default()
//! // .title("Block")
//! // .borders(Borders::ALL);
//! // f.render_widget(block, chunks[0]);
//! // let block = Block::default()
//! // .title("Block 2")
//! // .borders(Borders::ALL);
//! // f.render_widget(block, chunks[1]);
//! // })?;
//! Ok(())
//! }
//! ```

View file

@ -1,213 +1,213 @@
use helix_tui::{
backend::TestBackend,
buffer::Buffer,
layout::Rect,
style::{Color, Style},
text::Span,
widgets::{Block, Borders},
Terminal,
};
// use helix_tui::{
// backend::TestBackend,
// buffer::Buffer,
// layout::Rect,
// style::{Color, Style},
// text::Span,
// widgets::{Block, Borders},
// Terminal,
// };
#[test]
fn widgets_block_renders() {
let backend = TestBackend::new(10, 10);
let mut terminal = Terminal::new(backend).unwrap();
terminal
.draw(|f| {
let block = Block::default()
.title(Span::styled("Title", Style::default().fg(Color::LightBlue)))
.borders(Borders::ALL);
f.render_widget(
block,
Rect {
x: 0,
y: 0,
width: 8,
height: 8,
},
);
})
.unwrap();
let mut expected = Buffer::with_lines(vec![
"┌Title─┐ ",
"│ │ ",
"│ │ ",
"│ │ ",
"│ │ ",
"│ │ ",
"│ │ ",
"└──────┘ ",
" ",
" ",
]);
for x in 1..=5 {
expected.get_mut(x, 0).set_fg(Color::LightBlue);
}
terminal.backend().assert_buffer(&expected);
}
// #[test]
// fn widgets_block_renders() {
// let backend = TestBackend::new(10, 10);
// let mut terminal = Terminal::new(backend).unwrap();
// terminal
// .draw(|f| {
// let block = Block::default()
// .title(Span::styled("Title", Style::default().fg(Color::LightBlue)))
// .borders(Borders::ALL);
// f.render_widget(
// block,
// Rect {
// x: 0,
// y: 0,
// width: 8,
// height: 8,
// },
// );
// })
// .unwrap();
// let mut expected = Buffer::with_lines(vec![
// "┌Title─┐ ",
// "│ │ ",
// "│ │ ",
// "│ │ ",
// "│ │ ",
// "│ │ ",
// "│ │ ",
// "└──────┘ ",
// " ",
// " ",
// ]);
// for x in 1..=5 {
// expected.get_mut(x, 0).set_fg(Color::LightBlue);
// }
// terminal.backend().assert_buffer(&expected);
// }
#[test]
fn widgets_block_renders_on_small_areas() {
let test_case = |block, area: Rect, expected| {
let backend = TestBackend::new(area.width, area.height);
let mut terminal = Terminal::new(backend).unwrap();
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
terminal.backend().assert_buffer(&expected);
};
// #[test]
// fn widgets_block_renders_on_small_areas() {
// let test_case = |block, area: Rect, expected| {
// let backend = TestBackend::new(area.width, area.height);
// let mut terminal = Terminal::new(backend).unwrap();
// terminal
// .draw(|f| {
// f.render_widget(block, area);
// })
// .unwrap();
// terminal.backend().assert_buffer(&expected);
// };
let one_cell_test_cases = [
(Borders::NONE, "T"),
(Borders::LEFT, ""),
(Borders::TOP, "T"),
(Borders::RIGHT, ""),
(Borders::BOTTOM, "T"),
(Borders::ALL, ""),
];
for (borders, symbol) in one_cell_test_cases.iter().cloned() {
test_case(
Block::default().title("Test").borders(borders),
Rect {
x: 0,
y: 0,
width: 0,
height: 0,
},
Buffer::empty(Rect {
x: 0,
y: 0,
width: 0,
height: 0,
}),
);
test_case(
Block::default().title("Test").borders(borders),
Rect {
x: 0,
y: 0,
width: 1,
height: 0,
},
Buffer::empty(Rect {
x: 0,
y: 0,
width: 1,
height: 0,
}),
);
test_case(
Block::default().title("Test").borders(borders),
Rect {
x: 0,
y: 0,
width: 0,
height: 1,
},
Buffer::empty(Rect {
x: 0,
y: 0,
width: 0,
height: 1,
}),
);
test_case(
Block::default().title("Test").borders(borders),
Rect {
x: 0,
y: 0,
width: 1,
height: 1,
},
Buffer::with_lines(vec![symbol]),
);
}
test_case(
Block::default().title("Test").borders(Borders::LEFT),
Rect {
x: 0,
y: 0,
width: 4,
height: 1,
},
Buffer::with_lines(vec!["│Tes"]),
);
test_case(
Block::default().title("Test").borders(Borders::RIGHT),
Rect {
x: 0,
y: 0,
width: 4,
height: 1,
},
Buffer::with_lines(vec!["Tes│"]),
);
test_case(
Block::default().title("Test").borders(Borders::RIGHT),
Rect {
x: 0,
y: 0,
width: 4,
height: 1,
},
Buffer::with_lines(vec!["Tes│"]),
);
test_case(
Block::default()
.title("Test")
.borders(Borders::LEFT | Borders::RIGHT),
Rect {
x: 0,
y: 0,
width: 4,
height: 1,
},
Buffer::with_lines(vec!["│Te│"]),
);
test_case(
Block::default().title("Test").borders(Borders::TOP),
Rect {
x: 0,
y: 0,
width: 4,
height: 1,
},
Buffer::with_lines(vec!["Test"]),
);
test_case(
Block::default().title("Test").borders(Borders::TOP),
Rect {
x: 0,
y: 0,
width: 5,
height: 1,
},
Buffer::with_lines(vec!["Test─"]),
);
test_case(
Block::default()
.title("Test")
.borders(Borders::LEFT | Borders::TOP),
Rect {
x: 0,
y: 0,
width: 5,
height: 1,
},
Buffer::with_lines(vec!["┌Test"]),
);
test_case(
Block::default()
.title("Test")
.borders(Borders::LEFT | Borders::TOP),
Rect {
x: 0,
y: 0,
width: 6,
height: 1,
},
Buffer::with_lines(vec!["┌Test─"]),
);
}
// let one_cell_test_cases = [
// (Borders::NONE, "T"),
// (Borders::LEFT, "│"),
// (Borders::TOP, "T"),
// (Borders::RIGHT, "│"),
// (Borders::BOTTOM, "T"),
// (Borders::ALL, "┌"),
// ];
// for (borders, symbol) in one_cell_test_cases.iter().cloned() {
// test_case(
// Block::default().title("Test").borders(borders),
// Rect {
// x: 0,
// y: 0,
// width: 0,
// height: 0,
// },
// Buffer::empty(Rect {
// x: 0,
// y: 0,
// width: 0,
// height: 0,
// }),
// );
// test_case(
// Block::default().title("Test").borders(borders),
// Rect {
// x: 0,
// y: 0,
// width: 1,
// height: 0,
// },
// Buffer::empty(Rect {
// x: 0,
// y: 0,
// width: 1,
// height: 0,
// }),
// );
// test_case(
// Block::default().title("Test").borders(borders),
// Rect {
// x: 0,
// y: 0,
// width: 0,
// height: 1,
// },
// Buffer::empty(Rect {
// x: 0,
// y: 0,
// width: 0,
// height: 1,
// }),
// );
// test_case(
// Block::default().title("Test").borders(borders),
// Rect {
// x: 0,
// y: 0,
// width: 1,
// height: 1,
// },
// Buffer::with_lines(vec![symbol]),
// );
// }
// test_case(
// Block::default().title("Test").borders(Borders::LEFT),
// Rect {
// x: 0,
// y: 0,
// width: 4,
// height: 1,
// },
// Buffer::with_lines(vec!["│Tes"]),
// );
// test_case(
// Block::default().title("Test").borders(Borders::RIGHT),
// Rect {
// x: 0,
// y: 0,
// width: 4,
// height: 1,
// },
// Buffer::with_lines(vec!["Tes│"]),
// );
// test_case(
// Block::default().title("Test").borders(Borders::RIGHT),
// Rect {
// x: 0,
// y: 0,
// width: 4,
// height: 1,
// },
// Buffer::with_lines(vec!["Tes│"]),
// );
// test_case(
// Block::default()
// .title("Test")
// .borders(Borders::LEFT | Borders::RIGHT),
// Rect {
// x: 0,
// y: 0,
// width: 4,
// height: 1,
// },
// Buffer::with_lines(vec!["│Te│"]),
// );
// test_case(
// Block::default().title("Test").borders(Borders::TOP),
// Rect {
// x: 0,
// y: 0,
// width: 4,
// height: 1,
// },
// Buffer::with_lines(vec!["Test"]),
// );
// test_case(
// Block::default().title("Test").borders(Borders::TOP),
// Rect {
// x: 0,
// y: 0,
// width: 5,
// height: 1,
// },
// Buffer::with_lines(vec!["Test─"]),
// );
// test_case(
// Block::default()
// .title("Test")
// .borders(Borders::LEFT | Borders::TOP),
// Rect {
// x: 0,
// y: 0,
// width: 5,
// height: 1,
// },
// Buffer::with_lines(vec!["┌Test"]),
// );
// test_case(
// Block::default()
// .title("Test")
// .borders(Borders::LEFT | Borders::TOP),
// Rect {
// x: 0,
// y: 0,
// width: 6,
// height: 1,
// },
// Buffer::with_lines(vec!["┌Test─"]),
// );
// }

View file

@ -1,88 +1,88 @@
use helix_tui::{
backend::TestBackend,
buffer::Buffer,
layout::Rect,
style::{Color, Style},
symbols,
widgets::{Block, Borders, List, ListItem, ListState},
Terminal,
};
// use helix_tui::{
// backend::TestBackend,
// buffer::Buffer,
// layout::Rect,
// style::{Color, Style},
// symbols,
// widgets::{Block, Borders, List, ListItem, ListState},
// Terminal,
// };
#[test]
fn widgets_list_should_highlight_the_selected_item() {
let backend = TestBackend::new(10, 3);
let mut terminal = Terminal::new(backend).unwrap();
let mut state = ListState::default();
state.select(Some(1));
terminal
.draw(|f| {
let size = f.size();
let items = vec![
ListItem::new("Item 1"),
ListItem::new("Item 2"),
ListItem::new("Item 3"),
];
let list = List::new(items)
.highlight_style(Style::default().bg(Color::Yellow))
.highlight_symbol(">> ");
f.render_stateful_widget(list, size, &mut state);
})
.unwrap();
let mut expected = Buffer::with_lines(vec![" Item 1 ", ">> Item 2 ", " Item 3 "]);
for x in 0..10 {
expected.get_mut(x, 1).set_bg(Color::Yellow);
}
terminal.backend().assert_buffer(&expected);
}
// #[test]
// fn widgets_list_should_highlight_the_selected_item() {
// let backend = TestBackend::new(10, 3);
// let mut terminal = Terminal::new(backend).unwrap();
// let mut state = ListState::default();
// state.select(Some(1));
// terminal
// .draw(|f| {
// let size = f.size();
// let items = vec![
// ListItem::new("Item 1"),
// ListItem::new("Item 2"),
// ListItem::new("Item 3"),
// ];
// let list = List::new(items)
// .highlight_style(Style::default().bg(Color::Yellow))
// .highlight_symbol(">> ");
// f.render_stateful_widget(list, size, &mut state);
// })
// .unwrap();
// let mut expected = Buffer::with_lines(vec![" Item 1 ", ">> Item 2 ", " Item 3 "]);
// for x in 0..10 {
// expected.get_mut(x, 1).set_bg(Color::Yellow);
// }
// terminal.backend().assert_buffer(&expected);
// }
#[test]
fn widgets_list_should_truncate_items() {
let backend = TestBackend::new(10, 2);
let mut terminal = Terminal::new(backend).unwrap();
// #[test]
// fn widgets_list_should_truncate_items() {
// let backend = TestBackend::new(10, 2);
// let mut terminal = Terminal::new(backend).unwrap();
struct TruncateTestCase<'a> {
selected: Option<usize>,
items: Vec<ListItem<'a>>,
expected: Buffer,
}
// struct TruncateTestCase<'a> {
// selected: Option<usize>,
// items: Vec<ListItem<'a>>,
// expected: Buffer,
// }
let cases = vec![
// An item is selected
TruncateTestCase {
selected: Some(0),
items: vec![
ListItem::new("A very long line"),
ListItem::new("A very long line"),
],
expected: Buffer::with_lines(vec![
format!(">> A ve{} ", symbols::line::VERTICAL),
format!(" A ve{} ", symbols::line::VERTICAL),
]),
},
// No item is selected
TruncateTestCase {
selected: None,
items: vec![
ListItem::new("A very long line"),
ListItem::new("A very long line"),
],
expected: Buffer::with_lines(vec![
format!("A very {} ", symbols::line::VERTICAL),
format!("A very {} ", symbols::line::VERTICAL),
]),
},
];
for case in cases {
let mut state = ListState::default();
state.select(case.selected);
terminal
.draw(|f| {
let list = List::new(case.items.clone())
.block(Block::default().borders(Borders::RIGHT))
.highlight_symbol(">> ");
f.render_stateful_widget(list, Rect::new(0, 0, 8, 2), &mut state);
})
.unwrap();
terminal.backend().assert_buffer(&case.expected);
}
}
// let cases = vec![
// // An item is selected
// TruncateTestCase {
// selected: Some(0),
// items: vec![
// ListItem::new("A very long line"),
// ListItem::new("A very long line"),
// ],
// expected: Buffer::with_lines(vec![
// format!(">> A ve{} ", symbols::line::VERTICAL),
// format!(" A ve{} ", symbols::line::VERTICAL),
// ]),
// },
// // No item is selected
// TruncateTestCase {
// selected: None,
// items: vec![
// ListItem::new("A very long line"),
// ListItem::new("A very long line"),
// ],
// expected: Buffer::with_lines(vec![
// format!("A very {} ", symbols::line::VERTICAL),
// format!("A very {} ", symbols::line::VERTICAL),
// ]),
// },
// ];
// for case in cases {
// let mut state = ListState::default();
// state.select(case.selected);
// terminal
// .draw(|f| {
// let list = List::new(case.items.clone())
// .block(Block::default().borders(Borders::RIGHT))
// .highlight_symbol(">> ");
// f.render_stateful_widget(list, Rect::new(0, 0, 8, 2), &mut state);
// })
// .unwrap();
// terminal.backend().assert_buffer(&case.expected);
// }
// }

View file

@ -1,220 +1,220 @@
use helix_tui::{
backend::TestBackend,
buffer::Buffer,
layout::Alignment,
text::{Span, Spans, Text},
widgets::{Block, Borders, Paragraph, Wrap},
Terminal,
};
// use helix_tui::{
// backend::TestBackend,
// buffer::Buffer,
// layout::Alignment,
// text::{Span, Spans, Text},
// widgets::{Block, Borders, Paragraph, Wrap},
// Terminal,
// };
const SAMPLE_STRING: &str = "The library is based on the principle of immediate rendering with \
intermediate buffers. This means that at each new frame you should build all widgets that are \
supposed to be part of the UI. While providing a great flexibility for rich and \
interactive UI, this may introduce overhead for highly dynamic content.";
// const SAMPLE_STRING: &str = "The library is based on the principle of immediate rendering with \
// intermediate buffers. This means that at each new frame you should build all widgets that are \
// supposed to be part of the UI. While providing a great flexibility for rich and \
// interactive UI, this may introduce overhead for highly dynamic content.";
#[test]
fn widgets_paragraph_can_wrap_its_content() {
let test_case = |alignment, expected| {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
// #[test]
// fn widgets_paragraph_can_wrap_its_content() {
// let test_case = |alignment, expected| {
// let backend = TestBackend::new(20, 10);
// let mut terminal = Terminal::new(backend).unwrap();
terminal
.draw(|f| {
let size = f.size();
let text = vec![Spans::from(SAMPLE_STRING)];
let paragraph = Paragraph::new(text)
.block(Block::default().borders(Borders::ALL))
.alignment(alignment)
.wrap(Wrap { trim: true });
f.render_widget(paragraph, size);
})
.unwrap();
terminal.backend().assert_buffer(&expected);
};
// terminal
// .draw(|f| {
// let size = f.size();
// let text = vec![Spans::from(SAMPLE_STRING)];
// let paragraph = Paragraph::new(text)
// .block(Block::default().borders(Borders::ALL))
// .alignment(alignment)
// .wrap(Wrap { trim: true });
// f.render_widget(paragraph, size);
// })
// .unwrap();
// terminal.backend().assert_buffer(&expected);
// };
test_case(
Alignment::Left,
Buffer::with_lines(vec![
"┌──────────────────┐",
"│The library is │",
"│based on the │",
"│principle of │",
"│immediate │",
"│rendering with │",
"│intermediate │",
"│buffers. This │",
"│means that at each│",
"└──────────────────┘",
]),
);
test_case(
Alignment::Right,
Buffer::with_lines(vec![
"┌──────────────────┐",
"│ The library is│",
"│ based on the│",
"│ principle of│",
"│ immediate│",
"│ rendering with│",
"│ intermediate│",
"│ buffers. This│",
"│means that at each│",
"└──────────────────┘",
]),
);
test_case(
Alignment::Center,
Buffer::with_lines(vec![
"┌──────────────────┐",
"│ The library is │",
"│ based on the │",
"│ principle of │",
"│ immediate │",
"│ rendering with │",
"│ intermediate │",
"│ buffers. This │",
"│means that at each│",
"└──────────────────┘",
]),
);
}
// test_case(
// Alignment::Left,
// Buffer::with_lines(vec![
// "┌──────────────────┐",
// "│The library is │",
// "│based on the │",
// "│principle of │",
// "│immediate │",
// "│rendering with │",
// "│intermediate │",
// "│buffers. This │",
// "│means that at each│",
// "└──────────────────┘",
// ]),
// );
// test_case(
// Alignment::Right,
// Buffer::with_lines(vec![
// "┌──────────────────┐",
// "│ The library is│",
// "│ based on the│",
// "│ principle of│",
// "│ immediate│",
// "│ rendering with│",
// "│ intermediate│",
// "│ buffers. This│",
// "│means that at each│",
// "└──────────────────┘",
// ]),
// );
// test_case(
// Alignment::Center,
// Buffer::with_lines(vec![
// "┌──────────────────┐",
// "│ The library is │",
// "│ based on the │",
// "│ principle of │",
// "│ immediate │",
// "│ rendering with │",
// "│ intermediate │",
// "│ buffers. This │",
// "│means that at each│",
// "└──────────────────┘",
// ]),
// );
// }
#[test]
fn widgets_paragraph_renders_double_width_graphemes() {
let backend = TestBackend::new(10, 10);
let mut terminal = Terminal::new(backend).unwrap();
// #[test]
// fn widgets_paragraph_renders_double_width_graphemes() {
// let backend = TestBackend::new(10, 10);
// let mut terminal = Terminal::new(backend).unwrap();
let s = "コンピュータ上で文字を扱う場合、典型的には文字による通信を行う場合にその両端点では、";
terminal
.draw(|f| {
let size = f.size();
let text = vec![Spans::from(s)];
let paragraph = Paragraph::new(text)
.block(Block::default().borders(Borders::ALL))
.wrap(Wrap { trim: true });
f.render_widget(paragraph, size);
})
.unwrap();
// let s = "コンピュータ上で文字を扱う場合、典型的には文字による通信を行う場合にその両端点では、";
// terminal
// .draw(|f| {
// let size = f.size();
// let text = vec![Spans::from(s)];
// let paragraph = Paragraph::new(text)
// .block(Block::default().borders(Borders::ALL))
// .wrap(Wrap { trim: true });
// f.render_widget(paragraph, size);
// })
// .unwrap();
let expected = Buffer::with_lines(vec![
"┌────────┐",
"│コンピュ│",
"│ータ上で│",
"│文字を扱│",
"│う場合、│",
"│典型的に│",
"│は文字に│",
"│よる通信│",
"│を行う場│",
"└────────┘",
]);
terminal.backend().assert_buffer(&expected);
}
// let expected = Buffer::with_lines(vec![
// "┌────────┐",
// "│コンピュ│",
// "│ータ上で│",
// "│文字を扱│",
// "│う場合、│",
// "│典型的に│",
// "│は文字に│",
// "│よる通信│",
// "│を行う場│",
// "└────────┘",
// ]);
// terminal.backend().assert_buffer(&expected);
// }
#[test]
fn widgets_paragraph_renders_mixed_width_graphemes() {
let backend = TestBackend::new(10, 7);
let mut terminal = Terminal::new(backend).unwrap();
// #[test]
// fn widgets_paragraph_renders_mixed_width_graphemes() {
// let backend = TestBackend::new(10, 7);
// let mut terminal = Terminal::new(backend).unwrap();
let s = "aコンピュータ上で文字を扱う場合、";
terminal
.draw(|f| {
let size = f.size();
let text = vec![Spans::from(s)];
let paragraph = Paragraph::new(text)
.block(Block::default().borders(Borders::ALL))
.wrap(Wrap { trim: true });
f.render_widget(paragraph, size);
})
.unwrap();
// let s = "aコンピュータ上で文字を扱う場合、";
// terminal
// .draw(|f| {
// let size = f.size();
// let text = vec![Spans::from(s)];
// let paragraph = Paragraph::new(text)
// .block(Block::default().borders(Borders::ALL))
// .wrap(Wrap { trim: true });
// f.render_widget(paragraph, size);
// })
// .unwrap();
let expected = Buffer::with_lines(vec![
// The internal width is 8 so only 4 slots for double-width characters.
"┌────────┐",
"│aコンピ │", // Here we have 1 latin character so only 3 double-width ones can fit.
"│ュータ上│",
"│で文字を│",
"│扱う場合│",
"│、 │",
"└────────┘",
]);
terminal.backend().assert_buffer(&expected);
}
// let expected = Buffer::with_lines(vec![
// // The internal width is 8 so only 4 slots for double-width characters.
// "┌────────┐",
// "│aコンピ │", // Here we have 1 latin character so only 3 double-width ones can fit.
// "│ュータ上│",
// "│で文字を│",
// "│扱う場合│",
// "│、 │",
// "└────────┘",
// ]);
// terminal.backend().assert_buffer(&expected);
// }
#[test]
fn widgets_paragraph_can_wrap_with_a_trailing_nbsp() {
let nbsp: &str = "\u{00a0}";
let line = Spans::from(vec![Span::raw("NBSP"), Span::raw(nbsp)]);
let backend = TestBackend::new(20, 3);
let mut terminal = Terminal::new(backend).unwrap();
let expected = Buffer::with_lines(vec![
"┌──────────────────┐",
"│NBSP\u{00a0}",
"└──────────────────┘",
]);
terminal
.draw(|f| {
let size = f.size();
// #[test]
// fn widgets_paragraph_can_wrap_with_a_trailing_nbsp() {
// let nbsp: &str = "\u{00a0}";
// let line = Spans::from(vec![Span::raw("NBSP"), Span::raw(nbsp)]);
// let backend = TestBackend::new(20, 3);
// let mut terminal = Terminal::new(backend).unwrap();
// let expected = Buffer::with_lines(vec![
// "┌──────────────────┐",
// "│NBSP\u{00a0} │",
// "└──────────────────┘",
// ]);
// terminal
// .draw(|f| {
// let size = f.size();
let paragraph = Paragraph::new(line).block(Block::default().borders(Borders::ALL));
f.render_widget(paragraph, size);
})
.unwrap();
terminal.backend().assert_buffer(&expected);
}
#[test]
fn widgets_paragraph_can_scroll_horizontally() {
let test_case = |alignment, scroll, expected| {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
// let paragraph = Paragraph::new(line).block(Block::default().borders(Borders::ALL));
// f.render_widget(paragraph, size);
// })
// .unwrap();
// terminal.backend().assert_buffer(&expected);
// }
// #[test]
// fn widgets_paragraph_can_scroll_horizontally() {
// let test_case = |alignment, scroll, expected| {
// let backend = TestBackend::new(20, 10);
// let mut terminal = Terminal::new(backend).unwrap();
terminal
.draw(|f| {
let size = f.size();
let text = Text::from(
"段落现在可以水平滚动了!\nParagraph can scroll horizontally!\nShort line",
);
let paragraph = Paragraph::new(text)
.block(Block::default().borders(Borders::ALL))
.alignment(alignment)
.scroll(scroll);
f.render_widget(paragraph, size);
})
.unwrap();
terminal.backend().assert_buffer(&expected);
};
// terminal
// .draw(|f| {
// let size = f.size();
// let text = Text::from(
// "段落现在可以水平滚动了!\nParagraph can scroll horizontally!\nShort line",
// );
// let paragraph = Paragraph::new(text)
// .block(Block::default().borders(Borders::ALL))
// .alignment(alignment)
// .scroll(scroll);
// f.render_widget(paragraph, size);
// })
// .unwrap();
// terminal.backend().assert_buffer(&expected);
// };
test_case(
Alignment::Left,
(0, 7),
Buffer::with_lines(vec![
"┌──────────────────┐",
"│在可以水平滚动了!│",
"│ph can scroll hori│",
"│ine │",
"│ │",
"│ │",
"│ │",
"│ │",
"│ │",
"└──────────────────┘",
]),
);
// only support Alignment::Left
test_case(
Alignment::Right,
(0, 7),
Buffer::with_lines(vec![
"┌──────────────────┐",
"│段落现在可以水平滚│",
"│Paragraph can scro│",
"│ Short line│",
"│ │",
"│ │",
"│ │",
"│ │",
"│ │",
"└──────────────────┘",
]),
);
}
// test_case(
// Alignment::Left,
// (0, 7),
// Buffer::with_lines(vec![
// "┌──────────────────┐",
// "│在可以水平滚动了!│",
// "│ph can scroll hori│",
// "│ine │",
// "│ │",
// "│ │",
// "│ │",
// "│ │",
// "│ │",
// "└──────────────────┘",
// ]),
// );
// // only support Alignment::Left
// test_case(
// Alignment::Right,
// (0, 7),
// Buffer::with_lines(vec![
// "┌──────────────────┐",
// "│段落现在可以水平滚│",
// "│Paragraph can scro│",
// "│ Short line│",
// "│ │",
// "│ │",
// "│ │",
// "│ │",
// "│ │",
// "└──────────────────┘",
// ]),
// );
// }

File diff suppressed because it is too large Load diff