summaryrefslogtreecommitdiff
path: root/tests/t0402-details.c
blob: 489b3ff67e77868212ab5da4c7afcb1d1ef66971 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "test_lib.h"
#include "test_helpers.h"
#include "commit.h"
#include "person.h"

#include <git2/odb.h>
#include <git2/commit.h>
#include <git2/revwalk.h>

static const char *commit_ids[] = {
	"a4a7dce85cf63874e984719f4fdd239f5145052f", /* 0 */
	"9fd738e8f7967c078dceed8190330fc8648ee56a", /* 1 */
	"4a202b346bb0fb0db7eff3cffeb3c70babbd2045", /* 2 */
	"c47800c7266a2be04c571c04d5a6614691ea99bd", /* 3 */
	"8496071c1b46c854b31185ea97743be6a8774479", /* 4 */
	"5b5b025afb0b4c913b4c338a42934a3863bf3644", /* 5 */
};

BEGIN_TEST(query_details_test)
	const size_t commit_count = sizeof(commit_ids) / sizeof(const char *);

	unsigned int i;
	git_repository *repo;

	must_pass(git_repository_open(&repo, REPOSITORY_FOLDER));
	
	for (i = 0; i < commit_count; ++i) {
		git_oid id;
		git_commit *commit;

		const git_person *author, *committer;
		const char *message, *message_short;
		time_t commit_time;
		unsigned int parents, p;
		git_commit *parent;

		git_oid_mkstr(&id, commit_ids[i]);

		must_pass(git_commit_lookup(&commit, repo, &id));

		message = git_commit_message(commit);
		message_short = git_commit_message_short(commit);
		author = git_commit_author(commit);
		committer = git_commit_committer(commit);
		commit_time = git_commit_time(commit);
		parents = git_commit_parentcount(commit);

		must_be_true(strcmp(author->name, "Scott Chacon") == 0);
		must_be_true(strcmp(author->email, "schacon@gmail.com") == 0);
		must_be_true(strcmp(committer->name, "Scott Chacon") == 0);
		must_be_true(strcmp(committer->email, "schacon@gmail.com") == 0);
		must_be_true(strchr(message, '\n') != NULL);
		must_be_true(strchr(message_short, '\n') == NULL);
		must_be_true(commit_time > 0);
		must_be_true(parents <= 2);
		for (p = 0;p < parents;p++) {
			parent = git_commit_parent(commit, p);
			must_be_true(parent != NULL);
			must_be_true(git_commit_author(parent) != NULL); // is it really a commit?
		}
		must_be_true(git_commit_parent(commit, parents) == NULL);
	}

	git_repository_free(repo);
END_TEST