1 import Quick
2 import Nimble
3 
4 @testable import EXDevMenu
5 
6 class DevMenuAppInstanceTest: QuickSpec {
7   class MockedBridge: RCTBridge {
8     var enqueueJSCallWasCalled = false
9 
invalidatenull10     override func invalidate() {
11       // NOOP
12     }
13 
enqueueJSCallnull14     override func enqueueJSCall(_ moduleDotMethod: String!, args: [Any]!) {
15       enqueueJSCallWasCalled = true
16 
17       expect(moduleDotMethod).to(equal("RCTDeviceEventEmitter.emit"))
18       expect(args.first as? String).to(equal("closeDevMenu"))
19     }
20   }
21 
specnull22   override func spec() {
23     it("checks if `sendCloseEvent` sends correct event") {
24       let mockedBridge = MockedBridge(delegate: nil, launchOptions: nil)!
25       let appInstance = DevMenuAppInstance(
26         manager: DevMenuManager.shared,
27         bridge: mockedBridge
28       )
29 
30       appInstance.sendCloseEvent()
31 
32       expect(mockedBridge.enqueueJSCallWasCalled).to(beTrue())
33     }
34 
35     it("checks if js bundle was found") {
36       let mockedBridge = MockedBridge(delegate: nil, launchOptions: nil)!
37       let appInstance = DevMenuAppInstance(
38         manager: DevMenuManager.shared,
39         bridge: mockedBridge
40       )
41 
42       let sourceURL = appInstance.sourceURL(for: mockedBridge)
43 
44       expect(sourceURL).toNot(beNil())
45     }
46 
47     it("checks if extra modules was exported") {
48       let mockedBridge = MockedBridge(delegate: nil, launchOptions: nil)!
49       let appInstance = DevMenuAppInstance(
50         manager: DevMenuManager.shared,
51         bridge: mockedBridge
52       )
53 
54         let extraModules = appInstance.extraModules(for: mockedBridge)
55 
56       expect(extraModules).toNot(beNil())
57       expect(extraModules?.first { type(of: $0).moduleName() == "DevLoadingView" }).toNot(beNil())
58       expect(extraModules?.first { type(of: $0).moduleName() == "DevSettings" }).toNot(beNil())
59     }
60   }
61 }
62