From ccc0cc1f80b141ff3c66c0718cd0ab7e2630aa32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Sun, 3 Aug 2014 15:03:03 +0200 Subject: [PATCH] Add some tests for Index Including making the default :undefined, so the NIF doesn't get upset. Implementing the Access protocol would require a struct, so we may or may not want that. --- lib/geef/index.ex | 10 ++++++++-- test/index_test.exs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 test/index_test.exs diff --git a/lib/geef/index.ex b/lib/geef/index.ex index 140229c..c03a810 100644 --- a/lib/geef/index.ex +++ b/lib/geef/index.ex @@ -6,13 +6,15 @@ defmodule Geef.Index.Entry do vals = :lists.map(&{&1, [], nil}, keys) pairs = :lists.zip(keys, vals) - defstruct keys + defaults = :lists.map(fn(_) -> :undefined end, keys) + + defstruct :lists.zip(keys, defaults) def from_record({:geef_index_entry, unquote_splicing(vals)}) do %Geef.Index.Entry{unquote_splicing(pairs)} end - def to_record(%Geef.Index.Entry{unquote_splicing(pairs)}) do + def to_record(e = %Geef.Index.Entry{unquote_splicing(pairs)}) do {:geef_index_entry, unquote_splicing(vals)} end @@ -60,6 +62,10 @@ defmodule Geef.Index do :geef_index.write(pid) end + def write_tree(pid, repo) do + :geef_index.write_tree(pid, repo) + end + @spec write!(pid()) :: :ok def write!(pid) do case write(pid) do diff --git a/test/index_test.exs b/test/index_test.exs new file mode 100644 index 0000000..d5b1f7e --- /dev/null +++ b/test/index_test.exs @@ -0,0 +1,44 @@ +defmodule IndexTest do + use ExUnit.Case + use Geef + alias Geef.Index + alias Geef.Index.Entry + import RepoHelpers + + + setup do + {repo, path} = tmp_bare() + Process.link(repo) + on_exit(fn -> File.rm_rf!(path) end) + {:ok, [repo: repo, path: path]} + end + + test "add an entry to the index", meta do + repo = meta[:repo] + + content = "This is some text that will go in a file" + {:ok, odb} = Repository.odb(repo) + {:ok, id} = Odb.write(odb, content, :blob) + assert id == Oid.parse("c300118399f01fe52b316061b5d32beb27e0adfd") + + {:ok, idx} = Index.new + {now_mega, now_secs, _} = :os.timestamp() + time = now_mega * 1000000 + now_secs + + entry = %Geef.Index.Entry{mode: 0o100644, id: id, path: "README", size: byte_size(content), mtime: time} + :ok = Index.add(idx, entry) + + {:ok, tree_id} = Index.write_tree(idx, repo) + expected = Oid.parse("5a20bbbf65ea75ad4d9f995d179156824ccca3a1") + assert tree_id == expected + + {:ok, entry1} = Index.get(idx, "README", 0) +# entry2 = idx["README"] + +# assert entry1 == entry2 + assert entry1.size == byte_size(content) + + Repository.stop(repo) + end + +end