on master help sign in
Add unit tests for some of the new `Range` methods.
commit5229c5387f1769dea42b2362454c1ed49746e247 authorNathan Vegdahl <cessen@cessen.com> dateMon 26 Jul 2021, 20:03 (5 years ago) parentb2c76dc
1 file changed+80
helix-core/src/selection.rs+80
helix-core/src/selection.rs+80
@@ -803,6 +803,86 @@ mod test {
803803 assert_eq!(Range::new(6, 5).min_width_1(s), Range::new(6, 5));
804804 }
805805
806+ #[test]
807+ fn test_line_range() {
808+ let r = Rope::from_str("\r\nHi\r\nthere!");
809+ let s = r.slice(..);
810+
811+ // Zero-width ranges.
812+ assert_eq!(Range::new(0, 0).line_range(s), (0, 0));
813+ assert_eq!(Range::new(1, 1).line_range(s), (0, 0));
814+ assert_eq!(Range::new(2, 2).line_range(s), (1, 1));
815+ assert_eq!(Range::new(3, 3).line_range(s), (1, 1));
816+
817+ // Forward ranges.
818+ assert_eq!(Range::new(0, 1).line_range(s), (0, 0));
819+ assert_eq!(Range::new(0, 2).line_range(s), (0, 0));
820+ assert_eq!(Range::new(0, 3).line_range(s), (0, 1));
821+ assert_eq!(Range::new(1, 2).line_range(s), (0, 0));
822+ assert_eq!(Range::new(2, 3).line_range(s), (1, 1));
823+ assert_eq!(Range::new(3, 8).line_range(s), (1, 2));
824+ assert_eq!(Range::new(0, 12).line_range(s), (0, 2));
825+
826+ // Reverse ranges.
827+ assert_eq!(Range::new(1, 0).line_range(s), (0, 0));
828+ assert_eq!(Range::new(2, 0).line_range(s), (0, 0));
829+ assert_eq!(Range::new(3, 0).line_range(s), (0, 1));
830+ assert_eq!(Range::new(2, 1).line_range(s), (0, 0));
831+ assert_eq!(Range::new(3, 2).line_range(s), (1, 1));
832+ assert_eq!(Range::new(8, 3).line_range(s), (1, 2));
833+ assert_eq!(Range::new(12, 0).line_range(s), (0, 2));
834+ }
835+
836+ #[test]
837+ fn test_cursor() {
838+ let r = Rope::from_str("\r\nHi\r\nthere!");
839+ let s = r.slice(..);
840+
841+ // Zero-width ranges.
842+ assert_eq!(Range::new(0, 0).cursor(s), 0);
843+ assert_eq!(Range::new(2, 2).cursor(s), 2);
844+ assert_eq!(Range::new(3, 3).cursor(s), 3);
845+
846+ // Forward ranges.
847+ assert_eq!(Range::new(0, 2).cursor(s), 0);
848+ assert_eq!(Range::new(0, 3).cursor(s), 2);
849+ assert_eq!(Range::new(3, 6).cursor(s), 4);
850+
851+ // Reverse ranges.
852+ assert_eq!(Range::new(2, 0).cursor(s), 0);
853+ assert_eq!(Range::new(6, 2).cursor(s), 2);
854+ assert_eq!(Range::new(6, 3).cursor(s), 3);
855+ }
856+
857+ #[test]
858+ fn test_put_cursor() {
859+ let r = Rope::from_str("\r\nHi\r\nthere!");
860+ let s = r.slice(..);
861+
862+ // Zero-width ranges.
863+ assert_eq!(Range::new(0, 0).put_cursor(s, 0, true), Range::new(0, 2));
864+ assert_eq!(Range::new(0, 0).put_cursor(s, 2, true), Range::new(0, 3));
865+ assert_eq!(Range::new(2, 3).put_cursor(s, 4, true), Range::new(2, 6));
866+ assert_eq!(Range::new(2, 8).put_cursor(s, 4, true), Range::new(2, 6));
867+ assert_eq!(Range::new(8, 8).put_cursor(s, 4, true), Range::new(9, 4));
868+
869+ // Forward ranges.
870+ assert_eq!(Range::new(3, 6).put_cursor(s, 0, true), Range::new(4, 0));
871+ assert_eq!(Range::new(3, 6).put_cursor(s, 2, true), Range::new(4, 2));
872+ assert_eq!(Range::new(3, 6).put_cursor(s, 3, true), Range::new(3, 4));
873+ assert_eq!(Range::new(3, 6).put_cursor(s, 4, true), Range::new(3, 6));
874+ assert_eq!(Range::new(3, 6).put_cursor(s, 6, true), Range::new(3, 7));
875+ assert_eq!(Range::new(3, 6).put_cursor(s, 8, true), Range::new(3, 9));
876+
877+ // Reverse ranges.
878+ assert_eq!(Range::new(6, 3).put_cursor(s, 0, true), Range::new(6, 0));
879+ assert_eq!(Range::new(6, 3).put_cursor(s, 2, true), Range::new(6, 2));
880+ assert_eq!(Range::new(6, 3).put_cursor(s, 3, true), Range::new(6, 3));
881+ assert_eq!(Range::new(6, 3).put_cursor(s, 4, true), Range::new(6, 4));
882+ assert_eq!(Range::new(6, 3).put_cursor(s, 6, true), Range::new(4, 7));
883+ assert_eq!(Range::new(6, 3).put_cursor(s, 8, true), Range::new(4, 9));
884+ }
885+
806886 #[test]
807887 fn test_split_on_matches() {
808888 use crate::regex::Regex;