summaryrefslogtreecommitdiff
path: root/test/automated/displayless/test-tag-manager.c
blob: e6d5820ee3df47daec43f57b52285df27bb4fc88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "test-utilities.h"
#include "test-utilities-tracker.h"

#include <src/nautilus-file.h>
#include <src/nautilus-tag-manager.h>

typedef struct
{
    NautilusTagManager *tag_manager;
    GFile *file_one;
} TagManagerFixture;

static void
tag_manager_fixture_set_up (TagManagerFixture *fixture,
                            gconstpointer      user_data)
{
    TrackerFilesProcessedWatcher *minerfs_watcher, *extractor_watcher;
    g_autofree gchar *path = NULL;

    fixture->tag_manager = nautilus_tag_manager_get ();
    nautilus_tag_manager_set_cancellable (fixture->tag_manager, NULL);

    minerfs_watcher = tracker_files_processed_watcher_new (TRACKER_MINERFS_BUS_NAME, TRACKER_MINERFS_OBJECT_PATH);
    extractor_watcher = tracker_files_processed_watcher_new (TRACKER_EXTRACT_BUS_NAME, TRACKER_EXTRACT_OBJECT_PATH);

    create_one_file ("stars");

    path = g_build_filename (g_get_tmp_dir (), "stars_first_dir", "stars_first_dir_child", NULL);
    fixture->file_one = g_file_new_for_path (path);

    tracker_files_processed_watcher_await_file (minerfs_watcher, fixture->file_one);
    tracker_files_processed_watcher_await_file (extractor_watcher, fixture->file_one);
    tracker_files_processed_watcher_free (minerfs_watcher);
    tracker_files_processed_watcher_free (extractor_watcher);
}

static void
tag_manager_fixture_tear_down (TagManagerFixture *fixture,
                               gconstpointer      user_data)
{
    g_clear_object (&fixture->tag_manager);
    g_clear_object (&fixture->file_one);
}

static void
starred_changed_cb (NautilusTagManager *tag_manager,
                    GList              *selection,
                    gpointer            user_data)
{
    GMainLoop *loop = user_data;

    g_main_loop_quit (loop);
}

static void
test_star_unstar (TagManagerFixture *fixture,
                  gconstpointer      user_data)
{
    GList *selection;
    gulong signal_id;
    g_autoptr (GMainLoop) loop = NULL;

    loop = g_main_loop_new (NULL, 0);

    signal_id = g_signal_connect (fixture->tag_manager, "starred-changed", G_CALLBACK (starred_changed_cb), loop);

    selection = g_list_prepend (NULL, nautilus_file_get (fixture->file_one));

    /* Nothing is starred to begin with */
    g_assert (nautilus_tag_manager_get_starred_files (fixture->tag_manager) == NULL);

    /* Star one file and check. */
    nautilus_tag_manager_star_files (fixture->tag_manager, NULL, selection, NULL, NULL);
    g_main_loop_run (loop);

    g_assert_cmpint (g_list_length (nautilus_tag_manager_get_starred_files (fixture->tag_manager)), ==, 1);

    /* Unstar the file and check again. */
    nautilus_tag_manager_unstar_files (fixture->tag_manager, NULL, selection, NULL, NULL);
    g_main_loop_run (loop);

    g_assert_cmpint (g_list_length (nautilus_tag_manager_get_starred_files (fixture->tag_manager)), ==, 0);

    g_signal_handler_disconnect (fixture->tag_manager, signal_id);
}

static void
setup_test_suite (void)
{
    g_test_add ("/test-tag-manager/star_unstar", TagManagerFixture, NULL,
                tag_manager_fixture_set_up, test_star_unstar,
                tag_manager_fixture_tear_down);
}

int
main (int   argc,
      char *argv[])
{
    g_autoptr (TrackerSparqlConnection) connection = NULL;
    g_autoptr (GError) error = NULL;
    g_autoptr (NautilusFileUndoManager) undo_manager = NULL;

    g_test_init (&argc, &argv, NULL);

    nautilus_ensure_extension_points ();

    undo_manager = nautilus_file_undo_manager_new ();

    /* Make sure to run this test using the 'tracker-sandbox' script
     * so it doesn't make changes to your real Tracker index.
     */
    connection = tracker_sparql_connection_bus_new ("org.freedesktop.Tracker3.Miner.Files", NULL, NULL, &error);

    g_assert_no_error (error);

    if (!g_getenv ("TRACKER_INDEXED_TMPDIR"))
    {
        g_error ("This test expects to be run inside `tracker sandbox --index-recursive-tmpdir`.");
    }

    g_setenv ("TMPDIR", g_getenv ("TRACKER_INDEXED_TMPDIR"), TRUE);

    setup_test_suite ();

    return g_test_run ();
}