PIKApp/libpikacolor/test-color-parser.c

120 lines
3.8 KiB
C
Raw Normal View History

2023-09-26 00:35:21 +02:00
/* unit tests for the color parsing routines in pikargb-parse.c
*/
#include "config.h"
#include <stdlib.h>
#include <babl/babl.h>
#include <gegl.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <glib-object.h>
#include <cairo.h>
#include "pikacolor.h"
#define DBL(c) ((gdouble)(c) / 255.0)
typedef struct
{
const gchar *str;
gboolean alpha;
gboolean fail;
const gdouble r;
const gdouble g;
const gdouble b;
const gdouble a;
} ColorSample;
static const ColorSample samples[] =
{
/* sample alpha fail red green blue alpha */
{ "#000000", FALSE, FALSE, 0.0, 0.0, 0.0, 0.0 },
{ "#FFff00", FALSE, FALSE, 1.0, 1.0, 0.0, 0.0 },
{ "#6495ed", FALSE, FALSE, DBL(100), DBL(149), DBL(237), 0.0 },
{ "#fff", FALSE, FALSE, 1.0, 1.0, 1.0, 0.0 },
{ "#64649595eded", FALSE, FALSE, 1.0, 1.0, 0.0, 0.0 },
{ "rgb(0,0,0)", FALSE, FALSE, 0.0, 0.0, 0.0, 0.0 },
{ "rgb(100,149,237)", FALSE, FALSE, DBL(100), DBL(149), DBL(237), 0.0 },
{ "rgba(100%,0,100%,0.5)", TRUE, FALSE, 255.0, 0.0, 255.0, 0.5 },
{ "rgba(100%,0,100%,0.5)", FALSE, TRUE, 255.0, 0.0, 255.0, 0.5 },
{ "rgb(100%,149,20%)", FALSE, FALSE, 1.0, DBL(149), 0.2, 0.0 },
{ "rgb(100%,149,20%)", TRUE, TRUE, 1.0, DBL(149), 0.2, 0.0 },
{ "rgb(foobar)", FALSE, TRUE, 0.0, 0.0, 0.0, 0.0 },
{ "rgb(100,149,237", FALSE, TRUE, 0.0, 0.0, 0.0, 0.0 },
{ "rED", FALSE, FALSE, 1.0, 0.0, 0.0, 0.0 },
{ "cornflowerblue", FALSE, FALSE, DBL(100), DBL(149), DBL(237), 0.0 },
{ " red", FALSE, FALSE, 1.0, 0.0, 0.0, 0.0 },
{ "red ", FALSE, FALSE, 1.0, 0.0, 0.0, 0.0 },
{ "red", TRUE, TRUE, 1.0, 0.0, 0.0, 0.0 },
{ "red blue", FALSE, TRUE, 0.0, 0.0, 0.0, 0.0 },
{ "transparent", FALSE, TRUE, 0.0, 0.0, 0.0, 0.0 },
{ "transparent", TRUE, FALSE, 0.0, 0.0, 0.0, 0.0 },
{ "23foobar", FALSE, TRUE, 0.0, 0.0, 0.0, 0.0 },
{ "", FALSE, TRUE, 0.0, 0.0, 0.0, 0.0 }
};
static gint
check_failure (const ColorSample *sample,
gboolean success,
PikaRGB *rgb)
{
if (success && sample->fail)
{
g_print ("Parser succeeded for sample \"%s\" but should have failed!\n"
" parsed color: (%g, %g, %g, %g)\n",
sample->str, rgb->r, rgb->g, rgb->b, rgb->a);
return 1;
}
if (!success && !sample->fail)
{
g_print ("Parser failed for sample \"%s\" but should have succeeded!\n"
" parsed color: (%g, %g, %g, %g)\n",
sample->str, rgb->r, rgb->g, rgb->b, rgb->a);
return 1;
}
return 0;
}
int
main (void)
{
gint failures = 0;
gint i;
g_print ("\nTesting the PIKA color parser ...\n");
for (i = 0; i < G_N_ELEMENTS (samples); i++)
{
PikaRGB rgb = { 0.0, 0.0, 0.0, 0.0 };
gboolean success;
if (samples[i].alpha)
success = pika_rgba_parse_css (&rgb, samples[i].str, -1);
else
success = pika_rgb_parse_css (&rgb, samples[i].str, -1);
failures += check_failure (samples + i, success, &rgb);
}
if (failures)
{
g_print ("%d out of %d samples failed!\n\n",
failures, (int)G_N_ELEMENTS (samples));
return EXIT_FAILURE;
}
else
{
g_print ("All %d samples passed.\n\n", (int)G_N_ELEMENTS (samples));
return EXIT_SUCCESS;
}
}