From d09a6690e48bbdf2b0cfcdec7e54a6edc07b9930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?= =?UTF-8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= Date: Sun, 19 Jan 2020 20:51:59 +0000 Subject: [PATCH] W32: add a test for setting file mtime --- gio/tests/g-file-info.c | 65 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/gio/tests/g-file-info.c b/gio/tests/g-file-info.c index 1fbdf71fa..c4cfd3702 100644 --- a/gio/tests/g-file-info.c +++ b/gio/tests/g-file-info.c @@ -229,6 +229,13 @@ test_internal_enhanced_stdio (void) { 0x62AB5D82, 0xFDC1, 0x4DC3, { 0xA9, 0xDD, 0x07, 0x0D, 0x1D, 0x49, 0x5D, 0x97 } }; static const GUID folder_id_users = { 0x0762D272, 0xC50A, 0x4BB0, { 0xA3, 0x82, 0x69, 0x7D, 0xCD, 0x72, 0x9B, 0x80 } }; + GDateTime *dt = NULL, *dt2 = NULL; + GTimeSpan ts; + /* Just before SYSTEMTIME limit (Jan 1 30827) */ + const gint64 one_sec_before_systemtime_limit = 910670515199; + gboolean retval; + GError *local_error = NULL; + programdata_dir_w = NULL; SHGetKnownFolderPath (&folder_id_programdata, 0, NULL, &programdata_dir_w); @@ -552,7 +559,8 @@ test_internal_enhanced_stdio (void) G_FILE_ATTRIBUTE_STANDARD_SIZE "," G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE "," G_FILE_ATTRIBUTE_ID_FILE "," - G_FILE_ATTRIBUTE_TIME_MODIFIED, + G_FILE_ATTRIBUTE_TIME_MODIFIED "," + G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC, G_FILE_QUERY_INFO_NONE, NULL, NULL); @@ -560,7 +568,8 @@ test_internal_enhanced_stdio (void) G_FILE_ATTRIBUTE_STANDARD_SIZE "," G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE "," G_FILE_ATTRIBUTE_ID_FILE "," - G_FILE_ATTRIBUTE_TIME_MODIFIED, + G_FILE_ATTRIBUTE_TIME_MODIFIED "," + G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC, G_FILE_QUERY_INFO_NONE, NULL, NULL); @@ -568,11 +577,13 @@ test_internal_enhanced_stdio (void) g_assert_true (g_file_info_has_attribute (fi_p0, G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE)); g_assert_true (g_file_info_has_attribute (fi_p0, G_FILE_ATTRIBUTE_ID_FILE)); g_assert_true (g_file_info_has_attribute (fi_p0, G_FILE_ATTRIBUTE_TIME_MODIFIED)); + g_assert_true (g_file_info_has_attribute (fi_p0, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC)); g_assert_true (g_file_info_has_attribute (fi_p1, G_FILE_ATTRIBUTE_STANDARD_SIZE)); g_assert_true (g_file_info_has_attribute (fi_p1, G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE)); g_assert_true (g_file_info_has_attribute (fi_p1, G_FILE_ATTRIBUTE_ID_FILE)); g_assert_true (g_file_info_has_attribute (fi_p1, G_FILE_ATTRIBUTE_TIME_MODIFIED)); + g_assert_true (g_file_info_has_attribute (fi_p1, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC)); size_p0 = g_file_info_get_attribute_uint64 (fi_p0, G_FILE_ATTRIBUTE_STANDARD_SIZE); alsize_p0 = g_file_info_get_attribute_uint64 (fi_p0, G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE); @@ -604,6 +615,56 @@ test_internal_enhanced_stdio (void) */ g_assert_cmpuint (time_p0, >, G_GUINT64_CONSTANT (0xFFFFFFFF)); + dt = g_file_info_get_modification_date_time (fi_p0); + g_assert_nonnull (dt); + dt2 = g_date_time_add (dt, G_USEC_PER_SEC / 100 * 200); + g_object_unref (fi_p0); + fi_p0 = g_file_info_new (); + g_file_info_set_modification_date_time (fi_p0, dt2); + + g_assert_true (g_file_set_attributes_from_info (gf_p0, + fi_p0, + G_FILE_QUERY_INFO_NONE, + NULL, + NULL)); + g_date_time_unref (dt2); + g_object_unref (fi_p0); + fi_p0 = g_file_query_info (gf_p0, + G_FILE_ATTRIBUTE_TIME_MODIFIED "," + G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC, + G_FILE_QUERY_INFO_NONE, + NULL, NULL); + dt2 = g_file_info_get_modification_date_time (fi_p0); + ts = g_date_time_difference (dt2, dt); + g_assert_cmpint (ts, >, 0); + g_assert_cmpint (ts, <, G_USEC_PER_SEC / 100 * 300); + + g_date_time_unref (dt); + g_date_time_unref (dt2); + + g_file_info_set_attribute_uint64 (fi_p0, + G_FILE_ATTRIBUTE_TIME_MODIFIED, + one_sec_before_systemtime_limit); + g_file_info_set_attribute_uint32 (fi_p0, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC, 0); + g_assert_true (g_file_set_attributes_from_info (gf_p0, + fi_p0, + G_FILE_QUERY_INFO_NONE, + NULL, + NULL)); + + g_file_info_set_attribute_uint64 (fi_p0, + G_FILE_ATTRIBUTE_TIME_MODIFIED, + one_sec_before_systemtime_limit + G_USEC_PER_SEC * 2); + g_file_info_set_attribute_uint32 (fi_p0, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC, 0); + retval = g_file_set_attributes_from_info (gf_p0, + fi_p0, + G_FILE_QUERY_INFO_NONE, + NULL, + &local_error); + g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA); + g_assert_false (retval); + g_clear_error (&local_error); + g_object_unref (fi_p0); g_object_unref (fi_p1); g_object_unref (gf_p0);