1 /* $NetBSD: test_expr.c,v 1.1.1.1 2011/04/13 18:15:12 elric Exp $ */ 2 3 4 #include "hx_locl.h" 5 #include <err.h> 6 7 struct foo { 8 int val; 9 char *str; 10 } foo[] = { 11 { 0, "FALSE" }, 12 { 1, "TRUE" }, 13 { 0, "!TRUE" }, 14 { 0, "! TRUE" }, 15 { 0, "!\tTRUE" }, 16 { 0, "( FALSE AND FALSE )" }, 17 { 0, "( TRUE AND FALSE )" }, 18 { 1, "( TRUE AND TRUE )" }, 19 { 1, "( TRUE OR TRUE )" }, 20 { 1, "( TRUE OR FALSE )" }, 21 { 0, "( FALSE OR FALSE )" }, 22 { 1, "! ( FALSE OR FALSE )" }, 23 24 { 1, "\"foo\" TAILMATCH \"foo\"" }, 25 { 1, "\"foobar\" TAILMATCH \"bar\"" }, 26 { 0, "\"foobar\" TAILMATCH \"foo\"" }, 27 28 { 1, "\"foo\" == \"foo\"" }, 29 { 0, "\"foo\" == \"bar\"" }, 30 { 0, "\"foo\" != \"foo\"" }, 31 { 1, "\"foo\" != \"bar\"" }, 32 { 1, "%{variable} == \"foo\"" }, 33 { 0, "%{variable} == \"bar\"" }, 34 { 1, "%{context.variable} == \"foo\"" }, 35 { 0, "%{context.variable} == \"bar\"" }, 36 { 1, "\"foo\" IN ( \"bar\", \"foo\")" }, 37 { 0, "\"foo\" IN ( \"bar\", \"baz\")" }, 38 { 0, "\"bar\" IN %{context}" }, 39 { 1, "\"foo\" IN %{context}" }, 40 { 1, "\"variable\" IN %{context}" }, 41 42 { 1, "\"foo\" IN %{context} AND %{context.variable} == \"foo\"" } 43 }; 44 45 int 46 main(int argc, char **argv) 47 { 48 struct hx_expr *expr; 49 hx509_context context; 50 hx509_env env = NULL, env2 = NULL; 51 int val, i, ret; 52 53 #if 0 54 extern int yydebug; 55 yydebug = 1; 56 #endif 57 58 ret = hx509_context_init(&context); 59 if (ret) 60 errx(1, "hx509_context_init failed with %d", ret); 61 62 hx509_env_add(context, &env, "variable", "foo"); 63 hx509_env_add(context, &env2, "variable", "foo"); 64 hx509_env_add_binding(context, &env, "context", env2); 65 66 for (i = 0; i < sizeof(foo)/sizeof(foo[0]); i++) { 67 68 expr = _hx509_expr_parse(foo[i].str); 69 if (expr == NULL) 70 errx(1, "_hx509_expr_parse failed for %d: %s", i, foo[i].str); 71 72 val = _hx509_expr_eval(context, env, expr); 73 if (foo[i].val) { 74 if (val == 0) 75 errx(1, "_hx509_expr_eval not true when it should: %d: %s", 76 i, foo[i].str); 77 } else { 78 if (val) 79 errx(1, "_hx509_expr_eval true when it should not: %d: %s", 80 i, foo[i].str); 81 } 82 83 _hx509_expr_free(expr); 84 } 85 86 hx509_env_free(&env); 87 88 return 0; 89 } 90