1
// TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2015 - 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 class CBasicGitFixture
: public ::testing::TestWithParam
<config
>
42 m_Git
.m_IsUseLibGit2
= true;
43 m_Git
.m_IsUseLibGit2_mask
= 0xffffffff;
44 m_Git
.m_IsUseGitDLL
= false;
47 m_Git
.m_IsUseLibGit2
= true;
48 m_Git
.m_IsUseLibGit2_mask
= DEFAULT_USE_LIBGIT2_MASK
;
49 m_Git
.m_IsUseGitDLL
= false;
52 m_Git
.m_IsUseLibGit2
= false;
53 m_Git
.m_IsUseLibGit2_mask
= 0;
54 m_Git
.m_IsUseGitDLL
= true;
57 m_Git
.m_IsUseLibGit2
= false;
58 m_Git
.m_IsUseLibGit2_mask
= 0;
59 m_Git
.m_IsUseGitDLL
= false;
61 m_Git
.m_CurrentDir
= m_Dir
.GetTempDir();
62 // some methods rely on g_Git, so set values there as well
63 g_Git
.m_IsGitDllInited
= false;
64 g_Git
.m_CurrentDir
= m_Git
.m_CurrentDir
;
65 g_Git
.m_IsUseGitDLL
= m_Git
.m_IsUseGitDLL
;
66 g_Git
.m_IsUseLibGit2
= m_Git
.m_IsUseLibGit2
;
67 g_Git
.m_IsUseLibGit2_mask
= m_Git
.m_IsUseLibGit2_mask
;
68 // libgit relies on CWD being set to working tree
69 SetCurrentDirectory(m_Git
.m_CurrentDir
);
72 virtual void TearDown()
74 SetCurrentDirectory(CPathUtils::GetAppDirectory());
82 class CBasicGitWithTestRepoFixture
: public CBasicGitFixture
85 CBasicGitWithTestRepoFixture()
87 prefix
= _T("\\.git");
92 CBasicGitFixture::SetUp();
93 CString resourcesDir
= CPathUtils::GetAppDirectory() + _T("\\resources");
94 if (!PathIsDirectory(resourcesDir
))
96 resourcesDir
= CPathUtils::GetAppDirectory() + _T("\\..\\..\\..\\test\\UnitTests\\resources");
97 ASSERT_TRUE(PathIsDirectory(resourcesDir
));
99 if (!prefix
.IsEmpty())
100 EXPECT_TRUE(CreateDirectory(m_Dir
.GetTempDir() + prefix
, nullptr));
101 CString repoDir
= resourcesDir
+ _T("\\git-repo1");
102 CDirFileEnum
finder(repoDir
);
105 while (finder
.NextFile(filepath
, &isDir
))
107 CString relpath
= filepath
.Mid(repoDir
.GetLength());
109 EXPECT_TRUE(CreateDirectory(m_Dir
.GetTempDir() + prefix
+ relpath
, nullptr));
111 EXPECT_TRUE(CopyFile(filepath
, m_Dir
.GetTempDir() + prefix
+ relpath
, false));
114 CString configFile
= m_Dir
.GetTempDir() + prefix
+ _T("\\config");
116 ASSERT_TRUE(CStringUtils::ReadStringFromTextFile(configFile
, text
));
117 text
+= _T("\n[core]\n autocrlf = false\n[user]\n name = User\n email = user@example.com\n");
118 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)configFile
, (LPCTSTR
)text
));
123 class CBasicGitWithTestRepoBareFixture
: public CBasicGitWithTestRepoFixture
129 CBasicGitWithTestRepoFixture::SetUp();
131 DeleteFile(m_Dir
.GetTempDir() + _T("\\index"));
132 CString configFile
= m_Dir
.GetTempDir() + _T("\\config");
134 ASSERT_TRUE(CStringUtils::ReadStringFromTextFile(configFile
, text
));
135 EXPECT_EQ(1, text
.Replace(_T("bare = false"), _T("bare = true")));
136 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)configFile
, (LPCTSTR
)text
));
140 class CBasicGitWithEmptyRepositoryFixture
: public CBasicGitFixture
145 CBasicGitFixture::SetUp();
147 EXPECT_EQ(0, m_Git
.Run(_T("git.exe init"), &output
, CP_UTF8
));
148 EXPECT_FALSE(output
.IsEmpty());
150 EXPECT_EQ(0, m_Git
.Run(_T("git.exe config core.autocrlf false"), &output
, CP_UTF8
));
151 EXPECT_TRUE(output
.IsEmpty());
153 EXPECT_EQ(0, m_Git
.Run(_T("git.exe config user.name User"), &output
, CP_UTF8
));
154 EXPECT_TRUE(output
.IsEmpty());
156 EXPECT_EQ(0, m_Git
.Run(_T("git.exe config user.email user@example.com"), &output
, CP_UTF8
));
157 EXPECT_TRUE(output
.IsEmpty());
161 class CBasicGitWithEmptyBareRepositoryFixture
: public CBasicGitFixture
166 CBasicGitFixture::SetUp();
168 EXPECT_EQ(0, m_Git
.Run(_T("git.exe init --bare"), &output
, CP_UTF8
));
169 EXPECT_FALSE(output
.IsEmpty());