Directly use format string
[TortoiseGit.git] / test / UnitTests / RepositoryFixtures.h
blob6040116061c70c7aff4e873cabd49277cc8e69bb
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.
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 bool isDir;
46 CString filepath;
47 while (finder.NextFile(filepath, &isDir))
49 CString relpath = filepath.Mid(source.GetLength());
50 if (isDir)
51 EXPECT_TRUE(CreateDirectory(dest + relpath, nullptr));
52 else
53 EXPECT_TRUE(CopyFile(filepath, dest + relpath, false));
57 class CBasicGitFixture : public ::testing::TestWithParam<config>
59 protected:
60 virtual void SetUp()
62 switch (GetParam())
64 case LIBGIT2_ALL:
65 m_Git.m_IsUseLibGit2 = true;
66 m_Git.m_IsUseLibGit2_mask = 0xffffffff;
67 m_Git.m_IsUseGitDLL = false;
68 break;
69 case LIBGIT2:
70 m_Git.m_IsUseLibGit2 = true;
71 m_Git.m_IsUseLibGit2_mask = DEFAULT_USE_LIBGIT2_MASK;
72 m_Git.m_IsUseGitDLL = false;
73 break;
74 case LIBGIT:
75 m_Git.m_IsUseLibGit2 = false;
76 m_Git.m_IsUseLibGit2_mask = 0;
77 m_Git.m_IsUseGitDLL = true;
78 break;
79 case GIT_CLI:
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());
100 public:
101 CGit m_Git;
102 CAutoTempDir m_Dir;
105 class CBasicGitWithTestRepoCreatorFixture : public CBasicGitFixture
107 protected:
108 CBasicGitWithTestRepoCreatorFixture(const CString& arepo = L"git-repo1")
110 prefix = L"\\.git";
111 m_reponame = arepo;
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";
126 CString text;
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));
132 virtual void SetUp()
134 CBasicGitFixture::SetUp();
137 CString prefix;
138 private:
139 CString m_reponame;
142 class CBasicGitWithTestRepoFixture : public CBasicGitWithTestRepoCreatorFixture
144 protected:
145 CBasicGitWithTestRepoFixture() : CBasicGitWithTestRepoCreatorFixture() {};
146 CBasicGitWithTestRepoFixture(const CString& arepo) : CBasicGitWithTestRepoCreatorFixture(arepo) {};
147 virtual void SetUp()
149 CBasicGitWithTestRepoCreatorFixture::SetUp();
150 SetUpTestRepo(m_Dir.GetTempDir());
154 class CBasicGitWithTestRepoBareFixture : public CBasicGitWithTestRepoFixture
156 public:
157 CBasicGitWithTestRepoBareFixture() : CBasicGitWithTestRepoFixture() {};
158 CBasicGitWithTestRepoBareFixture(const CString& arepo) : CBasicGitWithTestRepoFixture(arepo) {};
160 protected:
161 virtual void SetUp()
163 prefix.Empty();
164 CBasicGitWithTestRepoFixture::SetUp();
166 DeleteFile(m_Dir.GetTempDir() + L"\\index");
167 CString configFile = m_Dir.GetTempDir() + L"\\config";
168 CString text;
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
177 public:
178 CBasicGitWithSubmoduleRepositoryFixture() : CBasicGitWithTestRepoFixture(L"git-submodules-repo") {};
181 class CBasicGitWithSubmodulRepoeBareFixture : public CBasicGitWithTestRepoBareFixture
183 public:
184 CBasicGitWithSubmodulRepoeBareFixture() : CBasicGitWithTestRepoBareFixture(L"git-submodules-repo") {};
187 class CBasicGitWithEmptyRepositoryFixture : public CBasicGitFixture
189 protected:
190 virtual void SetUp()
192 CBasicGitFixture::SetUp();
193 CString output;
194 EXPECT_EQ(0, m_Git.Run(L"git.exe init", &output, CP_UTF8));
195 EXPECT_STRNE(L"", output);
196 output.Empty();
197 EXPECT_EQ(0, m_Git.Run(L"git.exe config core.autocrlf false", &output, CP_UTF8));
198 EXPECT_STREQ(L"", output);
199 output.Empty();
200 EXPECT_EQ(0, m_Git.Run(L"git.exe config user.name User", &output, CP_UTF8));
201 EXPECT_STREQ(L"", output);
202 output.Empty();
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
210 protected:
211 virtual void SetUp()
213 CBasicGitFixture::SetUp();
214 CString output;
215 EXPECT_EQ(0, m_Git.Run(L"git.exe init --bare", &output, CP_UTF8));
216 EXPECT_STRNE(L"", output);