                         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

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

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

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

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

                context("when kFullscreen is true") {

                    it("start as fullscreen video") {
                        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("start as embed video when `kFullscreenByApp: true`") {
                        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("start as fullscreen video when `kFullscreenByApp: false`") {
                        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())
                    }
                }

                describe("#setFullscreen") {

                    it("set to fullscreen video by call `setFullscreen(true)`") {
                        let core = Core()
                        core.parentView = UIView()

                        core.render()
                        core.setFullscreen(true)

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

                    it("only set fullscreen video once by call `setFullscreen(true)` twice") {
                        let core = Core()
                        core.parentView = UIView()

