validate: Force LC_NUMERIC to C as it is required by our expression parser

And... add some expression parser unit tests
This commit is contained in:
Thibault Saunier 2019-02-04 13:18:04 -03:00 committed by Thibault Saunier
parent 394242c224
commit 53b2ca8f62
3 changed files with 57 additions and 1 deletions

View file

@ -29,6 +29,8 @@
# include "config.h"
#endif /* HAVE_CONFIG_H */
#include <locale.h> /* for LC_NUMERIC */
#include <string.h>
/* For g_stat () */
#include <glib/gstdio.h>
@ -301,6 +303,8 @@ gst_validate_init (void)
_priv_start_time = gst_util_get_timestamp ();
_Q_VALIDATE_MONITOR = g_quark_from_static_string ("validate-monitor");
setlocale (LC_NUMERIC, "C");
/* init the report system (can be called multiple times) */
gst_validate_report_init ();

View file

@ -4,7 +4,8 @@ validate_tests = [
['validate/monitoring'],
['validate/reporting'],
['validate/overrides'],
['validate/scenario']
['validate/scenario'],
['validate/expression_parser'],
]
test_defines = [

View file

@ -0,0 +1,51 @@
#include <gst/check/gstcheck.h>
#include <glib/gstdio.h>
#include <gst/validate/validate.h>
#include <gst/validate/gst-validate-utils.h>
static int
get_var (const gchar * name, double *value, gpointer udata)
{
*value = (double) GPOINTER_TO_INT (udata);
return 1;
}
GST_START_TEST (test_expression_parser)
{
fail_unless_equals_float (gst_validate_utils_parse_expression ("10 / 2", NULL,
NULL, NULL), 5.0);
fail_unless_equals_float (gst_validate_utils_parse_expression ("10 / 0.5",
NULL, NULL, NULL), 20);
fail_unless_equals_float (gst_validate_utils_parse_expression
("100, (10 / 0.1)", NULL, NULL, NULL), 1);
fail_unless_equals_float (gst_validate_utils_parse_expression
("min(10, (duration - 0.1) / 0.1)", get_var, GINT_TO_POINTER (1), NULL),
9);
}
GST_END_TEST;
static Suite *
gst_validate_suite (void)
{
Suite *s = suite_create ("registry");
TCase *tc_chain = tcase_create ("registry");
suite_add_tcase (s, tc_chain);
if (atexit (gst_validate_deinit) != 0) {
GST_ERROR ("failed to set gst_validate_deinit as exit function");
}
g_setenv ("GST_VALIDATE_REPORTING_DETAILS", "all", TRUE);
gst_validate_init ();
tcase_add_test (tc_chain, test_expression_parser);
gst_validate_deinit ();
return s;
}
GST_CHECK_MAIN (gst_validate);