function testUnder()
 {
     $transition = new Transition('A', 'B');
     $transition->setStates(array('A', 'C', 'D', 'F'));
     $transition->addGuard('atMost', 4, array('C', 'D', 'E', 'F', 'G'));
     $this->assertEquals(array(), $transition->explain());
 }
 function testImpossibleCondition()
 {
     $transition = new Transition('A', 'B');
     $transition->setStates(array('A', 'C', 'D', 'F'));
     $transition->addGuard('atLeast', 4, array('C', 'D', 'E'));
     $this->assertEquals(array(array('class' => 'invalid', 'count' => 4, 'set' => array('C', 'D', 'E'))), $transition->explain());
 }
	function getAvailableTransitions( $object, $type = null )
	{
		$states = $this->getCurrentStates($object, $type);

		$transitions = $this->getTransitionsFromStates($states);
		$transitions = Perms::filter(
						array('type' => 'transition'), 
						'object', 
						$transitions, 
						array('object' => 'transitionId'),
						'trigger_transition'
		);

		foreach ( $transitions as & $tr ) {
			$object = new Transition($tr['from'], $tr['to']);
			$object->setStates($states);
			foreach ( $tr['guards'] as $guard ) {
				call_user_func_array(array($object, 'addGuard' ), $guard);
			}

			$tr['enabled'] = $object->isReady();
			$tr['explain'] = $object->explain();
		}

		return $transitions;
	}