Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
368 changes: 367 additions & 1 deletion packages/utils/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -712,7 +712,7 @@ pub fn get_opposite_axis_placements(
.map(|side| get_placement(side, alignment))
.collect();

if flip_alignment {
if flip_alignment && alignment.is_some() {
let mut opposite_list: Vec<Placement> = list
.clone()
.into_iter()
Expand Down Expand Up @@ -762,3 +762,369 @@ pub fn rect_to_client_rect(rect: Rect) -> ClientRectObject {
left: rect.x,
}
}

#[cfg(test)]
mod tests {
use super::{Alignment, Placement, get_opposite_axis_placements};

#[test]
fn side_top() {
assert_eq!(
get_opposite_axis_placements(Placement::Top, true, Some(Alignment::Start), None),
vec![Placement::Left, Placement::Right]
);
assert_eq!(
get_opposite_axis_placements(Placement::Top, true, Some(Alignment::End), None),
vec![Placement::Right, Placement::Left]
);
}

#[test]
fn side_bottom() {
assert_eq!(
get_opposite_axis_placements(Placement::Bottom, true, Some(Alignment::Start), None),
vec![Placement::Left, Placement::Right]
);
assert_eq!(
get_opposite_axis_placements(Placement::Bottom, true, Some(Alignment::End), None),
vec![Placement::Right, Placement::Left]
);
}

#[test]
fn side_left() {
assert_eq!(
get_opposite_axis_placements(Placement::Left, true, Some(Alignment::Start), None),
vec![Placement::Top, Placement::Bottom]
);
assert_eq!(
get_opposite_axis_placements(Placement::Left, true, Some(Alignment::End), None),
vec![Placement::Bottom, Placement::Top]
);
}

#[test]
fn side_right() {
assert_eq!(
get_opposite_axis_placements(Placement::Right, true, Some(Alignment::Start), None),
vec![Placement::Top, Placement::Bottom]
);
assert_eq!(
get_opposite_axis_placements(Placement::Right, true, Some(Alignment::End), None),
vec![Placement::Bottom, Placement::Top]
);
}

#[test]
fn start_top_start() {
assert_eq!(
get_opposite_axis_placements(Placement::TopStart, false, Some(Alignment::Start), None),
vec![Placement::LeftStart, Placement::RightStart]
);
assert_eq!(
get_opposite_axis_placements(Placement::TopStart, false, Some(Alignment::End), None),
vec![Placement::RightStart, Placement::LeftStart]
);
assert_eq!(
get_opposite_axis_placements(Placement::TopStart, true, Some(Alignment::Start), None),
vec![
Placement::LeftStart,
Placement::RightStart,
Placement::LeftEnd,
Placement::RightEnd
]
);
assert_eq!(
get_opposite_axis_placements(Placement::TopStart, true, Some(Alignment::End), None),
vec![
Placement::RightStart,
Placement::LeftStart,
Placement::RightEnd,
Placement::LeftEnd
]
);
}

#[test]
fn start_bottom_start() {
assert_eq!(
get_opposite_axis_placements(
Placement::BottomStart,
false,
Some(Alignment::Start),
None
),
vec![Placement::LeftStart, Placement::RightStart]
);
assert_eq!(
get_opposite_axis_placements(Placement::BottomStart, false, Some(Alignment::End), None),
vec![Placement::RightStart, Placement::LeftStart]
);
assert_eq!(
get_opposite_axis_placements(
Placement::BottomStart,
true,
Some(Alignment::Start),
None
),
vec![
Placement::LeftStart,
Placement::RightStart,
Placement::LeftEnd,
Placement::RightEnd
]
);
assert_eq!(
get_opposite_axis_placements(Placement::BottomStart, true, Some(Alignment::End), None),
vec![
Placement::RightStart,
Placement::LeftStart,
Placement::RightEnd,
Placement::LeftEnd
]
);
}

#[test]
fn start_left_start() {
assert_eq!(
get_opposite_axis_placements(Placement::LeftStart, false, Some(Alignment::Start), None),
vec![Placement::TopStart, Placement::BottomStart]
);
assert_eq!(
get_opposite_axis_placements(Placement::LeftStart, false, Some(Alignment::End), None),
vec![Placement::BottomStart, Placement::TopStart]
);
assert_eq!(
get_opposite_axis_placements(Placement::LeftStart, true, Some(Alignment::Start), None),
vec![
Placement::TopStart,
Placement::BottomStart,
Placement::TopEnd,
Placement::BottomEnd
]
);
assert_eq!(
get_opposite_axis_placements(Placement::LeftStart, true, Some(Alignment::End), None),
vec![
Placement::BottomStart,
Placement::TopStart,
Placement::BottomEnd,
Placement::TopEnd
]
);
}

#[test]
fn start_right_start() {
assert_eq!(
get_opposite_axis_placements(
Placement::RightStart,
false,
Some(Alignment::Start),
None
),
vec![Placement::TopStart, Placement::BottomStart]
);
assert_eq!(
get_opposite_axis_placements(Placement::RightStart, false, Some(Alignment::End), None),
vec![Placement::BottomStart, Placement::TopStart]
);
assert_eq!(
get_opposite_axis_placements(Placement::RightStart, true, Some(Alignment::Start), None),
vec![
Placement::TopStart,
Placement::BottomStart,
Placement::TopEnd,
Placement::BottomEnd
]
);
assert_eq!(
get_opposite_axis_placements(Placement::RightStart, true, Some(Alignment::End), None),
vec![
Placement::BottomStart,
Placement::TopStart,
Placement::BottomEnd,
Placement::TopEnd
]
);
}

#[test]
fn end_top_end() {
assert_eq!(
get_opposite_axis_placements(Placement::TopEnd, false, Some(Alignment::Start), None),
vec![Placement::LeftEnd, Placement::RightEnd]
);
assert_eq!(
get_opposite_axis_placements(Placement::TopEnd, false, Some(Alignment::End), None),
vec![Placement::RightEnd, Placement::LeftEnd]
);
assert_eq!(
get_opposite_axis_placements(Placement::TopEnd, true, Some(Alignment::Start), None),
vec![
Placement::LeftEnd,
Placement::RightEnd,
Placement::LeftStart,
Placement::RightStart
]
);
assert_eq!(
get_opposite_axis_placements(Placement::TopEnd, true, Some(Alignment::End), None),
vec![
Placement::RightEnd,
Placement::LeftEnd,
Placement::RightStart,
Placement::LeftStart
]
);
}

#[test]
fn end_bottom_end() {
assert_eq!(
get_opposite_axis_placements(Placement::BottomEnd, false, Some(Alignment::Start), None),
vec![Placement::LeftEnd, Placement::RightEnd]
);
assert_eq!(
get_opposite_axis_placements(Placement::BottomEnd, false, Some(Alignment::End), None),
vec![Placement::RightEnd, Placement::LeftEnd]
);
assert_eq!(
get_opposite_axis_placements(Placement::BottomEnd, true, Some(Alignment::Start), None),
vec![
Placement::LeftEnd,
Placement::RightEnd,
Placement::LeftStart,
Placement::RightStart
]
);
assert_eq!(
get_opposite_axis_placements(Placement::BottomEnd, true, Some(Alignment::End), None),
vec![
Placement::RightEnd,
Placement::LeftEnd,
Placement::RightStart,
Placement::LeftStart
]
);
}

#[test]
fn end_left_end() {
assert_eq!(
get_opposite_axis_placements(Placement::LeftEnd, false, Some(Alignment::Start), None),
vec![Placement::TopEnd, Placement::BottomEnd]
);
assert_eq!(
get_opposite_axis_placements(Placement::LeftEnd, false, Some(Alignment::End), None),
vec![Placement::BottomEnd, Placement::TopEnd]
);
assert_eq!(
get_opposite_axis_placements(Placement::LeftStart, true, Some(Alignment::Start), None),
vec![
Placement::TopStart,
Placement::BottomStart,
Placement::TopEnd,
Placement::BottomEnd
]
);
assert_eq!(
get_opposite_axis_placements(Placement::LeftStart, true, Some(Alignment::End), None),
vec![
Placement::BottomStart,
Placement::TopStart,
Placement::BottomEnd,
Placement::TopEnd
]
);
}

#[test]
fn end_right_end() {
assert_eq!(
get_opposite_axis_placements(Placement::RightEnd, false, Some(Alignment::Start), None),
vec![Placement::TopEnd, Placement::BottomEnd]
);
assert_eq!(
get_opposite_axis_placements(Placement::RightEnd, false, Some(Alignment::End), None),
vec![Placement::BottomEnd, Placement::TopEnd]
);
assert_eq!(
get_opposite_axis_placements(Placement::RightEnd, true, Some(Alignment::Start), None),
vec![
Placement::TopEnd,
Placement::BottomEnd,
Placement::TopStart,
Placement::BottomStart
]
);
assert_eq!(
get_opposite_axis_placements(Placement::RightEnd, true, Some(Alignment::End), None),
vec![
Placement::BottomEnd,
Placement::TopEnd,
Placement::BottomStart,
Placement::TopStart
]
);
}

#[test]
fn rtl_top() {
assert_eq!(
get_opposite_axis_placements(Placement::Top, true, Some(Alignment::Start), Some(true)),
vec![Placement::Right, Placement::Left]
);
assert_eq!(
get_opposite_axis_placements(Placement::Top, true, Some(Alignment::End), Some(true)),
vec![Placement::Left, Placement::Right]
);
}

#[test]
fn rtl_bottom() {
assert_eq!(
get_opposite_axis_placements(
Placement::Bottom,
true,
Some(Alignment::Start),
Some(true)
),
vec![Placement::Right, Placement::Left]
);
assert_eq!(
get_opposite_axis_placements(Placement::Bottom, true, Some(Alignment::End), Some(true)),
vec![Placement::Left, Placement::Right]
);
}

#[test]
fn rtl_left() {
assert_eq!(
get_opposite_axis_placements(Placement::Left, true, Some(Alignment::Start), Some(true)),
vec![Placement::Top, Placement::Bottom]
);
assert_eq!(
get_opposite_axis_placements(Placement::Left, true, Some(Alignment::End), Some(true)),
vec![Placement::Bottom, Placement::Top]
);
}

#[test]
fn rtl_right() {
assert_eq!(
get_opposite_axis_placements(
Placement::Right,
true,
Some(Alignment::Start),
Some(true)
),
vec![Placement::Top, Placement::Bottom]
);
assert_eq!(
get_opposite_axis_placements(Placement::Right, true, Some(Alignment::End), Some(true)),
vec![Placement::Bottom, Placement::Top]
);
}
}
Loading