OSDN Git Service

* BugFix: (API) LibEditText_DeleteChar() (bug in LastLine-EndPostion)
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Mon, 6 Jul 2015 13:01:23 +0000 (22:01 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Mon, 6 Jul 2015 13:01:23 +0000 (22:01 +0900)
libedittext/drd64_libedittext_cursorapi_edit.c
libedittext/drd64_libedittext_lineedit.c
libedittext/test_libedittext_cursorapi.c

index be3c799..1e4a880 100644 (file)
@@ -390,6 +390,8 @@ int
        p_line  = LINFO(p_tinfo, p_cursor->dw_lineid);
        assert( NULL != p_line );
 
+       if( 0 == p_line->dw_strlen )    { return 0x01; }
+
        pb_data = p_tinfo->pb_text + p_line->dw_start + p_cursor->dw_pos;
        if( '\n' == *pb_data )  {
                i_result        = LibEditText_LineCtrl_JoinLine(
index 148c088..72987b1 100644 (file)
@@ -89,7 +89,8 @@ int
        assert( NULL != p_line );
        assert( p_line->dw_strlen >= (dw_pos + dw_len) );
 
-       if(( 0 == dw_pos ) && ( dw_len == p_line->dw_strlen ))  {
+       if(( 0 == dw_pos ) && ( dw_len == p_line->dw_strlen )
+                                               && ( dw_line + 1 < p_tinfo->dw_maxline))        {
                // Delete Line ---
                i_result        = LibEditText_LineCtrl_DeleteLine( p_tinfo, p_line, dw_line );
                goto    goto_LibEditText_LineEdit_DeleteString_post;
@@ -102,8 +103,6 @@ int
        memset( (pb_data + p_line->dw_strlen - dw_len), 0x00, dw_len );
        p_line->dw_strlen       -= dw_len;
 
-       assert( 0 < p_line->dw_strlen );
-
        if( p_tinfo->dw_line_end == p_line->dw_id )
                { goto  goto_LibEditText_LineEdit_DeleteString_post; }
        if( '\n' == *(pb_data + p_line->dw_strlen - 1) )
index 002ebc0..b9186e4 100644 (file)
@@ -276,12 +276,8 @@ void Test_LibEditText_API_CursorAPI_test00_001(void)
        CU_ASSERT( 0x00 == i_result );
 
        do      {
-i_result       = LibEditText_CursorInfo_DEBUG_CheckCursor(p_tinfo, i_curid, __FILE__, __LINE__ );
-CU_ASSERT( 0x00 == i_result );
                i_result        = LibEditText_JoinLine( i_tinfoid, i_curb );
                CU_ASSERT( 0x00 == i_result );
-i_result       = LibEditText_CursorInfo_DEBUG_CheckCursor(p_tinfo, i_curid, __FILE__, __LINE__ );
-CU_ASSERT( 0x00 == i_result );
 
                i_result        = LibEditText_MoveDownCursor( i_tinfoid, i_curb, 1);
        }while( 0x00 == i_result );
@@ -303,20 +299,36 @@ CU_ASSERT( 0x00 == i_result );
 
 
        /* Test 31 --- BackSpace */
-/*     dw_targline     = (dw_maxline / 4) * 3;
+       dw_targline     = (dw_maxline / 4) * 3;
        i_result        = LibEditText_MoveEndCursor( i_tinfoid, i_curid );
        CU_ASSERT( 0x00 == i_result );
 
+       i_result        = LibEditText_GetCursorPosition( i_tinfoid, i_curid, &dw_nowline, &dw_pos );
+       CU_ASSERT( 0x00 == i_result );
+       //printf( "%u %u\n", dw_nowline, dw_pos );
+
        do {
                i_result        = LibEditText_BackSpace( i_tinfoid, i_curid );
                CU_ASSERT( 0x00 == i_result );
 
                i_result        = LibEditText_GetCursorPosition( i_tinfoid, i_curid, &dw_nowline, &dw_pos );
                CU_ASSERT( 0x00 == i_result );
-               printf("now: %u %u\n", dw_nowline, dw_pos );
        }while( ( dw_targline < dw_nowline ) || ( 0 < dw_pos ) );
-*/
+
        /* Test 32 --- DeleteChar */
+       i_result        = LibEditText_JumpCursor( i_tinfoid, i_curid, 1525 );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = LibEditText_MoveStartCursor( i_tinfoid, i_curid );
+       CU_ASSERT( 0x00 == i_result );
+
+       do      {
+               i_result        = LibEditText_DeleteChar( i_tinfoid, i_curid );
+               CU_ASSERT( 0x00 == i_result );
+
+               dw_maxline      = LibEditText_GetMaxLines( i_tinfoid );
+       }while( ( 1526 < dw_maxline ) || ( 0 < dw_pos ) );
+
 
        /* Test 33 --- DeleteString */