@@ -104,6 +104,27 @@ describe('odata.parser grammar', function () {
104104 assert . equal ( ast . $filter . right . right . value , "Doe" ) ;
105105 } ) ;
106106
107+ it ( 'should parse multiple complex conditions in a $filter' , function ( ) {
108+
109+ var ast = parser . parse ( "$filter=Name eq 'John' and (LastName lt 'Doe' or LastName gt 'Aro')" ) ;
110+
111+ assert . equal ( ast . $filter . type , "and" ) ;
112+ assert . equal ( ast . $filter . left . type , "eq" ) ;
113+ assert . equal ( ast . $filter . left . left . type , "property" ) ;
114+ assert . equal ( ast . $filter . left . left . name , "Name" ) ;
115+ assert . equal ( ast . $filter . left . right . type , "literal" ) ;
116+ assert . equal ( ast . $filter . left . right . value , "John" ) ;
117+ assert . equal ( ast . $filter . right . type , "or" ) ;
118+ assert . equal ( ast . $filter . right . left . type , "lt" ) ;
119+ assert . equal ( ast . $filter . right . left . left . name , "LastName" ) ;
120+ assert . equal ( ast . $filter . right . left . right . type , "literal" ) ;
121+ assert . equal ( ast . $filter . right . left . right . value , "Doe" ) ;
122+ assert . equal ( ast . $filter . right . right . type , "gt" ) ;
123+ assert . equal ( ast . $filter . right . right . left . name , "LastName" ) ;
124+ assert . equal ( ast . $filter . right . right . right . type , "literal" ) ;
125+ assert . equal ( ast . $filter . right . right . right . value , "Aro" ) ;
126+ } ) ;
127+
107128 it ( 'should parse substringof $filter' , function ( ) {
108129
109130 var ast = parser . parse ( "$filter=substringof('nginx', Data)" ) ;
0 commit comments