public function testTypeChangesBasedOnGCM()
 {
     $msg = new AndroidMessage();
     $this->assertEquals(Types::OS_ANDROID_C2DM, $msg->getTargetOS());
     $msg->setGCM(true);
     $this->assertEquals(Types::OS_ANDROID_GCM, $msg->getTargetOS());
 }
 /**
  * Send a notification message
  *
  * @param  string $os
  * @return \Funkjedi\PushNotification\Message\MessageInterface
  */
 public function create($os)
 {
     switch ($os) {
         case Device\Types::OS_ANDROID_C2DM:
             return new AndroidMessage();
         case Device\Types::OS_ANDROID_GCM:
             $message = new AndroidMessage();
             $message->setGCM(true);
             return $message;
         case Device\Types::OS_IOS:
             return new iOSMessage();
         case Device\Types::OS_MAC:
             return new MacMessage();
         case Device\Types::OS_BLACKBERRY:
             return new BlackberryMessage();
         case Device\Types::OS_WINDOWSMOBILE:
         case Device\Types::OS_WINDOWSPHONE:
             return new WindowsphoneMessage();
     }
     throw new \RuntimeException("OS type {$os} not supported");
 }
 /**
  * Returns a message class based on the supplied os
  *
  * @param  string                    $service The name of the service to return a message for
  * @throws \InvalidArgumentException
  * @return MessageInterface
  */
 protected function getMessageClass($service)
 {
     switch ($service) {
         case "ios":
             return new PushMessage\iOSMessage();
         case "c2dm":
             return new PushMessage\AndroidMessage();
         case "gcm":
             $message = new PushMessage\AndroidMessage();
             $message->setGCM(true);
             return $message;
         case "blackberry":
             return new PushMessage\BlackberryMessage();
         case "mac":
             return new PushMessage\MacMessage();
         case "windowsphone":
             return new PushMessage\WindowsphoneMessage();
         default:
             throw new \InvalidArgumentException("Service '{$service}' not supported presently");
     }
 }