2// backend::TestBackend,
5// text::{Span, Spans, Text},
6// widgets::{Block, Borders, Paragraph, Wrap},
10// const SAMPLE_STRING: &str = "The library is based on the principle of immediate rendering with \
11// intermediate buffers. This means that at each new frame you should build all widgets that are \
12// supposed to be part of the UI. While providing a great flexibility for rich and \
13// interactive UI, this may introduce overhead for highly dynamic content.";
16// fn widgets_paragraph_can_wrap_its_content() {
17// let test_case = |alignment, expected| {
18// let backend = TestBackend::new(20, 10);
19// let mut terminal = Terminal::new(backend).unwrap();
23// let size = f.size();
24// let text = vec![Spans::from(SAMPLE_STRING)];
25// let paragraph = Paragraph::new(text)
26// .block(Block::default().borders(Borders::ALL))
27// .alignment(alignment)
28// .wrap(Wrap { trim: true });
29// f.render_widget(paragraph, size);
32// terminal.backend().assert_buffer(&expected);
37// Buffer::with_lines(vec![
38// "┌──────────────────┐",
39// "│The library is │",
43// "│rendering with │",
46// "│means that at each│",
47// "└──────────────────┘",
52// Buffer::with_lines(vec![
53// "┌──────────────────┐",
54// "│ The library is│",
58// "│ rendering with│",
61// "│means that at each│",
62// "└──────────────────┘",
67// Buffer::with_lines(vec![
68// "┌──────────────────┐",
69// "│ The library is │",
73// "│ rendering with │",
75// "│ buffers. This │",
76// "│means that at each│",
77// "└──────────────────┘",
83// fn widgets_paragraph_renders_double_width_graphemes() {
84// let backend = TestBackend::new(10, 10);
85// let mut terminal = Terminal::new(backend).unwrap();
87// let s = "コンピュータ上で文字を扱う場合、典型的には文字による通信を行う場合にその両端点では、";
90// let size = f.size();
91// let text = vec![Spans::from(s)];
92// let paragraph = Paragraph::new(text)
93// .block(Block::default().borders(Borders::ALL))
94// .wrap(Wrap { trim: true });
95// f.render_widget(paragraph, size);
99// let expected = Buffer::with_lines(vec![
111// terminal.backend().assert_buffer(&expected);
115// fn widgets_paragraph_renders_mixed_width_graphemes() {
116// let backend = TestBackend::new(10, 7);
117// let mut terminal = Terminal::new(backend).unwrap();
119// let s = "aコンピュータ上で文字を扱う場合、";
122// let size = f.size();
123// let text = vec![Spans::from(s)];
124// let paragraph = Paragraph::new(text)
125// .block(Block::default().borders(Borders::ALL))
126// .wrap(Wrap { trim: true });
127// f.render_widget(paragraph, size);
131// let expected = Buffer::with_lines(vec![
132// // The internal width is 8 so only 4 slots for double-width characters.
134// "│aコンピ │", // Here we have 1 latin character so only 3 double-width ones can fit.
141// terminal.backend().assert_buffer(&expected);
145// fn widgets_paragraph_can_wrap_with_a_trailing_nbsp() {
146// let nbsp: &str = "\u{00a0}";
147// let line = Spans::from(vec![Span::raw("NBSP"), Span::raw(nbsp)]);
148// let backend = TestBackend::new(20, 3);
149// let mut terminal = Terminal::new(backend).unwrap();
150// let expected = Buffer::with_lines(vec![
151// "┌──────────────────┐",
153// "└──────────────────┘",
157// let size = f.size();
159// let paragraph = Paragraph::new(line).block(Block::default().borders(Borders::ALL));
160// f.render_widget(paragraph, size);
163// terminal.backend().assert_buffer(&expected);
166// fn widgets_paragraph_can_scroll_horizontally() {
167// let test_case = |alignment, scroll, expected| {
168// let backend = TestBackend::new(20, 10);
169// let mut terminal = Terminal::new(backend).unwrap();
173// let size = f.size();
174// let text = Text::from(
175// "段落现在可以水平滚动了!\nParagraph can scroll horizontally!\nShort line",
177// let paragraph = Paragraph::new(text)
178// .block(Block::default().borders(Borders::ALL))
179// .alignment(alignment)
181// f.render_widget(paragraph, size);
184// terminal.backend().assert_buffer(&expected);
190// Buffer::with_lines(vec![
191// "┌──────────────────┐",
193// "│ph can scroll hori│",
200// "└──────────────────┘",
203// // only support Alignment::Left
207// Buffer::with_lines(vec![
208// "┌──────────────────┐",
210// "│Paragraph can scro│",
217// "└──────────────────┘",
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list