summaryrefslogtreecommitdiff
path: root/t/unit-tests/lib-oid.c
diff options
context:
space:
mode:
Diffstat (limited to 't/unit-tests/lib-oid.c')
-rw-r--r--t/unit-tests/lib-oid.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/t/unit-tests/lib-oid.c b/t/unit-tests/lib-oid.c
new file mode 100644
index 0000000000..e0b3180f23
--- /dev/null
+++ b/t/unit-tests/lib-oid.c
@@ -0,0 +1,42 @@
+#include "unit-test.h"
+#include "lib-oid.h"
+#include "strbuf.h"
+#include "hex.h"
+
+int cl_setup_hash_algo(void)
+{
+ static int algo = -1;
+
+ if (algo < 0) {
+ const char *algo_name = getenv("GIT_TEST_DEFAULT_HASH");
+ algo = algo_name ? hash_algo_by_name(algo_name) : GIT_HASH_SHA1;
+
+ cl_assert(algo != GIT_HASH_UNKNOWN);
+ }
+ return algo;
+}
+
+static void cl_parse_oid(const char *hex, struct object_id *oid,
+ const struct git_hash_algo *algop)
+{
+ size_t sz = strlen(hex);
+ struct strbuf buf = STRBUF_INIT;
+
+ cl_assert(sz <= algop->hexsz);
+
+ strbuf_add(&buf, hex, sz);
+ strbuf_addchars(&buf, '0', algop->hexsz - sz);
+
+ cl_assert_equal_i(get_oid_hex_algop(buf.buf, oid, algop), 0);
+
+ strbuf_release(&buf);
+}
+
+
+void cl_parse_any_oid(const char *hex, struct object_id *oid)
+{
+ int hash_algo = cl_setup_hash_algo();
+
+ cl_assert(hash_algo != GIT_HASH_UNKNOWN);
+ cl_parse_oid(hex, oid, &hash_algos[hash_algo]);
+}