OSDN Git Service

prepare to fix UndoTest4
authorTomohisa Hirami <hirami@users.sourceforge.jp>
Tue, 3 Mar 2009 16:44:23 +0000 (01:44 +0900)
committerTomohisa Hirami <hirami@users.sourceforge.jp>
Tue, 3 Mar 2009 16:44:23 +0000 (01:44 +0900)
* use TString in UndoInfo
* merge SetPrev, SetNew to UpdateUndoRegion

Src/YAEdit/YAEditDoc.cpp
Src/YAEdit/YAEditDoc.h
UnitTest/UnitTest/UnitTest.vcproj
UnitTest/UnitTest/testcase/YAEditDocTest.cpp

index 76c921f..276f755 100644 (file)
@@ -3,7 +3,6 @@
 #include "AutoPtr.h"\r
 #include "Region.h"\r
 #include "VarBuffer.h"\r
-#include "YAEditDoc.h"\r
 #include "LineWrapper.h"\r
 #include "LineWrapperImpl.h"\r
 #include "YAEdit.h"\r
 #include "LineManager.h"\r
 #include "PhysicalLineManager.h"\r
 #include "StringSplitter.h"\r
+#include "TString.h"\r
+#include "YAEditDoc.h"\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 // undo info\r
 /////////////////////////////////////////////////////////////////////////////\r
 \r
-UndoInfo::UndoInfo() : pPrevStr(NULL), pNewStr(NULL), bUndoApplied(FALSE)\r
+UndoInfo::UndoInfo() : bUndoApplied(FALSE), bOpenRegion(TRUE)\r
 {\r
 }\r
 \r
 \r
 UndoInfo::~UndoInfo()\r
 {\r
-       delete[] pPrevStr;\r
-}\r
-\r
-BOOL UndoInfo::SetPrev(const Region *pRegion, LPTSTR p) {\r
-       rPrevRegion = *pRegion;\r
-       pPrevStr = p;\r
-       return TRUE;\r
-}\r
-\r
-BOOL UndoInfo::SetNew(const Region *pRegion, LPTSTR p) {\r
-       rNewRegion = *pRegion;\r
-       pNewStr = p;\r
-       return TRUE;\r
 }\r
 \r
 BOOL UndoInfo::CmdUndo(YAEditDoc *pDoc) {\r
        if (bUndoApplied) {\r
                bUndoApplied = FALSE;\r
-               return pDoc->ReplaceString(&rPrevRegion, pNewStr, TRUE);\r
+               return pDoc->ReplaceString(&rPrevRegion, sNewStr.Get(), TRUE);\r
        } else {\r
                bUndoApplied = TRUE;\r
-               return pDoc->ReplaceString(&rNewRegion, pPrevStr, TRUE);\r
+               return pDoc->ReplaceString(&rNewRegion, sPrevStr.Get(), TRUE);\r
        }\r
 }\r
 \r
+BOOL UndoInfo::UpdateUndoRegion(const Region *pPrevRegion, LPCTSTR pPrev, const Region *pNewRegion, LPCTSTR pNew) {\r
+       rPrevRegion = *pPrevRegion;\r
+       if (!sPrevStr.Set(pPrev)) return FALSE;\r
+//     pPrevStr = pPrev;\r
+\r
+       rNewRegion = *pNewRegion;\r
+       return sNewStr.Set(pNew);\r
+}\r
+\r
 /////////////////////////////////////////////////////////////////////////////\r
 // ctor & dtor\r
 /////////////////////////////////////////////////////////////////////////////\r
@@ -140,11 +137,7 @@ BOOL YAEditDoc::ReplaceString(const Region *pDelRegion, LPCTSTR pString, BOOL bK
 \r
        DWORD nPhLinesBefore = pPhLineMgr->MaxLine();\r
 \r
-       // preserve string and region removed by this action.\r
-       if (!bKeepUndo) {\r
-               LPTSTR pPrevText = pPhLineMgr->GetRegionString(pDelRegion);\r
-               pUndo->SetPrev(pDelRegion, pPrevText);\r
-       }\r
+       LPTSTR pPrevText = pPhLineMgr->GetRegionString(pDelRegion);\r
 \r
        // delete region and insert string\r
        Region rNewRegion;\r
@@ -153,9 +146,13 @@ BOOL YAEditDoc::ReplaceString(const Region *pDelRegion, LPCTSTR pString, BOOL bK
                return FALSE;\r
        }\r
 \r
+       // preserve string and region after replaced.\r
        if (!bKeepUndo) {\r
-               // preserve string and region after replaced.\r
-               pUndo->SetNew(&rNewRegion, StringDup(pString));\r
+               if (!pUndo->UpdateUndoRegion(pDelRegion, pPrevText, &rNewRegion, pString)) {\r
+                       return FALSE;\r
+               }\r
+       } else {\r
+               delete [] pPrevText;\r
        }\r
 \r
        // notify to view\r
@@ -173,8 +170,6 @@ BOOL YAEditDoc::Undo()
        if (pUndo == NULL) return TRUE;\r
 \r
        BOOL bResult = pUndo->CmdUndo(this);\r
-//     delete pUndo;\r
-//     pUndo = NULL;\r
        return bResult;\r
 }\r
 \r
index db7d3a9..c569f19 100644 (file)
@@ -49,7 +49,10 @@ public:
        ////////////////////////////////////////////////////\r
        // retrieve & set line \r
 \r
+       // bKeepUndo is usualy set FALSE. Only undo operation set true.\r
+       // when the value is true, ReplaceString do not change UndoInfo value.\r
        BOOL ReplaceString(const Region *pRegion, LPCTSTR pString, BOOL bKeepUndo = FALSE);\r
+\r
        BOOL Undo();\r
 \r
        BOOL IsModify() { return bModified; }\r
@@ -78,20 +81,28 @@ class UndoInfo {
 #ifdef UNIT_TEST\r
 public:\r
 #endif\r
-       LPTSTR pPrevStr;\r
+//     LPTSTR pPrevStr;\r
+       TString sPrevStr;\r
        Region rPrevRegion;\r
 \r
-       LPTSTR pNewStr;\r
+//     LPTSTR pNewStr;\r
+       TString sNewStr;\r
        Region rNewRegion;\r
 \r
+       // true if this undo is applied. At creation time, this value is false and set true\r
+       // when YAEditDoc::Undo is called.\r
        BOOL bUndoApplied;\r
 \r
+       // Assume type 'a' and 'b', we expect remove 'ab' when undoing. If this value is ture, \r
+       // UndoInfo merge current changes and previous changes.\r
+       BOOL bOpenRegion;\r
 public:\r
        UndoInfo();\r
        ~UndoInfo();\r
 \r
-       BOOL SetPrev(const Region *pRegion, LPTSTR pPrevStr);\r
-       BOOL SetNew(const Region *pRegion, LPTSTR pNewStr);\r
+       BOOL UpdateUndoRegion(const Region *pPrevRegion, LPCTSTR pPrevStr, \r
+                                                       const Region *pNewRegion, LPCTSTR pNewStr);\r
+\r
        BOOL CmdUndo(YAEditDoc *pDoc);\r
 };\r
 \r
index 31ff0b7..ba4300f 100644 (file)
                                        >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\Src\YAEdit\YAEditDoc.cpp"\r
-                                       >\r
-                               </File>\r
-                               <File\r
                                        RelativePath="..\..\Src\YAEdit\YAEditDoc.h"\r
                                        >\r
                                </File>\r
                                        RelativePath="..\..\Src\TomboLib\VarBuffer.h"\r
                                        >\r
                                </File>\r
+                               <File\r
+                                       RelativePath="..\..\Src\YAEdit\YAEditDoc.cpp"\r
+                                       >\r
+                               </File>\r
                        </Filter>\r
                </Filter>\r
                <Filter\r
index c22a843..d4559f7 100644 (file)
@@ -4,6 +4,7 @@
 \r
 #include "VarBuffer.h"\r
 #include "Region.h"\r
+#include "TString.h"\r
 #include "YAEditDoc.h"\r
 #include "PhysicalLineManager.h"\r
 #include "MemManager.h"\r
@@ -307,8 +308,8 @@ void UndoTest2()
        Region rExpectedNew(1, 0, 4, 0);\r
        ASSERT(pUndo->rPrevRegion == rExpectedPrev);\r
        ASSERT(pUndo->rNewRegion == rExpectedNew);\r
-       ASSERT(_tcscmp(pUndo->pPrevStr, TEXT("")) == 0);\r
-       ASSERT(_tcscmp(pUndo->pNewStr, TEXT("bcd")) == 0);\r
+       ASSERT(_tcscmp(pUndo->sPrevStr.Get(), TEXT("")) == 0);\r
+       ASSERT(_tcscmp(pUndo->sNewStr.Get(), TEXT("bcd")) == 0);\r
 \r
        // Undo\r
        bResult = pDoc->Undo();\r
@@ -339,8 +340,8 @@ void UndoTest3()
        ASSERT(pUndo->rPrevRegion == rExpectedPrev);\r
        ASSERT(pUndo->rNewRegion == rExpectedNew);\r
 \r
-       ASSERT(_tcscmp(pUndo->pPrevStr, TEXT("cd")) == 0);\r
-       ASSERT(_tcscmp(pUndo->pNewStr, TEXT("fgh")) == 0);\r
+       ASSERT(_tcscmp(pUndo->sPrevStr.Get(), TEXT("cd")) == 0);\r
+       ASSERT(_tcscmp(pUndo->sNewStr.Get(), TEXT("fgh")) == 0);\r
 \r
 \r
        // Undo\r