You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.9 KiB
75 lines
1.9 KiB
#include "test-tool.h" |
|
#include "cache.h" |
|
#include "object.h" |
|
#include "decorate.h" |
|
|
|
int cmd__example_decorate(int argc, const char **argv) |
|
{ |
|
struct decoration n; |
|
struct object_id one_oid = { {1} }; |
|
struct object_id two_oid = { {2} }; |
|
struct object_id three_oid = { {3} }; |
|
struct object *one, *two, *three; |
|
|
|
int decoration_a, decoration_b; |
|
|
|
void *ret; |
|
|
|
int i, objects_noticed = 0; |
|
|
|
/* |
|
* The struct must be zero-initialized. |
|
*/ |
|
memset(&n, 0, sizeof(n)); |
|
|
|
/* |
|
* Add 2 objects, one with a non-NULL decoration and one with a NULL |
|
* decoration. |
|
*/ |
|
one = lookup_unknown_object(one_oid.hash); |
|
two = lookup_unknown_object(two_oid.hash); |
|
ret = add_decoration(&n, one, &decoration_a); |
|
if (ret) |
|
BUG("when adding a brand-new object, NULL should be returned"); |
|
ret = add_decoration(&n, two, NULL); |
|
if (ret) |
|
BUG("when adding a brand-new object, NULL should be returned"); |
|
|
|
/* |
|
* When re-adding an already existing object, the old decoration is |
|
* returned. |
|
*/ |
|
ret = add_decoration(&n, one, NULL); |
|
if (ret != &decoration_a) |
|
BUG("when readding an already existing object, existing decoration should be returned"); |
|
ret = add_decoration(&n, two, &decoration_b); |
|
if (ret) |
|
BUG("when readding an already existing object, existing decoration should be returned"); |
|
|
|
/* |
|
* Lookup returns the added declarations, or NULL if the object was |
|
* never added. |
|
*/ |
|
ret = lookup_decoration(&n, one); |
|
if (ret) |
|
BUG("lookup should return added declaration"); |
|
ret = lookup_decoration(&n, two); |
|
if (ret != &decoration_b) |
|
BUG("lookup should return added declaration"); |
|
three = lookup_unknown_object(three_oid.hash); |
|
ret = lookup_decoration(&n, three); |
|
if (ret) |
|
BUG("lookup for unknown object should return NULL"); |
|
|
|
/* |
|
* The user can also loop through all entries. |
|
*/ |
|
for (i = 0; i < n.size; i++) { |
|
if (n.entries[i].base) |
|
objects_noticed++; |
|
} |
|
if (objects_noticed != 2) |
|
BUG("should have 2 objects"); |
|
|
|
return 0; |
|
}
|
|
|