Compare commits

..

5 Commits

14 changed files with 139 additions and 89 deletions
+10
View File
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## v0.6.1 (2025-09-02)
### Fix
- Fixed UI bugs introduced as part of the hotkey refactor
### Refactor
- Updated crate to publish properly with the procedural macros
## v0.6.0 (2025-08-29)
### Feat
Generated
+51 -24
View File
@@ -190,9 +190,9 @@ dependencies = [
[[package]]
name = "bitflags"
version = "2.9.3"
version = "2.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d"
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
[[package]]
name = "bstr"
@@ -240,10 +240,11 @@ dependencies = [
[[package]]
name = "cc"
version = "1.2.34"
version = "1.2.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc"
checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3"
dependencies = [
"find-msvc-tools",
"shlex",
]
@@ -276,9 +277,9 @@ dependencies = [
[[package]]
name = "clap"
version = "4.5.46"
version = "4.5.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57"
checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931"
dependencies = [
"clap_builder",
"clap_derive",
@@ -286,9 +287,9 @@ dependencies = [
[[package]]
name = "clap_builder"
version = "4.5.46"
version = "4.5.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41"
checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6"
dependencies = [
"anstream",
"anstyle",
@@ -308,9 +309,9 @@ dependencies = [
[[package]]
name = "clap_derive"
version = "4.5.45"
version = "4.5.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6"
checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c"
dependencies = [
"heck",
"proc-macro2",
@@ -466,9 +467,9 @@ dependencies = [
[[package]]
name = "deranged"
version = "0.4.0"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc"
dependencies = [
"powerfmt",
]
@@ -615,6 +616,17 @@ dependencies = [
"syn 2.0.106",
]
[[package]]
name = "enum_display_style_derive"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "583f1f514d2754010ff71ed6853068cacbe43cc142cc076aa1b871d9754efc48"
dependencies = [
"darling",
"quote",
"syn 2.0.106",
]
[[package]]
name = "equivalent"
version = "1.0.2"
@@ -637,6 +649,12 @@ version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
name = "find-msvc-tools"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650"
[[package]]
name = "fnv"
version = "1.0.7"
@@ -1338,7 +1356,7 @@ dependencies = [
[[package]]
name = "managarr"
version = "0.6.0"
version = "0.6.1"
dependencies = [
"anyhow",
"assert_cmd",
@@ -1357,7 +1375,7 @@ dependencies = [
"derive_setters",
"deunicode",
"dirs-next",
"enum_display_style_derive",
"enum_display_style_derive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"human-panic",
"indicatif",
"indoc",
@@ -1383,7 +1401,7 @@ dependencies = [
"tokio",
"tokio-util",
"urlencoding",
"validate_theme_derive",
"validate_theme_derive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"veil",
]
@@ -2516,12 +2534,11 @@ dependencies = [
[[package]]
name = "time"
version = "0.3.41"
version = "0.3.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031"
dependencies = [
"deranged",
"itoa",
"libc",
"num-conv",
"num_threads",
@@ -2533,15 +2550,15 @@ dependencies = [
[[package]]
name = "time-core"
version = "0.1.4"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
[[package]]
name = "time-macros"
version = "0.2.22"
version = "0.2.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
dependencies = [
"num-conv",
"time-core",
@@ -2832,9 +2849,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
version = "1.18.0"
version = "1.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be"
checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
dependencies = [
"getrandom 0.3.3",
]
@@ -2848,6 +2865,16 @@ dependencies = [
"syn 2.0.106",
]
[[package]]
name = "validate_theme_derive"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40630259c022600210096da9538abcb992b801e30b464cb9d19f19ef0e0d09b9"
dependencies = [
"quote",
"syn 2.0.106",
]
[[package]]
name = "vcpkg"
version = "0.2.15"
+3 -3
View File
@@ -1,6 +1,6 @@
[package]
name = "managarr"
version = "0.6.0"
version = "0.6.1"
authors = ["Alex Clarke <alex.j.tusa@gmail.com>"]
description = "A TUI and CLI to manage your Servarrs"
keywords = ["managarr", "ratatui", "dashboard", "servarr", "tui"]
@@ -66,8 +66,8 @@ deunicode = "1.6.0"
paste = "1.0.15"
openssl = { version = "0.10.70", features = ["vendored"] }
veil = "0.2.0"
validate_theme_derive = { path = "proc_macros/validate_theme_derive" }
enum_display_style_derive = { path = "proc_macros/enum_display_style_derive" }
validate_theme_derive = "0.1.0"
enum_display_style_derive = "0.1.0"
[dev-dependencies]
assert_cmd = "2.0.16"
@@ -2,6 +2,12 @@
name = "enum_display_style_derive"
version = "0.1.0"
edition = "2024"
authors = ["Alex Clarke <alex.j.tusa@gmail.com>"]
description = "A proc-macro to derive a `Display` and `FromStr` implementation for enums with a `style` attribute."
license = "MIT"
documentation = "https://github.com/Dark-Alex-17/managarr"
repository = "https://github.com/Dark-Alex-17/managarr"
homepage = "https://github.com/Dark-Alex-17/managarr"
[lib]
proc-macro = true
@@ -2,6 +2,12 @@
name = "validate_theme_derive"
version = "0.1.0"
edition = "2024"
authors = ["Alex Clarke <alex.j.tusa@gmail.com>"]
description = "A proc-macro to validate a theme."
license = "MIT"
documentation = "https://github.com/Dark-Alex-17/managarr"
repository = "https://github.com/Dark-Alex-17/managarr"
homepage = "https://github.com/Dark-Alex-17/managarr"
[lib]
proc-macro = true
@@ -1,4 +1,4 @@
use ratatui::layout::{Alignment, Constraint, Flex, Layout, Rect};
use ratatui::layout::{Constraint, Flex, Layout, Rect};
use ratatui::style::Stylize;
use ratatui::text::{Line, Text};
use ratatui::widgets::{Cell, Paragraph, Row, Wrap};
@@ -184,7 +184,6 @@ pub fn draw_collection_details(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect)
)
.block(layout_block_top_border_with_title(title_style("Movies")))
.loading(app.is_loading)
.footer_alignment(Alignment::Center)
.headers([
"",
"Title",
@@ -7,7 +7,7 @@ use crate::ui::utils::{get_width_from_percentage, title_block};
use crate::ui::widgets::managarr_table::ManagarrTable;
use crate::ui::widgets::popup::Size;
use crate::ui::{draw_popup, DrawUi};
use ratatui::layout::{Alignment, Constraint, Rect};
use ratatui::layout::{Constraint, Rect};
use ratatui::widgets::{Cell, Row};
use ratatui::Frame;
@@ -67,7 +67,6 @@ fn draw_test_all_indexers_test_results(f: &mut Frame<'_>, app: &mut App<'_>, are
test_results_row_mapping,
)
.loading(is_loading)
.footer_alignment(Alignment::Center)
.margin(1)
.headers(["Indexer", "Pass/Fail", "Failure Messages"])
.constraints([
+11 -6
View File
@@ -1,4 +1,4 @@
use ratatui::layout::{Alignment, Rect};
use ratatui::layout::Rect;
use ratatui::text::{Span, Text};
use ratatui::widgets::{Cell, ListItem, Paragraph, Row};
use ratatui::Frame;
@@ -60,7 +60,7 @@ fn draw_logs_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
if app.data.radarr_data.log_details.items.is_empty() {
let loading = LoadingBlock::new(app.is_loading, borderless_block());
let popup = Popup::new(loading).size(Size::Large).block(block);
let popup = Popup::new(loading).size(Size::Large).block(block).margin(1);
f.render_widget(popup, f.area());
return;
@@ -73,7 +73,10 @@ fn draw_logs_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
style_log_list_item(ListItem::new(Text::from(Span::raw(log_line))), level)
})
.block(borderless_block());
let popup = Popup::new(logs_list).size(Size::Large).block(block);
let popup = Popup::new(logs_list)
.size(Size::Large)
.block(block)
.margin(1);
f.render_widget(popup, f.area());
}
@@ -94,7 +97,6 @@ fn draw_tasks_popup(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
let tasks_table = ManagarrTable::new(Some(&mut app.data.radarr_data.tasks), tasks_row_mapping)
.loading(app.is_loading)
.margin(1)
.footer_alignment(Alignment::Center)
.headers(TASK_TABLE_HEADERS)
.constraints(TASK_TABLE_CONSTRAINTS);
@@ -129,12 +131,15 @@ fn draw_updates_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
let updates_paragraph = Paragraph::new(Text::from(updates))
.block(borderless_block())
.scroll((app.data.radarr_data.updates.offset, 0));
let popup = Popup::new(updates_paragraph).size(Size::Large).block(block);
let popup = Popup::new(updates_paragraph)
.size(Size::Large)
.block(block)
.margin(1);
f.render_widget(popup, f.area());
} else {
let loading = LoadingBlock::new(app.is_loading, borderless_block());
let popup = Popup::new(loading).size(Size::Large).block(block);
let popup = Popup::new(loading).size(Size::Large).block(block).margin(1);
f.render_widget(popup, f.area());
}
@@ -7,7 +7,7 @@ use crate::ui::utils::{get_width_from_percentage, title_block};
use crate::ui::widgets::managarr_table::ManagarrTable;
use crate::ui::widgets::popup::Size;
use crate::ui::{draw_popup, DrawUi};
use ratatui::layout::{Alignment, Constraint, Rect};
use ratatui::layout::{Constraint, Rect};
use ratatui::widgets::{Cell, Row};
use ratatui::Frame;
@@ -65,7 +65,6 @@ fn draw_test_all_indexers_test_results(f: &mut Frame<'_>, app: &mut App<'_>, are
test_results_row_mapping,
)
.loading(is_loading)
.footer_alignment(Alignment::Center)
.margin(1)
.headers(["Indexer", "Pass/Fail", "Failure Messages"])
.constraints([
+11 -6
View File
@@ -1,4 +1,4 @@
use ratatui::layout::{Alignment, Rect};
use ratatui::layout::Rect;
use ratatui::text::{Span, Text};
use ratatui::widgets::{Cell, ListItem, Paragraph, Row};
use ratatui::Frame;
@@ -60,7 +60,7 @@ fn draw_logs_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
if app.data.sonarr_data.log_details.items.is_empty() {
let loading = LoadingBlock::new(app.is_loading, borderless_block());
let popup = Popup::new(loading).size(Size::Large).block(block);
let popup = Popup::new(loading).size(Size::Large).block(block).margin(1);
f.render_widget(popup, f.area());
return;
@@ -73,7 +73,10 @@ fn draw_logs_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
style_log_list_item(ListItem::new(Text::from(Span::raw(log_line))), level)
})
.block(borderless_block());
let popup = Popup::new(logs_list).size(Size::Large).block(block);
let popup = Popup::new(logs_list)
.size(Size::Large)
.block(block)
.margin(1);
f.render_widget(popup, f.area());
}
@@ -93,7 +96,6 @@ fn draw_tasks_popup(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
let tasks_table = ManagarrTable::new(Some(&mut app.data.sonarr_data.tasks), tasks_row_mapping)
.loading(app.is_loading)
.margin(1)
.footer_alignment(Alignment::Center)
.headers(TASK_TABLE_HEADERS)
.constraints(TASK_TABLE_CONSTRAINTS);
@@ -128,12 +130,15 @@ fn draw_updates_popup(f: &mut Frame<'_>, app: &mut App<'_>) {
let updates_paragraph = Paragraph::new(Text::from(updates))
.block(borderless_block())
.scroll((app.data.sonarr_data.updates.offset, 0));
let popup = Popup::new(updates_paragraph).size(Size::Large).block(block);
let popup = Popup::new(updates_paragraph)
.size(Size::Large)
.block(block)
.margin(1);
f.render_widget(popup, f.area());
} else {
let loading = LoadingBlock::new(app.is_loading, borderless_block());
let popup = Popup::new(loading).size(Size::Large).block(block);
let popup = Popup::new(loading).size(Size::Large).block(block).margin(1);
f.render_widget(popup, f.area());
}
+9 -31
View File
@@ -3,18 +3,16 @@ use super::message::Message;
use super::popup::Size;
use crate::models::stateful_table::StatefulTable;
use crate::ui::styles::ManagarrStyle;
use crate::ui::utils::{
borderless_block, centered_rect, layout_block_top_border, title_block_centered,
};
use crate::ui::utils::{borderless_block, centered_rect, title_block_centered};
use crate::ui::widgets::loading_block::LoadingBlock;
use crate::ui::widgets::popup::Popup;
use crate::ui::widgets::selectable_list::SelectableList;
use crate::ui::HIGHLIGHT_SYMBOL;
use derive_setters::Setters;
use ratatui::buffer::Buffer;
use ratatui::layout::{Alignment, Constraint, Layout, Position, Rect};
use ratatui::layout::{Constraint, Layout, Position, Rect};
use ratatui::prelude::{Style, Stylize, Text};
use ratatui::widgets::{Block, ListItem, Paragraph, Row, StatefulWidget, Table, Widget, WidgetRef};
use ratatui::widgets::{Block, ListItem, Row, StatefulWidget, Table, Widget, WidgetRef};
use ratatui::Frame;
use std::fmt::Debug;
use std::sync::atomic::Ordering;
@@ -36,8 +34,6 @@ where
#[setters(skip)]
constraints: Vec<Constraint>,
row_mapper: F,
footer: Option<String>,
footer_alignment: Alignment,
block: Block<'a>,
margin: u16,
#[setters(rename = "loading")]
@@ -68,8 +64,6 @@ where
table_headers: Vec::new(),
constraints: Vec::new(),
row_mapper,
footer: None,
footer_alignment: Alignment::Left,
block: borderless_block(),
margin: 0,
is_loading: false,
@@ -119,20 +113,12 @@ where
fn render_table(self, area: Rect, buf: &mut Buffer) {
let table_headers = self.parse_headers();
let table_area = if let Some(ref footer) = self.footer {
let [content_area, footer_area] =
Layout::vertical([Constraint::Fill(0), Constraint::Length(2)])
.margin(self.margin)
.areas(area);
Paragraph::new(Text::from(format!(" {footer}").help()))
.block(layout_block_top_border())
.alignment(self.footer_alignment)
.render(footer_area, buf);
let table_area = {
let [content_area, _] = Layout::vertical([Constraint::Fill(1), Constraint::Fill(0)])
.margin(self.margin)
.areas(area);
content_area
} else {
area
};
let loading_block = LoadingBlock::new(self.is_loading, self.block.clone());
@@ -230,19 +216,11 @@ where
pub fn show_cursor(&self, f: &mut Frame<'_>, area: Rect) {
let mut draw_cursor = |length: usize, offset: usize| {
let table_area = if self.footer.is_some() {
let [content_area, _] = Layout::vertical([Constraint::Fill(0), Constraint::Length(2)])
.margin(self.margin)
.areas(area);
content_area
} else {
area
};
let popup_area = Rect {
height: 7,
..centered_rect(30, 20, table_area)
..centered_rect(30, 20, area)
};
let [text_box_area, _] = Layout::vertical([Constraint::Length(3), Constraint::Length(1)])
let [text_box_area, _] = Layout::vertical([Constraint::Fill(1), Constraint::Fill(0)])
.margin(1)
.areas(popup_area);
f.set_cursor_position(Position {
+1 -11
View File
@@ -6,7 +6,7 @@ mod tests {
use crate::ui::utils::borderless_block;
use crate::ui::widgets::managarr_table::ManagarrTable;
use pretty_assertions::assert_eq;
use ratatui::layout::{Alignment, Constraint};
use ratatui::layout::Constraint;
use ratatui::text::Text;
use ratatui::widgets::{Cell, Row};
use std::sync::atomic::AtomicUsize;
@@ -25,8 +25,6 @@ mod tests {
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, borderless_block());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
@@ -61,8 +59,6 @@ mod tests {
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, borderless_block());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
@@ -97,8 +93,6 @@ mod tests {
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, borderless_block());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
@@ -130,8 +124,6 @@ mod tests {
assert_eq!(managarr_table.content.unwrap().items, items);
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, borderless_block());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
@@ -163,8 +155,6 @@ mod tests {
assert_eq!(managarr_table.content.unwrap().items, items);
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, borderless_block());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
+13 -2
View File
@@ -1,6 +1,6 @@
use crate::ui::utils::{background_block, centered_rect};
use ratatui::buffer::Buffer;
use ratatui::layout::Rect;
use ratatui::layout::{Constraint, Layout, Rect};
use ratatui::widgets::{Block, Clear, Widget};
#[cfg(test)]
@@ -51,6 +51,7 @@ impl Size {
pub struct Popup<'a, T: Widget> {
widget: T,
margin: u16,
percent_x: u16,
percent_y: u16,
block: Option<Block<'a>>,
@@ -62,6 +63,7 @@ impl<'a, T: Widget> Popup<'a, T> {
widget,
percent_x: 0,
percent_y: 0,
margin: 0,
block: None,
}
}
@@ -84,6 +86,11 @@ impl<'a, T: Widget> Popup<'a, T> {
self
}
pub fn margin(mut self, margin: u16) -> Self {
self.margin = margin;
self
}
fn render_popup(self, area: Rect, buf: &mut Buffer) {
let mut popup_area = centered_rect(self.percent_x, self.percent_y, area);
let height = if popup_area.height < 3 {
@@ -102,7 +109,11 @@ impl<'a, T: Widget> Popup<'a, T> {
block.render(popup_area, buf);
}
self.widget.render(popup_area, buf);
let [content_area, _] = Layout::vertical([Constraint::Fill(1), Constraint::Fill(0)])
.margin(self.margin)
.areas(popup_area);
self.widget.render(content_area, buf);
}
}
+15
View File
@@ -32,6 +32,7 @@ mod tests {
assert_eq!(popup.percent_x, 0);
assert_eq!(popup.percent_y, 0);
assert_eq!(popup.block, None);
assert_eq!(popup.margin, 0);
}
#[test]
@@ -42,6 +43,7 @@ mod tests {
assert_eq!(popup.percent_y, 40);
assert_eq!(popup.widget, Block::new());
assert_eq!(popup.block, None);
assert_eq!(popup.margin, 0);
}
#[test]
@@ -52,6 +54,7 @@ mod tests {
assert_eq!(popup.percent_y, 50);
assert_eq!(popup.widget, Block::new());
assert_eq!(popup.block, None);
assert_eq!(popup.margin, 0);
}
#[test]
@@ -62,5 +65,17 @@ mod tests {
assert_eq!(popup.widget, Block::new());
assert_eq!(popup.percent_x, 0);
assert_eq!(popup.percent_y, 0);
assert_eq!(popup.margin, 0);
}
#[test]
fn test_popup_margin() {
let popup = Popup::new(Block::new()).margin(5);
assert_eq!(popup.margin, 5);
assert_eq!(popup.widget, Block::new());
assert_eq!(popup.percent_x, 0);
assert_eq!(popup.percent_y, 0);
assert_eq!(popup.block, None);
}
}