OSDN Git Service

Update TranslationsStatus.*
[winmerge-jp/winmerge-jp.git] / Src / Test.cpp
1 #include "StdAfx.h"\r
2 #ifdef TEST_WINMERGE\r
3 #include "Merge.h"\r
4 #include "Environment.h"\r
5 #include "paths.h"\r
6 #include "MainFrm.h"\r
7 #include "MergeDoc.h"\r
8 #include "ccrystaltextview.h"\r
9 #include "dialogs/cfindtextdlg.h"\r
10 #include "MergeEditView.h"\r
11 #include "DirDoc.h"\r
12 #include "DirView.h"\r
13 #include "ImgMergeFrm.h"\r
14 #include "DiffContext.h"\r
15 #include "CompareStats.h"\r
16 #include "unicoder.h"\r
17 #include "OptionsMgr.h"\r
18 #include "OptionsDef.h"\r
19 #include "SyntaxColors.h"\r
20 #include "MergeCmdLineInfo.h"\r
21 #include "editcmd.h"\r
22 #include "gtest/gtest.h"\r
23 \r
24 String getProjectRoot()\r
25 {\r
26 #ifdef _WIN64\r
27         return paths::ConcatPath(env::GetProgPath(), L"../../..");\r
28 #else\r
29         return paths::ConcatPath(env::GetProgPath(), L"../../");\r
30 #endif\r
31 }\r
32 \r
33 void Wait(unsigned ms)\r
34 {\r
35         unsigned start = GetTickCount();\r
36         while (GetTickCount() - start < ms)\r
37         {\r
38                 MSG msg;\r
39                 if (::PeekMessage(&msg, nullptr, NULL, NULL, PM_NOREMOVE))\r
40                         AfxGetApp()->PumpMessage();\r
41                 Sleep(1);\r
42         }\r
43 }\r
44 \r
45 TEST(CodepageTest, UCS2)\r
46 {\r
47         String projectRoot = getProjectRoot();\r
48         PathContext tFiles = {\r
49                 paths::ConcatPath(projectRoot, L"Testing/Data/Unicode/UCS-2BE/DiffItem.h"),\r
50                 paths::ConcatPath(projectRoot, L"Testing/Data/Unicode/UCS-2LE/DiffItem.h")\r
51         };\r
52         EXPECT_TRUE(GetMainFrame()->DoFileOpen(&tFiles));\r
53         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
54         CMergeDoc *pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
55         ASSERT_NE(nullptr, pDoc);\r
56         EXPECT_EQ(ucr::UCS2BE, pDoc->m_ptBuf[0]->getEncoding().m_unicoding);\r
57         EXPECT_TRUE(pDoc->m_ptBuf[0]->getEncoding().m_bom);\r
58         EXPECT_EQ(ucr::UCS2LE, pDoc->m_ptBuf[1]->getEncoding().m_unicoding);\r
59         EXPECT_TRUE(pDoc->m_ptBuf[1]->getEncoding().m_bom);\r
60         pFrame->PostMessage(WM_CLOSE);\r
61 }\r
62 \r
63 TEST(CodepageTest, UTF8)\r
64 {\r
65         String projectRoot = getProjectRoot();\r
66         PathContext tFiles = {\r
67                 paths::ConcatPath(projectRoot, L"Testing/Data/Unicode/UTF-8/DiffItem.h"),\r
68                 paths::ConcatPath(projectRoot, L"Testing/Data/Unicode/UTF-8-NOBOM/DiffItem.h")\r
69         };\r
70         EXPECT_TRUE(GetMainFrame()->DoFileOpen(&tFiles));\r
71         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
72         CMergeDoc *pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
73         EXPECT_NE(nullptr, pDoc);\r
74         if (pDoc == nullptr)\r
75                 return;\r
76         EXPECT_EQ(ucr::UTF8, pDoc->m_ptBuf[0]->getEncoding().m_unicoding);\r
77         EXPECT_TRUE(pDoc->m_ptBuf[0]->getEncoding().m_bom);\r
78         EXPECT_EQ(ucr::UTF8, pDoc->m_ptBuf[1]->getEncoding().m_unicoding);\r
79         EXPECT_FALSE(pDoc->m_ptBuf[1]->getEncoding().m_bom);\r
80         pFrame->PostMessage(WM_CLOSE);\r
81 }\r
82 \r
83 TEST(SyntaxHighlight, Verilog)\r
84 {\r
85         String projectRoot = getProjectRoot();\r
86         PathContext tFiles = {\r
87                 paths::ConcatPath(projectRoot, L"Testing/Data/FileFormats/Verilog.v"),\r
88                 paths::ConcatPath(projectRoot, L"Testing/Data/FileFormats/Verilog.v")\r
89         };\r
90         CMessageBoxDialog dlg(nullptr, IDS_FILE_TO_ITSELF, 0U, 0U, IDS_FILE_TO_ITSELF);\r
91         const int nPrevFormerResult = dlg.SetFormerResult(IDOK);\r
92         EXPECT_TRUE(GetMainFrame()->DoFileOpen(&tFiles));\r
93         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
94         CMergeDoc *pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
95         EXPECT_NE(nullptr, pDoc);\r
96         if (pDoc == nullptr)\r
97                 return;\r
98 \r
99         std::vector<CrystalLineParser::TEXTBLOCK> blocks;\r
100         blocks = pDoc->GetView(0, 0)->GetTextBlocks(0);\r
101         EXPECT_EQ(COLORINDEX_COMMENT, blocks[0].m_nColorIndex);\r
102         blocks = pDoc->GetView(0, 0)->GetTextBlocks(2);\r
103         EXPECT_EQ(COLORINDEX_KEYWORD, blocks[0].m_nColorIndex);\r
104         blocks = pDoc->GetView(0, 0)->GetTextBlocks(37);\r
105         EXPECT_EQ(COLORINDEX_PREPROCESSOR, blocks[0].m_nColorIndex);\r
106         blocks = pDoc->GetView(0, 0)->GetTextBlocks(38);\r
107         EXPECT_EQ(COLORINDEX_USER1, blocks[1].m_nColorIndex);\r
108         EXPECT_EQ(COLORINDEX_STRING, blocks[3].m_nColorIndex);\r
109 \r
110         pFrame->PostMessage(WM_CLOSE);\r
111         dlg.SetFormerResult(nPrevFormerResult);\r
112 }\r
113 \r
114 TEST(FileCompare, FindText)\r
115 {\r
116         String projectRoot = getProjectRoot();\r
117         CMessageBoxDialog dlg(nullptr, IDS_FILE_TO_ITSELF, 0U, 0U, IDS_FILE_TO_ITSELF);\r
118         const int nPrevFormerResult = dlg.SetFormerResult(IDOK);\r
119         CMergeDoc *pDoc = nullptr;\r
120         CFrameWnd *pFrame = nullptr;\r
121         PathContext tFiles = {\r
122                 paths::ConcatPath(projectRoot, _T("Testing/Data/FindText/test1.txt")),\r
123                 paths::ConcatPath(projectRoot, _T("Testing/Data/FindText/test1.txt")),\r
124         };\r
125         EXPECT_TRUE(GetMainFrame()->DoFileOpen(&tFiles));\r
126         pFrame = GetMainFrame()->GetActiveFrame();\r
127         pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
128         EXPECT_NE(nullptr, pDoc);\r
129         if (pDoc == nullptr)\r
130                 return;\r
131 \r
132         CMergeEditView *pView = pDoc->GetView(0, 0);\r
133 \r
134         CString lines, lineslower;\r
135         pView->GetTextWithoutEmptys(0, 0, pView->GetLineCount() - 1, pView->GetLineLength(pView->GetLineCount() - 1), lines);\r
136         lineslower = lines;\r
137         lineslower.MakeLower();\r
138 \r
139         CPoint pt, ptFound;\r
140         DWORD dwFlags = 0;\r
141         LastSearchInfos lsi = { 0 };\r
142         CPoint ptstart, ptstart2, ptend;\r
143 \r
144         for (int direction : { 1, 0 })\r
145         {\r
146                 for (bool useregex : { false, true })\r
147                 {\r
148                         for (bool matchcase : { true, false })\r
149                         {\r
150                                 for (CString text : { _T("a"), _T("abc")})\r
151                                 {\r
152                                         size_t count = 0;\r
153                                         int pos = 0;\r
154                                         while (true)\r
155                                         {\r
156                                                 pos = (matchcase ? lines : lineslower).Find(text, pos);\r
157                                                 if (pos < 0)\r
158                                                         break;\r
159                                                 pos += text.GetLength();\r
160                                                 count++;\r
161                                         }\r
162                                         pView->SetCursorPos({ 0, 0 });\r
163                                         pView->SetNewAnchor({ 0, 0 });\r
164                                         pView->SetNewSelection({ 0, 0 }, { 0, 0 });\r
165                                         lsi.m_sText = text;\r
166                                         lsi.m_bNoWrap = false;\r
167                                         lsi.m_bMatchCase = matchcase;\r
168                                         lsi.m_nDirection = direction;\r
169                                         lsi.m_bRegExp = useregex;\r
170                                         for (size_t i = 0; i < count; ++i)\r
171                                         {\r
172                                                 pView->FindText(&lsi);\r
173                                                 if (i == 0)\r
174                                                         ptstart = pView->GetAnchor();\r
175                                                 Wait(1);\r
176                                         }\r
177                                         ptend = pView->GetAnchor();\r
178                                         pView->FindText(&lsi);\r
179                                         ptstart2 = pView->GetAnchor();\r
180                                         if (direction == 0)\r
181                                                 EXPECT_LT(ptend.y, ptstart2.y);\r
182                                         else\r
183                                                 EXPECT_GT(ptend.y, ptstart2.y);\r
184                                         EXPECT_EQ(ptstart.y, ptstart2.y);\r
185                                         EXPECT_EQ(text.MakeLower(), pView->GetSelectedText().MakeLower());\r
186                                 }\r
187                         }\r
188                 }\r
189         }\r
190 \r
191         pFrame->PostMessage(WM_CLOSE);\r
192         dlg.SetFormerResult(nPrevFormerResult);\r
193 }\r
194 \r
195 TEST(FileCompare, LastLineEOL)\r
196 {\r
197         String projectRoot = getProjectRoot();\r
198         const static String filelist[] = {\r
199                 _T("0None.txt"),\r
200                 _T("0CRLF.txt"),\r
201                 _T("1None.txt"),\r
202                 _T("1CRLF.txt"),\r
203                 _T("3None.txt"),\r
204                 _T("3CRLF.txt"),\r
205                 _T("2-3CRLF.txt")\r
206         };\r
207         CMessageBoxDialog dlg(nullptr, IDS_FILESSAME, 0U, 0U, IDS_FILESSAME);\r
208         CMessageBoxDialog dlg2(nullptr, IDS_FILE_TO_ITSELF, 0U, 0U, IDS_FILE_TO_ITSELF);\r
209         const int nPrevFormerResult = dlg.SetFormerResult(IDOK);\r
210         const int nPrevFormerResult2 = dlg2.SetFormerResult(IDOK);\r
211         CMergeDoc *pDoc = nullptr;\r
212         CFrameWnd *pFrame = nullptr;\r
213         for (bool bIgnoreBlankLines: { true, false })\r
214         {\r
215                 GetOptionsMgr()->Set(OPT_CMP_IGNORE_BLANKLINES, bIgnoreBlankLines);\r
216                 for (auto nIgnoreWhitespace: { WHITESPACE_COMPARE_ALL, WHITESPACE_IGNORE_CHANGE, WHITESPACE_IGNORE_ALL})\r
217                 {\r
218                         GetOptionsMgr()->Set(OPT_CMP_IGNORE_WHITESPACE, nIgnoreWhitespace);\r
219                         if (pDoc)\r
220                                 pDoc->RefreshOptions();\r
221                         for (size_t l = 0; l < std::size(filelist); ++l)\r
222                         {\r
223                                 for (size_t r = 0; r < std::size(filelist); ++r)\r
224                                 {\r
225                                         PathContext tFiles = {\r
226                                                 paths::ConcatPath(projectRoot, paths::ConcatPath(_T("Testing/Data/LastLineEOL"), filelist[l])),\r
227                                                 paths::ConcatPath(projectRoot, paths::ConcatPath(_T("Testing/Data/LastLineEOL"), filelist[r])),\r
228                                         };\r
229                                         if (!pFrame)\r
230                                         {\r
231                                                 EXPECT_TRUE(GetMainFrame()->DoFileOpen(&tFiles));\r
232                                                 pFrame = GetMainFrame()->GetActiveFrame();\r
233                                                 pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
234                                                 EXPECT_NE(nullptr, pDoc);\r
235                                                 if (pDoc == nullptr)\r
236                                                         return;\r
237                                         }\r
238                                         if (r == 0)\r
239                                         {\r
240                                                 pDoc->ChangeFile(0, tFiles[0]);\r
241                                         }\r
242                                         pDoc->ChangeFile(1, tFiles[1]);\r
243 \r
244                                         if (tFiles[0] == tFiles[1])\r
245                                         {\r
246                                                 EXPECT_EQ(0, pDoc->m_diffList.GetSize());\r
247                                         }\r
248                                         else\r
249                                         {\r
250                                                 if (pDoc->m_diffList.DiffRangeAt(0)->op == OP_TRIVIAL)\r
251                                                 {\r
252                                                         EXPECT_EQ(true, bIgnoreBlankLines);\r
253                                                 }\r
254                                                 else\r
255                                                 {\r
256                                                         CMergeEditView *pView = pDoc->GetView(0, 0); // merge\r
257                                                         EXPECT_LE(1, pDoc->m_diffList.GetSize());\r
258                                                         pDoc->CopyAllList(0, 1);\r
259                                                         EXPECT_EQ(0, pDoc->m_diffList.GetSize());\r
260                                                         // undo\r
261                                                         pView->SendMessage(WM_COMMAND, ID_EDIT_UNDO);\r
262                                                         EXPECT_LE(1, pDoc->m_diffList.GetSize());\r
263                                                         // insert a character at the last line\r
264                                                         pView->GotoLine(pDoc->m_ptBuf[0]->GetLineCount() - 1, false, 0);\r
265                                                         pView->SendMessage(WM_CHAR, 'a');\r
266                                                         // undo\r
267                                                         pView->SendMessage(WM_COMMAND, ID_EDIT_UNDO);\r
268 \r
269                                                         pView = pDoc->GetView(0, 1);\r
270                                                         pView->GotoLine(0, false, 1);\r
271                                                         // Select all & Delete\r
272                                                         pView->SendMessage(WM_COMMAND, ID_EDIT_SELECT_ALL);\r
273                                                         pView->SendMessage(WM_COMMAND, ID_EDIT_DELETE);\r
274                                                         // undo\r
275                                                         pView->SendMessage(WM_COMMAND, ID_EDIT_UNDO);\r
276                                                         // redo\r
277                                                         pView->SendMessage(WM_COMMAND, ID_EDIT_REDO);\r
278                                                         // undo\r
279                                                         pView->SendMessage(WM_COMMAND, ID_EDIT_UNDO);\r
280                                                 }\r
281                                         }\r
282                                 }\r
283                         }\r
284                 }\r
285         }\r
286         pFrame->PostMessage(WM_CLOSE);\r
287         dlg.SetFormerResult(nPrevFormerResult);\r
288         dlg2.SetFormerResult(nPrevFormerResult2);\r
289 }\r
290 \r
291 TEST(FolderCompare, IgnoreEOL)\r
292 {\r
293         String projectRoot = getProjectRoot();\r
294         PathContext dirsArray[] = {\r
295                 {\r
296                         paths::ConcatPath(projectRoot, L"Testing/selftests/u/"),\r
297                         paths::ConcatPath(projectRoot, L"Testing/selftests/m/")\r
298                 },\r
299                 {\r
300                         paths::ConcatPath(projectRoot, L"Testing/selftests/w/"),\r
301                         paths::ConcatPath(projectRoot, L"Testing/selftests/u/")\r
302                 },\r
303                 {\r
304                         paths::ConcatPath(projectRoot, L"Testing/selftests/w/"),\r
305                         paths::ConcatPath(projectRoot, L"Testing/selftests/m/")\r
306                 }\r
307         };\r
308 \r
309         for (auto& dirs : dirsArray)\r
310         {\r
311                 GetOptionsMgr()->Set(OPT_CMP_METHOD, 0/* Full Contents*/);\r
312                 GetOptionsMgr()->Set(OPT_CMP_IGNORE_EOL, true);\r
313                 EXPECT_TRUE(GetMainFrame()->DoFileOpen(&dirs));\r
314                 CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
315                 CDirDoc *pDoc = dynamic_cast<CDirDoc *>(pFrame->GetActiveDocument());\r
316                 EXPECT_NE(nullptr, pDoc);\r
317                 if (pDoc == nullptr)\r
318                 {\r
319                         pFrame->PostMessage(WM_CLOSE);\r
320                         continue;\r
321                 }\r
322                 CDirView *pView = pDoc->GetMainView();\r
323                 const CDiffContext& ctxt = pDoc->GetDiffContext();\r
324                 const CompareStats *pStats = ctxt.m_pCompareStats;\r
325                 do { Sleep(100); } while (!pStats->IsCompareDone());\r
326                 EXPECT_EQ(10, pStats->GetTotalItems());\r
327                 EXPECT_EQ(10, pStats->GetCount(CompareStats::RESULT::RESULT_SAME));\r
328                 DIFFITEM *pos = ctxt.GetFirstDiffPosition();\r
329                 while (pos != nullptr)\r
330                 {\r
331                         const DIFFITEM& di = ctxt.GetNextDiffPosition(pos);\r
332                         for (int i = 0; i < 2; ++i)\r
333                         {\r
334                                 if (dirs[i].find(L"/w/") != String::npos)\r
335                                 {\r
336                                         EXPECT_LT(0, di.diffFileInfo[i].m_textStats.ncrlfs);\r
337                                         EXPECT_EQ(0, di.diffFileInfo[i].m_textStats.nlfs);\r
338                                         EXPECT_EQ(0, di.diffFileInfo[i].m_textStats.ncrs);\r
339                                 }\r
340                                 else if (dirs[i].find(L"/u/") != String::npos)\r
341                                 {\r
342                                         EXPECT_LT(0, di.diffFileInfo[i].m_textStats.nlfs);\r
343                                         EXPECT_EQ(0, di.diffFileInfo[i].m_textStats.ncrlfs);\r
344                                         EXPECT_EQ(0, di.diffFileInfo[i].m_textStats.ncrs);\r
345                                 }\r
346                                 else if (dirs[i].find(L"/m/") != String::npos)\r
347                                 {\r
348                                         EXPECT_LT(0, di.diffFileInfo[i].m_textStats.ncrs);\r
349                                         EXPECT_EQ(0, di.diffFileInfo[i].m_textStats.nlfs);\r
350                                         EXPECT_EQ(0, di.diffFileInfo[i].m_textStats.ncrlfs);\r
351                                 }\r
352                         }\r
353                 }\r
354 \r
355                 GetOptionsMgr()->Set(OPT_CMP_METHOD, 0/* Full Contents*/);\r
356                 GetOptionsMgr()->Set(OPT_CMP_IGNORE_EOL, false);\r
357                 pDoc->Rescan();\r
358                 do { Sleep(100); } while (!pStats->IsCompareDone());\r
359                 EXPECT_EQ(10, pStats->GetTotalItems());\r
360                 EXPECT_EQ(10, pStats->GetCount(CompareStats::RESULT::RESULT_DIFF));\r
361 \r
362                 GetOptionsMgr()->Set(OPT_CMP_METHOD, 1/* Quick Contents*/);\r
363                 GetOptionsMgr()->Set(OPT_CMP_IGNORE_EOL, true);\r
364                 pDoc->Rescan();\r
365                 do { Sleep(100); } while (!pStats->IsCompareDone());\r
366                 EXPECT_EQ(10, pStats->GetTotalItems());\r
367                 EXPECT_EQ(10, pStats->GetCount(CompareStats::RESULT::RESULT_SAME));\r
368 \r
369                 GetOptionsMgr()->Set(OPT_CMP_METHOD, 1/* Quick Contents*/);\r
370                 GetOptionsMgr()->Set(OPT_CMP_IGNORE_EOL, false);\r
371                 pDoc->Rescan();\r
372                 do { Sleep(100); } while (!pStats->IsCompareDone());\r
373                 EXPECT_EQ(10, pStats->GetTotalItems());\r
374                 EXPECT_EQ(10, pStats->GetCount(CompareStats::RESULT::RESULT_DIFF));\r
375 \r
376                 pFrame->PostMessage(WM_CLOSE);\r
377         }\r
378 }\r
379 \r
380 TEST(CommandLineTest, Desc)\r
381 {\r
382         String progpath = paths::ConcatPath(env::GetProgPath(), _T("WinMergeU.exe"));\r
383         String projectRoot = getProjectRoot();\r
384         MergeCmdLineInfo cmdInfo((progpath + L" /dl TestL /dr TestR " + \r
385                 paths::ConcatPath(projectRoot, L"Testing/Data/Unicode/UCS-2BE/DiffItem.h") + L" " + \r
386                 paths::ConcatPath(projectRoot, L"Testing/Data/Unicode/UCS-2LE/DiffItem.h")).c_str()\r
387         );\r
388         theApp.ParseArgsAndDoOpen(cmdInfo, GetMainFrame());\r
389         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
390         CMergeDoc *pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
391         ASSERT_NE(nullptr, pDoc);\r
392         EXPECT_EQ(L"TestL", pDoc->GetDescription(0));\r
393         EXPECT_EQ(L"TestR", pDoc->GetDescription(1));\r
394         pFrame->PostMessage(WM_CLOSE);\r
395 }\r
396 \r
397 TEST(CommandLineTest, Desc2)\r
398 {\r
399         String progpath = paths::ConcatPath(env::GetProgPath(), _T("WinMergeU.exe"));\r
400         String projectRoot = getProjectRoot();\r
401         MergeCmdLineInfo cmdInfo((progpath + L" /dl TestL /dr TestR " + \r
402                 paths::ConcatPath(projectRoot, L"Testing/Data/big_file.conflict")).c_str()\r
403         );\r
404         theApp.ParseArgsAndDoOpen(cmdInfo, GetMainFrame());\r
405         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
406         CMergeDoc *pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
407         ASSERT_NE(nullptr, pDoc);\r
408         EXPECT_EQ(L"TestL", pDoc->GetDescription(0));\r
409         EXPECT_EQ(L"TestR", pDoc->GetDescription(1));\r
410         pDoc->m_ptBuf[1]->SetModified(false);\r
411         pFrame->PostMessage(WM_CLOSE);\r
412 }\r
413 \r
414 TEST(CommandLineTest, Desc3)\r
415 {\r
416         String progpath = paths::ConcatPath(env::GetProgPath(), _T("WinMergeU.exe"));\r
417         String projectRoot = getProjectRoot();\r
418         MergeCmdLineInfo cmdInfo((progpath + L" /dr TestR " + \r
419                 paths::ConcatPath(projectRoot, L"Testing/Data/big_file.conflict")).c_str()\r
420         );\r
421         theApp.ParseArgsAndDoOpen(cmdInfo, GetMainFrame());\r
422         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
423         CMergeDoc *pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
424         ASSERT_NE(nullptr, pDoc);\r
425         EXPECT_EQ(L"Theirs File", pDoc->GetDescription(0));\r
426         EXPECT_EQ(L"TestR", pDoc->GetDescription(1));\r
427         pDoc->m_ptBuf[1]->SetModified(false);\r
428         pFrame->PostMessage(WM_CLOSE);\r
429 }\r
430 \r
431 TEST(CommandLineTest, Desc4)\r
432 {\r
433         String progpath = paths::ConcatPath(env::GetProgPath(), _T("WinMergeU.exe"));\r
434         String projectRoot = getProjectRoot();\r
435         MergeCmdLineInfo cmdInfo((progpath + L" /dl TestL " + \r
436                 paths::ConcatPath(projectRoot, L"Testing/Data/big_file.conflict")).c_str()\r
437         );\r
438         theApp.ParseArgsAndDoOpen(cmdInfo, GetMainFrame());\r
439         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
440         CMergeDoc *pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
441         ASSERT_NE(nullptr, pDoc);\r
442         EXPECT_EQ(L"TestL", pDoc->GetDescription(0));\r
443         EXPECT_EQ(L"Mine File", pDoc->GetDescription(1));\r
444         pDoc->m_ptBuf[1]->SetModified(false);\r
445         pFrame->PostMessage(WM_CLOSE);\r
446 }\r
447 \r
448 TEST(ImageCompareTest, Open)\r
449 {\r
450         EXPECT_TRUE(CImgMergeFrame::IsLoadable());\r
451         if (!CImgMergeFrame::IsLoadable())\r
452                 return;\r
453 \r
454         String projectRoot = getProjectRoot();\r
455         PathContext tFiles = {\r
456                 paths::ConcatPath(projectRoot, L"Src/res/right_to_middle.bmp"),\r
457                 paths::ConcatPath(projectRoot, L"Src/res/right_to_left.bmp")\r
458         };\r
459         CMessageBoxDialog dlg(nullptr, IDS_FILESSAME, 0U, 0U, IDS_FILESSAME);\r
460         const int nPrevFormerResult = dlg.SetFormerResult(IDOK);\r
461         EXPECT_TRUE(GetMainFrame()->DoFileOpen(&tFiles));\r
462         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
463         CImgMergeFrame *pDoc = dynamic_cast<CImgMergeFrame *>(pFrame);\r
464         EXPECT_NE(nullptr, pDoc);\r
465 \r
466         pFrame->PostMessage(WM_CLOSE);\r
467         dlg.SetFormerResult(nPrevFormerResult);\r
468 }\r
469 \r
470 TEST(FileMenu, New)\r
471 {\r
472         CFrameWnd *pFrame;\r
473         GetMainFrame()->FileNew(2, CMainFrame::FRAMETYPE::FRAME_FILE, false);\r
474         pFrame = GetMainFrame()->GetActiveFrame();\r
475         pFrame->PostMessage(WM_CLOSE);\r
476         GetMainFrame()->FileNew(3, CMainFrame::FRAMETYPE::FRAME_FILE, false);\r
477         pFrame = GetMainFrame()->GetActiveFrame();\r
478         pFrame->PostMessage(WM_CLOSE);\r
479 }\r
480 \r
481 TEST(FileMenu, OpenConflictFile)\r
482 {\r
483         String conflictFile = paths::ConcatPath(getProjectRoot(), L"Testing/Data/big_file.conflict");\r
484         GetMainFrame()->DoOpenConflict(conflictFile);\r
485         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
486         CMergeDoc *pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
487         ASSERT_NE(nullptr, pDoc);\r
488         pDoc->m_ptBuf[1]->SetModified(false);\r
489         pFrame->PostMessage(WM_CLOSE);\r
490 }\r
491 \r
492 TEST(FileMenu, OpenConflictFile3)\r
493 {\r
494         String conflictFile = paths::ConcatPath(getProjectRoot(), L"Testing/Data/dif3.conflict");\r
495         GetMainFrame()->DoOpenConflict(conflictFile);\r
496         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
497         CMergeDoc *pDoc = dynamic_cast<CMergeDoc *>(pFrame->GetActiveDocument());\r
498         ASSERT_NE(nullptr, pDoc);\r
499         pDoc->m_ptBuf[2]->SetModified(false);\r
500         pFrame->PostMessage(WM_CLOSE);\r
501 }\r
502 \r
503 TEST(FileMenu, OpenProject)\r
504 {\r
505         String projectFile = paths::ConcatPath(getProjectRoot(), L"Testing/Data/Dir2.WinMerge");\r
506         theApp.LoadAndOpenProjectFile(projectFile);\r
507         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
508         EXPECT_NE(nullptr, pFrame);\r
509         if (pFrame != nullptr)\r
510                 pFrame->PostMessage(WM_CLOSE);\r
511 }\r
512 \r
513 TEST(FileMenu, OpenProject3)\r
514 {\r
515         String projectFile = paths::ConcatPath(getProjectRoot(), L"Testing/Data/Dir3.WinMerge");\r
516         theApp.LoadAndOpenProjectFile(projectFile);\r
517         CFrameWnd *pFrame = GetMainFrame()->GetActiveFrame();\r
518         EXPECT_NE(nullptr, pFrame);\r
519         if (pFrame != nullptr)\r
520                 pFrame->PostMessage(WM_CLOSE);\r
521 }\r
522 \r
523 #endif