mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-12 23:46:17 +01:00
GMemoryOutputStream: improve seek tests
Improve test coverage for testing seeking on fixed vs. resizable GMemoryOutputStream. https://bugzilla.gnome.org/show_bug.cgi?id=684842
This commit is contained in:
parent
fdc5cd8d9f
commit
1d1c17d9ee
@ -55,7 +55,7 @@ test_truncate (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_seek (void)
|
test_seek_fixed (void)
|
||||||
{
|
{
|
||||||
GOutputStream *mo;
|
GOutputStream *mo;
|
||||||
GError *error;
|
GError *error;
|
||||||
@ -64,19 +64,109 @@ test_seek (void)
|
|||||||
|
|
||||||
g_assert (G_IS_SEEKABLE (mo));
|
g_assert (G_IS_SEEKABLE (mo));
|
||||||
g_assert (g_seekable_can_seek (G_SEEKABLE (mo)));
|
g_assert (g_seekable_can_seek (G_SEEKABLE (mo)));
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 0);
|
||||||
|
|
||||||
error = NULL;
|
error = NULL;
|
||||||
|
g_assert (!g_seekable_seek (G_SEEKABLE (mo), 222, G_SEEK_CUR, NULL, &error));
|
||||||
|
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT);
|
||||||
|
g_clear_error (&error);
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 0);
|
||||||
|
|
||||||
g_assert (g_seekable_seek (G_SEEKABLE (mo), 26, G_SEEK_SET, NULL, &error));
|
g_assert (g_seekable_seek (G_SEEKABLE (mo), 26, G_SEEK_SET, NULL, &error));
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 26);
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 26);
|
||||||
|
|
||||||
|
g_assert (g_seekable_seek (G_SEEKABLE (mo), 20, G_SEEK_CUR, NULL, &error));
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 46);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
g_assert (!g_seekable_seek (G_SEEKABLE (mo), 200, G_SEEK_CUR, NULL, &error));
|
g_assert (!g_seekable_seek (G_SEEKABLE (mo), 200, G_SEEK_CUR, NULL, &error));
|
||||||
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT);
|
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT);
|
||||||
g_error_free (error);
|
g_clear_error (&error);
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 46);
|
||||||
|
|
||||||
|
g_assert (!g_seekable_seek (G_SEEKABLE (mo), 1, G_SEEK_END, NULL, &error));
|
||||||
|
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT);
|
||||||
|
g_clear_error (&error);
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 46);
|
||||||
|
|
||||||
|
g_assert (g_seekable_seek (G_SEEKABLE (mo), 0, G_SEEK_END, NULL, &error));
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 100);
|
||||||
|
|
||||||
|
g_assert (g_seekable_seek (G_SEEKABLE (mo), -1, G_SEEK_END, NULL, &error));
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 99);
|
||||||
|
|
||||||
g_object_unref (mo);
|
g_object_unref (mo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_seek_resizable_stream (GOutputStream *mo)
|
||||||
|
{
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
g_assert (G_IS_SEEKABLE (mo));
|
||||||
|
g_assert (g_seekable_can_seek (G_SEEKABLE (mo)));
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 0);
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
g_assert (g_seekable_seek (G_SEEKABLE (mo), 222, G_SEEK_CUR, NULL, &error));
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 222);
|
||||||
|
|
||||||
|
g_assert (g_seekable_seek (G_SEEKABLE (mo), 26, G_SEEK_SET, NULL, &error));
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 26);
|
||||||
|
|
||||||
|
g_assert (g_seekable_seek (G_SEEKABLE (mo), 20, G_SEEK_CUR, NULL, &error));
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 46);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
g_assert (g_seekable_seek (G_SEEKABLE (mo), 200, G_SEEK_CUR, NULL, &error));
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 246);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
g_assert (g_seekable_seek (G_SEEKABLE (mo), 1, G_SEEK_END, NULL, &error));
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 1);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
g_assert (g_seekable_seek (G_SEEKABLE (mo), 0, G_SEEK_END, NULL, &error));
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 0);
|
||||||
|
|
||||||
|
/* The 'end' is still zero, so this should fail */
|
||||||
|
g_assert (!g_seekable_seek (G_SEEKABLE (mo), -1, G_SEEK_END, NULL, &error));
|
||||||
|
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT);
|
||||||
|
g_clear_error (&error);
|
||||||
|
g_assert_cmpint (g_seekable_tell (G_SEEKABLE (mo)), ==, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_seek_resizable (void)
|
||||||
|
{
|
||||||
|
GOutputStream *mo;
|
||||||
|
gint i;
|
||||||
|
|
||||||
|
/* For resizable streams, the initially allocated size is purely an
|
||||||
|
* implementation detail. We should not be able to tell the
|
||||||
|
* difference based on the seek API, so make a bunch of streams with
|
||||||
|
* different sizes and subject them to the same test.
|
||||||
|
*/
|
||||||
|
for (i = 0; i < 1024; i++)
|
||||||
|
{
|
||||||
|
mo = g_memory_output_stream_new (g_malloc (i), i, g_realloc, g_free);
|
||||||
|
|
||||||
|
test_seek_resizable_stream (mo);
|
||||||
|
|
||||||
|
g_assert_cmpint (g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (mo)), ==, 0);
|
||||||
|
/* No writes = no resizes */
|
||||||
|
g_assert_cmpint (g_memory_output_stream_get_size (G_MEMORY_OUTPUT_STREAM (mo)), ==, i);
|
||||||
|
|
||||||
|
g_object_unref (mo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_data_size (void)
|
test_data_size (void)
|
||||||
{
|
{
|
||||||
@ -230,7 +320,8 @@ main (int argc,
|
|||||||
g_test_bug_base ("http://bugzilla.gnome.org/");
|
g_test_bug_base ("http://bugzilla.gnome.org/");
|
||||||
|
|
||||||
g_test_add_func ("/memory-output-stream/truncate", test_truncate);
|
g_test_add_func ("/memory-output-stream/truncate", test_truncate);
|
||||||
g_test_add_func ("/memory-output-stream/seek", test_seek);
|
g_test_add_func ("/memory-output-stream/seek/fixed", test_seek_fixed);
|
||||||
|
g_test_add_func ("/memory-output-stream/seek/resizable", test_seek_resizable);
|
||||||
g_test_add_func ("/memory-output-stream/get-data-size", test_data_size);
|
g_test_add_func ("/memory-output-stream/get-data-size", test_data_size);
|
||||||
g_test_add_func ("/memory-output-stream/properties", test_properties);
|
g_test_add_func ("/memory-output-stream/properties", test_properties);
|
||||||
g_test_add_func ("/memory-output-stream/write-bytes", test_write_bytes);
|
g_test_add_func ("/memory-output-stream/write-bytes", test_write_bytes);
|
||||||
|
Loading…
Reference in New Issue
Block a user