Optimize FETCH_HEAD tests
[TortoiseGit.git] / test / UnitTests / RepositoryFixtures.h
blobc545102f916d465ddcbf178b688852d36259cb92
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.
20 #pragma once
21 #include "Git.h"
22 #include "StringUtils.h"
23 #include "PathUtils.h"
24 #include "DirFileEnum.h"
26 enum config
28 LIBGIT2_ALL,
29 LIBGIT2,
30 LIBGIT,
31 GIT_CLI,
34 class CBasicGitFixture : public ::testing::TestWithParam<config>
36 protected:
37 virtual void SetUp()
39 switch (GetParam())
41 case LIBGIT2_ALL:
42 m_Git.m_IsUseLibGit2 = true;
43 m_Git.m_IsUseLibGit2_mask = 0xffffffff;
44 m_Git.m_IsUseGitDLL = false;
45 break;
46 case LIBGIT2:
47 m_Git.m_IsUseLibGit2 = true;
48 m_Git.m_IsUseLibGit2_mask = DEFAULT_USE_LIBGIT2_MASK;
49 m_Git.m_IsUseGitDLL = false;
50 break;
51 case LIBGIT:
52 m_Git.m_IsUseLibGit2 = false;
53 m_Git.m_IsUseLibGit2_mask = 0;
54 m_Git.m_IsUseGitDLL = true;
55 break;
56 case GIT_CLI:
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 public:
73 CGit m_Git;
74 CAutoTempDir m_Dir;
77 class CBasicGitWithTestRepoFixture : public CBasicGitFixture
79 protected:
80 CBasicGitWithTestRepoFixture()
82 prefix = _T("\\.git");
85 virtual void SetUp()
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);
97 bool isDir;
98 CString filepath;
99 while (finder.NextFile(filepath, &isDir))
101 CString relpath = filepath.Mid(repoDir.GetLength());
102 if (isDir)
103 EXPECT_TRUE(CreateDirectory(m_Dir.GetTempDir() + prefix + relpath, nullptr));
104 else
105 EXPECT_TRUE(CopyFile(filepath, m_Dir.GetTempDir() + prefix + relpath, false));
108 CString prefix;
111 class CBasicGitWithTestRepoBareFixture : public CBasicGitWithTestRepoFixture
113 protected:
114 virtual void SetUp()
116 prefix.Empty();
117 CBasicGitWithTestRepoFixture::SetUp();
119 DeleteFile(m_Dir.GetTempDir() + _T("\\index"));
120 CString configFile = m_Dir.GetTempDir() + _T("\\config");
121 CString text;
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
130 protected:
131 virtual void SetUp()
133 CBasicGitFixture::SetUp();
134 CString output;
135 EXPECT_EQ(0, m_Git.Run(_T("git.exe init"), &output, CP_UTF8));
136 EXPECT_FALSE(output.IsEmpty());
140 class CBasicGitWithEmptyBareRepositoryFixture : public CBasicGitFixture
142 protected:
143 virtual void SetUp()
145 CBasicGitFixture::SetUp();
146 CString output;
147 EXPECT_EQ(0, m_Git.Run(_T("git.exe init --bare"), &output, CP_UTF8));
148 EXPECT_FALSE(output.IsEmpty());