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
);
77 class CBasicGitWithTestRepoFixture
: public CBasicGitFixture
80 CBasicGitWithTestRepoFixture()
82 prefix
= _T("\\.git");
87 CBasicGitFixture::SetUp();
88 CString resourcesDir
= CPathUtils::GetAppDirectory() + _T("\\resources");
89 if (!PathIsDirectory(resourcesDir
))
91 resourcesDir
= CPathUtils::GetAppDirectory() + _T("\\..\\..\\..\\test\\UnitTests\\resources");
92 ASSERT_TRUE(PathIsDirectory(resourcesDir
));
94 EXPECT_TRUE(CreateDirectory(m_Dir
.GetTempDir() + _T("\\.git"), nullptr));
95 CString repoDir
= resourcesDir
+ _T("\\git-repo1");
96 CDirFileEnum
finder(repoDir
);
99 while (finder
.NextFile(filepath
, &isDir
))
101 CString relpath
= filepath
.Mid(repoDir
.GetLength());
103 EXPECT_TRUE(CreateDirectory(m_Dir
.GetTempDir() + prefix
+ relpath
, nullptr));
105 EXPECT_TRUE(CopyFile(filepath
, m_Dir
.GetTempDir() + prefix
+ relpath
, false));
111 class CBasicGitWithTestRepoBareFixture
: public CBasicGitWithTestRepoFixture
117 CBasicGitWithTestRepoFixture::SetUp();
119 DeleteFile(m_Dir
.GetTempDir() + _T("\\index"));
120 CString configFile
= m_Dir
.GetTempDir() + _T("\\config");
122 ASSERT_TRUE(CStringUtils::ReadStringFromTextFile(configFile
, text
));
123 EXPECT_EQ(1, text
.Replace(_T("bare = false"), _T("bare = true")));
124 EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR
)configFile
, (LPCTSTR
)text
));
128 class CBasicGitWithEmptyRepositoryFixture
: public CBasicGitFixture
133 CBasicGitFixture::SetUp();
135 EXPECT_EQ(0, m_Git
.Run(_T("git.exe init"), &output
, CP_UTF8
));
136 EXPECT_FALSE(output
.IsEmpty());
140 class CBasicGitWithEmptyBareRepositoryFixture
: public CBasicGitFixture
145 CBasicGitFixture::SetUp();
147 EXPECT_EQ(0, m_Git
.Run(_T("git.exe init --bare"), &output
, CP_UTF8
));
148 EXPECT_FALSE(output
.IsEmpty());