You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by au...@apache.org on 2017/08/11 21:01:48 UTC
cordova-lib git commit: CB-12361 : added plugin remove tests
Repository: cordova-lib
Updated Branches:
refs/heads/master acbd9e754 -> fbad9b8ee
CB-12361 : added plugin remove tests
Project: http://git-wip-us.apache.org/repos/asf/cordova-lib/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-lib/commit/fbad9b8e
Tree: http://git-wip-us.apache.org/repos/asf/cordova-lib/tree/fbad9b8e
Diff: http://git-wip-us.apache.org/repos/asf/cordova-lib/diff/fbad9b8e
Branch: refs/heads/master
Commit: fbad9b8ee830fd5718ebb220119bdf34a4390b7b
Parents: acbd9e7
Author: Audrey So <au...@apache.org>
Authored: Thu Jul 20 16:19:07 2017 -0700
Committer: Audrey So <au...@apache.org>
Committed: Fri Aug 11 13:28:52 2017 -0700
----------------------------------------------------------------------
integration-tests/HooksRunner.spec.js | 2 +-
spec/cordova/plugin/remove.spec.js | 156 +++++++++++++++++++++++++++--
2 files changed, 148 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/fbad9b8e/integration-tests/HooksRunner.spec.js
----------------------------------------------------------------------
diff --git a/integration-tests/HooksRunner.spec.js b/integration-tests/HooksRunner.spec.js
index eebbb63..7847443 100644
--- a/integration-tests/HooksRunner.spec.js
+++ b/integration-tests/HooksRunner.spec.js
@@ -636,7 +636,7 @@ describe('HooksRunner', function () {
hooksRunner.fire(test_event, hookOptions).then(function () {
done();
});
- });
+ }, 60000);
it('Test 022 : should pass data object that fire calls into sync handlers', function (done) {
var async = function (opts) {
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/fbad9b8e/spec/cordova/plugin/remove.spec.js
----------------------------------------------------------------------
diff --git a/spec/cordova/plugin/remove.spec.js b/spec/cordova/plugin/remove.spec.js
index 72d46de..b8e6720 100644
--- a/spec/cordova/plugin/remove.spec.js
+++ b/spec/cordova/plugin/remove.spec.js
@@ -21,9 +21,43 @@
/* globals fail */
var remove = require('../../../src/cordova/plugin/remove');
+var rewire = require('rewire');
+var platform_remove = rewire('../../../src/cordova/plugin/remove');
+var Q = require('q');
+var cordova_util = require('../../../src/cordova/util');
+var metadata = require('../../../src/plugman/util/metadata');
+var events = require('cordova-common').events;
+var plugman = require('../../../src/plugman/plugman');
+var fs = require('fs');
+var prepare = require('../../../src/cordova/prepare');
+var plugin_util = require('../../../src/cordova/plugin/util');
+var config = require('../../../src/cordova/config');
describe('cordova/plugin/remove', function () {
var projectRoot = '/some/path';
+ var hook_mock;
+ var cfg_parser_mock = function () {};
+ var cfg_parser_revert_mock; // eslint-disable-line no-unused-vars
+ var package_json_mock;
+ package_json_mock = jasmine.createSpyObj('package json mock', ['cordova', 'dependencies']);
+ package_json_mock.dependencies = {};
+ package_json_mock.cordova = {};
+ package_json_mock.cordova.plugins = {};
+ beforeEach(function () {
+ spyOn(events, 'emit');
+ spyOn(fs, 'writeFileSync');
+ spyOn(fs, 'existsSync');
+ spyOn(remove, 'validatePluginId');
+ spyOn(cordova_util, 'listPlatforms').and.returnValue(['ios', 'android']);
+ spyOn(plugman.uninstall, 'uninstallPlatform').and.returnValue(Q());
+ spyOn(plugman.uninstall, 'uninstallPlugin').and.returnValue(Q());
+ hook_mock = jasmine.createSpyObj('hooks runner mock', ['fire']);
+ spyOn(prepare, 'preparePlatforms').and.returnValue(true);
+ hook_mock.fire.and.returnValue(Q());
+ cfg_parser_mock.prototype = jasmine.createSpyObj('config parser mock', ['write', 'removeEngine', 'addEngine', 'getHookScripts', 'removePlugin']);
+ cfg_parser_revert_mock = platform_remove.__set__('ConfigParser', cfg_parser_mock);
+ });
+
describe('error/warning conditions', function () {
it('should require that a plugin be provided', function (done) {
remove(projectRoot, null).then(function () {
@@ -32,18 +66,122 @@ describe('cordova/plugin/remove', function () {
expect(e.message).toContain('No plugin specified');
}).done(done);
});
- it('should require that a provided plugin be installed in the current project');
+
+ it('should require that a provided plugin be installed in the current project', function (done) {
+ var opts = { plugins: [ undefined ] };
+ remove(projectRoot, 'plugin', hook_mock, opts).then(function () {
+ fail('success handler unexpectedly invoked');
+ }).fail(function (e) {
+ expect(e.message).toContain('is not present in the project');
+ }).done(done);
+ });
});
describe('happy path', function () {
- it('should fire the before_plugin_rm hook');
- it('should call plugman.uninstall.uninstallPlatform for each platform installed in the project and for each provided plugin');
- it('should trigger a prepare if plugman.uninstall.uninstallPlatform returned something falsy');
- it('should call plugman.uninstall.uninstallPlugin once plugin has been uninstalled for each platform');
+ it('should fire the before_plugin_rm hook', function (done) {
+ var opts = { important: 'options', plugins: [] };
+ remove(projectRoot, 'cordova-plugin-splashscreen', hook_mock, opts).then(function () {
+ expect(hook_mock.fire).toHaveBeenCalledWith('before_plugin_rm', opts);
+ }).fail(function (e) {
+ fail('fail handler unexpectedly invoked');
+ console.error(e);
+ }).done(done);
+ });
+
+ it('should call plugman.uninstall.uninstallPlatform for each platform installed in the project and for each provided plugin', function (done) {
+ remove.validatePluginId.and.returnValue('cordova-plugin-splashscreen');
+ var opts = {important: 'options', plugins: ['cordova-plugin-splashscreen']};
+ remove(projectRoot, 'cordova-plugin-splashscreen', hook_mock, opts).then(function () {
+ expect(plugman.uninstall.uninstallPlatform).toHaveBeenCalled();
+ expect(events.emit).toHaveBeenCalledWith('verbose', jasmine.stringMatching('plugman.uninstall on plugin "cordova-plugin-splashscreen" for platform "ios"'));
+ expect(events.emit).toHaveBeenCalledWith('verbose', jasmine.stringMatching('plugman.uninstall on plugin "cordova-plugin-splashscreen" for platform "android"'));
+ }).fail(function (e) {
+ fail('fail handler unexpectedly invoked');
+ console.error(e);
+ }).done(done);
+ });
+
+ it('should trigger a prepare if plugman.uninstall.uninstallPlatform returned something falsy', function (done) {
+ remove.validatePluginId.and.returnValue('cordova-plugin-splashscreen');
+ plugman.uninstall.uninstallPlatform.and.returnValue(Q(false));
+ var opts = {important: 'options', plugins: ['cordova-plugin-splashscreen']};
+ remove(projectRoot, 'cordova-plugin-splashscreen', hook_mock, opts).then(function () {
+ expect(plugman.uninstall.uninstallPlatform).toHaveBeenCalled();
+ }).fail(function (e) {
+ fail('fail handler unexpectedly invoked');
+ console.error(e);
+ }).done(done);
+ });
+
+ it('should call plugman.uninstall.uninstallPlugin once plugin has been uninstalled for each platform', function (done) {
+ remove.validatePluginId.and.returnValue('cordova-plugin-splashscreen');
+ var opts = {important: 'options', plugins: ['cordova-plugin-splashscreen']};
+ remove(projectRoot, 'cordova-plugin-splashscreen', hook_mock, opts).then(function () {
+ expect(plugman.uninstall.uninstallPlugin).toHaveBeenCalled();
+ }).fail(function (e) {
+ fail('fail handler unexpectedly invoked');
+ console.error(e);
+ }).done(done);
+ });
+
describe('when save option is provided or autosave config is on', function () {
- it('should remove provided plugins from config.xml');
- it('should remove provided plugins from package.json (if exists)');
+ beforeEach(function () {
+ spyOn(platform_remove, 'validatePluginId').and.returnValue('cordova-plugin-splashscreen');
+ spyOn(plugin_util, 'saveToConfigXmlOn').and.returnValue(true);
+ spyOn(config, 'read').and.returnValue(true);
+ spyOn(cordova_util, 'projectConfig').and.returnValue('config.xml');
+ spyOn(cordova_util, 'findPlugins').and.returnValue([]);
+ spyOn(metadata, 'remove_fetch_metadata').and.returnValue(true);
+ });
+
+ it('should remove provided plugins from config.xml', function (done) {
+ spyOn(cordova_util, 'requireNoCache').and.returnValue(true);
+ fs.existsSync.and.returnValue(true);
+ var opts = {important: 'options', plugins: ['cordova-plugin-splashscreen']};
+ platform_remove(projectRoot, 'cordova-plugin-splashscreen', hook_mock, opts).then(function () {
+ expect(cfg_parser_mock.prototype.removePlugin).toHaveBeenCalled();
+ expect(cfg_parser_mock.prototype.write).toHaveBeenCalled();
+ expect(events.emit).toHaveBeenCalledWith('log', jasmine.stringMatching('Removing plugin cordova-plugin-splashscreen from config.xml file'));
+ }).fail(function (e) {
+ fail('fail handler unexpectedly invoked');
+ console.error(e);
+ }).done(done);
+ });
+
+ it('should remove provided plugins from package.json (if exists)', function (done) {
+ spyOn(cordova_util, 'requireNoCache').and.returnValue(package_json_mock);
+ fs.existsSync.and.returnValue(true);
+ var opts = {important: 'options', plugins: ['cordova-plugin-splashscreen']};
+ platform_remove(projectRoot, 'cordova-plugin-splashscreen', hook_mock, opts).then(function () {
+ expect(fs.writeFileSync).toHaveBeenCalled();
+ expect(events.emit).toHaveBeenCalledWith('log', jasmine.stringMatching('Removing cordova-plugin-splashscreen from package.json'));
+ }).fail(function (e) {
+ fail('fail handler unexpectedly invoked');
+ console.error(e);
+ }).done(done);
+ });
+ });
+
+ it('should remove fetch metadata from fetch.json', function (done) {
+ spyOn(metadata, 'remove_fetch_metadata').and.callThrough();
+ remove.validatePluginId.and.returnValue('cordova-plugin-splashscreen');
+ var opts = {important: 'options', plugins: ['cordova-plugin-splashscreen']};
+ remove(projectRoot, 'cordova-plugin-splashscreen', hook_mock, opts).then(function () {
+ expect(metadata.remove_fetch_metadata).toHaveBeenCalled();
+ expect(events.emit).toHaveBeenCalledWith('verbose', jasmine.stringMatching('Removing plugin cordova-plugin-splashscreen from fetch.json'));
+ }).fail(function (e) {
+ fail('fail handler unexpectedly invoked');
+ console.error(e);
+ }).done(done);
+ });
+
+ it('should fire the after_plugin_rm hook', function (done) {
+ var opts = {important: 'options', plugins: []};
+ remove(projectRoot, 'cordova-plugin-splashscreen', hook_mock, opts).then(function () {
+ expect(hook_mock.fire).toHaveBeenCalledWith('after_plugin_rm', opts);
+ }).fail(function (e) {
+ fail('fail handler unexpectedly invoked');
+ console.error(e);
+ }).done(done);
});
- it('should remove fetch metadata from fetch.json');
- it('should fire the after_plugin_rm hook');
});
});
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org