/**
  * Registers a converter.
  *
  * @param ConverterBuilder $converter The builder of the converter to register.
  * @throws \InvalidArgumentException If from or to are unset.
  */
 public function addConverter(ConverterBuilder $converter)
 {
     if ($converter->getFrom() == null) {
         throw new \InvalidArgumentException("From is unset");
     }
     if ($converter->getTo() == null) {
         throw new \InvalidArgumentException("To is unset");
     }
     $this->converters[$converter->getFrom()][$converter->getTo()] = $converter;
 }
 public function testPerformance()
 {
     $service = new ConversionService();
     $builder = ConverterBuilder::get()->from(A::class)->to(B::class)->withImplementation(AToBConverter::class);
     $service->registerConverter($builder);
     $a = new A(1, json_encode(array('firstName' => 'john', 'lastName' => 'doe', 'age' => 30)));
     foreach ([5000, 15000, 25000, 50000] as $cycles) {
         $start = microtime(true);
         for ($i = $cycles; $i > 0; $i--) {
             $b = $service->convert($a, B::class);
         }
         echo "\n{$cycles} cycles executed in " . (microtime(true) - $start) . " seconds\n";
     }
 }
 /**
  * @expectedException         \InvalidArgumentException
  * @expectedExceptionMesesage 'To' parameter should be a string containing 'string', 'array', or a class name
  */
 public function testSetToWithInvalidValue()
 {
     $builder = ConverterBuilder::get();
     $builder->to(5);
 }
 private function getConverterBuilderToRegister()
 {
     $register = ConverterBuilder::get()->from(A::class)->to(B::class)->withImplementation(AToBConverter::class);
     return $register;
 }
 /**
  * @expectedException        \Mcustiel\Conversion\Exception\ObjectIsNotConverterException
  * @expectedExceptionMessage Object of type stdClass does not implement Mcustiel\Conversion\Converter
  */
 public function testShouldFailWhenImplementationIsNotConverter()
 {
     $builder = ConverterBuilder::get()->from(A::class)->to(B::class)->withImplementation(\stdClass::class);
     ConverterContainer::getInstance()->addConverter($builder);
     ConverterContainer::getInstance()->getConverter(A::class, B::class);
 }
 private function addDefaultConverter()
 {
     $builder = ConverterBuilder::get()->from(A::class)->to(B::class)->withImplementation(AToBConverter::class);
     $this->conversionService->addConverter($builder);
 }