/**
  * @param array $aProcessStepDefinition
  * @return ProcessStep
  * @throws \InvalidArgumentException
  */
 public static function processStepFromDefinition(array $aProcessStepDefinition)
 {
     if (isset($aProcessStepDefinition['agent'])) {
         Assertion::isArray($aProcessStepDefinition['agent'], sprintf("The agent property of an ProcessStepDefinition must be an array: %s given in %s", Util::getType($aProcessStepDefinition['agent']), json_encode($aProcessStepDefinition)));
         return ProcessStep::fromAgentDescription(static::agentDescriptionFromDefinition($aProcessStepDefinition['agent']));
     } else {
         if (isset($aProcessStepDefinition['role']) && isset($aProcessStepDefinition['action'])) {
             Assertion::isArray($aProcessStepDefinition['role'], sprintf("The role property of an ProcessStepDefinition must be an array: %s given in %s", Util::getType($aProcessStepDefinition['role']), json_encode($aProcessStepDefinition)));
             Assertion::isArray($aProcessStepDefinition['action'], sprintf("The action property of an ProcessStepDefinition must be an array: %s given in %s", Util::getType($aProcessStepDefinition['action']), json_encode($aProcessStepDefinition)));
             return ProcessStep::fromRoleAndActionDescription(static::roleDescriptionFromDefinition($aProcessStepDefinition['role']), static::actionDescriptionFromDefinition($aProcessStepDefinition['action']));
         } else {
             throw new \InvalidArgumentException('Invalid ProcessStep. Missing agent or role and action properties');
         }
     }
 }
 /**
  * @test
  */
 public function is_not_same_value_with_other_processSteps()
 {
     $agentDescription = new AgentDescription(AgentDescription::LOOP, $this->processStepCollection, new AgentOptions(array('option' => 'value')));
     $otherProcessStepCollection = array(ProcessStep::fromAgentDescription($agentDescription));
     $otherAgentDescription = new AgentDescription(AgentDescription::LOOP, $otherProcessStepCollection, new AgentOptions(array('option' => 'value')));
     $this->assertFalse($agentDescription->sameValueAs($otherAgentDescription));
 }
 /**
  * @test
  */
 public function is_not_same_value_as()
 {
     $processStep = ProcessStep::fromRoleAndActionDescription($this->role, $this->actionDescription);
     $otherProcessStep = ProcessStep::fromAgentDescription($this->agentDescription);
     $this->assertFalse($processStep->sameValueAs($otherProcessStep));
 }