Repository: nifi-minifi-cpp Updated Branches: refs/heads/master e69b20aff -> 1ec799039
MINIFICPP-476 Added support for literal true/false values This closes #329. Signed-off-by: Marc Parisi <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/commit/1ec79903 Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/1ec79903 Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/1ec79903 Branch: refs/heads/master Commit: 1ec799039b2157d76daef83d06211edace80294c Parents: e69b20a Author: Andrew I. Christianson <[email protected]> Authored: Mon May 14 15:02:28 2018 -0400 Committer: Marc Parisi <[email protected]> Committed: Mon May 14 20:39:46 2018 -0400 ---------------------------------------------------------------------- extensions/expression-language/Parser.yy | 6 ++++++ extensions/expression-language/Scanner.ll | 10 ++++++++++ .../ExpressionLanguageTests.cpp | 16 ++++++++++++++++ 3 files changed, 32 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1ec79903/extensions/expression-language/Parser.yy ---------------------------------------------------------------------- diff --git a/extensions/expression-language/Parser.yy b/extensions/expression-language/Parser.yy index 9e4cab2..df84ef8 100644 --- a/extensions/expression-language/Parser.yy +++ b/extensions/expression-language/Parser.yy @@ -84,6 +84,8 @@ DQUOTE "\"" ; +%token <std::string> TRUE "true" +%token <std::string> FALSE "false" %token <std::string> IDENTIFIER "identifier" %token <std::string> MISC "misc" %token <std::string> WHITESPACE "whitespace" @@ -128,6 +130,8 @@ text_no_quote_no_dollar: IDENTIFIER { std::swap($$, $1); } | PIPE { $$ = "|"; } | COMMA { $$ = ","; } | COLON { $$ = ":"; } + | TRUE { $$ = std::string("true"); } + | FALSE { $$ = std::string("false"); } | SEMI { $$ = ";"; } | FSLASH { $$ = "/"; } | STAR { $$ = "*"; } @@ -179,6 +183,8 @@ attr_id: quoted_text exp_whitespaces { std::swap($$, $1); } fn_arg: quoted_text exp_whitespaces { $$ = make_static($1); } | NUMBER exp_whitespaces { $$ = make_static($1); } + | TRUE { $$ = Expression(Value(true)); } + | FALSE { $$ = Expression(Value(false)); } | exp exp_whitespaces { $$ = $1; } ; http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1ec79903/extensions/expression-language/Scanner.ll ---------------------------------------------------------------------- diff --git a/extensions/expression-language/Scanner.ll b/extensions/expression-language/Scanner.ll index 2d60ad4..a23689d 100644 --- a/extensions/expression-language/Scanner.ll +++ b/extensions/expression-language/Scanner.ll @@ -76,6 +76,16 @@ whitespace [ \r\t]+ return Parser::token::TOK_NUMBER; } +"true" { + yylval->build<std::string>(yytext); + return Parser::token::TOK_TRUE; +} + +"false" { + yylval->build<std::string>(yytext); + return Parser::token::TOK_FALSE; +} + {id} { yylval->build<std::string>(yytext); return Parser::token::TOK_IDENTIFIER; http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1ec79903/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp ---------------------------------------------------------------------- diff --git a/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp b/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp index 3d99fd0..7d98644 100644 --- a/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp +++ b/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp @@ -769,6 +769,22 @@ TEST_CASE("Chained call 3", "[expressionChainedCall3]") { // NOLINT REQUIRE("238" == expr({flow_file_a}).asString()); } +TEST_CASE("LiteralBool", "[expressionLiteralBool]") { // NOLINT + auto expr = expression::compile("${literal(true)}"); + + auto flow_file_a = std::make_shared<MockFlowFile>(); + flow_file_a->addAttribute("attr", "7"); + REQUIRE(true == expr({flow_file_a}).asBoolean()); +} + +TEST_CASE("LiteralBool 2", "[expressionLiteralBool2]") { // NOLINT + auto expr = expression::compile("${literal(false)}"); + + auto flow_file_a = std::make_shared<MockFlowFile>(); + flow_file_a->addAttribute("attr", "7"); + REQUIRE(false == expr({flow_file_a}).asBoolean()); +} + TEST_CASE("Is Null", "[expressionIsNull]") { // NOLINT auto expr = expression::compile("${filename:isNull()}");
