| /*! |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| */ |
| |
| const rewire = require('rewire'); |
| const { CordovaError } = require('cordova-common'); |
| |
| describe('hooks/Context', () => { |
| let Context; |
| |
| beforeEach(() => { |
| Context = rewire('../../src/hooks/Context'); |
| }); |
| |
| describe('cordova', () => { |
| let context; |
| |
| beforeEach(() => { |
| spyOn(Context.prototype, 'requireCordovaModule'); |
| context = new Context(); |
| }); |
| |
| it('is only loaded when accessed', () => { |
| expect(context.requireCordovaModule).not.toHaveBeenCalled(); |
| }); |
| |
| it('is set to require("cordova-lib").cordova', () => { |
| const cordova = Symbol('cordova'); |
| context.requireCordovaModule.and.returnValue({ cordova }); |
| |
| expect(context.cordova).toBe(cordova); |
| expect(context.requireCordovaModule).toHaveBeenCalledWith('cordova-lib'); |
| }); |
| }); |
| |
| describe('requireCordovaModule', () => { |
| let requireCordovaModule; |
| |
| beforeEach(() => { |
| requireCordovaModule = Context.prototype.requireCordovaModule; |
| }); |
| |
| it('correctly resolves cordova-* dependencies', () => { |
| const cordovaCommon = require('cordova-common'); |
| expect(requireCordovaModule('cordova-common')).toBe(cordovaCommon); |
| }); |
| |
| it('correctly resolves inner modules of cordova-* dependencies', () => { |
| const MODULE = 'cordova-common/src/events'; |
| expect(requireCordovaModule(MODULE)).toBe(require(MODULE)); |
| }); |
| |
| it('correctly resolves cordova-lib', () => { |
| const cordovaLib = require('../..'); |
| expect(requireCordovaModule('cordova-lib')).toBe(cordovaLib); |
| }); |
| |
| it('correctly resolves inner modules of cordova-lib', () => { |
| const platforms = require('../../src/platforms/platforms'); |
| expect(requireCordovaModule('cordova-lib/src/platforms/platforms')).toBe(platforms); |
| }); |
| |
| it('correctly resolves inner modules of cordova-lib', () => { |
| const platforms = require('../../src/platforms/platforms'); |
| expect(requireCordovaModule('cordova-lib/src/platforms/platforms')).toBe(platforms); |
| }); |
| |
| describe('with stubbed require', () => { |
| let requireSpy; |
| |
| beforeEach(() => { |
| requireSpy = jasmine.createSpy('require'); |
| Context.__set__({ require: requireSpy }); |
| }); |
| |
| it('correctly handles module names that start with "cordova-lib"', () => { |
| requireCordovaModule('cordova-libre'); |
| expect(requireSpy).toHaveBeenCalledWith('cordova-libre'); |
| }); |
| |
| it('throws if non-cordova module is requested', () => { |
| const expectErrorOnRequire = m => |
| expect(() => requireCordovaModule(m)) |
| .toThrowError(CordovaError, /non-cordova module/); |
| |
| expectErrorOnRequire('q'); |
| expectErrorOnRequire('.'); |
| expectErrorOnRequire('..'); |
| expectErrorOnRequire('./asd'); |
| expectErrorOnRequire('../qwe'); |
| expectErrorOnRequire('/foo'); |
| }); |
| }); |
| }); |
| }); |