--- /dev/null
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+ D r . D e a m o n 6 4
+ for INTEL64(R), AMD64(R)
+
+ Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.c
+Function:
+Comment:
+----------------------------------------------------------------------*/
+
+#define DRD64_SRC_TEST_LIBEDITTEXT_UNDOEDIT
+#include"test_libedittext.h"
+#include"drd64_libedittext.h"
+
+
+/* LibEditText_Undo (API) *********************************************/
+/*--------------------------------------------------------------------*/
+void Test_LibEditText_API_ExecUndo_test00_001(void)
+{
+ int i_result;
+ int i_tinfoid;
+ int i_cnt;
+ int i_curid;
+ int i_curb;
+ int i_len;
+ char c_data;
+ char str_data[256];
+ DWord dw_maxline;
+ DWord dw_nowline;
+ DWord dw_targline;
+ DWord dw_pos;
+ DWord dw_len;
+ DWord dw_bytes;
+ const char *pstr_data;
+ LibEditText_TextInfo *p_tinfo;
+
+ i_result = LibEditText_Init();
+ CU_ASSERT( 0x00 == i_result );
+
+ i_tinfoid = LibEditText_CreateTextFile( "./testdata", NULL );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_curid = LibEditText_AllocCursor( i_tinfoid, 13 );
+ CU_ASSERT( 0x00 <= i_curid );
+
+ // Test 01-001 Append Line & Undo ---
+ i_result = LibEditText_AppendLine( i_tinfoid, i_curid );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_ExecUndo( i_tinfoid );
+ CU_ASSERT( 0x00 == i_result );
+
+ // Test 01-002 InsertString & Undo ---
+ i_len = snprintf( str_data, 256, "Test 01-002: InsertLine & Undo", i_cnt );
+ i_result = LibEditText_InsertString( i_tinfoid, i_curid, str_data, (DWord)i_len );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_ExecUndo( i_tinfoid );
+ CU_ASSERT( 0x00 == i_result );
+
+ // Test 01-003 Insert Line & Undo ---
+ i_result = LibEditText_AppendLine( i_tinfoid, i_curid );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_len = snprintf( str_data, 256, "Test 01-003: InsertLine & Undo", i_cnt );
+ i_result = LibEditText_InsertString( i_tinfoid, i_curid, str_data, (DWord)i_len );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_MoveStartCursor( i_tinfoid, i_curid );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_InsertChar( i_tinfoid, i_curid, '\n' );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_ExecUndo( i_tinfoid );
+ CU_ASSERT( 0x00 == i_result );
+
+
+
+
+
+
+
+
+
+
+/*
+ // TestPhase A --- Data Addition ============================
+ // Test 01 --- AppendLine
+ for( i_cnt = 0; i_cnt < 1025; i_cnt++ ) {
+ i_len = snprintf( str_data, 256, "Test A01: AppendLine %d", i_cnt );
+ i_result = LibEditText_InsertString( i_tinfoid, i_curb, str_data, (DWord)i_len );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_AppendLine( i_tinfoid, i_curid );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_MoveDownCursor( i_tinfoid, i_curb, 1);
+ CU_ASSERT( 0x00 == i_result );
+ }
+
+ // Test 02 --- InsertLine
+ for( i_cnt = 0; i_cnt < 1025; i_cnt++ ) {
+ i_len = snprintf( str_data, 256, "Test A02: InsertLine %d", i_cnt );
+ i_result = LibEditText_InsertString( i_tinfoid, i_curid, str_data, (DWord)i_len );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_AppendLine( i_tinfoid, i_curid );
+ CU_ASSERT( 0x00 == i_result );
+ }
+
+ // Test 03 --- InsertChar
+ i_result = LibEditText_JumpCursor( i_tinfoid, i_curid, 2050 );
+ CU_ASSERT( 0x00 == i_result );
+
+ for( i_cnt = 0; i_cnt < 16 * 27; i_cnt++ ) {
+ if( (i_cnt % 27) == 26 ) { c_data = '\n'; }
+ else { c_data = 'a' + (i_cnt % 27); }
+
+ i_result = LibEditText_InsertChar( i_tinfoid, i_curid, c_data );
+ CU_ASSERT( 0x00 == i_result );
+ }
+
+ // Test 04-1 --- InsertString
+ for( i_cnt = 0; i_cnt < 16; i_cnt++ ) {
+ i_len = snprintf( str_data, 256, "Test A04-1: InsertLine %d\n", i_cnt );
+ i_result = LibEditText_InsertString( i_tinfoid, i_curid, str_data, (DWord)i_len );
+ CU_ASSERT( 0x00 == i_result );
+ }
+
+ // Test 04-2 --- InsertString
+ i_result = LibEditText_JumpCursor( i_tinfoid, i_curid, 2050 );
+ CU_ASSERT( 0x00 == i_result );
+
+ for( i_cnt = 0; i_cnt < 16; i_cnt++ ) {
+ i_len = snprintf( str_data, 256, "Test A04-2: InsertLine %d\n", i_cnt );
+ i_result = LibEditText_InsertString( i_tinfoid, i_curid, str_data, (DWord)i_len );
+ CU_ASSERT( 0x00 == i_result );
+ }
+
+ // TestPhase B --- CursorMove & Jump ========================
+ // First Move -- Right + Jump
+ i_result = LibEditText_JumpCursor( i_tinfoid, i_curid, 0 );
+ CU_ASSERT( 0x00 == i_result );
+
+ dw_maxline = LibEditText_GetMaxLines( i_tinfoid );
+ CU_ASSERT( MAXLINES > dw_maxline );
+
+ dw_bytes = 0;
+ do {
+ dw_bytes++;
+ i_result = LibEditText_MoveRightCursor( i_tinfoid, i_curid, 1 );
+ }while( i_result == 0x00 );
+
+ i_result = LibEditText_GetCursorPosition( i_tinfoid, i_curid, &dw_nowline, &dw_pos );
+ CU_ASSERT( 0x00 == i_result );
+
+ CU_ASSERT( dw_nowline + 1 == dw_maxline );
+
+ pstr_data = LibEditText_GetCursorLineString( i_tinfoid, i_curid, &dw_len );
+ CU_ASSERT( NULL != pstr_data );
+
+ CU_ASSERT( dw_pos == dw_len );
+
+ // 2nd Move -- Start + Left
+ for( dw_nowline = dw_maxline; dw_nowline > 0; dw_nowline-- ) {
+ i_result = LibEditText_MoveStartCursor( i_tinfoid, i_curid );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_MoveLeftCursor( i_tinfoid, i_curid, 1 );
+ CU_ASSERT( 0x00 <= i_result );
+ }
+
+ i_result = LibEditText_GetCursorPosition( i_tinfoid, i_curid, &dw_nowline, &dw_pos );
+ CU_ASSERT( 0x00 == i_result );
+
+ CU_ASSERT( dw_nowline == 0 );
+ CU_ASSERT( dw_pos == 0 );
+
+ // 3rd Move -- End + Down
+ do {
+ i_result = LibEditText_MoveEndCursor( i_tinfoid, i_curid );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_MoveDownCursor( i_tinfoid, i_curid, 1);
+ }while( 0x00 == i_result );
+
+ i_result = LibEditText_GetCursorPosition( i_tinfoid, i_curid, &dw_nowline, &dw_pos );
+ CU_ASSERT( 0x00 == i_result );
+
+ CU_ASSERT( dw_nowline + 1 == dw_maxline );
+
+ // 4th Move -- Up
+ do {
+ i_result = LibEditText_MoveUpCursor( i_tinfoid, i_curid, 20);
+ }while( 0x00 == i_result );
+
+ i_result = LibEditText_GetCursorPosition( i_tinfoid, i_curid, &dw_nowline, &dw_pos );
+ CU_ASSERT( 0x00 == i_result );
+
+ CU_ASSERT( dw_nowline == 0 );
+
+ // TestPhase D --- SplitLine & OutputData ===================
+ do {
+ pstr_data = LibEditText_GetCursorLineString( i_tinfoid, i_curid, &dw_len );
+ CU_ASSERT( NULL != pstr_data );
+
+ if( 0 < dw_len ) {
+ dw_pos = rand() % dw_len;
+ }
+ else {
+ dw_pos = 0;
+ }
+ i_result = LibEditText_SetCursor( i_tinfoid, i_curid, dw_pos );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_InsertChar( i_tinfoid, i_curid, '\n' );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_MoveDownCursor( i_tinfoid, i_curid, 1);
+ }while( 0x00 == i_result );
+
+ i_result = LibEditText_GetCursorPosition( i_tinfoid, i_curid, &dw_nowline, &dw_pos );
+ CU_ASSERT( 0x00 == i_result );
+
+ dw_maxline = LibEditText_GetMaxLines( i_tinfoid );
+ CU_ASSERT( dw_nowline + 1 == dw_maxline );
+
+ // TestPhase E --- Delete Data ==============================
+ // Test 30 --- JoinLine
+ i_result = LibEditText_JumpCursor( i_tinfoid, i_curb, 0 );
+ CU_ASSERT( 0x00 == i_result );
+
+ do {
+ i_result = LibEditText_JoinLine( i_tinfoid, i_curb );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_MoveDownCursor( i_tinfoid, i_curb, 1);
+ }while( 0x00 == i_result );
+
+ i_result = LibEditText_GetCursorPosition( i_tinfoid, i_curb, &dw_nowline, &dw_pos );
+ CU_ASSERT( 0x00 == i_result );
+
+ dw_maxline = LibEditText_GetMaxLines( i_tinfoid );
+ CU_ASSERT( dw_nowline + 1 == dw_maxline );
+
+ i_result = LibEditText_GetCursorPosition( i_tinfoid, i_curid, &dw_nowline, &dw_pos );
+ CU_ASSERT( 0x00 == i_result );
+ CU_ASSERT( dw_nowline + 1 == dw_maxline );
+
+ // Test 31 --- BackSpace
+ 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 );
+
+ 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 );
+ }while( ( dw_targline < dw_nowline ) || ( 0 < dw_pos ) );
+
+ // Test 32 --- DeleteChar
+ dw_targline = (dw_maxline / 4) * 2;
+ i_result = LibEditText_JumpCursor( i_tinfoid, i_curid, dw_targline );
+ 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_nowline = LibEditText_GetMaxLines( i_tinfoid );
+ }while( (dw_targline + 1) < dw_nowline );
+
+ // Test 33 --- DeleteString
+ dw_targline = (dw_maxline / 4);
+ i_result = LibEditText_JumpCursor( i_tinfoid, i_curid, dw_targline );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_MoveStartCursor( i_tinfoid, i_curid );
+ CU_ASSERT( 0x00 == i_result );
+
+ do {
+ pstr_data = LibEditText_GetCursorLineString( i_tinfoid, i_curid, &dw_len );
+ CU_ASSERT( NULL != pstr_data );
+
+ if( 0 < dw_len ) {
+ dw_pos = rand() % dw_len;
+ dw_len -= dw_pos;
+
+ i_result = LibEditText_DeleteString( i_tinfoid, i_curid, dw_pos );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_DeleteString( i_tinfoid, i_curid, dw_len );
+ CU_ASSERT( 0x00 == i_result );
+ }
+
+ dw_nowline = LibEditText_GetMaxLines( i_tinfoid );
+ }while( (dw_targline + 1) < dw_nowline );
+
+ // Test 34 --- DeleteLine
+ do {
+ i_result = LibEditText_DeleteLine( i_tinfoid, i_curid );
+ CU_ASSERT( 0x00 == i_result );
+
+ dw_nowline = LibEditText_GetMaxLines( i_tinfoid );
+ }while( 1 < dw_nowline );
+
+ // TestPhase F --- Delete Data ==============================
+ i_result = LibEditText_FreeCursor( i_tinfoid, i_curb );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_FreeCursor( i_tinfoid, i_curid );
+ CU_ASSERT( 0x00 == i_result );
+*/
+
+ i_result = LibEditText_Debug_DebugTextInfo(
+ i_tinfoid, DEBUG_TEXTINFO_OUTPUT, "UndoEdit ExecUndo() API test 00-001" );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_CloseFile( i_tinfoid );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = LibEditText_Term();
+ CU_ASSERT( 0x00 == i_result );
+
+ return;
+}
+
+
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+DRD64_TEST_LIBEDITTEXT_UNDOEDIT_EXTERN
+int
+ Test_LibEditText_UndoEdit(
+ void )
+{
+ CU_pSuite pt_undoexec;
+
+ pt_undoexec = CU_add_suite( "LibEditText_UndoExecAPI", NULL, NULL );
+
+ CU_add_test( pt_undoexec, "EditText_API_UndoExecAPI_test00_001",
+ Test_LibEditText_API_ExecUndo_test00_001 );
+
+ return 0x00;
+}
+
+
+/* EOF of drd64_.c ----------------------------------- */