Fixed issue #3261: Review/Apply single patch does not work anymore if patch does...
[TortoiseGit.git] / test / UnitTests / PatchTest.cpp
blobd451bb40f07bf307f8b3100ac5003d7b809b94ad
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2018 - TortoiseGit
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "stdafx.h"
21 #include "RepositoryFixtures.h"
22 #include "Patch.h"
24 TEST(CPatch, Empty)
26 CPatch patch;
27 EXPECT_EQ(0, patch.GetNumberOfFiles());
28 EXPECT_STREQ(L"", patch.GetErrorMessage());
29 EXPECT_STREQ(L"", patch.GetRevision(0));
30 EXPECT_STREQ(L"", patch.GetRevision2(0));
31 EXPECT_STREQ(L"", patch.GetRevision(1));
32 EXPECT_STREQ(L"", patch.GetFilename(0));
33 EXPECT_STREQ(L"", patch.GetFilename2(0));
36 TEST(CPatch, Parse_Manual)
38 CString resourceDir;
39 ASSERT_TRUE(GetResourcesDir(resourceDir));
41 CPatch patch;
42 EXPECT_TRUE(patch.OpenUnifiedDiffFile(resourceDir + L"\\patches\\manual.patch"));
43 EXPECT_STREQ(L"", patch.GetErrorMessage());
44 EXPECT_EQ(1, patch.GetNumberOfFiles());
46 EXPECT_STREQ(L"src\\Git\\GitPatch.cpp", patch.GetFilename(0));
47 EXPECT_STREQ(L"src\\Git\\GitPatch.cpp", patch.GetFilename2(0));
48 EXPECT_STREQ(L"some path\\prefix\\src\\Git\\GitPatch.cpp", patch.GetFullPath(L"some path\\prefix", 0, 0));
49 EXPECT_STREQ(L"some path\\prefix\\src\\Git\\GitPatch.cpp", patch.GetFullPath(L"some path\\prefix\\", 0, 0));
50 EXPECT_STREQ(L"some path\\prefix\\src\\Git\\GitPatch.cpp", patch.GetFullPath(L"some path\\prefix", 0, 1));
51 EXPECT_STREQ(L"some path\\prefix\\src\\Git\\GitPatch.cpp", patch.GetFullPath(L"some path\\prefix\\", 0, 1));
52 EXPECT_STREQ(L"", patch.GetRevision(0));
53 EXPECT_STREQ(L"", patch.GetRevision2(0));
56 TEST(CPatch, Parse_OldGitDiffPatch)
58 CString resourceDir;
59 ASSERT_TRUE(GetResourcesDir(resourceDir));
61 CPatch patch;
62 EXPECT_TRUE(patch.OpenUnifiedDiffFile(resourceDir + L"\\patches\\old-git-diff.patch"));
63 EXPECT_STREQ(L"", patch.GetErrorMessage());
64 EXPECT_EQ(4, patch.GetNumberOfFiles());
66 EXPECT_STREQ(L"doc\\doc.build", patch.GetFilename(0));
67 EXPECT_STREQ(L"doc\\doc.build", patch.GetFilename2(0));
68 EXPECT_STREQ(L"36d19f2", patch.GetRevision(0));
69 EXPECT_STREQ(L"365406a", patch.GetRevision2(0));
71 EXPECT_STREQ(L"doc\\doc.build.include", patch.GetFilename(1));
72 EXPECT_STREQ(L"doc\\doc.build.include", patch.GetFilename2(1));
73 EXPECT_STREQ(L"69bd153", patch.GetRevision(1));
74 EXPECT_STREQ(L"ca2f366", patch.GetRevision2(1));
76 EXPECT_STREQ(L"doc\\source\\styles_chm.css", patch.GetFilename(2));
77 EXPECT_STREQ(L"doc\\source\\styles_chm.css", patch.GetFilename2(2));
78 EXPECT_STREQ(L"607887c", patch.GetRevision(2));
79 EXPECT_STREQ(L"f87bca1", patch.GetRevision2(2));
81 EXPECT_STREQ(L"doc\\source\\styles_html.css", patch.GetFilename(3));
82 EXPECT_STREQ(L"doc\\source\\styles_html.css", patch.GetFilename2(3));
83 EXPECT_STREQ(L"b2127f7", patch.GetRevision(3));
84 EXPECT_STREQ(L"d41e7c3", patch.GetRevision2(3));
87 TEST(CPatch, Parse_GitDiffPatch)
89 CString resourceDir;
90 ASSERT_TRUE(GetResourcesDir(resourceDir));
92 CPatch patch;
93 EXPECT_TRUE(patch.OpenUnifiedDiffFile(resourceDir + L"\\patches\\git-diff.patch"));
94 EXPECT_STREQ(L"", patch.GetErrorMessage());
95 EXPECT_EQ(6, patch.GetNumberOfFiles());
97 EXPECT_STREQ(L"appveyor.yml", patch.GetFilename(0));
98 EXPECT_STREQ(L"NUL", patch.GetFilename2(0));
99 EXPECT_STREQ(L"e6b688767", patch.GetRevision(0));
100 EXPECT_STREQ(L"", patch.GetRevision2(0));
102 EXPECT_STREQ(L"src\\Git\\GitPatch.cpp", patch.GetFilename(1));
103 EXPECT_STREQ(L"src\\Git\\GitPatch.cpp", patch.GetFilename2(1));
104 EXPECT_STREQ(L"c85b034cd", patch.GetRevision(1));
105 EXPECT_STREQ(L"9f99b1cc4", patch.GetRevision2(1));
107 EXPECT_STREQ(L"NUL", patch.GetFilename(5));
108 EXPECT_STREQ(L"wusel dusel.txt", patch.GetFilename2(5));
109 EXPECT_STREQ(L"NUL", patch.GetFullPath(L"some path\\prefix", 5, 0));
110 EXPECT_STREQ(L"some path\\prefix\\wusel dusel.txt", patch.GetFullPath(L"some path\\prefix", 5, 1));
111 EXPECT_STREQ(L"some path\\prefix\\wusel dusel.txt", patch.GetFullPath(L"some path\\prefix\\", 5, 1));
112 EXPECT_STREQ(L"000000000", patch.GetRevision(5));
113 EXPECT_STREQ(L"", patch.GetRevision2(5));
116 TEST(CPatch, Parse_GitFormatPatchNoPrefix)
118 CString resourceDir;
119 ASSERT_TRUE(GetResourcesDir(resourceDir));
121 CPatch patch;
122 EXPECT_TRUE(patch.OpenUnifiedDiffFile(resourceDir + L"\\patches\\git-format-patch-no-prefix.patch"));
123 EXPECT_STREQ(L"", patch.GetErrorMessage());
124 EXPECT_EQ(1, patch.GetNumberOfFiles());
126 EXPECT_STREQ(L"src\\TortoiseProc\\AppUtils.cpp", patch.GetFilename(0));
127 EXPECT_STREQ(L"fe40643e9", patch.GetRevision(0));
128 EXPECT_STREQ(L"f74cfec7e", patch.GetRevision2(0));
131 TEST(CPatch, Parse_SVNDiffPatch)
133 CString resourceDir;
134 ASSERT_TRUE(GetResourcesDir(resourceDir));
136 CPatch patch;
137 EXPECT_TRUE(patch.OpenUnifiedDiffFile(resourceDir + L"\\patches\\SVN-diff.patch"));
138 EXPECT_STREQ(L"", patch.GetErrorMessage());
139 EXPECT_EQ(2, patch.GetNumberOfFiles());
141 EXPECT_STREQ(L"new file.txt", patch.GetFilename(0));
142 EXPECT_STREQ(L"", patch.GetRevision(0));
143 EXPECT_STREQ(L"", patch.GetRevision2(0));
145 EXPECT_STREQ(L"Utils\\StringUtils.cpp", patch.GetFilename(1));
146 EXPECT_STREQ(L"", patch.GetRevision(1));
147 EXPECT_STREQ(L"", patch.GetRevision2(1));