-.5e+1+4 or not empty cur_id['empty_str']&&!top_id.null_attr"; $this->input = 'osx:parseJson(osx:urlDecode(osx:urlEncode(osx:decodeBase64("' . $encoded_json . '"))))' . '.array_attr[' . $attr_equ . "?0:1" . "]==1?(true?'no_prefix_id.Ee <= 0':" . '"\'should never be here\' \\\\\\""' . "):'no_prefix_id.Ee > 0'"; $this->tokenStream = array( new Token(ExpType::$FUNCTION, 'osx:parseJson'), new Token(ExpType::$PAREN, '('), new Token(ExpType::$FUNCTION, 'osx:urlDecode'), new Token(ExpType::$PAREN, '('), new Token(ExpType::$FUNCTION, 'osx:urlEncode'), new Token(ExpType::$PAREN, '('), new Token(ExpType::$FUNCTION, 'osx:decodeBase64'), new Token(ExpType::$PAREN, '('), new Token(ExpType::$STRING, 'eyJhcnJheV9hdHRyIjogWzAsIDFdfQ=='), new Token(ExpType::$PAREN, ')'), new Token(ExpType::$PAREN, ')'), new Token(ExpType::$PAREN, ')'), new Token(ExpType::$PAREN, ')'), new Token(ExpType::$DOT, '.'), new Token(ExpType::$IDENTITY, 'array_attr'), new Token(ExpType::$PAREN, '['), new Token(ExpType::$IDENTITY, 'no_prefix_id'), new Token(ExpType::$DOT, '.'), new Token(ExpType::$IDENTITY, 'Ee'), new Token(ExpType::$BINARY_OP, '+'), new Token(ExpType::$UNARY_OP, ' -'), new Token(ExpType::$UNARY_OP, ' -'), new Token(ExpType::$UNARY_OP, ' -'), new Token(ExpType::$PAREN, '('), new Token(ExpType::$PAREN, '('), new Token(ExpType::$INT, 2), new Token(ExpType::$BINARY_OP, ' - '), new Token(ExpType::$INT, 1), new Token(ExpType::$PAREN, ')'), new Token(ExpType::$BINARY_OP, '*'), new Token(ExpType::$PAREN, '('), new Token(ExpType::$FLOAT, 4.0), new Token(ExpType::$BINARY_OP, ' - '), new Token(ExpType::$INT, 3), new Token(ExpType::$PAREN, ')'), new Token(ExpType::$BINARY_OP, ' - '), new Token(ExpType::$FLOAT, 1.0), new Token(ExpType::$BINARY_OP, '/'), new Token(ExpType::$INT, 2), new Token(ExpType::$BINARY_OP, '+'), new Token(ExpType::$FLOAT, 0.5), new Token(ExpType::$PAREN, ')'), new Token(ExpType::$BINARY_OP, '>'), new Token(ExpType::$UNARY_OP, ' -'), new Token(ExpType::$FLOAT, 5.0), new Token(ExpType::$BINARY_OP, '+'), new Token(ExpType::$INT, 4), new Token(ExpType::$BINARY_OP, '||'), new Token(ExpType::$UNARY_OP, '!'), new Token(ExpType::$UNARY_OP, 'empty'), new Token(ExpType::$IDENTITY, 'cur_id'), new Token(ExpType::$PAREN, '['), new Token(ExpType::$STRING, 'empty_str'), new Token(ExpType::$PAREN, ']'), new Token(ExpType::$BINARY_OP, '&&'), new Token(ExpType::$UNARY_OP, '!'), new Token(ExpType::$IDENTITY, 'top_id'), new Token(ExpType::$DOT, '.'), new Token(ExpType::$IDENTITY, 'null_attr'), new Token(ExpType::$TERNARY, '?'), new Token(ExpType::$INT, 0), new Token(ExpType::$TERNARY, ':'), new Token(ExpType::$INT, 1), new Token(ExpType::$PAREN, ']'), new Token(ExpType::$BINARY_OP, '=='), new Token(ExpType::$INT, 1), new Token(ExpType::$TERNARY, '?'), new Token(ExpType::$PAREN, '('), new Token(ExpType::$BOOL, true), new Token(ExpType::$TERNARY, '?'), new Token(ExpType::$STRING, 'no_prefix_id.Ee <= 0'), new Token(ExpType::$TERNARY, ':'), new Token(ExpType::$STRING, '\'should never be here\' \\"'), new Token(ExpType::$PAREN, ')'), new Token(ExpType::$TERNARY, ':'), new Token(ExpType::$STRING, 'no_prefix_id.Ee > 0') ); $no_prefix_id = new ObjEe(); $no_prefix_id->Ee = 1; // change this number to see the difference $cur_id = array('empty_str' => ''); $top_id = (object)'empty_object'; $this->dataContext = array( 'no_prefix_id' => $no_prefix_id, 'Cur' => array('cur_id' => $cur_id), 'My' => array(), 'Top' => array('top_id' => $top_id) ); } /** * Cleans up the environment after running a test. */ protected function tearDown() { parent::tearDown(); } /** * Tests ExpLexer::process */ public function testProcess() { $actualTokenStream = ExpLexer::process($this->input); $this->assertEquals($this->tokenStream, $actualTokenStream); } /** * Tests ExpParser::parse */ public function testParse() { $this->dataContext['no_prefix_id']->Ee = 1; $actualResult = ExpParser::parse($this->tokenStream, $this->dataContext); $this->assertEquals(new Token(ExpType::$STRING, 'no_prefix_id.Ee > 0'), $actualResult); $this->dataContext['no_prefix_id']->Ee = -1; $actualResult = ExpParser::parse($this->tokenStream, $this->dataContext); $this->assertEquals(new Token(ExpType::$STRING, 'no_prefix_id.Ee <= 0'), $actualResult); } /** * Tests ExpressionParser::evaluate */ public function testEvaluate() { $actualOutput = ExpressionParser::evaluate($this->input, $this->dataContext); // Expected result $this->assertEquals('no_prefix_id.Ee > 0', $actualOutput); } }