use revue::layout::Rect;
use revue::render::Buffer;
use revue::style::Color;
use revue::widget::traits::RenderContext;
use revue::widget::{rating, Rating, RatingSize, RatingStyle, View};
#[test]
fn test_rating_new() {
let r = Rating::new();
assert_eq!(r.get_value(), 0.0, "초기 값은 0.0이어야 합니다");
}
#[test]
fn test_rating_default() {
let r = Rating::default();
assert_eq!(r.get_value(), 0.0);
}
#[test]
fn test_rating_builder_value() {
let r = Rating::new().value(3.5);
assert_eq!(r.get_value(), 3.5);
}
#[test]
fn test_rating_builder_max_value() {
let r = Rating::new().max_value(10);
let mut buffer = Buffer::new(30, 1);
let area = Rect::new(0, 0, 30, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '☆');
}
#[test]
fn test_rating_builder_style() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().style(RatingStyle::Heart).value(3.0);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '♥');
}
#[test]
fn test_rating_builder_size() {
let r = Rating::new().size(RatingSize::Large);
let mut buffer = Buffer::new(30, 1);
let area = Rect::new(0, 0, 30, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
}
#[test]
fn test_rating_builder_half_stars() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r1 = Rating::new().value(2.5).half_stars(false);
r1.render(&mut ctx);
assert_eq!(buffer.get(4, 0).unwrap().symbol, '☆');
}
#[test]
fn test_rating_builder_readonly() {
let r = Rating::new().readonly(true);
let _ = r;
}
#[test]
fn test_rating_builder_filled_color() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(3.0).filled_color(Color::RED);
r.render(&mut ctx);
let cell = buffer.get(0, 0).unwrap();
assert_eq!(cell.fg, Some(Color::RED));
}
#[test]
fn test_rating_builder_empty_color() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(0.0).empty_color(Color::BLUE);
r.render(&mut ctx);
let cell = buffer.get(0, 0).unwrap();
assert_eq!(cell.fg, Some(Color::BLUE));
}
#[test]
fn test_rating_builder_hover_color() {
let r = Rating::new().hover_color(Color::GREEN);
let _ = r;
}
#[test]
fn test_rating_builder_show_value() {
let mut buffer = Buffer::new(30, 1);
let area = Rect::new(0, 0, 30, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(3.5).show_value(true);
r.render(&mut ctx);
let text: String = (0..30)
.filter_map(|x| buffer.get(x, 0).map(|c| c.symbol))
.collect();
assert!(text.contains("3.5"));
}
#[test]
fn test_rating_builder_label() {
let mut buffer = Buffer::new(30, 1);
let area = Rect::new(0, 0, 30, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().label("Rate this:");
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, 'R');
assert_eq!(buffer.get(1, 0).unwrap().symbol, 'a');
}
#[test]
fn test_rating_builder_chain() {
let r = Rating::new()
.value(4.5)
.max_value(10)
.style(RatingStyle::Heart)
.size(RatingSize::Large)
.half_stars(true)
.readonly(false)
.show_value(true)
.label("Rating:");
assert_eq!(r.get_value(), 4.5);
let mut buffer = Buffer::new(50, 1);
let area = Rect::new(0, 0, 50, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, 'R'); }
#[test]
fn test_rating_helper_function() {
let r = rating().value(3.0);
assert_eq!(r.get_value(), 3.0);
}
#[test]
fn test_rating_five_star_preset() {
let r = Rating::five_star();
assert_eq!(r.get_value(), 0.0);
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
}
#[test]
fn test_rating_ten_star_preset() {
let r = Rating::ten_star();
assert_eq!(r.get_value(), 0.0);
let mut buffer = Buffer::new(30, 1);
let area = Rect::new(0, 0, 30, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
}
#[test]
fn test_rating_hearts_preset() {
let r = Rating::hearts().value(3.0);
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '♥');
}
#[test]
fn test_rating_thumbs_preset() {
let r = Rating::thumbs();
let mut buffer = Buffer::new(10, 1);
let area = Rect::new(0, 0, 10, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '👎'); }
#[test]
fn test_rating_set_value() {
let mut r = Rating::new();
r.set_value(3.5);
assert_eq!(r.get_value(), 3.5);
}
#[test]
fn test_rating_set_value_clamps_upper() {
let mut r = Rating::new().max_value(5);
r.set_value(10.0);
assert_eq!(r.get_value(), 5.0, "최대값으로 clamping되어야 합니다");
}
#[test]
fn test_rating_set_value_clamps_lower() {
let mut r = Rating::new();
r.set_value(-5.0);
assert_eq!(r.get_value(), 0.0, "0으로 clamping되어야 합니다");
}
#[test]
fn test_rating_builder_value_clamps() {
let r = Rating::new().value(100.0);
assert_eq!(r.get_value(), 5.0, "최대값으로 clamping되어야 합니다");
}
#[test]
fn test_rating_value_changes_when_max_decreases() {
let r = Rating::new().value(4.5).max_value(3);
assert_eq!(r.get_value(), 3.0, "최대값으로 조정되어야 합니다");
}
#[test]
fn test_rating_increment_full_star() {
let mut r = Rating::new().value(2.0).half_stars(false);
r.increment();
assert_eq!(r.get_value(), 3.0);
}
#[test]
fn test_rating_increment_half_star() {
let mut r = Rating::new().value(2.0).half_stars(true);
r.increment();
assert_eq!(r.get_value(), 2.5);
}
#[test]
fn test_rating_increment_clamps_at_max() {
let mut r = Rating::new().value(5.0).max_value(5);
r.increment();
assert_eq!(r.get_value(), 5.0, "최대값을 초과할 수 없습니다");
}
#[test]
fn test_rating_decrement_full_star() {
let mut r = Rating::new().value(3.0).half_stars(false);
r.decrement();
assert_eq!(r.get_value(), 2.0);
}
#[test]
fn test_rating_decrement_half_star() {
let mut r = Rating::new().value(2.5).half_stars(true);
r.decrement();
assert_eq!(r.get_value(), 2.0);
}
#[test]
fn test_rating_decrement_clamps_at_zero() {
let mut r = Rating::new().value(0.0);
r.decrement();
assert_eq!(r.get_value(), 0.0, "0 미만으로 내려갈 수 없습니다");
}
#[test]
fn test_rating_clear() {
let mut r = Rating::new().value(4.5);
r.clear();
assert_eq!(r.get_value(), 0.0);
}
#[test]
fn test_rating_increment_decrement_roundtrip() {
let mut r = Rating::new().value(2.5);
r.increment();
assert_eq!(r.get_value(), 3.0);
r.decrement();
assert_eq!(r.get_value(), 2.5);
}
#[test]
fn test_rating_set_hover_some() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let mut r = Rating::new();
r.set_hover(Some(3.5));
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '★');
assert_eq!(buffer.get(2, 0).unwrap().symbol, '★');
assert_eq!(buffer.get(4, 0).unwrap().symbol, '★');
assert_eq!(buffer.get(6, 0).unwrap().symbol, '⯪');
}
#[test]
fn test_rating_set_hover_none() {
let mut r = Rating::new();
r.set_hover(Some(3.5));
r.set_hover(None);
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '☆');
}
#[test]
fn test_rating_set_hover_clamps_upper() {
let mut r = Rating::new().max_value(5);
r.set_hover(Some(10.0));
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
assert_eq!(buffer.get(8, 0).unwrap().symbol, '★');
}
#[test]
fn test_rating_set_hover_clamps_lower() {
let mut r = Rating::new();
r.set_hover(Some(-1.0));
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '☆');
}
#[test]
fn test_rating_style_default() {
let style = RatingStyle::default();
assert_eq!(style, RatingStyle::Star);
}
#[test]
fn test_rating_size_default() {
let size = RatingSize::default();
assert_eq!(size, RatingSize::Medium);
}
#[test]
fn test_rating_render_zero_stars() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(0.0);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '☆');
}
#[test]
fn test_rating_render_full_stars() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(3.0);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '★');
assert_eq!(buffer.get(2, 0).unwrap().symbol, '★');
assert_eq!(buffer.get(4, 0).unwrap().symbol, '★');
assert_eq!(buffer.get(6, 0).unwrap().symbol, '☆');
}
#[test]
fn test_rating_render_half_star() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(2.5).half_stars(true);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '★');
assert_eq!(buffer.get(2, 0).unwrap().symbol, '★');
assert_eq!(buffer.get(4, 0).unwrap().symbol, '⯪');
}
#[test]
fn test_rating_render_max_rating() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(5.0).max_value(5);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '★');
assert_eq!(buffer.get(8, 0).unwrap().symbol, '★');
}
#[test]
fn test_rating_render_with_label() {
let mut buffer = Buffer::new(30, 1);
let area = Rect::new(0, 0, 30, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().label("Rate:").value(3.0);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, 'R');
assert_eq!(buffer.get(1, 0).unwrap().symbol, 'a');
assert_eq!(buffer.get(2, 0).unwrap().symbol, 't');
assert_eq!(buffer.get(3, 0).unwrap().symbol, 'e');
assert_eq!(buffer.get(4, 0).unwrap().symbol, ':');
}
#[test]
fn test_rating_render_with_show_value() {
let mut buffer = Buffer::new(30, 1);
let area = Rect::new(0, 0, 30, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(3.5).show_value(true);
r.render(&mut ctx);
let text: String = (11..30)
.filter_map(|x| buffer.get(x, 0).map(|c| c.symbol))
.collect();
assert!(text.contains("3.5"), "수치가 표시되어야 합니다");
assert!(text.contains("5"), "최대값도 표시되어야 합니다");
}
#[test]
fn test_rating_render_all_styles() {
let styles = [
RatingStyle::Star,
RatingStyle::Heart,
RatingStyle::Circle,
RatingStyle::Square,
RatingStyle::Numeric,
RatingStyle::Custom('A', 'B'),
];
let expected_chars = [
('★', '☆'), ('♥', '♡'), ('●', '○'), ('■', '□'), ('●', '○'), ('A', 'B'), ];
for (style, (filled, _)) in styles.iter().zip(expected_chars.iter()) {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(3.0).style(*style);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, *filled);
}
}
#[test]
fn test_rating_render_all_sizes() {
let sizes = [RatingSize::Small, RatingSize::Medium, RatingSize::Large];
for size in sizes {
let mut buffer = Buffer::new(30, 1);
let area = Rect::new(0, 0, 30, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(3.0).size(size);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '★');
}
}
#[test]
fn test_rating_render_with_hover() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let mut r = Rating::new().value(2.0);
r.set_hover(Some(4.0));
r.render(&mut ctx);
assert_eq!(buffer.get(6, 0).unwrap().symbol, '★');
}
#[test]
fn test_rating_render_without_half_stars() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(2.5).half_stars(false);
r.render(&mut ctx);
assert_eq!(buffer.get(4, 0).unwrap().symbol, '☆');
}
#[test]
fn test_rating_render_small_area() {
let mut buffer = Buffer::new(5, 1);
let area = Rect::new(0, 0, 5, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(5.0);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '★');
}
#[test]
fn test_rating_render_zero_width() {
let mut buffer = Buffer::new(0, 1);
let area = Rect::new(0, 0, 0, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(3.0);
r.render(&mut ctx); }
#[test]
fn test_rating_render_zero_height() {
let mut buffer = Buffer::new(20, 0);
let area = Rect::new(0, 0, 20, 0);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(3.0);
r.render(&mut ctx); }
#[test]
fn test_rating_render_default_colors() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(3.0);
r.render(&mut ctx);
let filled_cell = buffer.get(0, 0).unwrap();
assert_eq!(filled_cell.fg, Some(Color::rgb(255, 200, 0)));
let empty_cell = buffer.get(6, 0).unwrap();
assert_eq!(empty_cell.fg, Some(Color::rgb(100, 100, 100)));
}
#[test]
fn test_rating_render_custom_filled_color() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(3.0).filled_color(Color::RED);
r.render(&mut ctx);
let cell = buffer.get(0, 0).unwrap();
assert_eq!(cell.fg, Some(Color::RED));
}
#[test]
fn test_rating_render_custom_empty_color() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(0.0).empty_color(Color::BLUE);
r.render(&mut ctx);
let cell = buffer.get(0, 0).unwrap();
assert_eq!(cell.fg, Some(Color::BLUE));
}
#[test]
fn test_rating_render_hover_color() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let mut r = Rating::new().value(0.0).hover_color(Color::GREEN);
r.set_hover(Some(3.0));
r.render(&mut ctx);
let cell = buffer.get(0, 0).unwrap();
assert_eq!(cell.fg, Some(Color::GREEN));
}
#[test]
fn test_rating_zero_max_value() {
let r = Rating::new().max_value(0);
let mut buffer = Buffer::new(10, 1);
let area = Rect::new(0, 0, 10, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '☆');
}
#[test]
fn test_rating_very_large_max_value() {
let r = Rating::new().max_value(100);
let mut buffer = Buffer::new(30, 1);
let area = Rect::new(0, 0, 30, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
}
#[test]
fn test_rating_negative_value_clamps_to_zero() {
let mut r = Rating::new();
r.set_value(-999.0);
assert_eq!(r.get_value(), 0.0);
}
#[test]
fn test_rating_fractional_value_rounding() {
let r = Rating::new().value(2.789);
assert_eq!(r.get_value(), 2.789, "소수값 그대로 저장되어야 합니다");
}
#[test]
fn test_rating_half_star_boundary() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(2.5).half_stars(true);
r.render(&mut ctx);
assert_eq!(buffer.get(4, 0).unwrap().symbol, '⯪');
}
#[test]
fn test_rating_just_below_half() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(2.49).half_stars(true);
r.render(&mut ctx);
assert_eq!(buffer.get(4, 0).unwrap().symbol, '☆');
}
#[test]
fn test_rating_just_above_half() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().value(2.51).half_stars(true);
r.render(&mut ctx);
assert_eq!(buffer.get(4, 0).unwrap().symbol, '⯪');
}
#[test]
fn test_rating_max_value_one() {
let mut buffer = Buffer::new(10, 1);
let area = Rect::new(0, 0, 10, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new().max_value(1).value(1.0);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '★');
}
#[test]
fn test_rating_empty_label() {
let r = Rating::new().label("");
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
r.render(&mut ctx);
}
#[test]
fn test_rating_multiple_operations() {
let mut r = Rating::new();
r.set_value(2.0);
assert_eq!(r.get_value(), 2.0);
r.increment();
assert_eq!(r.get_value(), 2.5);
r.increment();
assert_eq!(r.get_value(), 3.0);
r.decrement();
assert_eq!(r.get_value(), 2.5);
r.clear();
assert_eq!(r.get_value(), 0.0);
}
#[test]
fn test_rating_changing_max_value_with_existing_value() {
let r = Rating::new().value(4.5).max_value(3);
assert_eq!(r.get_value(), 3.0, "새 최대값으로 조정되어야 합니다");
}
#[test]
fn test_rating_changing_max_value_preserves_lower_value() {
let r = Rating::new().value(2.0).max_value(10);
assert_eq!(r.get_value(), 2.0, "값이 보존되어야 합니다");
}
#[test]
fn test_rating_view_meta() {
let r = Rating::new();
let meta = r.meta();
assert_eq!(meta.id, None);
}
#[test]
fn test_rating_id_builder() {
let r = Rating::new().element_id("test-rating");
assert_eq!(r.id(), Some("test-rating"));
}
#[test]
fn test_rating_class_builder() {
let r = Rating::new().class("star-rating");
let classes = View::classes(&r);
assert!(classes.iter().any(|c| c == "star-rating"));
}
#[test]
fn test_rating_readonly_doesnt_affect_rendering() {
let mut buffer1 = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx1 = RenderContext::new(&mut buffer1, area);
let mut buffer2 = Buffer::new(20, 1);
let mut ctx2 = RenderContext::new(&mut buffer2, area);
let r1 = Rating::new().value(3.0).readonly(false);
let r2 = Rating::new().value(3.0).readonly(true);
r1.render(&mut ctx1);
r2.render(&mut ctx2);
assert_eq!(
buffer1.get(0, 0).unwrap().symbol,
buffer2.get(0, 0).unwrap().symbol
);
}
#[test]
fn test_rating_complex_scenario() {
let mut buffer = Buffer::new(50, 1);
let area = Rect::new(0, 0, 50, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::new()
.value(4.5)
.max_value(5)
.style(RatingStyle::Star)
.size(RatingSize::Medium)
.half_stars(true)
.show_value(true)
.label("Product Rating:")
.filled_color(Color::rgb(255, 215, 0))
.empty_color(Color::rgb(200, 200, 200));
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, 'P');
let text: String = (0..50)
.filter_map(|x| buffer.get(x, 0).map(|c| c.symbol))
.collect();
assert!(text.contains('★'), "채워진 별이 있어야 합니다");
assert!(text.contains('⯪'), "반별이 있어야 합니다");
assert!(text.contains("4.5"), "수치가 표시되어야 합니다");
}
#[test]
fn test_rating_ten_star_rendering() {
let mut buffer = Buffer::new(30, 1);
let area = Rect::new(0, 0, 30, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::ten_star().value(7.5).size(RatingSize::Small);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '★');
}
#[test]
fn test_rating_hearts_rendering() {
let mut buffer = Buffer::new(20, 1);
let area = Rect::new(0, 0, 20, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::hearts().value(3.0);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '♥');
assert_eq!(buffer.get(6, 0).unwrap().symbol, '♡');
}
#[test]
fn test_rating_thumbs_rendering() {
let mut buffer = Buffer::new(10, 1);
let area = Rect::new(0, 0, 10, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
let r = Rating::thumbs().value(1.0);
r.render(&mut ctx);
assert_eq!(buffer.get(0, 0).unwrap().symbol, '👍');
assert_eq!(buffer.get(2, 0).unwrap().symbol, '👎');
}