validate: Force LC_NUMERIC to C as it is required by our expression parser
authorThibault Saunier <tsaunier@igalia.com>
Mon, 4 Feb 2019 16:18:04 +0000 (13:18 -0300)
committerThibault Saunier <tsaunier@gnome.org>
Fri, 15 Feb 2019 14:19:03 +0000 (14:19 +0000)
And... add some expression parser unit tests

validate/gst/validate/validate.c
validate/tests/check/meson.build
validate/tests/check/validate/expression_parser.c [new file with mode: 0644]

index 61ee313..82599f2 100644 (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 ();
 
index 471a673..5956213 100644 (file)
@@ -4,7 +4,8 @@ validate_tests = [
   ['validate/monitoring'],
   ['validate/reporting'],
   ['validate/overrides'],
-  ['validate/scenario']
+  ['validate/scenario'],
+  ['validate/expression_parser'],
 ]
 
 test_defines = [
diff --git a/validate/tests/check/validate/expression_parser.c b/validate/tests/check/validate/expression_parser.c
new file mode 100644 (file)
index 0000000..76a8f2f
--- /dev/null
@@ -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);