OSDN Git Service

The timing of CloseUndoRegion on BS is incorrect.
authorTomohisa Hirami <hirami@users.sourceforge.jp>
Mon, 9 Mar 2009 16:00:39 +0000 (01:00 +0900)
committerTomohisa Hirami <hirami@users.sourceforge.jp>
Mon, 9 Mar 2009 16:00:39 +0000 (01:00 +0900)
Src/YAEdit/YAEdit.cpp
UnitTest/UnitTest/testcase/YAEditDocTest.cpp

index 288014b..138ca11 100644 (file)
@@ -730,7 +730,6 @@ void YAEditImpl::CmdBackSpace()
 {\r
        if (pDoc->IsReadOnly()) return;\r
 \r
-       pDoc->CloseUndoRegion();\r
        if (IsRegionSelected()) {\r
                ReplaceText(SelectedRegion(), TEXT(""));\r
        } else {\r
@@ -740,6 +739,7 @@ void YAEditImpl::CmdBackSpace()
                r.posStart = pView->GetCaretPosition();\r
                if (!r.IsEmptyRegion()) ReplaceText(r, TEXT(""));\r
        }\r
+       pDoc->CloseUndoRegion();\r
 }\r
 \r
 void YAEditImpl::CmdDeleteChar()\r
index e63d296..c1da9b2 100644 (file)
@@ -27,6 +27,7 @@ static void UndoTest3();
 static void UndoTest4();\r
 static void UndoTest5();\r
 static void UndoTest6();\r
+static void UndoTest7();\r
 \r
 \r
 void YAEditDocTest(TestRunner *r) {\r
@@ -49,6 +50,7 @@ void YAEditDocTest(TestRunner *r) {
        UndoTest4();\r
        UndoTest5();\r
        UndoTest6();\r
+       UndoTest7();\r
 }\r
 \r
 ////////////////////////////////////////////////\r
@@ -497,3 +499,40 @@ void UndoTest6() {
        // expect is --ab---\r
 \r
 }\r
+\r
+// 'a', 'b', 'c', BS, 'D', Ctrl-Z, Ctl-Z, Ctl-Z\r
+void UndoTest7() {\r
+       YAEditDoc *pDoc = new YAEditDoc();\r
+       ASSERT(pDoc->Init(TEXT("-----"), NULL, NULL));\r
+       // -----\r
+       Region r1(2, 0, 2, 0);\r
+       ASSERT(pDoc->ReplaceString(&r1, TEXT("a")));\r
+\r
+       Region r2(3, 0, 3, 0);\r
+       ASSERT(pDoc->ReplaceString(&r2, TEXT("b")));\r
+\r
+       Region r3(4, 0, 4, 0);\r
+       ASSERT(pDoc->ReplaceString(&r3, TEXT("c")));\r
+//     --abc---\r
+\r
+       Region r4(4, 0, 5, 0);\r
+       ASSERT(pDoc->ReplaceString(&r4, TEXT("")));\r
+       pDoc->CloseUndoRegion();\r
+\r
+       Region r5(4, 0, 4, 0);\r
+       ASSERT(pDoc->ReplaceString(&r5, TEXT("d")));\r
+\r
+       ASSERT(pDoc->Undo());\r
+       ASSERT(pDoc->Undo());\r
+\r
+       DWORD nLen;\r
+       LPTSTR pResult;\r
+\r
+       pResult = pDoc->GetDocumentData(&nLen);\r
+       ASSERT(pResult != NULL);\r
+       ASSERT(_tcsncmp(pResult, TEXT("--abd---"), nLen) == 0);\r
+       ASSERT(nLen == 8);\r
+\r
+       ASSERT(pDoc->Undo());\r
+       ASSERT(0);\r
+}
\ No newline at end of file