Blame plugins/color/gcm-self-test.c

Packit 9ca0cf
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
Packit 9ca0cf
 *
Packit 9ca0cf
 * Copyright (C) 2007-2011 Richard Hughes <richard@hughsie.com>
Packit 9ca0cf
 *
Packit 9ca0cf
 * Licensed under the GNU General Public License Version 2
Packit 9ca0cf
 *
Packit 9ca0cf
 * This program is free software; you can redistribute it and/or modify
Packit 9ca0cf
 * it under the terms of the GNU General Public License as published by
Packit 9ca0cf
 * the Free Software Foundation; either version 2 of the License, or
Packit 9ca0cf
 * (at your option) any later version.
Packit 9ca0cf
 *
Packit 9ca0cf
 * This program is distributed in the hope that it will be useful,
Packit 9ca0cf
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 9ca0cf
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 9ca0cf
 * GNU General Public License for more details.
Packit 9ca0cf
 *
Packit 9ca0cf
 * You should have received a copy of the GNU General Public License
Packit 9ca0cf
 * along with this program; if not, write to the Free Software
Packit 9ca0cf
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Packit 9ca0cf
 */
Packit 9ca0cf
Packit 9ca0cf
#include "config.h"
Packit 9ca0cf
Packit 9ca0cf
#include <glib.h>
Packit 9ca0cf
#include <glib-object.h>
Packit 9ca0cf
#include <stdlib.h>
Packit 9ca0cf
Packit 9ca0cf
#include "gcm-edid.h"
Packit 9ca0cf
#include "gsd-color-state.h"
Packit 9ca0cf
#include "gsd-night-light.h"
Packit 9ca0cf
#include "gsd-night-light-common.h"
Packit 9ca0cf
Packit 9ca0cf
GMainLoop *mainloop;
Packit 9ca0cf
Packit 9ca0cf
static void
Packit 9ca0cf
on_notify (GsdNightLight *nlight,
Packit 9ca0cf
           GParamSpec      *pspec,
Packit 9ca0cf
           gpointer         user_data)
Packit 9ca0cf
{
Packit 9ca0cf
        guint *cnt = (guint *) user_data;
Packit 9ca0cf
        (*cnt)++;
Packit 9ca0cf
}
Packit 9ca0cf
Packit 9ca0cf
static gboolean
Packit 9ca0cf
quit_mainloop (gpointer user_data)
Packit 9ca0cf
{
Packit 9ca0cf
    g_main_loop_quit (mainloop);
Packit 9ca0cf
Packit 9ca0cf
    return FALSE;
Packit 9ca0cf
}
Packit 9ca0cf
Packit 9ca0cf
static void
Packit 9ca0cf
gcm_test_night_light (void)
Packit 9ca0cf
{
Packit 9ca0cf
        gboolean ret;
Packit 9ca0cf
        guint active_cnt = 0;
Packit 9ca0cf
        guint disabled_until_tmw_cnt = 0;
Packit 9ca0cf
        guint sunrise_cnt = 0;
Packit 9ca0cf
        guint sunset_cnt = 0;
Packit 9ca0cf
        guint temperature_cnt = 0;
Packit 9ca0cf
        g_autoptr(GDateTime) datetime_override = NULL;
Packit 9ca0cf
        g_autoptr(GError) error = NULL;
Packit 9ca0cf
        g_autoptr(GsdNightLight) nlight = NULL;
Packit 9ca0cf
        g_autoptr(GSettings) settings = NULL;
Packit 9ca0cf
Packit 9ca0cf
        nlight = gsd_night_light_new ();
Packit 9ca0cf
        g_assert (GSD_IS_NIGHT_LIGHT (nlight));
Packit 9ca0cf
        g_signal_connect (nlight, "notify::active",
Packit 9ca0cf
                          G_CALLBACK (on_notify), &active_cnt);
Packit 9ca0cf
        g_signal_connect (nlight, "notify::sunset",
Packit 9ca0cf
                          G_CALLBACK (on_notify), &sunset_cnt);
Packit 9ca0cf
        g_signal_connect (nlight, "notify::sunrise",
Packit 9ca0cf
                          G_CALLBACK (on_notify), &sunrise_cnt);
Packit 9ca0cf
        g_signal_connect (nlight, "notify::temperature",
Packit 9ca0cf
                          G_CALLBACK (on_notify), &temperature_cnt);
Packit 9ca0cf
        g_signal_connect (nlight, "notify::disabled-until-tmw",
Packit 9ca0cf
                          G_CALLBACK (on_notify), &disabled_until_tmw_cnt);
Packit 9ca0cf
Packit 9ca0cf
        /* hardcode a specific date and time */
Packit 9ca0cf
        datetime_override = g_date_time_new_utc (2017, 2, 8, 20, 0, 0);
Packit 9ca0cf
        gsd_night_light_set_date_time_now (nlight, datetime_override);
Packit 9ca0cf
Packit 9ca0cf
        /* do not start geoclue */
Packit 9ca0cf
        gsd_night_light_set_geoclue_enabled (nlight, FALSE);
Packit 9ca0cf
Packit 9ca0cf
        /* do not smooth the transition */
Packit 9ca0cf
        gsd_night_light_set_smooth_enabled (nlight, FALSE);
Packit 9ca0cf
Packit 9ca0cf
        /* switch off */
Packit 9ca0cf
        settings = g_settings_new ("org.gnome.settings-daemon.plugins.color");
Packit 9ca0cf
        g_settings_set_boolean (settings, "night-light-enabled", FALSE);
Packit 9ca0cf
        g_settings_set_uint (settings, "night-light-temperature", 4000);
Packit 9ca0cf
Packit 9ca0cf
        /* check default values */
Packit 9ca0cf
        g_assert (!gsd_night_light_get_active (nlight));
Packit 9ca0cf
        g_assert_cmpint ((gint) gsd_night_light_get_sunrise (nlight), ==, -1);
Packit 9ca0cf
        g_assert_cmpint ((gint) gsd_night_light_get_sunset (nlight), ==, -1);
Packit 9ca0cf
        g_assert_cmpint (gsd_night_light_get_temperature (nlight), ==, GSD_COLOR_TEMPERATURE_DEFAULT);
Packit 9ca0cf
        g_assert (!gsd_night_light_get_disabled_until_tmw (nlight));
Packit 9ca0cf
Packit 9ca0cf
        /* start module, disabled */
Packit 9ca0cf
        ret = gsd_night_light_start (nlight, &error);
Packit 9ca0cf
        g_assert_no_error (error);
Packit 9ca0cf
        g_assert (ret);
Packit 9ca0cf
        g_assert (!gsd_night_light_get_active (nlight));
Packit 9ca0cf
        g_assert_cmpint (active_cnt, ==, 0);
Packit 9ca0cf
        g_assert_cmpint (sunset_cnt, ==, 0);
Packit 9ca0cf
        g_assert_cmpint (sunrise_cnt, ==, 0);
Packit 9ca0cf
        g_assert_cmpint (temperature_cnt, ==, 0);
Packit 9ca0cf
        g_assert_cmpint (disabled_until_tmw_cnt, ==, 0);
Packit 9ca0cf
Packit 9ca0cf
        /* enable automatic mode */
Packit 9ca0cf
        g_settings_set_value (settings, "night-light-last-coordinates",
Packit 9ca0cf
                              g_variant_new ("(dd)", 51.5, -0.1278));
Packit 9ca0cf
        g_settings_set_boolean (settings, "night-light-schedule-automatic", TRUE);
Packit 9ca0cf
        g_settings_set_boolean (settings, "night-light-enabled", TRUE);
Packit 9ca0cf
        g_assert (gsd_night_light_get_active (nlight));
Packit 9ca0cf
        g_assert_cmpint (active_cnt, ==, 1);
Packit 9ca0cf
        g_assert_cmpint (sunset_cnt, ==, 1);
Packit 9ca0cf
        g_assert_cmpint (sunrise_cnt, ==, 1);
Packit 9ca0cf
        g_assert_cmpint (temperature_cnt, ==, 1);
Packit 9ca0cf
        g_assert_cmpint (disabled_until_tmw_cnt, ==, 0);
Packit 9ca0cf
        g_assert_cmpint ((gint) gsd_night_light_get_sunrise (nlight), ==, 7);
Packit 9ca0cf
        g_assert_cmpint ((gint) gsd_night_light_get_sunset (nlight), ==, 17);
Packit 9ca0cf
        g_assert_cmpint (gsd_night_light_get_temperature (nlight), ==, 4000);
Packit 9ca0cf
        g_assert (!gsd_night_light_get_disabled_until_tmw (nlight));
Packit 9ca0cf
Packit 9ca0cf
        /* disable for one day */
Packit 9ca0cf
        gsd_night_light_set_disabled_until_tmw (nlight, TRUE);
Packit 9ca0cf
        gsd_night_light_set_disabled_until_tmw (nlight, TRUE);
Packit 9ca0cf
        g_assert_cmpint (gsd_night_light_get_temperature (nlight), ==, GSD_COLOR_TEMPERATURE_DEFAULT);
Packit 9ca0cf
        g_assert (gsd_night_light_get_active (nlight));
Packit 9ca0cf
        g_assert (gsd_night_light_get_disabled_until_tmw (nlight));
Packit 9ca0cf
        g_assert_cmpint (temperature_cnt, ==, 2);
Packit 9ca0cf
        g_assert_cmpint (disabled_until_tmw_cnt, ==, 1);
Packit 9ca0cf
Packit 9ca0cf
        /* change our mind */
Packit 9ca0cf
        gsd_night_light_set_disabled_until_tmw (nlight, FALSE);
Packit 9ca0cf
        g_assert_cmpint (gsd_night_light_get_temperature (nlight), ==, 4000);
Packit 9ca0cf
        g_assert (gsd_night_light_get_active (nlight));
Packit 9ca0cf
        g_assert (!gsd_night_light_get_disabled_until_tmw (nlight));
Packit 9ca0cf
        g_assert_cmpint (active_cnt, ==, 1);
Packit 9ca0cf
        g_assert_cmpint (temperature_cnt, ==, 3);
Packit 9ca0cf
        g_assert_cmpint (disabled_until_tmw_cnt, ==, 2);
Packit 9ca0cf
Packit 9ca0cf
        /* enabled manual mode (night shift) */
Packit 9ca0cf
        g_settings_set_double (settings, "night-light-schedule-from", 4.0);
Packit 9ca0cf
        g_settings_set_double (settings, "night-light-schedule-to", 16.f);
Packit 9ca0cf
        g_settings_set_boolean (settings, "night-light-schedule-automatic", FALSE);
Packit 9ca0cf
        g_assert_cmpint (active_cnt, ==, 2);
Packit 9ca0cf
        g_assert_cmpint (sunset_cnt, ==, 1);
Packit 9ca0cf
        g_assert_cmpint (sunrise_cnt, ==, 1);
Packit 9ca0cf
        g_assert_cmpint (temperature_cnt, ==, 4);
Packit 9ca0cf
        g_assert_cmpint (disabled_until_tmw_cnt, ==, 2);
Packit 9ca0cf
        g_assert (!gsd_night_light_get_active (nlight));
Packit 9ca0cf
        g_assert_cmpint ((gint) gsd_night_light_get_sunrise (nlight), ==, 7);
Packit 9ca0cf
        g_assert_cmpint ((gint) gsd_night_light_get_sunset (nlight), ==, 17);
Packit 9ca0cf
        g_assert_cmpint (gsd_night_light_get_temperature (nlight), ==, GSD_COLOR_TEMPERATURE_DEFAULT);
Packit 9ca0cf
        g_assert (!gsd_night_light_get_disabled_until_tmw (nlight));
Packit 9ca0cf
Packit 9ca0cf
        /* disable, with no changes */
Packit 9ca0cf
        g_settings_set_boolean (settings, "night-light-enabled", FALSE);
Packit 9ca0cf
        g_assert (!gsd_night_light_get_active (nlight));
Packit 9ca0cf
        g_assert_cmpint (active_cnt, ==, 2);
Packit 9ca0cf
        g_assert_cmpint (sunset_cnt, ==, 1);
Packit 9ca0cf
        g_assert_cmpint (sunrise_cnt, ==, 1);
Packit 9ca0cf
        g_assert_cmpint (temperature_cnt, ==, 4);
Packit 9ca0cf
        g_assert_cmpint (disabled_until_tmw_cnt, ==, 2);
Packit 9ca0cf
Packit 9ca0cf
Packit 9ca0cf
        /* Finally, check that cancelling a smooth transition works */
Packit 9ca0cf
        gsd_night_light_set_smooth_enabled (nlight, TRUE);
Packit 9ca0cf
        /* Enable night light and automatic scheduling */
Packit 9ca0cf
        g_settings_set_boolean (settings, "night-light-schedule-automatic", TRUE);
Packit 9ca0cf
        g_settings_set_boolean (settings, "night-light-enabled", TRUE);
Packit 9ca0cf
        /* It should be active again, and a smooth transition is being done,
Packit 9ca0cf
         * so the color temperature is still the default at this point. */
Packit 9ca0cf
        g_assert (gsd_night_light_get_active (nlight));
Packit 9ca0cf
        g_assert_cmpint (gsd_night_light_get_temperature (nlight), ==, GSD_COLOR_TEMPERATURE_DEFAULT);
Packit 9ca0cf
Packit 9ca0cf
        /* Turn off immediately, before the first timeout event is fired. */
Packit 9ca0cf
        g_settings_set_boolean (settings, "night-light-schedule-automatic", FALSE);
Packit 9ca0cf
        g_settings_set_boolean (settings, "night-light-enabled", FALSE);
Packit 9ca0cf
        g_assert (!gsd_night_light_get_active (nlight));
Packit 9ca0cf
Packit 9ca0cf
        /* Now, sleep for a bit (the smooth transition time is 5 seconds) */
Packit 9ca0cf
        g_timeout_add (5000, quit_mainloop, NULL);
Packit 9ca0cf
        g_main_loop_run (mainloop);
Packit 9ca0cf
Packit 9ca0cf
        /* Ensure that the color temperature is still the default one.*/
Packit 9ca0cf
        g_assert_cmpint (gsd_night_light_get_temperature (nlight), ==, GSD_COLOR_TEMPERATURE_DEFAULT);
Packit 9ca0cf
Packit 9ca0cf
Packit 9ca0cf
        /* Check that disabled until tomorrow resets again correctly. */
Packit 9ca0cf
        g_settings_set_double (settings, "night-light-schedule-from", 17.0);
Packit 9ca0cf
        g_settings_set_double (settings, "night-light-schedule-to", 7.f);
Packit 9ca0cf
        g_settings_set_boolean (settings, "night-light-enabled", TRUE);
Packit 9ca0cf
        gsd_night_light_set_disabled_until_tmw (nlight, TRUE);
Packit 9ca0cf
Packit 9ca0cf
        /* Move time past midnight */
Packit 9ca0cf
        g_clear_pointer (&datetime_override, g_date_time_unref);
Packit 9ca0cf
        datetime_override = g_date_time_new_utc (2017, 2, 9, 1, 0, 0);
Packit 9ca0cf
        gsd_night_light_set_date_time_now (nlight, datetime_override);
Packit 9ca0cf
        g_assert_true (gsd_night_light_get_disabled_until_tmw (nlight));
Packit 9ca0cf
Packit 9ca0cf
        /* Move past sunrise */
Packit 9ca0cf
        g_clear_pointer (&datetime_override, g_date_time_unref);
Packit 9ca0cf
        datetime_override = g_date_time_new_utc (2017, 2, 9, 8, 0, 0);
Packit 9ca0cf
        gsd_night_light_set_date_time_now (nlight, datetime_override);
Packit 9ca0cf
        g_assert_false (gsd_night_light_get_disabled_until_tmw (nlight));
Packit 9ca0cf
Packit 9ca0cf
        gsd_night_light_set_disabled_until_tmw (nlight, TRUE);
Packit 9ca0cf
Packit 9ca0cf
        /* Move into night more than 24h in the future */
Packit 9ca0cf
        g_clear_pointer (&datetime_override, g_date_time_unref);
Packit 9ca0cf
        datetime_override = g_date_time_new_utc (2017, 2, 10, 20, 0, 0);
Packit 9ca0cf
        gsd_night_light_set_date_time_now (nlight, datetime_override);
Packit 9ca0cf
        g_assert_false (gsd_night_light_get_disabled_until_tmw (nlight));
Packit 9ca0cf
}
Packit 9ca0cf
Packit 9ca0cf
static const gboolean
Packit 9ca0cf
gcm_vendor_is_goldstar (const char * const vendor) {
Packit 9ca0cf
        if (g_strcmp0 (vendor, "Goldstar Company Ltd") == 0)
Packit 9ca0cf
                return TRUE;
Packit 9ca0cf
        /* Goldstar was changed to LG in hwdb (systemd) 240.
Packit 9ca0cf
         * https://github.com/systemd/systemd/commit/c6d7a5e9a3836f8
Packit 9ca0cf
         */
Packit 9ca0cf
        if (g_strcmp0 (vendor, "LG Electronics") == 0)
Packit 9ca0cf
                return TRUE;
Packit 9ca0cf
        return FALSE;
Packit 9ca0cf
}
Packit 9ca0cf
Packit 9ca0cf
static void
Packit 9ca0cf
gcm_test_edid_func (void)
Packit 9ca0cf
{
Packit 9ca0cf
        GcmEdid *edid;
Packit 9ca0cf
        gchar *data;
Packit 9ca0cf
        gboolean ret;
Packit 9ca0cf
        GError *error = NULL;
Packit 9ca0cf
        gsize length = 0;
Packit 9ca0cf
Packit 9ca0cf
        edid = gcm_edid_new ();
Packit 9ca0cf
        g_assert (edid != NULL);
Packit 9ca0cf
Packit 9ca0cf
        /* LG 21" LCD panel */
Packit 9ca0cf
        ret = g_file_get_contents (TESTDATADIR "/LG-L225W-External.bin",
Packit 9ca0cf
                                   &data, &length, &error);
Packit 9ca0cf
        g_assert_no_error (error);
Packit 9ca0cf
        g_assert (ret);
Packit 9ca0cf
        ret = gcm_edid_parse (edid, (const guint8 *) data, length, &error);
Packit 9ca0cf
        g_assert_no_error (error);
Packit 9ca0cf
        g_assert (ret);
Packit 9ca0cf
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_monitor_name (edid), ==, "L225W");
Packit 9ca0cf
        g_assert_true (gcm_vendor_is_goldstar (gcm_edid_get_vendor_name (edid)));
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_serial_number (edid), ==, "34398");
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_eisa_id (edid), ==, NULL);
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_checksum (edid), ==, "0bb44865bb29984a4bae620656c31368");
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_pnp_id (edid), ==, "GSM");
Packit 9ca0cf
        g_assert_cmpint (gcm_edid_get_height (edid), ==, 30);
Packit 9ca0cf
        g_assert_cmpint (gcm_edid_get_width (edid), ==, 47);
Packit 9ca0cf
        g_assert_cmpfloat (gcm_edid_get_gamma (edid), >=, 2.2f - 0.01);
Packit 9ca0cf
        g_assert_cmpfloat (gcm_edid_get_gamma (edid), <, 2.2f + 0.01);
Packit 9ca0cf
        g_free (data);
Packit 9ca0cf
Packit 9ca0cf
        /* Lenovo T61 internal Panel */
Packit 9ca0cf
        ret = g_file_get_contents (TESTDATADIR "/Lenovo-T61-Internal.bin",
Packit 9ca0cf
                                   &data, &length, &error);
Packit 9ca0cf
        g_assert_no_error (error);
Packit 9ca0cf
        g_assert (ret);
Packit 9ca0cf
        ret = gcm_edid_parse (edid, (const guint8 *) data, length, &error);
Packit 9ca0cf
        g_assert_no_error (error);
Packit 9ca0cf
        g_assert (ret);
Packit 9ca0cf
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_monitor_name (edid), ==, NULL);
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_vendor_name (edid), ==, "IBM Brasil");
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_serial_number (edid), ==, NULL);
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_eisa_id (edid), ==, "LTN154P2-L05");
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_checksum (edid), ==, "e1865128c7cd5e5ed49ecfc8102f6f9c");
Packit 9ca0cf
        g_assert_cmpstr (gcm_edid_get_pnp_id (edid), ==, "IBM");
Packit 9ca0cf
        g_assert_cmpint (gcm_edid_get_height (edid), ==, 21);
Packit 9ca0cf
        g_assert_cmpint (gcm_edid_get_width (edid), ==, 33);
Packit 9ca0cf
        g_assert_cmpfloat (gcm_edid_get_gamma (edid), >=, 2.2f - 0.01);
Packit 9ca0cf
        g_assert_cmpfloat (gcm_edid_get_gamma (edid), <, 2.2f + 0.01);
Packit 9ca0cf
        g_free (data);
Packit 9ca0cf
Packit 9ca0cf
        g_object_unref (edid);
Packit 9ca0cf
}
Packit 9ca0cf
Packit 9ca0cf
static void
Packit 9ca0cf
gcm_test_sunset_sunrise (void)
Packit 9ca0cf
{
Packit 9ca0cf
        gdouble sunrise;
Packit 9ca0cf
        gdouble sunrise_actual = 7.6;
Packit 9ca0cf
        gdouble sunset;
Packit 9ca0cf
        gdouble sunset_actual = 16.8;
Packit 9ca0cf
        g_autoptr(GDateTime) dt = g_date_time_new_utc (2007, 2, 1, 0, 0, 0);
Packit 9ca0cf
Packit 9ca0cf
        /* get for London, today */
Packit 9ca0cf
        gsd_night_light_get_sunrise_sunset (dt, 51.5, -0.1278, &sunrise, &sunset);
Packit 9ca0cf
        g_assert_cmpfloat (sunrise, <, sunrise_actual + 0.1);
Packit 9ca0cf
        g_assert_cmpfloat (sunrise, >, sunrise_actual - 0.1);
Packit 9ca0cf
        g_assert_cmpfloat (sunset, <, sunset_actual + 0.1);
Packit 9ca0cf
        g_assert_cmpfloat (sunset, >, sunset_actual - 0.1);
Packit 9ca0cf
}
Packit 9ca0cf
Packit 9ca0cf
static void
Packit 9ca0cf
gcm_test_sunset_sunrise_fractional_timezone (void)
Packit 9ca0cf
{
Packit 9ca0cf
        gdouble sunrise;
Packit 9ca0cf
        gdouble sunrise_actual = 7.6 + 1.5;
Packit 9ca0cf
        gdouble sunset;
Packit 9ca0cf
        gdouble sunset_actual = 16.8 + 1.5;
Packit 9ca0cf
        g_autoptr(GTimeZone) tz = NULL;
Packit 9ca0cf
        g_autoptr(GDateTime) dt = NULL;
Packit 9ca0cf
Packit 9ca0cf
        tz = g_time_zone_new ("+01:30");
Packit 9ca0cf
        dt = g_date_time_new (tz, 2007, 2, 1, 0, 0, 0);
Packit 9ca0cf
Packit 9ca0cf
        /* get for our made up timezone, today */
Packit 9ca0cf
        gsd_night_light_get_sunrise_sunset (dt, 51.5, -0.1278, &sunrise, &sunset);
Packit 9ca0cf
        g_assert_cmpfloat (sunrise, <, sunrise_actual + 0.1);
Packit 9ca0cf
        g_assert_cmpfloat (sunrise, >, sunrise_actual - 0.1);
Packit 9ca0cf
        g_assert_cmpfloat (sunset, <, sunset_actual + 0.1);
Packit 9ca0cf
        g_assert_cmpfloat (sunset, >, sunset_actual - 0.1);
Packit 9ca0cf
}
Packit 9ca0cf
Packit 9ca0cf
static void
Packit 9ca0cf
gcm_test_frac_day (void)
Packit 9ca0cf
{
Packit 9ca0cf
        g_autoptr(GDateTime) dt = g_date_time_new_utc (2007, 2, 1, 12, 59, 59);
Packit 9ca0cf
        gdouble fd;
Packit 9ca0cf
        gdouble fd_actual = 12.99;
Packit 9ca0cf
Packit 9ca0cf
        /* test for 12:59:59 */
Packit 9ca0cf
        fd = gsd_night_light_frac_day_from_dt (dt);
Packit 9ca0cf
        g_assert_cmpfloat (fd, >, fd_actual - 0.01);
Packit 9ca0cf
        g_assert_cmpfloat (fd, <, fd_actual + 0.01);
Packit 9ca0cf
Packit 9ca0cf
        /* test same day */
Packit 9ca0cf
        g_assert (gsd_night_light_frac_day_is_between (12, 6, 20));
Packit 9ca0cf
        g_assert (!gsd_night_light_frac_day_is_between (5, 6, 20));
Packit 9ca0cf
        g_assert (gsd_night_light_frac_day_is_between (12, 0, 24));
Packit 9ca0cf
        g_assert (gsd_night_light_frac_day_is_between (12, -1, 25));
Packit 9ca0cf
Packit 9ca0cf
        /* test rollover to next day */
Packit 9ca0cf
        g_assert (gsd_night_light_frac_day_is_between (23, 20, 6));
Packit 9ca0cf
        g_assert (!gsd_night_light_frac_day_is_between (12, 20, 6));
Packit 9ca0cf
Packit 9ca0cf
        /* test rollover to the previous day */
Packit 9ca0cf
        g_assert (gsd_night_light_frac_day_is_between (5, 16, 8));
Packit 9ca0cf
}
Packit 9ca0cf
Packit 9ca0cf
int
Packit 9ca0cf
main (int argc, char **argv)
Packit 9ca0cf
{
Packit 9ca0cf
        g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
Packit 9ca0cf
Packit 9ca0cf
        g_test_init (&argc, &argv, NULL);
Packit 9ca0cf
Packit 9ca0cf
        mainloop = g_main_loop_new (g_main_context_default (), FALSE);
Packit 9ca0cf
Packit 9ca0cf
        g_test_add_func ("/color/edid", gcm_test_edid_func);
Packit 9ca0cf
        g_test_add_func ("/color/sunset-sunrise", gcm_test_sunset_sunrise);
Packit 9ca0cf
        g_test_add_func ("/color/sunset-sunrise/fractional-timezone", gcm_test_sunset_sunrise_fractional_timezone);
Packit 9ca0cf
        g_test_add_func ("/color/fractional-day", gcm_test_frac_day);
Packit 9ca0cf
        g_test_add_func ("/color/night-light", gcm_test_night_light);
Packit 9ca0cf
Packit 9ca0cf
        return g_test_run ();
Packit 9ca0cf
}
Packit 9ca0cf