コード例 #1
0
 public function testIntegerResults()
 {
     $expression = new ExpressionResult(new Token(Token::TYPE_INTEGER, 3));
     $this->assertTrue($expression->isModifier());
     $expression->add(new ExpressionResult(2));
     $this->assertSame(5, $expression->getValue());
     $expression->subtract(new ExpressionResult(3));
     $this->assertSame(2, $expression->getValue());
 }
コード例 #2
0
 /**
  * @param int $days
  * @param ExpressionResult $expression
  */
 protected function assertExpressionModifierSame($days, ExpressionResult $expression)
 {
     $this->assertTrue($expression->isModifier(), 'Expression result should be an integer value.');
     $this->assertSame($days, $expression->getValue(), sprintf("Expression value is '%s'\n The current time is %s.", $expression->getValue(), date('c')));
 }
コード例 #3
0
ファイル: ExpressionResult.php プロジェクト: Maksold/platform
 /**
  * @param ExpressionResult $value
  *
  * @throws SyntaxException
  * @return ExpressionResult
  */
 public function subtract(ExpressionResult $value)
 {
     if (!$this->isModifier()) {
         /** @var Carbon $dateValue */
         $dateValue = $this->getValue();
         switch ($this->getVariableType()) {
             case DateModifierInterface::VAR_NOW:
             case DateModifierInterface::VAR_TODAY:
             case DateModifierInterface::VAR_THIS_DAY:
             case DateModifierInterface::VAR_SOW:
             case DateModifierInterface::VAR_SOM:
             case DateModifierInterface::VAR_SOQ:
             case DateModifierInterface::VAR_SOY:
             case DateModifierInterface::VAR_FDQ:
                 $dateValue->subDays($value->getValue());
                 break;
             case DateModifierInterface::VAR_THIS_WEEK:
                 $dateValue->subWeeks($value->getValue());
                 break;
             case DateModifierInterface::VAR_FMQ:
             case DateModifierInterface::VAR_THIS_MONTH:
                 $dateValue->subMonths($value->getValue());
                 break;
             case DateModifierInterface::VAR_THIS_QUARTER:
                 $dateValue->month(($dateValue->quarter - $value->getValue()) * 3);
                 break;
             case DateModifierInterface::VAR_THIS_YEAR:
                 $dateValue->subYears($value->getValue());
                 break;
             default:
                 throw new ExpressionDenied($this->getVariableLabel());
                 break;
         }
     } elseif (!$value->isModifier()) {
         switch ($value->getVariableType()) {
             case DateModifierInterface::VAR_NOW:
             case DateModifierInterface::VAR_TODAY:
             case DateModifierInterface::VAR_THIS_DAY:
             case DateModifierInterface::VAR_SOW:
             case DateModifierInterface::VAR_SOM:
             case DateModifierInterface::VAR_SOQ:
             case DateModifierInterface::VAR_SOY:
             case DateModifierInterface::VAR_FDQ:
                 $this->value -= $value->getValue()->day;
                 break;
             case DateModifierInterface::VAR_THIS_WEEK:
                 $this->value -= $value->getValue()->format('W');
                 break;
             case DateModifierInterface::VAR_FMQ:
             case DateModifierInterface::VAR_THIS_MONTH:
                 $this->value -= $value->getValue()->month;
                 break;
             case DateModifierInterface::VAR_THIS_QUARTER:
                 $this->value -= $value->getValue()->quarter;
                 break;
             case DateModifierInterface::VAR_THIS_YEAR:
                 $this->value -= $value->getValue()->year;
                 break;
             default:
                 throw new ExpressionDenied($value->getVariableLabel());
                 break;
         }
     } else {
         $this->value -= $value->getValue();
     }
     return $this;
 }