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()}");
 

Reply via email to