1
// TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2015-2017 - 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.
22 #include "StringUtils.h"
23 #include "PathUtils.h"
24 #include "DirFileEnum.h"
34 static bool GetResourcesDir(CString
& resourcesDir
)
36 resourcesDir
= CPathUtils::GetAppDirectory() + L
"\\resources";
37 if (!PathIsDirectory(resourcesDir
))
38 resourcesDir
= CPathUtils::GetAppDirectory() + L
"\\..\\..\\..\\test\\UnitTests\\resources";
39 return PathIsDirectory(resourcesDir
) != FALSE
;
42 static void CopyRecursively(const CString
& source
, const CString
& dest
)
44 CDirFileEnum
finder(source
);
47 while (finder
.NextFile(filepath
, &isDir
))
49 CString relpath
= filepath
.Mid(source
.GetLength());
51 EXPECT_TRUE(CreateDirectory(dest
+ relpath
, nullptr));
53 EXPECT_TRUE(CopyFile(filepath
, dest
+ relpath
, false));
57 class CBasicGitFixture
: public ::testing::TestWithParam
<config
>
65 m_Git
.m_IsUseLibGit2
= true;
66 m_Git
.m_IsUseLibGit2_mask
= 0xffffffff;
67 m_Git
.m_IsUseGitDLL
= false;
70 m_Git
.m_IsUseLibGit2
= true;
71 m_Git
.m_IsUseLibGit2_mask
= DEFAULT_USE_LIBGIT2_MASK
;
72 m_Git
.m_IsUseGitDLL
= false;
75 m_Git
.m_IsUseLibGit2
= false;
76 m_Git
.m_IsUseLibGit2_mask
= 0;
77 m_Git
.m_IsUseGitDLL
= true;
80 m_Git
.m_IsUseLibGit2
= false;
81 m_Git
.m_IsUseLibGit2_mask
= 0;
82 m_Git
.m_IsUseGitDLL
= false;
84 m_Git
.m_CurrentDir
= m_Dir
.GetTempDir();
85 // some methods rely on g_Git, so set values there as well
86 g_Git
.m_IsGitDllInited
= false;
87 g_Git
.m_CurrentDir
= m_Git
.m_CurrentDir
;
88 g_Git
.m_IsUseGitDLL
= m_Git
.m_IsUseGitDLL
;
89 g_Git
.m_IsUseLibGit2
= m_Git
.m_IsUseLibGit2
;
90 g_Git
.m_IsUseLibGit2_mask
= m_Git
.m_IsUseLibGit2_mask
;
91 // libgit relies on CWD being set to working tree
92 SetCurrentDirectory(m_Git
.m_CurrentDir
);
95 virtual void TearDown()
97 SetCurrentDirectory(CPathUtils::GetAppDirectory());
105 class CBasicGitWithTestRepoCreatorFixture
: public CBasicGitFixture
108 CBasicGitWithTestRepoCreatorFixture(const CString
& arepo
= L
"git-repo1")
114 void SetUpTestRepo(CString path
)
116 CString resourcesDir
;
117 ASSERT_TRUE(GetResourcesDir(resourcesDir
));
118 CPathUtils::TrimTrailingPathDelimiter(path
);
119 CreateDirectory(path
, nullptr);
120 ASSERT_TRUE(PathIsDirectory(path
));
121 if (!prefix
.IsEmpty())
122 EXPECT_TRUE(CreateDirectory(path
+ prefix
, nullptr));
123 CString repoDir
= resourcesDir
+ L
"\\" + m_reponame
;
124 CopyRecursively(repoDir
, path
+ prefix
);
125 CString configFile
= path
+ prefix
+ L
"\\config";
127 ASSERT_TRUE(CStringUtils::ReadStringFromTextFile(configFile
, text
));
128 text
+= L
"\n[core]\n autocrlf = false\n[user]\n name = User\n email = user@example.com\n";
129 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(configFile
, text
));
134 CBasicGitFixture::SetUp();
142 class CBasicGitWithTestRepoFixture
: public CBasicGitWithTestRepoCreatorFixture
145 CBasicGitWithTestRepoFixture() : CBasicGitWithTestRepoCreatorFixture() {};
146 CBasicGitWithTestRepoFixture(const CString
& arepo
) : CBasicGitWithTestRepoCreatorFixture(arepo
) {};
149 CBasicGitWithTestRepoCreatorFixture::SetUp();
150 SetUpTestRepo(m_Dir
.GetTempDir());
154 class CBasicGitWithTestRepoBareFixture
: public CBasicGitWithTestRepoFixture
157 CBasicGitWithTestRepoBareFixture() : CBasicGitWithTestRepoFixture() {};
158 CBasicGitWithTestRepoBareFixture(const CString
& arepo
) : CBasicGitWithTestRepoFixture(arepo
) {};
164 CBasicGitWithTestRepoFixture::SetUp();
166 DeleteFile(m_Dir
.GetTempDir() + L
"\\index");
167 CString configFile
= m_Dir
.GetTempDir() + L
"\\config";
169 ASSERT_TRUE(CStringUtils::ReadStringFromTextFile(configFile
, text
));
170 EXPECT_EQ(1, text
.Replace(L
"bare = false", L
"bare = true"));
171 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(configFile
, text
));
175 class CBasicGitWithSubmoduleRepositoryFixture
: public CBasicGitWithTestRepoFixture
178 CBasicGitWithSubmoduleRepositoryFixture() : CBasicGitWithTestRepoFixture(L
"git-submodules-repo") {};
181 class CBasicGitWithSubmodulRepoeBareFixture
: public CBasicGitWithTestRepoBareFixture
184 CBasicGitWithSubmodulRepoeBareFixture() : CBasicGitWithTestRepoBareFixture(L
"git-submodules-repo") {};
187 class CBasicGitWithEmptyRepositoryFixture
: public CBasicGitFixture
192 CBasicGitFixture::SetUp();
194 EXPECT_EQ(0, m_Git
.Run(L
"git.exe init", &output
, CP_UTF8
));
195 EXPECT_STRNE(L
"", output
);
197 EXPECT_EQ(0, m_Git
.Run(L
"git.exe config core.autocrlf false", &output
, CP_UTF8
));
198 EXPECT_STREQ(L
"", output
);
200 EXPECT_EQ(0, m_Git
.Run(L
"git.exe config user.name User", &output
, CP_UTF8
));
201 EXPECT_STREQ(L
"", output
);
203 EXPECT_EQ(0, m_Git
.Run(L
"git.exe config user.email user@example.com", &output
, CP_UTF8
));
204 EXPECT_STREQ(L
"", output
);
208 class CBasicGitWithEmptyBareRepositoryFixture
: public CBasicGitFixture
213 CBasicGitFixture::SetUp();
215 EXPECT_EQ(0, m_Git
.Run(L
"git.exe init --bare", &output
, CP_UTF8
));
216 EXPECT_STRNE(L
"", output
);