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 @@
* Boston, MA 02110-1301, USA.
*/
#include "config.h"
#include <locale.h>
#include <glib.h>
#include <libtracker-sparql/tracker-sparql.h>
#include <libtracker-extract/tracker-guarantee.h>
typedef struct {
gchar *file_uri;
gchar *extracted_title;
gchar *expected_title;
} TestCase;
TestCase test_cases_title [] = {
{ "file:///a/b/a_video_with_metadata.avi", "extracted title", "extracted title" },
{ "file:///a/b/a_video_with_no_metadata.avi", NULL, "a video with no metadata" },
{ "file:///a/b/a_video_with_no_metadata.avi", "", "a video with no metadata" },
{ "file:///a/b/a.video.with.no.metadata.avi", NULL, "a.video.with.no.metadata" },
{ "file:///a/b/a video without extension", NULL, "a video without extension" },
{ "file:///a/b/.hidden_file", NULL, "hidden file" },
const gchar *test_name;
gchar *uri;
const gchar *extracted;
const gchar *expected;
TrackerSparqlBuilder *builder;
} TestInfo;
TestInfo title_tests [] = {
{ "normal-extraction", "file:///a/b/a_video_with_metadata.avi", "extracted title", "extracted title" },
{ "empty-extraction", "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" },
{ "dot-separators", "file:///a/b/a.video.with.no.metadata.avi", NULL, "a.video.with.no.metadata" },
{ "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
internal_test_title (const gchar *uri,
const gchar *value,
const gchar *expected)
test_title (TestInfo *info,
gconstpointer context)
{
TrackerSparqlBuilder *builder;
gchar *sparql;
gchar *title_guaranteed;
builder = tracker_sparql_builder_new_update ();
tracker_sparql_builder_insert_open (builder, "test");
tracker_sparql_builder_subject_iri (builder, "test://resource");
g_assert (tracker_guarantee_title_from_file (builder,
"nie:title",
value,
uri,
&title_guaranteed));
tracker_sparql_builder_insert_close (builder);
sparql = g_strdup_printf ("INSERT INTO <test> {\n<test://resource> nie:title \"%s\" .\n}\n",
expected);
g_assert_cmpstr (sparql,
==,
tracker_sparql_builder_get_result (builder));
g_assert_cmpstr (title_guaranteed,
==,
expected);
g_object_unref (builder);
tracker_sparql_builder_insert_open (info->builder, "test");
tracker_sparql_builder_subject_iri (info->builder, "test://resource");
g_assert_true (tracker_guarantee_title_from_file (info->builder, "nie:title", info->extracted, info->uri, &title_guaranteed));
tracker_sparql_builder_insert_close (info->builder);
sparql = g_strdup_printf ("INSERT INTO <test> {\n<test://resource> nie:title \"%s\" .\n}\n", info->expected);
g_assert_cmpstr (sparql, ==, tracker_sparql_builder_get_result (info->builder));
g_assert_cmpstr (title_guaranteed, ==, info->expected);
g_free (title_guaranteed);
g_free (sparql);
}
static void
internal_test_date (const gchar *uri,
const gchar *value)
test_date (TestInfo *info,
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");
tracker_sparql_builder_subject_iri (builder, "test://resource");
g_assert (tracker_guarantee_date_from_file_mtime (builder,
"test:mtime",
value,
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_assert_true (tracker_guarantee_date_from_file_mtime (info->builder, "test:mtime", info->extracted, info->uri));
tracker_sparql_builder_insert_close (info->builder);
g_object_unref (builder);
/* mtime can change in the file so we just check that the property is in the output */
g_assert_nonnull (g_strstr_len (tracker_sparql_builder_get_result (info->builder), -1, "test:mtime"));
}
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++) {
internal_test_title (test_cases_title[i].file_uri,
test_cases_title[i].extracted_title,
test_cases_title[i].expected_title);
}
if (strstr (info->test_name, "date")) {
GFile *f;
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
test_guarantee_date (void)
setup_title (TestInfo *info,
gconstpointer context)
{
GFile *f;
gchar *uri;
gint i = GPOINTER_TO_INT (context);
internal_test_date ("file:///does/not/matter/here", "2011-10-10T12:13:14Z0300");
f = g_file_new_for_path (TOP_SRCDIR "/tests/libtracker-extract/guarantee-mtime-test.txt");
uri = g_file_get_uri (f);
*info = title_tests[i];
setup (info, i);
}
internal_test_date (uri, NULL);
internal_test_date (uri, "");
static void
setup_date (TestInfo *info,
gconstpointer context)
{
gint i = GPOINTER_TO_INT (context);
g_free (uri);
g_object_unref (f);
*info = date_tests[i];
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
main (int argc, char** argv)
{
gint i;
setlocale (LC_COLLATE, "en_US.utf8");
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/libtracker-extract/guarantee/title",
test_guarantee_title);
g_test_add_func ("/libtracker-extract/guarantee/date",
test_guarantee_date);
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;
testpath = g_strdup_printf ("/libtracker-extract/guarantee/date/%s", date_tests[i].test_name);
g_test_add (testpath, TestInfo, GINT_TO_POINTER(i), setup_date, test_date, teardown);
g_free (testpath);
}
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