use revue::event::Key;
use revue::widget::textarea;
#[test]
fn test_textarea_insert_cjk_and_get_content() {
let mut t = textarea().focused(true);
t.insert_char('ν');
t.insert_char('κΈ');
assert_eq!(t.get_content(), "νκΈ");
}
#[test]
fn test_textarea_insert_emoji_cursor_position() {
let mut t = textarea().focused(true);
t.insert_char('π');
t.insert_char('!');
assert_eq!(t.get_content(), "π!");
let (_, col) = t.cursor_position();
assert_eq!(col, 2);
}
#[test]
fn test_textarea_backspace_cjk() {
let mut t = textarea().focused(true);
t.insert_char('κ°');
t.insert_char('λ');
t.insert_char('λ€');
assert_eq!(t.get_content(), "κ°λλ€");
t.delete_char_before();
assert_eq!(t.get_content(), "κ°λ");
t.delete_char_before();
assert_eq!(t.get_content(), "κ°");
}
#[test]
fn test_textarea_backspace_emoji() {
let mut t = textarea().focused(true);
t.insert_char('π');
t.insert_char('π₯');
assert_eq!(t.get_content(), "ππ₯");
t.delete_char_before();
assert_eq!(t.get_content(), "π");
}
#[test]
fn test_textarea_delete_at_cjk() {
let mut t = textarea().focused(true).content("νκΈν
μ€νΈ");
t.set_cursor(0, 0);
t.delete_char_at();
assert_eq!(t.get_content(), "κΈν
μ€νΈ");
t.delete_char_at();
assert_eq!(t.get_content(), "ν
μ€νΈ");
}
#[test]
fn test_textarea_insert_str_cjk_cursor() {
let mut t = textarea().focused(true);
t.insert_str("μλ
νμΈμ");
assert_eq!(t.get_content(), "μλ
νμΈμ");
let (_, col) = t.cursor_position();
assert_eq!(col, 5); }
#[test]
fn test_textarea_mixed_ascii_cjk() {
let mut t = textarea().focused(true);
t.insert_str("Hello");
t.insert_char('δΈ');
t.insert_char('η');
assert_eq!(t.get_content(), "HelloδΈη");
let (_, col) = t.cursor_position();
assert_eq!(col, 7);
}
#[test]
fn test_textarea_cursor_navigation_cjk() {
let mut t = textarea().focused(true).content("κ°λλ€λΌ");
t.set_cursor(0, 4);
t.handle_key(&Key::Left);
let (_, col) = t.cursor_position();
assert_eq!(col, 3);
t.handle_key(&Key::Home);
let (_, col) = t.cursor_position();
assert_eq!(col, 0);
t.handle_key(&Key::End);
let (_, col) = t.cursor_position();
assert_eq!(col, 4);
}
#[test]
fn test_textarea_insert_in_middle_cjk() {
let mut t = textarea().focused(true).content("κ°λ€");
t.set_cursor(0, 1);
t.insert_char('λ');
assert_eq!(t.get_content(), "κ°λλ€");
}
#[test]
fn test_textarea_newline_with_cjk() {
let mut t = textarea().focused(true).content("μλ
νμΈμ");
t.set_cursor(0, 2);
t.insert_char('\n');
assert_eq!(t.get_content(), "μλ
\nνμΈμ");
assert_eq!(t.line_count(), 2);
}
#[test]
fn test_textarea_multiline_insert_cjk() {
let mut t = textarea().focused(true);
t.insert_str("첫째μ€\nλμ§Έμ€");
assert_eq!(t.get_content(), "첫째μ€\nλμ§Έμ€");
assert_eq!(t.line_count(), 2);
}