Merge pull request #48 from audreyso/CB-13562
CB-13562 : fixed asset tag when adding push plugin to browser
CB-13614 Create file path before copying asset
Fixes a bug that prevented copying over plugin assets that were nested in folders by creating a directory path before the copy command.
CB-13614 Allow assets with a path to copy over correctly.
CB-13614 Remove commented out code.
diff --git a/bin/template/cordova/browser_handler.js b/bin/template/cordova/browser_handler.js
index 6e732c7..4446bf0 100644
--- a/bin/template/cordova/browser_handler.js
+++ b/bin/template/cordova/browser_handler.js
@@ -115,12 +115,16 @@
asset: {
install: function (asset, plugin_dir, wwwDest) {
var src = path.join(plugin_dir, asset.src);
- if (fs.statSync(src).isDirectory()) {
- src = path.join(src, '*');
- }
var dest = path.join(wwwDest, asset.target);
- shell.cp('-rf', src, dest);
+ if (fs.statSync(src).isDirectory()) {
+ shell.cp('-Rf', src + '/*', dest);
+ } else {
+ if (path.parse(asset.target).dir !== '') {
+ shell.mkdir(path.parse(dest).dir);
+ }
+ shell.cp('-f', src, dest);
+ }
},
uninstall: function (asset, wwwDest, plugin_id) {
shell.rm('-rf', path.join(wwwDest, asset.target));
diff --git a/spec/browser_handler.spec.js b/spec/browser_handler.spec.js
new file mode 100644
index 0000000..31e91ef
--- /dev/null
+++ b/spec/browser_handler.spec.js
@@ -0,0 +1,69 @@
+/**
+ 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.
+*/
+
+var browser_handler = require('../bin/template/cordova/browser_handler');
+var shell = require('shelljs');
+var fs = require('fs');
+var path = require('path');
+
+describe('Asset install tests', function () {
+ var fsstatMock;
+ var asset = { itemType: 'asset', src: 'someSrc/ServiceWorker.js', target: 'ServiceWorker.js' };
+ var assetPath = { itemType: 'asset', src: 'someSrc/reformat.js', target: 'js/deepdown/reformat.js' };
+ var plugin_dir = 'pluginDir';
+ var wwwDest = 'dest';
+
+ it('if src is a directory, should be called with cp, -Rf', function () {
+ var cp = spyOn(shell, 'cp').and.returnValue('-Rf');
+ fsstatMock = {
+ isDirectory: function () {
+ return true;
+ }
+ };
+ spyOn(fs, 'statSync').and.returnValue(fsstatMock);
+ browser_handler.asset.install(asset, plugin_dir, wwwDest);
+ expect(cp).toHaveBeenCalledWith('-Rf', jasmine.any(String), path.join('dest', asset.target));
+ });
+ it('if src is not a directory and asset has no path, should be called with cp, -f', function () {
+ var cp = spyOn(shell, 'cp').and.returnValue('-f');
+ var mkdir = spyOn(shell, 'mkdir');
+ fsstatMock = {
+ isDirectory: function () {
+ return false;
+ }
+ };
+ spyOn(fs, 'statSync').and.returnValue(fsstatMock);
+ browser_handler.asset.install(asset, plugin_dir, wwwDest);
+ expect(mkdir).not.toHaveBeenCalled();
+ expect(cp).toHaveBeenCalledWith('-f', 'pluginDir/someSrc/ServiceWorker.js', 'dest/ServiceWorker.js');
+ });
+ it('if src is not a directory and asset has a path, should be called with cp, -f', function () {
+ var cp = spyOn(shell, 'cp').and.returnValue('-f');
+ var mkdir = spyOn(shell, 'mkdir');
+ fsstatMock = {
+ isDirectory: function () {
+ return false;
+ }
+ };
+ spyOn(fs, 'statSync').and.returnValue(fsstatMock);
+ browser_handler.asset.install(assetPath, plugin_dir, wwwDest);
+ expect(mkdir).toHaveBeenCalledWith('dest/js/deepdown');
+ expect(cp).toHaveBeenCalledWith('-f', 'pluginDir/someSrc/reformat.js', 'dest/js/deepdown/reformat.js');
+ });
+});