@@ -26,7 +26,7 @@ void TestEscapeAssertionFn(const std::string& s, const std::string& res){
2626 ASSERT_EQ (my_res, res);
2727}
2828
29- TEST (TestModel , TestEscapeAssertion) {
29+ TEST (TestUtil , TestEscapeAssertion) {
3030 TestEscapeAssertionFn (" r.attr.value == p.attr" , " r_attr.value == p_attr" );
3131 TestEscapeAssertionFn (" r.attp.value || p.attr" , " r_attp.value || p_attr" );
3232 TestEscapeAssertionFn (" r.attp.value &&p.attr" , " r_attp.value &&p_attr" );
@@ -47,7 +47,7 @@ void TestRemoveCommentsFn(const std::string& s, const std::string& res) {
4747 ASSERT_EQ (my_res, res);
4848}
4949
50- TEST (TestModel , TestRemoveComments) {
50+ TEST (TestUtil , TestRemoveComments) {
5151 TestRemoveCommentsFn (" r.act == p.act # comments" , " r.act == p.act" );
5252 TestRemoveCommentsFn (" r.act == p.act#comments" , " r.act == p.act" );
5353 TestRemoveCommentsFn (" r.act == p.act###" , " r.act == p.act" );
@@ -60,11 +60,42 @@ void TestArrayEqualsFn(const std::vector<std::string>& a, const std::vector<std:
6060 ASSERT_EQ (my_res, res);
6161}
6262
63- TEST (TestModel , TestArrayEquals) {
63+ TEST (TestUtil , TestArrayEquals) {
6464 TestArrayEqualsFn ({" a" , " b" , " c" }, {" a" , " b" , " c" }, true );
6565 TestArrayEqualsFn ({" a" , " b" , " c" }, {" a" , " b" }, false );
6666 TestArrayEqualsFn ({" a" , " b" , " c" }, {" a" , " c" , " b" }, true );
6767 TestArrayEqualsFn ({" a" , " b" , " c" }, {}, false );
6868}
6969
70+ void testContainEval (std::string s, bool res) {
71+ ASSERT_EQ (casbin::HasEval (s), res);
72+ }
73+
74+ TEST (TestUtil, TestContainEval) {
75+ testContainEval (" eval() && a && b && c" , true );
76+ testContainEval (" eval) && a && b && c" , false );
77+ testContainEval (" eval)( && a && b && c" , false );
78+ testContainEval (" eval(c * (a + b)) && a && b && c" , true );
79+ testContainEval (" xeval() && a && b && c" , false );
80+ }
81+
82+ void testReplaceEvalWithMap (std::string s, std::unordered_map<std::string, std::string> sets, std::string res) {
83+ ASSERT_EQ (casbin::ReplaceEvalWithMap (s, sets), res);
84+ }
85+
86+ TEST (TestUtil, TestReplaceEvalWithMap) {
87+ testReplaceEvalWithMap (" eval(rule1)" , {{" rule1" , " a == b" }}, " a == b" );
88+ testReplaceEvalWithMap (" eval(rule1) && c && d" , {{" rule1" , " a == b" }}, " a == b && c && d" );
89+ testReplaceEvalWithMap (" eval(rule1)" , {{}}, " eval(rule1)" );
90+ testReplaceEvalWithMap (" eval(rule1) && c && d" , {{}}, " eval(rule1) && c && d" );
91+ testReplaceEvalWithMap (" eval(rule1) || eval(rule2)" , {{" rule1" , " a == b" }, {" rule2" , " a == c" }}, " a == b || a == c" );
92+ testReplaceEvalWithMap (" eval(rule1) || eval(rule2) && c && d" , {{" rule1" , " a == b" }, {" rule2" , " a == c" }}, " a == b || a == c && c && d" );
93+ testReplaceEvalWithMap (" eval(rule1) || eval(rule2)" , {{" rule1" , " a == b" }}, " a == b || eval(rule2)" );
94+ testReplaceEvalWithMap (" eval(rule1) || eval(rule2) && c && d" , {{" rule1" , " a == b" }}, " a == b || eval(rule2) && c && d" );
95+ testReplaceEvalWithMap (" eval(rule1) || eval(rule2)" , {{" rule2" , " a == b" }}, " eval(rule1) || a == b" );
96+ testReplaceEvalWithMap (" eval(rule1) || eval(rule2) && c && d" , {{" rule2" , " a == b" }}, " eval(rule1) || a == b && c && d" );
97+ testReplaceEvalWithMap (" eval(rule1) || eval(rule2)" , {}, " eval(rule1) || eval(rule2)" );
98+ testReplaceEvalWithMap (" eval(rule1) || eval(rule2) && c && d" , {}, " eval(rule1) || eval(rule2) && c && d" );
99+ }
100+
70101} // namespace
0 commit comments