public function testEvaluateConditions() { // Base Case $state = new State('dummy'); $conditionOne = new Condition(function ($context) { return $context->getLabel() === 'fresh'; }, 'one'); $conditionTwo = new Condition(function ($context) { return $context->getNum() <= 1; }, 'two', 'three'); $one = new State('one'); $two = new State('two'); $three = new State('three'); $conditionOne->setTrueState($one); $conditionTwo->setTrueState($two); $conditionTwo->setFalseState($three); $state->addCondition($conditionOne); $state->addCondition($conditionTwo); $context = new DummyContext(); $context->setLabel('fresh'); // One $this->assertEquals('one', $state->evaluateConditions($context)->getName()); // Two $context->setLabel('soggy'); $this->assertEquals('two', $state->evaluateConditions($context)->getName()); // Three $context->increment(); $this->assertEquals('three', $state->evaluateConditions($context)->getName()); }