Commit 81609a05 authored by Martyn Russell's avatar Martyn Russell

tests: Re-write guarantee metadata test to separate tests better

parent c49b1716
...@@ -17,128 +17,145 @@ ...@@ -17,128 +17,145 @@
* Boston, MA 02110-1301, USA. * Boston, MA 02110-1301, USA.
*/ */
#include "config.h" #include "config.h"
#include <locale.h>
#include <glib.h> #include <glib.h>
#include <libtracker-sparql/tracker-sparql.h> #include <libtracker-sparql/tracker-sparql.h>
#include <libtracker-extract/tracker-guarantee.h> #include <libtracker-extract/tracker-guarantee.h>
typedef struct { typedef struct {
gchar *file_uri; const gchar *test_name;
gchar *extracted_title; gchar *uri;
gchar *expected_title; const gchar *extracted;
} TestCase; const gchar *expected;
TrackerSparqlBuilder *builder;
TestCase test_cases_title [] = { } TestInfo;
{ "file:///a/b/a_video_with_metadata.avi", "extracted title", "extracted title" },
TestInfo title_tests [] = {
{ "file:///a/b/a_video_with_no_metadata.avi", NULL, "a video with no metadata" }, { "normal-extraction", "file:///a/b/a_video_with_metadata.avi", "extracted title", "extracted title" },
{ "file:///a/b/a_video_with_no_metadata.avi", "", "a video with no metadata" }, { "empty-extraction", "file:///a/b/a_video_with_no_metadata.avi", NULL, "a video with no metadata" },
{ "file:///a/b/a.video.with.no.metadata.avi", NULL, "a.video.with.no.metadata" }, { "underscore-separators", "file:///a/b/a_video_with_no_metadata.avi", "", "a video with no metadata" },
{ "file:///a/b/a video without extension", NULL, "a video without extension" }, { "dot-separators", "file:///a/b/a.video.with.no.metadata.avi", NULL, "a.video.with.no.metadata" },
{ "file:///a/b/.hidden_file", NULL, "hidden file" }, { "no-extension", "file:///a/b/a video without extension", NULL, "a video without extension" },
{ "hidden-files", "file:///a/b/.hidden_file", NULL, "hidden file" },
{ NULL, NULL, NULL }
};
{ NULL, NULL, NULL} TestInfo date_tests [] = {
{ "date-normal", "file:///does/not/matter/here", NULL, "2011-10-10T12:13:14Z0300" },
{ "date-is-null", NULL, NULL, NULL },
{ "date-is-empty-string", NULL, NULL, NULL },
{ NULL, NULL, NULL }
}; };
/*
* @uri of the file that is being processed
* @value is the title returned by the extractor
* @expected can be either the title of the extractor (if not NULL or empty) or calculated from the filename
*/
static void static void
internal_test_title (const gchar *uri, test_title (TestInfo *info,
const gchar *value, gconstpointer context)
const gchar *expected)
{ {
TrackerSparqlBuilder *builder; gchar *sparql;
gchar *sparql; gchar *title_guaranteed;
gchar *title_guaranteed;
tracker_sparql_builder_insert_open (info->builder, "test");
builder = tracker_sparql_builder_new_update (); tracker_sparql_builder_subject_iri (info->builder, "test://resource");
tracker_sparql_builder_insert_open (builder, "test");
tracker_sparql_builder_subject_iri (builder, "test://resource"); g_assert_true (tracker_guarantee_title_from_file (info->builder, "nie:title", info->extracted, info->uri, &title_guaranteed));
g_assert (tracker_guarantee_title_from_file (builder, tracker_sparql_builder_insert_close (info->builder);
"nie:title",
value, sparql = g_strdup_printf ("INSERT INTO <test> {\n<test://resource> nie:title \"%s\" .\n}\n", info->expected);
uri, g_assert_cmpstr (sparql, ==, tracker_sparql_builder_get_result (info->builder));
&title_guaranteed)); g_assert_cmpstr (title_guaranteed, ==, info->expected);
tracker_sparql_builder_insert_close (builder);
g_free (title_guaranteed);
sparql = g_strdup_printf ("INSERT INTO <test> {\n<test://resource> nie:title \"%s\" .\n}\n", g_free (sparql);
expected);
g_assert_cmpstr (sparql,
==,
tracker_sparql_builder_get_result (builder));
g_assert_cmpstr (title_guaranteed,
==,
expected);
g_object_unref (builder);
g_free (sparql);
} }
static void static void
internal_test_date (const gchar *uri, test_date (TestInfo *info,
const gchar *value) gconstpointer context)
{ {
TrackerSparqlBuilder *builder; tracker_sparql_builder_insert_open (info->builder, "test");
tracker_sparql_builder_subject_iri (info->builder, "test://resource");
builder = tracker_sparql_builder_new_update ();
tracker_sparql_builder_insert_open (builder, "test"); g_assert_true (tracker_guarantee_date_from_file_mtime (info->builder, "test:mtime", info->extracted, info->uri));
tracker_sparql_builder_subject_iri (builder, "test://resource"); tracker_sparql_builder_insert_close (info->builder);
g_assert (tracker_guarantee_date_from_file_mtime (builder,
"test:mtime", /* mtime can change in the file so we just check that the property is in the output */
value, g_assert_nonnull (g_strstr_len (tracker_sparql_builder_get_result (info->builder), -1, "test:mtime"));
uri));
tracker_sparql_builder_insert_close (builder);
/* mtime can change in the file so we just check that the property is in the output */
g_assert (g_strstr_len (tracker_sparql_builder_get_result (builder), -1, "test:mtime"));
g_object_unref (builder);
} }
static void static void
test_guarantee_title (void) setup (TestInfo *info,
gint i)
{ {
int i; info->builder = tracker_sparql_builder_new_update ();
g_assert_nonnull (info->builder);
for (i = 0; test_cases_title[i].file_uri != NULL; i++) { if (strstr (info->test_name, "date")) {
internal_test_title (test_cases_title[i].file_uri, GFile *f;
test_cases_title[i].extracted_title,
test_cases_title[i].expected_title);
}
g_print ("%d test cases (guarantee metadata enabled)\n", i); f = g_file_new_for_path (TOP_SRCDIR "/tests/libtracker-extract/guarantee-mtime-test.txt");
info->uri = g_file_get_uri (f);
g_object_unref (f);
}
} }
static void static void
test_guarantee_date (void) setup_title (TestInfo *info,
gconstpointer context)
{ {
GFile *f; gint i = GPOINTER_TO_INT (context);
gchar *uri;
internal_test_date ("file:///does/not/matter/here", "2011-10-10T12:13:14Z0300"); *info = title_tests[i];
setup (info, i);
f = g_file_new_for_path (TOP_SRCDIR "/tests/libtracker-extract/guarantee-mtime-test.txt"); }
uri = g_file_get_uri (f);
internal_test_date (uri, NULL); static void
internal_test_date (uri, ""); setup_date (TestInfo *info,
gconstpointer context)
{
gint i = GPOINTER_TO_INT (context);
g_free (uri); *info = date_tests[i];
g_object_unref (f); setup (info, i);
} }
static void
teardown (TestInfo *info,
gconstpointer context)
{
if (strstr (info->test_name, "date")) {
g_free (info->uri);
}
g_object_unref (info->builder);
}
int int
main (int argc, char** argv) main (int argc, char** argv)
{ {
g_test_init (&argc, &argv, NULL); gint i;
setlocale (LC_COLLATE, "en_US.utf8");
g_test_init (&argc, &argv, NULL);
for (i = 0; title_tests[i].test_name != NULL; i++) {
gchar *testpath;
testpath = g_strdup_printf ("/libtracker-extract/guarantee/title/%s", title_tests[i].test_name);
g_test_add (testpath, TestInfo, GINT_TO_POINTER(i), setup_title, test_title, teardown);
g_free (testpath);
}
for (i = 0; date_tests[i].test_name != NULL; i++) {
gchar *testpath;
g_test_add_func ("/libtracker-extract/guarantee/title", testpath = g_strdup_printf ("/libtracker-extract/guarantee/date/%s", date_tests[i].test_name);
test_guarantee_title); g_test_add (testpath, TestInfo, GINT_TO_POINTER(i), setup_date, test_date, teardown);
g_test_add_func ("/libtracker-extract/guarantee/date", g_free (testpath);
test_guarantee_date); }
return g_test_run (); return g_test_run ();
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment