aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Wilm <joe@jwilm.com>2017-06-17 10:29:59 -0700
committerJoe Wilm <jwilm@users.noreply.github.com>2017-06-19 21:31:50 -0700
commitf12fd880fe0b60de050aa23097df59237452a40c (patch)
treee21e91157078de297356bb6e146ff3ea6a3e6288
parent6b081dcc95f08ac61e7f29033bbf0394ccff3472 (diff)
downloadalacritty-f12fd880fe0b60de050aa23097df59237452a40c.tar.gz
alacritty-f12fd880fe0b60de050aa23097df59237452a40c.zip
Update tests for new Selection API
-rw-r--r--src/input.rs17
-rw-r--r--src/selection.rs55
-rw-r--r--src/term/mod.rs20
3 files changed, 53 insertions, 39 deletions
diff --git a/src/input.rs b/src/input.rs
index 920e55f5..468e9ef3 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -496,6 +496,7 @@ mod tests {
use event::{Mouse, ClickState};
use config::{self, Config, ClickHandler};
use index::{Point, Side};
+ use selection::Selection;
use super::{Action, Binding, Processor};
@@ -510,7 +511,7 @@ mod tests {
struct ActionContext<'a> {
pub terminal: &'a mut Term,
- pub selection: Option<&'a mut Selection>,
+ pub selection: &'a mut Option<Selection>,
pub size_info: &'a SizeInfo,
pub mouse: &'a mut Mouse,
pub last_action: MultiClick,
@@ -533,11 +534,9 @@ mod tests {
// STUBBED
}
- fn clear_selection(&mut self) { }
-
- fn update_selection(&mut self, point: Point, side: Side) {
- self.selection.update(point, side);
- }
+ fn clear_selection(&mut self) {}
+ fn update_selection(&mut self, _point: Point, _side: Side) {}
+ fn simple_selection(&mut self, _point: Point, _side: Side) {}
fn semantic_selection(&mut self, _point: Point) {
// set something that we can check for here
@@ -578,16 +577,16 @@ mod tests {
padding_y: 0.0,
};
- use ::ansi::TermInfo;
-
let mut terminal = Term::new(&config, size);
let mut mouse = Mouse::default();
mouse.click_state = $initial_state;
+ let mut selection = None;
+
let context = ActionContext {
terminal: &mut terminal,
- selection: None,
+ selection: &mut selection,
mouse: &mut mouse,
size_info: &size,
last_action: MultiClick::None,
diff --git a/src/selection.rs b/src/selection.rs
index a81a9fe6..714c84c4 100644
--- a/src/selection.rs
+++ b/src/selection.rs
@@ -408,6 +408,27 @@ mod test {
use index::{Line, Column, Side, Point};
use super::{Selection, Span, SpanType};
+ struct Dimensions(Point);
+ impl<'a> super::Dimensions for &'a Dimensions {
+ fn dimensions(&self) -> Point {
+ self.0
+ }
+ }
+
+ impl Dimensions {
+ pub fn new(line: usize, col: usize) -> Self {
+ Dimensions(Point {
+ line: Line(line),
+ col: Column(col)
+ })
+ }
+ }
+
+ impl<'a> super::SemanticSearch for &'a Dimensions {
+ fn semantic_search_left(&self, _: Point) -> Point { unimplemented!(); }
+ fn semantic_search_right(&self, _: Point) -> Point { unimplemented!(); }
+ }
+
/// Test case of single cell selection
///
/// 1. [ ]
@@ -416,11 +437,11 @@ mod test {
#[test]
fn single_cell_left_to_right() {
let location = Point { line: Line(0), col: Column(0) };
- let mut selection = Selection::new(Line(1), Column(1));
- selection.update(location, Side::Left);
+ let mut selection = Selection::simple(location, Side::Left);
selection.update(location, Side::Right);
- assert_eq!(selection.span().unwrap(), Span {
+ assert_eq!(selection.to_span(&Dimensions::new(1, 1)).unwrap(), Span {
+ cols: Column(1),
ty: SpanType::Inclusive,
front: location,
tail: location
@@ -435,11 +456,11 @@ mod test {
#[test]
fn single_cell_right_to_left() {
let location = Point { line: Line(0), col: Column(0) };
- let mut selection = Selection::new(Line(1), Column(1));
- selection.update(location, Side::Right);
+ let mut selection = Selection::simple(location, Side::Right);
selection.update(location, Side::Left);
- assert_eq!(selection.span().unwrap(), Span {
+ assert_eq!(selection.to_span(&Dimensions::new(1, 1)).unwrap(), Span {
+ cols: Column(1),
ty: SpanType::Inclusive,
front: location,
tail: location
@@ -453,11 +474,10 @@ mod test {
/// 3. [ B][E ]
#[test]
fn between_adjacent_cells_left_to_right() {
- let mut selection = Selection::new(Line(1), Column(2));
- selection.update(Point::new(Line(0), Column(0)), Side::Right);
+ let mut selection = Selection::simple(Point::new(Line(0), Column(0)), Side::Right);
selection.update(Point::new(Line(0), Column(1)), Side::Left);
- assert_eq!(selection.span(), None);
+ assert_eq!(selection.to_span(&Dimensions::new(1, 2)), None);
}
/// Test adjacent cell selection from right to left
@@ -467,11 +487,10 @@ mod test {
/// 3. [ E][B ]
#[test]
fn between_adjacent_cells_right_to_left() {
- let mut selection = Selection::new(Line(1), Column(2));
- selection.update(Point::new(Line(0), Column(1)), Side::Left);
+ let mut selection = Selection::simple(Point::new(Line(0), Column(1)), Side::Left);
selection.update(Point::new(Line(0), Column(0)), Side::Right);
- assert_eq!(selection.span(), None);
+ assert_eq!(selection.to_span(&Dimensions::new(1, 2)), None);
}
/// Test selection across adjacent lines
@@ -485,11 +504,11 @@ mod test {
/// [XX][XB][ ][ ][ ]
#[test]
fn across_adjacent_lines_upward_final_cell_exclusive() {
- let mut selection = Selection::new(Line(2), Column(5));
- selection.update(Point::new(Line(1), Column(1)), Side::Right);
+ let mut selection = Selection::simple(Point::new(Line(1), Column(1)), Side::Right);
selection.update(Point::new(Line(0), Column(1)), Side::Right);
- assert_eq!(selection.span().unwrap(), Span {
+ assert_eq!(selection.to_span(&Dimensions::new(2, 5)).unwrap(), Span {
+ cols: Column(5),
front: Point::new(Line(0), Column(1)),
tail: Point::new(Line(1), Column(1)),
ty: SpanType::ExcludeFront
@@ -509,12 +528,12 @@ mod test {
/// [XE][ ][ ][ ][ ]
#[test]
fn selection_bigger_then_smaller() {
- let mut selection = Selection::new(Line(2), Column(5));
- selection.update(Point::new(Line(0), Column(1)), Side::Right);
+ let mut selection = Selection::simple(Point::new(Line(0), Column(1)), Side::Right);
selection.update(Point::new(Line(1), Column(1)), Side::Right);
selection.update(Point::new(Line(1), Column(0)), Side::Right);
- assert_eq!(selection.span().unwrap(), Span {
+ assert_eq!(selection.to_span(&Dimensions::new(2, 5)).unwrap(), Span {
+ cols: Column(5),
front: Point::new(Line(0), Column(1)),
tail: Point::new(Line(1), Column(0)),
ty: SpanType::ExcludeFront
diff --git a/src/term/mod.rs b/src/term/mod.rs
index cd7ffadd..8563be54 100644
--- a/src/term/mod.rs
+++ b/src/term/mod.rs
@@ -1841,21 +1841,18 @@ mod tests {
mem::swap(&mut term.semantic_escape_chars, &mut escape_chars);
{
- let mut selection = Selection::new(grid.num_lines(), grid.num_cols());
- term.semantic_selection(&mut selection, Point { line: Line(0), col: Column(1) });
- assert_eq!(term.string_from_selection(&selection.span().unwrap()), "aa");
+ let selection = Selection::semantic(Point { line: Line(0), col: Column(1) }, &term);
+ assert_eq!(term.string_from_selection(&selection.to_span(&term).unwrap()), "aa");
}
{
- let mut selection = Selection::new(grid.num_lines(), grid.num_cols());
- term.semantic_selection(&mut selection, Point { line: Line(0), col: Column(4) });
- assert_eq!(term.string_from_selection(&selection.span().unwrap()), "aaa");
+ let selection = Selection::semantic(Point { line: Line(0), col: Column(4) }, &term);
+ assert_eq!(term.string_from_selection(&selection.to_span(&term).unwrap()), "aaa");
}
{
- let mut selection = Selection::new(grid.num_lines(), grid.num_cols());
- term.semantic_selection(&mut selection, Point { line: Line(1), col: Column(1) });
- assert_eq!(term.string_from_selection(&selection.span().unwrap()), "aaa");
+ let selection = Selection::semantic(Point { line: Line(1), col: Column(1) }, &term);
+ assert_eq!(term.string_from_selection(&selection.to_span(&term).unwrap()), "aaa");
}
}
@@ -1880,9 +1877,8 @@ mod tests {
mem::swap(&mut term.grid, &mut grid);
- let mut selection = Selection::new(grid.num_lines(), grid.num_cols());
- term.line_selection(&mut selection, Point { line: Line(0), col: Column(3) });
- match selection.span() {
+ let selection = Selection::lines(Point { line: Line(0), col: Column(3) });
+ match selection.to_span(&term) {
Some(span) => assert_eq!(term.string_from_selection(&span), "\"aa\"a"),
_ => ()
}