/**
  * Adapts an object by wrapping it with a registered adapter class that implements an Acclimate interface
  *
  * @param mixed $adaptee A third-party object to be acclimated
  *
  * @return ContainerInterface
  * @throws InvalidAdapterException if there is no adapter found for the provided object
  */
 public function acclimate($adaptee)
 {
     if ($adaptee instanceof ContainerInterface) {
         // If the adaptee already implements the ContainerInterface, just return it
         return $adaptee;
     } else {
         // Otherwise, check the adapter map to see if there is an appropriate adapter registered
         foreach ($this->adapterMap as $adapteeFqcn => $adapterFqcn) {
             if ($adaptee instanceof $adapteeFqcn) {
                 return new $adapterFqcn($adaptee);
             }
         }
     }
     // If no adapter matches the provided container object, throw an exception
     throw InvalidAdapterException::fromAdaptee($adaptee);
 }
 /**
  * @dataProvider getDataForFactoryTest
  */
 public function testFactoryMethodProducesException($adaptee, $message)
 {
     $exception = InvalidAdapterException::fromAdaptee($adaptee);
     $this->assertEquals($message, $exception->getMessage());
 }