gnome-control-center/tests/common/test-time-entry.c
2020-06-15 04:55:39 +00:00

483 lines
12 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <locale.h>
#include <gtk/gtk.h>
/* #include "cc-datetime-resources.h" */
#undef NDEBUG
#undef G_DISABLE_ASSERT
#undef G_DISABLE_CHECKS
#undef G_DISABLE_CAST_CHECKS
#undef G_LOG_DOMAIN
#include "cc-time-entry.c"
static void
test_time (CcTimeEntry *time_entry,
guint hour,
guint minute,
gboolean is_24h)
{
g_autofree char *str = NULL;
const char *entry_str;
guint entry_hour, entry_minute;
g_assert_true (CC_IS_TIME_ENTRY (time_entry));
g_assert_cmpint (hour, >=, 0);
g_assert_cmpint (hour, <= , 23);
g_assert_cmpint (minute, >=, 0);
g_assert_cmpint (minute, <= , 59);
entry_hour = cc_time_entry_get_hour (time_entry);
g_assert_cmpint (entry_hour, ==, hour);
entry_minute = cc_time_entry_get_minute (time_entry);
g_assert_cmpint (entry_minute, ==, minute);
/* Convert 24 hour time to 12 hour */
if (!is_24h)
{
/* 00:00 is 12:00 AM */
if (hour == 0)
hour = 12;
else if (hour > 12)
hour = hour - 12;
}
str = g_strdup_printf ("%02d:%02d", hour, minute);
entry_str = gtk_entry_get_text (GTK_ENTRY (time_entry));
g_assert_cmpstr (entry_str, ==, str);
}
static void
test_time_24h (void)
{
GtkWidget *entry;
CcTimeEntry *time_entry;
entry = cc_time_entry_new ();
time_entry = CC_TIME_ENTRY (entry);
g_object_ref_sink (entry);
g_assert (CC_IS_TIME_ENTRY (entry));
for (guint i = 0; i <= 25; i++)
{
guint hour;
gboolean is_am;
cc_time_entry_set_time (time_entry, i, 0);
g_assert_false (cc_time_entry_get_am_pm (time_entry));
test_time (time_entry, i < 24 ? i : 23, 0, TRUE);
hour = cc_time_entry_get_hour (time_entry);
is_am = cc_time_entry_get_is_am (time_entry);
if (hour < 12)
g_assert_true (is_am);
else
g_assert_false (is_am);
}
g_object_unref (entry);
}
static void
test_time_12h (void)
{
GtkWidget *entry;
CcTimeEntry *time_entry;
entry = cc_time_entry_new ();
time_entry = CC_TIME_ENTRY (entry);
g_object_ref_sink (entry);
g_assert (CC_IS_TIME_ENTRY (entry));
cc_time_entry_set_am_pm (time_entry, FALSE);
g_assert_false (cc_time_entry_get_am_pm (time_entry));
cc_time_entry_set_am_pm (time_entry, TRUE);
g_assert_true (cc_time_entry_get_am_pm (time_entry));
for (guint i = 0; i <= 25; i++)
{
guint hour;
gboolean is_am;
cc_time_entry_set_time (time_entry, i, 0);
test_time (time_entry, i < 24 ? i : 23, 0, FALSE);
hour = cc_time_entry_get_hour (time_entry);
is_am = cc_time_entry_get_is_am (time_entry);
if (hour < 12)
g_assert_true (is_am);
else
g_assert_false (is_am);
}
g_object_unref (entry);
}
static void
test_time_hour_24h (void)
{
GtkWidget *entry;
CcTimeEntry *time_entry;
int hour;
entry = cc_time_entry_new ();
time_entry = CC_TIME_ENTRY (entry);
g_assert (CC_IS_TIME_ENTRY (entry));
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_set_position (GTK_EDITABLE (entry), 0);
for (guint i = 1; i <= 25; i++)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_UP);
/* Wrap if above limit */
hour = i;
if (hour >= 24)
hour = hour - 24;
test_time (time_entry, hour, 0, TRUE);
}
cc_time_entry_set_time (time_entry, 0, 0);
hour = 0;
for (int i = 25; i >= 0; i--)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_DOWN);
/* Wrap if below limit */
hour--;
if (hour < 0)
hour = 23;
test_time (time_entry, hour, 0, TRUE);
}
/* Put cursor at the ones place and repeat the tests */
gtk_editable_set_position (GTK_EDITABLE (entry), 1);
cc_time_entry_set_time (time_entry, 0, 0);
for (guint i = 1; i <= 25; i++)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_UP);
/* Wrap if above limit */
hour = i;
if (hour >= 24)
hour = hour - 24;
test_time (time_entry, hour, 0, TRUE);
}
cc_time_entry_set_time (time_entry, 0, 0);
hour = 0;
for (int i = 25; i >= 0; i--)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_DOWN);
/* Wrap if below limit */
hour--;
if (hour < 0)
hour = 23;
test_time (time_entry, hour, 0, TRUE);
}
g_object_ref_sink (entry);
g_object_unref (entry);
}
static void
test_time_minute_24h (void)
{
GtkWidget *entry;
CcTimeEntry *time_entry;
int minute;
entry = cc_time_entry_new ();
time_entry = CC_TIME_ENTRY (entry);
g_assert (CC_IS_TIME_ENTRY (entry));
cc_time_entry_set_time (time_entry, 0, 0);
/* Set cursor at 10s place of minute */
gtk_editable_set_position (GTK_EDITABLE (entry), SEPARATOR_INDEX + 1);
for (guint i = 1; i <= 61; i++)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_UP);
/* Wrap if above limit */
minute = i;
if (minute >= 60)
minute = minute - 60;
test_time (time_entry, 0, minute, TRUE);
}
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_set_position (GTK_EDITABLE (entry), SEPARATOR_INDEX + 1);
minute = 0;
for (int i = 61; i >= 0; i--)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_DOWN);
/* Wrap if below limit */
minute--;
if (minute < 0)
minute = 59;
test_time (time_entry, 0, minute, TRUE);
}
/* Put cursor at the minute ones place and repeat the tests */
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_set_position (GTK_EDITABLE (entry), SEPARATOR_INDEX + 2);
for (guint i = 1; i <= 61; i++)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_UP);
/* Wrap if above limit */
minute = i;
if (minute >= 60)
minute = minute - 60;
test_time (time_entry, 0, minute, TRUE);
}
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_set_position (GTK_EDITABLE (entry), SEPARATOR_INDEX + 2);
minute = 0;
for (int i = 61; i >= 0; i--)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_DOWN);
/* Wrap if below limit */
minute--;
if (minute < 0)
minute = 59;
test_time (time_entry, 0, minute, TRUE);
}
g_object_ref_sink (entry);
g_object_unref (entry);
}
static void
test_time_hour_12h (void)
{
GtkWidget *entry;
CcTimeEntry *time_entry;
int hour;
entry = cc_time_entry_new ();
time_entry = CC_TIME_ENTRY (entry);
g_assert (CC_IS_TIME_ENTRY (entry));
cc_time_entry_set_am_pm (time_entry, TRUE);
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_set_position (GTK_EDITABLE (entry), 0);
for (guint i = 1; i <= 14; i++)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_UP);
/* Wrap if above limit */
hour = i;
if (hour >= 12)
hour = hour - 12;
test_time (time_entry, hour, 0, FALSE);
}
cc_time_entry_set_time (time_entry, 0, 0);
hour = 12;
for (int i = 23; i >= 0; i--)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_DOWN);
/* Wrap if below limit */
hour--;
if (hour < 0)
hour = 11; /* Hour varies from 0 to 11 (0 is 12) */
test_time (time_entry, hour, 0, FALSE);
}
cc_time_entry_set_time (time_entry, 0, 0);
/* Put cursor at the ones place and repeat the tests */
gtk_editable_set_position (GTK_EDITABLE (entry), 1);
for (guint i = 1; i <= 14; i++)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_UP);
/* Wrap if above limit */
hour = i;
if (hour >= 12)
hour = hour - 12;
test_time (time_entry, hour, 0, FALSE);
}
cc_time_entry_set_time (time_entry, 0, 0);
hour = 0;
for (int i = 23; i >= 0; i--)
{
g_signal_emit_by_name (entry, "change-value", GTK_SCROLL_STEP_DOWN);
/* Wrap if below limit */
hour--;
if (hour < 0)
hour = 11; /* Hour varies from 0 to 11 (0 is 12) */
test_time (time_entry, hour, 0, FALSE);
}
g_object_ref_sink (entry);
g_object_unref (entry);
}
static void
test_time_insertion (void)
{
GtkWidget *entry;
CcTimeEntry *time_entry;
int position;
entry = cc_time_entry_new ();
time_entry = CC_TIME_ENTRY (entry);
g_assert (CC_IS_TIME_ENTRY (entry));
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_set_position (GTK_EDITABLE (entry), 0);
/* Test hour */
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = 0;
/* 00:00 */
gtk_editable_insert_text (GTK_EDITABLE (entry), "0", -1, &position);
test_time (time_entry, 0, 0, TRUE);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = 0;
/* 20:00 */
gtk_editable_insert_text (GTK_EDITABLE (entry), "2", -1, &position);
test_time (time_entry, 20, 0, TRUE);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = 0;
/* 30:00 => 23:00 */
gtk_editable_insert_text (GTK_EDITABLE (entry), "3", -1, &position);
test_time (time_entry, 23, 0, TRUE);
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = 1;
/* 09:00 */
gtk_editable_insert_text (GTK_EDITABLE (entry), "9", -1, &position);
test_time (time_entry, 9, 0, TRUE);
/* Test minute */
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = SEPARATOR_INDEX + 1;
/* 00:10 */
gtk_editable_insert_text (GTK_EDITABLE (entry), "1", -1, &position);
test_time (time_entry, 0, 10, TRUE);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = SEPARATOR_INDEX + 1;
/* 00:30 */
gtk_editable_insert_text (GTK_EDITABLE (entry), "3", -1, &position);
test_time (time_entry, 0, 30, TRUE);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = SEPARATOR_INDEX + 1;
/* 00:60 => 00:59 */
gtk_editable_insert_text (GTK_EDITABLE (entry), "6", -1, &position);
test_time (time_entry, 0, 59, TRUE);
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = SEPARATOR_INDEX + 2;
/* 00:00 */
gtk_editable_insert_text (GTK_EDITABLE (entry), "0", -1, &position);
test_time (time_entry, 0, 0, TRUE);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = SEPARATOR_INDEX + 2;
/* 00:01 */
gtk_editable_insert_text (GTK_EDITABLE (entry), "1", -1, &position);
test_time (time_entry, 0, 1, TRUE);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = SEPARATOR_INDEX + 2;
/* 00:09 */
gtk_editable_insert_text (GTK_EDITABLE (entry), "9", -1, &position);
test_time (time_entry, 0, 9, TRUE);
/* 12 Hour mode */
cc_time_entry_set_am_pm (time_entry, TRUE);
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = 0;
/* 12:00 AM */
gtk_editable_insert_text (GTK_EDITABLE (entry), "1", -1, &position);
/* 12 AM Hour in 12H mode is 00 Hour in 24H mode */
test_time (time_entry, 0, 0, FALSE);
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = 1;
/* 11:00 AM */
gtk_editable_insert_text (GTK_EDITABLE (entry), "1", -1, &position);
test_time (time_entry, 11, 0, FALSE);
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = 3;
/* 12:10 AM */
gtk_editable_insert_text (GTK_EDITABLE (entry), "1", -1, &position);
test_time (time_entry, 0, 10, FALSE);
cc_time_entry_set_time (time_entry, 0, 0);
gtk_editable_delete_text (GTK_EDITABLE (entry), 0, 1);
position = 4;
/* 12:09 AM */
gtk_editable_insert_text (GTK_EDITABLE (entry), "9", -1, &position);
test_time (time_entry, 0, 9, FALSE);
g_object_ref_sink (entry);
g_object_unref (entry);
}
int
main (int argc,
char **argv)
{
setlocale (LC_ALL, "");
g_test_init (&argc, &argv, NULL);
gtk_init (NULL, NULL);
g_setenv ("G_DEBUG", "fatal_warnings", FALSE);
g_test_add_func ("/datetime/time-24h", test_time_24h);
g_test_add_func ("/datetime/time-12h", test_time_12h);
g_test_add_func ("/datetime/time-hour-24h", test_time_hour_24h);
g_test_add_func ("/datetime/time-minute-24h", test_time_minute_24h);
g_test_add_func ("/datetime/time-hour-12h", test_time_hour_12h);
g_test_add_func ("/datetime/time-insertion", test_time_insertion);
return g_test_run ();
}