brodybits closed pull request #542: Resolve GH-539 & GH-540 on master URL: https://github.com/apache/cordova-android/pull/542
This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/bin/templates/cordova/lib/pluginHandlers.js b/bin/templates/cordova/lib/pluginHandlers.js index bee2841f9..f1b0dba02 100644 --- a/bin/templates/cordova/lib/pluginHandlers.js +++ b/bin/templates/cordova/lib/pluginHandlers.js @@ -26,7 +26,7 @@ var handlers = { if (!obj.src) throw new CordovaError(generateAttributeError('src', 'source-file', plugin.id)); if (!obj.targetDir) throw new CordovaError(generateAttributeError('target-dir', 'source-file', plugin.id)); - var dest = studioPathRemap(obj); + var dest = getInstallDestination(obj); if (options && options.force) { copyFile(plugin.dir, obj.src, project.projectDir, dest, !!(options && options.link)); @@ -35,7 +35,7 @@ var handlers = { } }, uninstall: function (obj, plugin, project, options) { - var dest = studioPathRemap(obj); + var dest = getInstallDestination(obj); // TODO: Add Koltin extension to uninstall, since they are handled like Java files if (obj.src.endsWith('java')) { @@ -292,9 +292,15 @@ function generateAttributeError (attribute, element, id) { return 'Required attribute "' + attribute + '" not specified in <' + element + '> element from plugin: ' + id; } +function getInstallDestination (obj) { + return studioPathRemap(obj) || + path.join(obj.targetDir, path.basename(obj.src)); +} + function studioPathRemap (obj) { - // If a Java file is using the new directory structure, don't penalize it - if (!obj.targetDir.includes('app/src/main')) { + // If any source file is using the app new directory structure, + // don't penalize it + if (!obj.targetDir.includes('app')) { if (obj.src.endsWith('.java')) { return path.join('app/src/main/java', obj.targetDir.substring(4), path.basename(obj.src)); } else { diff --git a/spec/fixtures/org.test.plugins.dummyplugin/plugin.xml b/spec/fixtures/org.test.plugins.dummyplugin/plugin.xml index a40df2b28..b299b645a 100644 --- a/spec/fixtures/org.test.plugins.dummyplugin/plugin.xml +++ b/spec/fixtures/org.test.plugins.dummyplugin/plugin.xml @@ -70,6 +70,12 @@ <source-file src="src/android/DummyPlugin.java" target-dir="src/com/phonegap/plugins/dummyplugin" /> + <source-file src="src/android/DummyPlugin2.java" + target-dir="app/src/main/src/com/phonegap/plugins/dummyplugin" /> + <source-file src="src/android/TestLib.jar" + target-dir="app/libs" /> + <source-file src="src/android/TestAar.aar" + target-dir="app/libs" /> <lib-file src="src/android/TestLib.jar" /> </platform> </plugin> diff --git a/spec/fixtures/org.test.plugins.dummyplugin/src/android/DummyPlugin2.java b/spec/fixtures/org.test.plugins.dummyplugin/src/android/DummyPlugin2.java new file mode 100644 index 000000000..c2dd0f731 --- /dev/null +++ b/spec/fixtures/org.test.plugins.dummyplugin/src/android/DummyPlugin2.java @@ -0,0 +1 @@ +./org.test.plugins.dummyplugin/src/android/DummyPlugin2.java diff --git a/spec/fixtures/org.test.plugins.dummyplugin/src/android/TestAar.aar b/spec/fixtures/org.test.plugins.dummyplugin/src/android/TestAar.aar new file mode 100644 index 000000000..ce4015431 --- /dev/null +++ b/spec/fixtures/org.test.plugins.dummyplugin/src/android/TestAar.aar @@ -0,0 +1 @@ +./org.test.plugins.dummyplugin/src/android/TestAar.aar diff --git a/spec/unit/pluginHandlers/handlers.spec.js b/spec/unit/pluginHandlers/handlers.spec.js index cc6a39dde..4c398eabb 100644 --- a/spec/unit/pluginHandlers/handlers.spec.js +++ b/spec/unit/pluginHandlers/handlers.spec.js @@ -102,6 +102,25 @@ describe('android project handler', function () { android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject); }).toThrow(new Error('"' + target + '" already exists!')); }); + + it('Test#007 : should allow installing sources using proper path', function () { + android['source-file'].install(valid_source[1], dummyPluginInfo, dummyProject, {android_studio: true}); + expect(copyFileSpy) + .toHaveBeenCalledWith(dummyplugin, 'src/android/DummyPlugin2.java', temp, path.join('app/src/main/src/com/phonegap/plugins/dummyplugin/DummyPlugin2.java'), false); + }); + + // TODO: renumber these tests and other tests below + it('Test#007a : should allow installing lib file from sources using proper path', function () { + android['source-file'].install(valid_source[2], dummyPluginInfo, dummyProject, {android_studio: true}); + expect(copyFileSpy) + .toHaveBeenCalledWith(dummyplugin, 'src/android/TestLib.jar', temp, path.join('app/libs/TestLib.jar'), false); + }); + + it('Test#007b : should allow installing aar file from sources using proper path', function () { + android['source-file'].install(valid_source[3], dummyPluginInfo, dummyProject, {android_studio: true}); + expect(copyFileSpy) + .toHaveBeenCalledWith(dummyplugin, 'src/android/TestAar.aar', temp, path.join('app/libs/TestAar.aar'), false); + }); }); describe('of <framework> elements', function () { @@ -251,6 +270,10 @@ describe('android project handler', function () { }); }); + // TODO: + // - merge tests of <source-file> elements into single describe block + // (with proper beforeEach/afterEach) + // - renumber the tests after Test#019 describe('of <source-file> elements', function () { it('Test#019 : should remove stuff by calling common.deleteJava for Android Studio projects', function () { android['source-file'].install(valid_source[0], dummyPluginInfo, dummyProject); @@ -259,6 +282,30 @@ describe('android project handler', function () { }); }); + describe('of <source-file> element, with specific app target-dir', function () { + it('Test#019a : should remove stuff by calling common.deleteJava for Android Studio projects, with specific app target-dir', function () { + android['source-file'].install(valid_source[1], dummyPluginInfo, dummyProject, {android_studio: true}); + android['source-file'].uninstall(valid_source[1], dummyPluginInfo, dummyProject, {android_studio: true}); + expect(deleteJavaSpy).toHaveBeenCalledWith(temp, path.join('app/src/main/src/com/phonegap/plugins/dummyplugin/DummyPlugin2.java')); + }); + }); + + describe('of <source-file> element, with JAR in specific app target-dir', function () { + it('Test#019b : should remove stuff by calling common.deleteJava for Android Studio projects, with JAR into specific app target-dir', function () { + android['source-file'].install(valid_source[2], dummyPluginInfo, dummyProject, {android_studio: true}); + android['source-file'].uninstall(valid_source[2], dummyPluginInfo, dummyProject, {android_studio: true}); + expect(removeFileSpy).toHaveBeenCalledWith(temp, path.join('app/libs/TestLib.jar')); + }); + }); + + describe('of <source-file> element, with AAR in specific app target-dir', function () { + it('Test#019c : should remove stuff by calling common.deleteJava for Android Studio projects, with JAR into specific app target-dir', function () { + android['source-file'].install(valid_source[3], dummyPluginInfo, dummyProject, {android_studio: true}); + android['source-file'].uninstall(valid_source[3], dummyPluginInfo, dummyProject, {android_studio: true}); + expect(removeFileSpy).toHaveBeenCalledWith(temp, path.join('app/libs/TestAar.aar')); + }); + }); + describe('of <framework> elements', function () { var someString = jasmine.any(String); ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cordova.apache.org For additional commands, e-mail: commits-h...@cordova.apache.org