@@ -629,6 +629,9 @@ impl GraphemeCursor {
629629if self . offset ==0 {
630630return Ok ( None ) ;
631631}
632+ if self . offset == chunk_start{
633+ return Err ( GraphemeIncomplete :: PrevChunk ) ;
634+ }
632635let mut iter = chunk[ ..self . offset - chunk_start] . chars ( ) . rev ( ) ;
633636let mut ch = iter. next ( ) . unwrap ( ) ;
634637loop {
@@ -652,6 +655,7 @@ impl GraphemeCursor {
652655self . decide ( true ) ;
653656} else {
654657self . resuming =true ;
658+ self . cat_after =Some ( gr:: grapheme_category ( ch) ) ;
655659return Err ( GraphemeIncomplete :: PrevChunk ) ;
656660}
657661}
@@ -682,3 +686,19 @@ fn test_grapheme_cursor_chunk_start_require_precontext() {
682686 c. provide_context ( & s[ ..1 ] , 0 ) ;
683687assert_eq ! ( c. is_boundary( & s[ 1 ..] , 1 ) , Ok ( false ) ) ;
684688}
689+
690+ #[ test]
691+ fn test_grapheme_cursor_prev_boundary ( ) {
692+ let s ="abcd" ;
693+ let mut c =GraphemeCursor :: new ( 3 , s. len ( ) , true ) ;
694+ assert_eq ! ( c. prev_boundary( & s[ 2 ..] , 2 ) , Err ( GraphemeIncomplete :: PrevChunk ) ) ;
695+ assert_eq ! ( c. prev_boundary( & s[ ..2 ] , 0 ) , Ok ( Some ( 2 ) ) ) ;
696+ }
697+
698+ #[ test]
699+ fn test_grapheme_cursor_prev_boundary_chunk_start ( ) {
700+ let s ="abcd" ;
701+ let mut c =GraphemeCursor :: new ( 2 , s. len ( ) , true ) ;
702+ assert_eq ! ( c. prev_boundary( & s[ 2 ..] , 2 ) , Err ( GraphemeIncomplete :: PrevChunk ) ) ;
703+ assert_eq ! ( c. prev_boundary( & s[ ..2 ] , 0 ) , Ok ( Some ( 1 ) ) ) ;
704+ }