/**
  * @dataProvider dataProvider
  */
 public function testExpression($assign, $src, $dst, $result)
 {
     try {
         $info = $this->cpl->compileExpression($src, $assign, Opt_Compiler_Class::ESCAPE_BOTH);
         if ($result == 0) {
             $this->assertEquals($dst, $info[0]);
             return true;
         }
         $this->fail('Exception NOT returned, but should be: ' . $result);
     } catch (Opt_Exception $e) {
         if ($result !== 0) {
             if ($result != get_class($e)) {
                 $this->fail('Invalid exception returned: #' . get_class($e) . ', ' . $result . ' expected.');
             }
             return true;
         }
         $this->fail('Exception returned: #' . get_class($e) . ': ' . $e->getMessage() . ' (line: ' . $e->getLine() . ')');
     }
 }