From 3533c653c4dcc811052d3c61b93d45cf28de9f19 Mon Sep 17 00:00:00 2001 From: Chris Rienzo Date: Wed, 1 Jul 2015 11:30:39 -0400 Subject: [PATCH] FS-7752 [mod_rayo] increase maximum number of elements from 30 to 1024. This allows adhearsion to create large grammars to navigate IVR menus. --- src/mod/event_handlers/mod_rayo/srgs.c | 2 +- .../event_handlers/mod_rayo/test_srgs/main.c | 126 ++++++++++++++++++ 2 files changed, 127 insertions(+), 1 deletion(-) diff --git a/src/mod/event_handlers/mod_rayo/srgs.c b/src/mod/event_handlers/mod_rayo/srgs.c index eaa32a9992..5da3bce693 100644 --- a/src/mod/event_handlers/mod_rayo/srgs.c +++ b/src/mod/event_handlers/mod_rayo/srgs.c @@ -33,7 +33,7 @@ #include "srgs.h" #define MAX_RECURSION 100 -#define MAX_TAGS 30 +#define MAX_TAGS 1024 /** function to handle tag attributes */ typedef int (* tag_attribs_fn)(struct srgs_grammar *, char **); diff --git a/src/mod/event_handlers/mod_rayo/test_srgs/main.c b/src/mod/event_handlers/mod_rayo/test_srgs/main.c index 237e9edad3..a8f8a944f7 100644 --- a/src/mod/event_handlers/mod_rayo/test_srgs/main.c +++ b/src/mod/event_handlers/mod_rayo/test_srgs/main.c @@ -18,6 +18,79 @@ static const char *adhearsion_menu_grammar = " \n" "\n"; +static const char *adhearsion_large_menu_grammar = + "" + " \n" + " \n" + " 01\n" + " 15\n" + " 27\n" + " 39\n" + " 4715\n" + " 5716\n" + " 6717\n" + " 7718\n" + " 8719\n" + " 9720\n" + " 10721\n" + " 11722\n" + " 12723\n" + " 13724\n" + " 14725\n" + " 15726\n" + " 16727\n" + " 17728\n" + " 18729\n" + " 19730\n" + " 20731\n" + " 21732\n" + " 22733\n" + " 23734\n" + " 24735\n" + " 25736\n" + " 26737\n" + " 27738\n" + " 28739\n" + " 29740\n" + " 30741\n" + " 31742\n" + " 32743\n" + " 33744\n" + " 34745\n" + " 35746\n" + " 36747\n" + " 37748\n" + " 38749\n" + " 39750\n" + " 40751\n" + " 41752\n" + " 42753\n" + " 43754\n" + " 44755\n" + " 45756\n" + " 46757\n" + " 47758\n" + " 48759\n" + " 49760\n" + " 50761\n" + " 51762\n" + " 52763\n" + " 53764\n" + " 54765\n" + " 55766\n" + " 56767\n" + " 57768\n" + " 58769\n" + " 59770\n" + " 60771\n" + " 61772\n" + " 62773\n" + " 63774\n" + " 64775\n" + " \n" + " \n" + "\n"; + /** * Test matching against adhearsion menu grammar */ @@ -68,6 +141,58 @@ static void test_match_adhearsion_menu_grammar(void) srgs_parser_destroy(parser); } +/** + * Test matching against adhearsion menu grammar + */ +static void test_match_adhearsion_large_menu_grammar(void) +{ + struct srgs_parser *parser; + struct srgs_grammar *grammar; + const char *interpretation; + + parser = srgs_parser_new("1234"); + ASSERT_NOT_NULL((grammar = srgs_parse(parser, adhearsion_large_menu_grammar))); + + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "0", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_MATCH_END, srgs_grammar_match(grammar, "1", &interpretation)); + ASSERT_STRING_EQUALS("0", interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "2", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "3", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "4", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_MATCH_END, srgs_grammar_match(grammar, "5", &interpretation)); + ASSERT_STRING_EQUALS("1", interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "6", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_MATCH, srgs_grammar_match(grammar, "7", &interpretation)); + ASSERT_STRING_EQUALS("2", interpretation); + ASSERT_EQUALS(SMT_MATCH_END, srgs_grammar_match(grammar, "715", &interpretation)); + ASSERT_STRING_EQUALS("4", interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "8", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_MATCH_END, srgs_grammar_match(grammar, "9", &interpretation)); + ASSERT_STRING_EQUALS("3", interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "#", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "*", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "A", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "27", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "223", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_NO_MATCH, srgs_grammar_match(grammar, "0123456789*#", &interpretation)); + ASSERT_NULL(interpretation); + ASSERT_EQUALS(SMT_MATCH_END, srgs_grammar_match(grammar, "761", &interpretation)); + ASSERT_STRING_EQUALS("50", interpretation); + + srgs_parser_destroy(parser); +} + static const char *duplicate_tag_grammar = "" " \n" @@ -1088,6 +1213,7 @@ int main(int argc, char **argv) srgs_init(); TEST(test_parse_grammar); TEST(test_match_adhearsion_menu_grammar); + TEST(test_match_adhearsion_large_menu_grammar); TEST(test_match_duplicate_tag_grammar); TEST(test_match_adhearsion_ask_grammar); TEST(test_match_multi_digit_grammar);