Fix typos
[TortoiseGit.git] / test / UnitTests / RepositoryFixtures.h
blobdf4a4b4a78a53ae87ed897daf5a05853e53b03b4
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2015-2018, 2021, 2023 - 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 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);
45 while (auto file = finder.NextFile())
47 CString filepath = file->GetFilePath();
48 CString relpath = filepath.Mid(source.GetLength());
49 if (file->IsDirectory())
50 EXPECT_TRUE(CreateDirectory(dest + relpath, nullptr));
51 else
52 EXPECT_TRUE(CopyFile(filepath, dest + relpath, false));
56 class CBasicGitFixture : public ::testing::TestWithParam<config>
58 protected:
59 virtual void SetUp() override
61 switch (GetParam())
63 case LIBGIT2_ALL:
64 m_Git.m_IsUseLibGit2 = true;
65 m_Git.m_IsUseLibGit2_mask = 0xffffffff;
66 m_Git.m_IsUseGitDLL = false;
67 break;
68 case LIBGIT2:
69 m_Git.m_IsUseLibGit2 = true;
70 m_Git.m_IsUseLibGit2_mask = DEFAULT_USE_LIBGIT2_MASK;
71 m_Git.m_IsUseGitDLL = false;
72 break;
73 case LIBGIT:
74 m_Git.m_IsUseLibGit2 = false;
75 m_Git.m_IsUseLibGit2_mask = 0;
76 m_Git.m_IsUseGitDLL = true;
77 break;
78 case GIT_CLI:
79 m_Git.m_IsUseLibGit2 = false;
80 m_Git.m_IsUseLibGit2_mask = 0;
81 m_Git.m_IsUseGitDLL = false;
83 m_Git.m_CurrentDir = m_Dir.GetTempDir();
84 // some methods rely on g_Git, so set values there as well
85 g_Git.m_IsGitDllInited = false;
86 g_Git.m_CurrentDir = m_Git.m_CurrentDir;
87 g_Git.m_IsUseGitDLL = m_Git.m_IsUseGitDLL;
88 g_Git.m_IsUseLibGit2 = m_Git.m_IsUseLibGit2;
89 g_Git.m_IsUseLibGit2_mask = m_Git.m_IsUseLibGit2_mask;
90 // libgit relies on CWD being set to working tree
91 SetCurrentDirectory(m_Git.m_CurrentDir);
93 if (CGit::ms_LastMsysGitVersion == 0)
94 CGit::ms_LastMsysGitVersion = max(0, m_Git.GetGitVersion(nullptr, nullptr));
97 virtual void TearDown() override
99 SetCurrentDirectory(CPathUtils::GetAppDirectory());
102 public:
103 CGit m_Git;
104 CAutoTempDir m_Dir;
107 class CBasicGitWithTestRepoCreatorFixture : public CBasicGitFixture
109 protected:
110 CBasicGitWithTestRepoCreatorFixture(const CString& arepo = L"git-repo1")
111 : prefix(L"\\.git")
112 , m_reponame(arepo)
116 void SetUpTestRepo(CString path)
118 CString resourcesDir;
119 ASSERT_TRUE(GetResourcesDir(resourcesDir));
120 CPathUtils::TrimTrailingPathDelimiter(path);
121 CreateDirectory(path, nullptr);
122 ASSERT_TRUE(PathIsDirectory(path));
123 if (!prefix.IsEmpty())
124 EXPECT_TRUE(CreateDirectory(path + prefix, nullptr));
125 CString repoDir = resourcesDir + L"\\" + m_reponame;
126 CopyRecursively(repoDir, path + prefix);
127 CString configFile = path + prefix + L"\\config";
128 CString text;
129 ASSERT_TRUE(CStringUtils::ReadStringFromTextFile(configFile, text));
130 text += L"\n[core]\n autocrlf = false\n[user]\n name = User\n email = user@example.com\n";
131 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(configFile, text));
134 virtual void SetUp() override
136 CBasicGitFixture::SetUp();
139 CString prefix;
140 private:
141 CString m_reponame;
144 class CBasicGitWithTestRepoFixture : public CBasicGitWithTestRepoCreatorFixture
146 protected:
147 CBasicGitWithTestRepoFixture() : CBasicGitWithTestRepoCreatorFixture() {};
148 CBasicGitWithTestRepoFixture(const CString& arepo) : CBasicGitWithTestRepoCreatorFixture(arepo) {};
149 virtual void SetUp() override
151 CBasicGitWithTestRepoCreatorFixture::SetUp();
152 SetUpTestRepo(m_Dir.GetTempDir());
156 class CBasicGitWithTestRepoBareFixture : public CBasicGitWithTestRepoFixture
158 public:
159 CBasicGitWithTestRepoBareFixture() : CBasicGitWithTestRepoFixture() {};
160 CBasicGitWithTestRepoBareFixture(const CString& arepo) : CBasicGitWithTestRepoFixture(arepo) {};
162 protected:
163 virtual void SetUp() override
165 prefix.Empty();
166 CBasicGitWithTestRepoFixture::SetUp();
168 DeleteFile(m_Dir.GetTempDir() + L"\\index");
169 CString configFile = m_Dir.GetTempDir() + L"\\config";
170 CString text;
171 ASSERT_TRUE(CStringUtils::ReadStringFromTextFile(configFile, text));
172 EXPECT_EQ(1, text.Replace(L"bare = false", L"bare = true"));
173 EXPECT_TRUE(CStringUtils::WriteStringToTextFile(configFile, text));
177 class CBasicGitWithSubmoduleRepositoryFixture : public CBasicGitWithTestRepoFixture
179 public:
180 CBasicGitWithSubmoduleRepositoryFixture() : CBasicGitWithTestRepoFixture(L"git-submodules-repo") {};
183 class CBasicGitWithSubmodulRepoeBareFixture : public CBasicGitWithTestRepoBareFixture
185 public:
186 CBasicGitWithSubmodulRepoeBareFixture() : CBasicGitWithTestRepoBareFixture(L"git-submodules-repo") {};
189 class CBasicGitWithEmptyRepositoryFixture : public CBasicGitFixture
191 protected:
192 virtual void SetUp() override
194 CBasicGitFixture::SetUp();
195 CString output;
196 EXPECT_EQ(0, m_Git.Run(L"git.exe init", &output, CP_UTF8));
197 EXPECT_STRNE(L"", output);
198 output.Empty();
199 EXPECT_EQ(0, m_Git.Run(L"git.exe config core.autocrlf false", &output, CP_UTF8));
200 EXPECT_STREQ(L"", output);
201 output.Empty();
202 EXPECT_EQ(0, m_Git.Run(L"git.exe config user.name User", &output, CP_UTF8));
203 EXPECT_STREQ(L"", output);
204 output.Empty();
205 EXPECT_EQ(0, m_Git.Run(L"git.exe config user.email user@example.com", &output, CP_UTF8));
206 EXPECT_STREQ(L"", output);
210 class CBasicGitWithEmptyBareRepositoryFixture : public CBasicGitFixture
212 protected:
213 virtual void SetUp() override
215 CBasicGitFixture::SetUp();
216 CString output;
217 EXPECT_EQ(0, m_Git.Run(L"git.exe init --bare", &output, CP_UTF8));
218 EXPECT_STRNE(L"", output);