Skip to content
This repository was archived by the owner on Dec 13, 2020. It is now read-only.

Commit 77717e8

Browse files
committed
Clar tests for network
1 parent ca0b7d6 commit 77717e8

File tree

4 files changed

+288
-2
lines changed

4 files changed

+288
-2
lines changed

tests/GitForDelphi.dpr

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ uses
3232
t15_config in 'TestsFromLibGit2\t15_config.pas',
3333
t18_status in 'TestsFromLibGit2\t18_status.pas',
3434
status in 'TestsFromLibGit2\clar\status.pas',
35-
uClar in 'TestsFromLibGit2\clar\uClar.pas';
35+
uClar in 'TestsFromLibGit2\clar\uClar.pas',
36+
network in 'TestsFromLibGit2\clar\network.pas';
3637

3738
{$R *.RES}
3839

tests/TestsFromLibGit2/clar/network.pas

+244
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
unit network;
2+
3+
interface
4+
5+
uses
6+
TestFramework, SysUtils, Windows, Classes,
7+
uTestsFromLibGit2, uGitForDelphi, uClar;
8+
9+
type
10+
Test_network_remotes = class(TClarTest)
11+
private
12+
_remote: Pgit_remote;
13+
_repo: Pgit_repository;
14+
_refspec: Pgit_refspec;
15+
protected
16+
procedure SetUp; override;
17+
procedure TearDown; override;
18+
published
19+
procedure test_network_remotes__parsing;
20+
procedure test_network_remotes__refspec_parsing;
21+
procedure test_network_remotes__fnmatch;
22+
procedure test_network_remotes__transform;
23+
procedure test_network_remotes__transform_r;
24+
end;
25+
26+
Test_network_remotelocal = class(TClarTest)
27+
private
28+
repo: Pgit_repository;
29+
file_path_buf: AnsiString;
30+
remote: Pgit_remote;
31+
procedure build_local_file_url(var out_: AnsiString; fixture: PAnsiChar);
32+
procedure connect_to_local_repository(local_repository: PAnsiChar);
33+
protected
34+
procedure SetUp; override;
35+
procedure TearDown; override;
36+
published
37+
procedure test_network_remotelocal__retrieve_advertised_references;
38+
procedure test_network_remotelocal__retrieve_advertised_references_from_spaced_repository;
39+
end;
40+
41+
Test_network_createremotethenload = class(TClarTest)
42+
private
43+
_remote: Pgit_remote;
44+
_repo: Pgit_repository;
45+
_config: Pgit_config;
46+
url: AnsiString;
47+
protected
48+
procedure SetUp; override;
49+
procedure TearDown; override;
50+
published
51+
procedure test_network_createremotethenload__parsing;
52+
end;
53+
54+
implementation
55+
56+
{ Test_network_remotes }
57+
58+
procedure Test_network_remotes.SetUp;
59+
begin
60+
inherited;
61+
cl_fixture_sandbox('testrepo.git');
62+
63+
cl_git_pass(git_repository_open(_repo, 'testrepo.git'));
64+
cl_git_pass(git_remote_load(_remote, _repo, 'test'));
65+
66+
_refspec := git_remote_fetchspec(_remote);
67+
cl_assert(_refspec <> nil);
68+
end;
69+
70+
procedure Test_network_remotes.TearDown;
71+
begin
72+
inherited;
73+
git_remote_free(_remote);
74+
git_repository_free(_repo);
75+
cl_fixture_cleanup('testrepo.git');
76+
end;
77+
78+
procedure Test_network_remotes.test_network_remotes__fnmatch;
79+
begin
80+
CheckTrue(true); // can't check members of opaque type
81+
end;
82+
83+
procedure Test_network_remotes.test_network_remotes__parsing;
84+
begin
85+
cl_assert(StrComp(git_remote_name(_remote), 'test') = 0);
86+
cl_assert(StrComp(git_remote_url(_remote), 'git://github.com/libgit2/libgit2') = 0);
87+
end;
88+
89+
procedure Test_network_remotes.test_network_remotes__refspec_parsing;
90+
// function git_refspec_src(const refspec: Pgit_refspec): PAnsiChar;
91+
// begin
92+
// if refspec = nil then Result := nil
93+
// else Result := refspec.src;
94+
// end;
95+
//
96+
// function git_refspec_dst(const refspec: Pgit_refspec): PAnsiChar;
97+
// begin
98+
// if refspec = nil then Result := nil
99+
// else Result := refspec.dst;
100+
// end;
101+
begin
102+
CheckTrue(true); // can't check members of opaque type
103+
// cl_assert(StrComp(git_refspec_src(_refspec), 'refs/heads/*') = 0);
104+
// cl_assert(StrComp(git_refspec_dst(_refspec), 'refs/remotes/test/*') = 0);
105+
end;
106+
107+
procedure Test_network_remotes.test_network_remotes__transform;
108+
begin
109+
// char ref[1024];
110+
//
111+
// memset(ref, 0x0, sizeof(ref));
112+
// cl_git_pass(git_refspec_transform(ref, sizeof(ref), _refspec, "refs/heads/master"));
113+
// cl_assert(!strcmp(ref, "refs/remotes/test/master"));
114+
CheckTrue(true); // can't check members of opaque type
115+
end;
116+
117+
procedure Test_network_remotes.test_network_remotes__transform_r;
118+
begin
119+
// git_buf buf = GIT_BUF_INIT;
120+
//
121+
// cl_git_pass(git_refspec_transform_r(&buf, _refspec, "refs/heads/master"));
122+
// cl_assert(!strcmp(git_buf_cstr(&buf), "refs/remotes/test/master"));
123+
// git_buf_free(&buf);
124+
CheckTrue(true); // can't check members of an opaque type
125+
end;
126+
127+
{ Test_network_remotelocal }
128+
129+
procedure Test_network_remotelocal.build_local_file_url(var out_: AnsiString; fixture: PAnsiChar);
130+
var
131+
path_buf: String;
132+
begin
133+
path_buf := String(fixture);
134+
path_buf := 'file:///' + StringReplace(path_buf, ' ', '%20', [rfReplaceAll]);
135+
136+
out_ := PAnsiChar(AnsiString(path_buf));
137+
end;
138+
139+
procedure Test_network_remotelocal.connect_to_local_repository(local_repository: PAnsiChar);
140+
begin
141+
build_local_file_url(file_path_buf, local_repository);
142+
143+
cl_git_pass(git_remote_new(remote, repo, PAnsiChar(file_path_buf), nil));
144+
cl_git_pass(git_remote_connect(remote, GIT_DIR_FETCH));
145+
end;
146+
147+
procedure Test_network_remotelocal.SetUp;
148+
begin
149+
inherited;
150+
cl_git_pass(git_repository_init(repo, 'remotelocal/', 0));
151+
cl_assert(repo <> nil);
152+
end;
153+
154+
procedure Test_network_remotelocal.TearDown;
155+
begin
156+
inherited;
157+
git_remote_free(remote);
158+
git_repository_free(repo);
159+
cl_fixture_cleanup('remotelocal');
160+
end;
161+
162+
function count_ref__cb(head: Pgit_remote_head; payload: PByte): Integer; stdcall;
163+
var
164+
count: PInt;
165+
begin
166+
count := PInt(payload);
167+
168+
// (void)head;
169+
count^ := count^ + 1;
170+
171+
Result := GIT_SUCCESS;
172+
end;
173+
174+
procedure Test_network_remotelocal.test_network_remotelocal__retrieve_advertised_references;
175+
var
176+
how_many_refs: Integer;
177+
begin
178+
how_many_refs := 0;
179+
180+
connect_to_local_repository(cl_fixture('testrepo.git'));
181+
182+
cl_git_pass(git_remote_ls(remote, @count_ref__cb, @how_many_refs));
183+
184+
cl_assert(how_many_refs = 12); //* 1 HEAD + 9 refs + 2 peeled tags */
185+
end;
186+
187+
procedure Test_network_remotelocal.test_network_remotelocal__retrieve_advertised_references_from_spaced_repository;
188+
var
189+
how_many_refs: Integer;
190+
begin
191+
how_many_refs := 0;
192+
193+
cl_fixture_sandbox('testrepo.git');
194+
cl_git_pass(p_rename('testrepo.git', 'spaced testrepo.git'));
195+
196+
connect_to_local_repository('spaced testrepo.git');
197+
198+
cl_git_pass(git_remote_ls(remote, @count_ref__cb, @how_many_refs));
199+
200+
cl_assert(how_many_refs = 12); //* 1 HEAD */
201+
202+
cl_fixture_cleanup('spaced testrepo.git');
203+
end;
204+
205+
{ Test_network_createremotethenload }
206+
207+
procedure Test_network_createremotethenload.SetUp;
208+
begin
209+
inherited;
210+
211+
url := 'http://github.com/libgit2/libgit2.git';
212+
213+
cl_fixture_sandbox('testrepo.git');
214+
215+
cl_git_pass(git_repository_open(_repo, 'testrepo.git'));
216+
217+
cl_git_pass(git_repository_config(_config, _repo));
218+
cl_git_pass(git_config_set_string(_config, 'remote.origin.fetch', '+refs/heads/*:refs/remotes/origin/*'));
219+
cl_git_pass(git_config_set_string(_config, 'remote.origin.url', PAnsiChar(url)));
220+
git_config_free(_config);
221+
222+
cl_git_pass(git_remote_load(_remote, _repo, 'origin'));
223+
end;
224+
225+
procedure Test_network_createremotethenload.TearDown;
226+
begin
227+
inherited;
228+
git_remote_free(_remote);
229+
git_repository_free(_repo);
230+
cl_fixture_cleanup('testrepo.git');
231+
end;
232+
233+
procedure Test_network_createremotethenload.test_network_createremotethenload__parsing;
234+
begin
235+
cl_assert(StrComp(git_remote_name(_remote), 'origin') = 0);
236+
cl_assert(StrComp(git_remote_url(_remote), PAnsiChar(url)) = 0);
237+
end;
238+
239+
initialization
240+
RegisterTest('From libgit2/clar/network', Test_network_remotes.NamedSuite('remotes'));
241+
RegisterTest('From libgit2/clar/network', Test_network_remotelocal.NamedSuite('remotelocal'));
242+
RegisterTest('From libgit2/clar/network', Test_network_createremotethenload.NamedSuite('createremotethenload'));
243+
244+
end.

tests/TestsFromLibGit2/clar/uClar.pas

+39-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ TClarTest = class(TTestFromLibGit2)
1616
procedure cl_git_pass(expr: Integer);
1717
procedure cl_assert_(b: Boolean; const aDescr: String); overload;
1818
procedure cl_assert_(b: Boolean; const aDescr: AnsiString); overload;
19+
procedure cl_assert(b: Boolean; const aDescr: String); overload;
20+
procedure cl_assert(b: Boolean; const aDescr: AnsiString = ''); overload;
21+
function cl_fixture(fixture_name: PAnsiChar): PAnsiChar;
1922
end;
2023

2124
implementation
@@ -35,11 +38,41 @@ procedure TClarTest.cl_assert_(b: Boolean; const aDescr: String);
3538
CheckTrue(b, aDescr);
3639
end;
3740

41+
procedure TClarTest.cl_assert(b: Boolean; const aDescr: String);
42+
begin
43+
cl_assert_(b, aDescr);
44+
end;
45+
46+
procedure TClarTest.cl_assert(b: Boolean; const aDescr: AnsiString);
47+
begin
48+
cl_assert_(b, aDescr);
49+
end;
50+
3851
procedure TClarTest.cl_assert_(b: Boolean; const aDescr: AnsiString);
3952
begin
4053
CheckTrue(b, String(aDescr));
4154
end;
4255

56+
function TClarTest.cl_fixture(fixture_name: PAnsiChar): PAnsiChar;
57+
function fixture_path(abase, afixture_name: PAnsiChar): PAnsiChar;
58+
var
59+
path_buf: String;
60+
begin
61+
path_buf := IncludeTrailingPathDelimiter(String(AnsiString(abase)));
62+
if (afixture_name <> '') and (afixture_name[1] = '/') then
63+
path_buf := path_buf + Copy(String(AnsiString(afixture_name)), 2)
64+
else
65+
path_buf := path_buf + String(AnsiString(afixture_name));
66+
67+
Result := PAnsiChar(AnsiString(StringReplace(path_buf, '\', '/', [rfReplaceAll])));
68+
end;
69+
var
70+
CLAR_FIXTURE_PATH: String;
71+
begin
72+
CLAR_FIXTURE_PATH := IncludeTrailingPathDelimiter(GetCurrentDir) + 'resources';
73+
Result := fixture_path(PAnsiChar(AnsiString(CLAR_FIXTURE_PATH)), fixture_name);
74+
end;
75+
4376
procedure TClarTest.cl_fixture_cleanup(const aFixtureName: AnsiString);
4477
var
4578
path: AnsiString;
@@ -49,14 +82,19 @@ procedure TClarTest.cl_fixture_cleanup(const aFixtureName: AnsiString);
4982
end;
5083

5184
procedure TClarTest.cl_git_pass(expr: Integer);
85+
var
86+
e: PAnsiChar;
5287
begin
5388
git_clearerror();
5489
// if ((expr) <> GIT_SUCCESS)
5590
// clar__assert(0, __FILE__, __LINE__, 'Function call failed: ' #expr, git_lasterror(), 1);
5691
// } while(0);
5792

5893
if expr <> GIT_SUCCESS then
59-
Fail('Funciton failed ' + String(AnsiString(git_lasterror())), CallerAddr);
94+
begin
95+
e := git_lasterror();
96+
Fail('Funciton failed ' + String(AnsiString(e)), CallerAddr);
97+
end;
6098
end;
6199

62100
function TClarTest.p_rename(const aFrom, aTo: AnsiString): Integer;

uGitForDelphi.pas

+3
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,9 @@ function InitLibgit2: Boolean;
303303
GIT_PACKEDREFS_FILE: PAnsiChar = 'packed-refs';
304304
GIT_REFS_TAGS_DIR: PAnsiChar = 'refs/tags/';
305305

306+
GIT_DIR_FETCH = 0;
307+
GIT_DIR_PUSH = 1;
308+
306309
type
307310
size_t = LongWord;
308311
time_t = Int64;

0 commit comments

Comments
 (0)