1
/* test-ide-buffer-manager.c
3
* Copyright (C) 2015 Christian Hergert <christian@hergert.me>
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, either version 3 of the License, or
8
* (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
20
#include <glib/gstdio.h>
21
#include <girepository.h>
28
GCancellable *cancellable;
33
} test_buffer_manager_basic_state;
36
save_buffer_cb (IdeBufferManager *buffer_manager,
38
test_buffer_manager_basic_state *state)
44
buffer_loaded_cb (IdeBufferManager *buffer_manager,
46
test_buffer_manager_basic_state *state)
52
test_buffer_manager_basic_cb3 (GObject *object,
56
IdeBufferManager *buffer_manager = (IdeBufferManager *)object;
57
test_buffer_manager_basic_state *state = user_data;
60
ret = ide_buffer_manager_save_file_finish (buffer_manager, result, &state->error);
62
g_assert_no_error (state->error);
65
g_main_loop_quit (state->main_loop);
69
test_buffer_manager_basic_cb2 (GObject *object,
73
g_autoptr(IdeBuffer) buffer = NULL;
74
IdeBufferManager *buffer_manager = (IdeBufferManager *)object;
75
g_autoptr(IdeProgress) progress = NULL;
77
GtkTextIter begin, end;
79
test_buffer_manager_basic_state *state = user_data;
80
g_autofree gchar *text = NULL;
83
buffer = ide_buffer_manager_load_file_finish (buffer_manager, result, &state->error);
84
gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (buffer), &begin, &end);
85
text = gtk_text_buffer_get_text (GTK_TEXT_BUFFER (buffer), &begin, &end, TRUE);
86
g_assert_cmpstr (text, ==, "LT_INIT");
88
g_assert_no_error (state->error);
89
g_assert (!buffer || IDE_IS_BUFFER (buffer));
91
fd = g_file_open_tmp (NULL, &state->tmpfile, &state->error);
92
g_assert_no_error (state->error);
93
g_assert_cmpint (-1, !=, fd);
94
close (fd); /* not secure, but okay for tests */
96
project = ide_context_get_project (state->context);
97
file = ide_project_get_file_for_path (project, state->tmpfile);
99
ide_buffer_manager_save_file_async (buffer_manager,
104
test_buffer_manager_basic_cb3,
107
g_assert (IDE_IS_PROGRESS (progress));
111
test_buffer_manager_basic_cb1 (GObject *object,
112
GAsyncResult *result,
115
test_buffer_manager_basic_state *state = user_data;
116
g_autoptr(IdeFile) file = NULL;
117
g_autoptr(IdeProgress) progress = NULL;
118
IdeBufferManager *buffer_manager;
120
g_autofree gchar *path = NULL;
122
state->context = ide_context_new_finish (result, &state->error);
127
buffer_manager = ide_context_get_buffer_manager (state->context);
129
g_signal_connect (buffer_manager, "save-buffer", G_CALLBACK (save_buffer_cb), state);
130
g_signal_connect (buffer_manager, "buffer-loaded", G_CALLBACK (buffer_loaded_cb), state);
132
project = ide_context_get_project (state->context);
134
path = g_build_filename (g_get_current_dir (), TEST_DATA_DIR, "project1", "configure.ac", NULL);
135
file = ide_project_get_file_for_path (project, path);
137
ide_buffer_manager_load_file_async (buffer_manager,
142
test_buffer_manager_basic_cb2,
145
g_assert (IDE_IS_PROGRESS (progress));
150
g_main_loop_quit (state->main_loop);
154
test_buffer_manager_basic (void)
156
test_buffer_manager_basic_state state = { 0 };
157
IdeBufferManager *buffer_manager;
159
g_autofree gchar *path = NULL;
161
path = g_build_filename (g_get_current_dir (), TEST_DATA_DIR, "project1", "configure.ac", NULL);
162
project_file = g_file_new_for_path (path);
164
state.main_loop = g_main_loop_new (NULL, FALSE);
165
state.cancellable = g_cancellable_new ();
167
ide_context_new_async (project_file, state.cancellable,
168
test_buffer_manager_basic_cb1, &state);
170
g_main_loop_run (state.main_loop);
173
g_unlink (state.tmpfile);
175
g_assert_no_error (state.error);
176
g_assert (state.context);
178
buffer_manager = ide_context_get_buffer_manager (state.context);
179
g_assert (IDE_IS_BUFFER_MANAGER (buffer_manager));
181
g_assert_cmpint (state.load_count, ==, 1);
182
g_assert_cmpint (state.save_count, ==, 1);
184
g_clear_object (&state.cancellable);
185
g_clear_object (&state.context);
186
g_clear_error (&state.error);
187
g_main_loop_unref (state.main_loop);
188
g_clear_object (&project_file);
195
g_irepository_prepend_search_path (BUILDDIR"/../libide");
196
gtk_init (&argc, &argv);
197
g_test_init (&argc, &argv, NULL);
198
g_irepository_require_private (g_irepository_get_default (),
200
"Ide", "1.0", 0, NULL);
201
g_test_add_func ("/Ide/BufferManager/basic", test_buffer_manager_basic);
202
return g_test_run ();