                         expect(core.mediaControl?.fullscreen).to(beTrue())
                     }
                 }
-            }
-
-            context("Destroy") {
-                it("Should trigger willDestroy") {
+
+                context("when no options of fullscreen was passed") {
+                    it("start as embed video") {
+                        let core = Core()
+                        core.parentView = UIView()
+
+                        core.render()
+
+                        expect(core.parentView?.subviews.contains(core)).to(beTrue())
+                        expect(core.mediaControl?.fullscreen).to(beFalse())
+                    }
+                }
+
+                context("when only kFullscreenByApp is passed") {
+
+                    it("start as embed video when its true") {
+                        let options: Options = [kFullscreenByApp: true]
+                        let core = Core(options: options)
+                        core.parentView = UIView()
+
+                        core.render()
+
+                        expect(core.parentView?.subviews.contains(core)).to(beTrue())
+                        expect(core.mediaControl?.fullscreen).to(beFalse())
+                    }
+
+                    it("start as fullscreen video when its false") {
+                        let player = Player(options: [kFullscreenByApp: false] as Options)
+                        var callbackWasCalled = false
+                        player.on(.requestFullscreen) { _ in
+                            callbackWasCalled = true
+                        }
+                        player.attachTo(UIView(), controller: UIViewController())
+
+                        player.setFullscreen(true)
+
+                        expect(callbackWasCalled).toEventually(beTrue())
+                        expect(player.core!.parentView?.subviews.contains(core)).to(beFalse())
+                        expect(player.core!.mediaControl?.fullscreen).to(beTrue())
+                    }
+                }
+            }
+
+            describe("#Destroy") {
+                it("trigger willDestroy event") {
                     var didCallWillDestroy = false
 
                     core.on(InternalEvent.willDestroy.rawValue) { _ in

            core = Core(loader: loader, options: options as Options)
        }

        describe("Core") {

            context("Initialization") {
                it("Should set backgroundColor to black") {
                    expect(core.backgroundColor) == .black
                }

                it("Should set frame Rect to zero") {
                    expect(core.frame) == CGRect.zero
                }

                it("Should add gesture recognizer") {
                    expect(core.gestureRecognizers?.count) > 0
                }

            }

            context("Options") {

                it("Should have a constructor with options") {
                    let options = ["SomeOption": true]
                    let core = Core(loader: loader, options: options as Options)

                    expect(core.options["SomeOption"] as? Bool) == true
                }

                context("Fullscreen") {
                    it("Should start as embed video when `kFullscreen: false`") {
                        let options: Options = [kFullscreen: false]
                        let core = Core(options: options)
                        core.parentView = UIView()

                        core.render()

                        expect(core.parentView?.subviews.contains(core)).to(beTrue())
                        expect(core.mediaControl?.fullscreen).to(beFalse())
                    }

                    it("Should start as embed video when `kFullscreen` was not passed") {
                        let core = Core()
                        core.parentView = UIView()

                        core.render()

                        expect(core.parentView?.subviews.contains(core)).to(beTrue())
                        expect(core.mediaControl?.fullscreen).to(beFalse())
                    }

                    it("Should start as fullscreen video when `kFullscreen: true` was passed") {
                        let options: Options = [kFullscreen: true]
                        let core = Core(options: options)
                        core.parentView = UIView()
                        var callbackWasCall = false
                        core.on(InternalEvent.didEnterFullscreen.rawValue) { _ in
                            callbackWasCall = true
                        }

                        core.render()

                        expect(callbackWasCall).toEventually(beTrue())
                        expect(core.parentView?.subviews.contains(core)).to(beFalse())
                        expect(core.fullscreenController.view.subviews.contains(core)).to(beTrue())
                        expect(core.mediaControl?.fullscreen).to(beTrue())
                    }

                    it("Should start as embed video when `kFullscreen: true` and `kFullscreenByApp: true` was passed") {
                        let options: Options = [kFullscreen: true, kFullscreenByApp: true]
                        let core = Core(options: options)
                        core.parentView = UIView()

                        core.render()

                        expect(core.parentView?.subviews.contains(core)).to(beTrue())
                        expect(core.mediaControl?.fullscreen).to(beFalse())
                    }

                    it("Should start as fullscreen video when `kFullscreen: true` and `kFullscreenByApp: false` was passed") {
                        let player = Player(options: [kFullscreen: true] as Options)
                        var callbackWasCalled = false
                        player.on(.requestFullscreen) { _ in
                            callbackWasCalled = true

                    expect(didCallWillDestroy).toEventually(beTrue())
                }

                it("trigger didDestroy event") {
                    var didCallDidDestroy = false

                    core.on(InternalEvent.willDestroy.rawValue) { _ in
