You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ra...@apache.org on 2020/07/03 16:54:32 UTC

[cordova-android] branch master updated: refactor: save ProjectBuilder instance in Api instance (#1016)

This is an automated email from the ASF dual-hosted git repository.

raphinesse pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-android.git


The following commit(s) were added to refs/heads/master by this push:
     new ba5781c  refactor: save ProjectBuilder instance in Api instance (#1016)
ba5781c is described below

commit ba5781c3bf9890dbb5f2a897c33cf274b87b1a81
Author: Raphael von der GrĂ¼n <ra...@gmail.com>
AuthorDate: Fri Jul 3 18:54:24 2020 +0200

    refactor: save ProjectBuilder instance in Api instance (#1016)
    
    This reduces dependence on the `builders` module and reduces repitition.
    
    This also facilitates another WIP refactoring I am working on.
---
 bin/templates/cordova/Api.js       |  6 ++++--
 bin/templates/cordova/lib/build.js |  5 ++---
 bin/templates/cordova/lib/run.js   |  3 +--
 spec/unit/Api.spec.js              | 11 ++++-------
 spec/unit/run.spec.js              |  6 ++++++
 5 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/bin/templates/cordova/Api.js b/bin/templates/cordova/Api.js
index 143047b..5142c7f 100644
--- a/bin/templates/cordova/Api.js
+++ b/bin/templates/cordova/Api.js
@@ -85,6 +85,8 @@ class Api {
             build: path.join(this.root, 'build'),
             javaSrc: path.join(appMain, 'java')
         };
+
+        this._builder = require('./lib/builders/builders').getBuilder(this.root);
     }
 
     /**
@@ -161,7 +163,7 @@ class Api {
             if (plugin.getFrameworks(this.platform).length === 0) return;
             selfEvents.emit('verbose', 'Updating build files since android plugin contained <framework>');
             // This should pick the correct builder, not just get gradle
-            require('./lib/builders/builders').getBuilder().prepBuildFiles();
+            this._builder.prepBuildFiles();
         }.bind(this))
             // CB-11022 Return truthy value to prevent running prepare after
             .then(() => true);
@@ -193,7 +195,7 @@ class Api {
                 if (plugin.getFrameworks(this.platform).length === 0) return;
 
                 selfEvents.emit('verbose', 'Updating build files since android plugin contained <framework>');
-                require('./lib/builders/builders').getBuilder().prepBuildFiles();
+                this._builder.prepBuildFiles();
             }.bind(this))
             // CB-11022 Return truthy value to prevent running prepare after
             .then(() => true);
diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js
index e199239..fcbd486 100644
--- a/bin/templates/cordova/lib/build.js
+++ b/bin/templates/cordova/lib/build.js
@@ -23,7 +23,6 @@ var nopt = require('nopt');
 
 var Adb = require('./Adb');
 
-var builders = require('./builders/builders');
 var events = require('cordova-common').events;
 const execa = require('execa');
 var CordovaError = require('cordova-common').CordovaError;
@@ -145,7 +144,7 @@ function parseOpts (options, resolvedTarget, projectRoot) {
  */
 module.exports.runClean = function (options) {
     var opts = parseOpts(options, null, this.root);
-    var builder = builders.getBuilder();
+    var builder = this._builder;
 
     return builder.prepEnv(opts).then(function () {
         return builder.clean(opts);
@@ -166,7 +165,7 @@ module.exports.runClean = function (options) {
  */
 module.exports.run = function (options, optResolvedTarget) {
     var opts = parseOpts(options, optResolvedTarget, this.root);
-    var builder = builders.getBuilder();
+    var builder = this._builder;
 
     return builder.prepEnv(opts).then(function () {
         if (opts.prepEnv) {
diff --git a/bin/templates/cordova/lib/run.js b/bin/templates/cordova/lib/run.js
index 892e9b0..c0a44d9 100644
--- a/bin/templates/cordova/lib/run.js
+++ b/bin/templates/cordova/lib/run.js
@@ -100,7 +100,6 @@ module.exports.run = function (runOptions) {
         });
     }).then(function (resolvedTarget) {
         return new Promise((resolve) => {
-            const builder = require('./builders/builders').getBuilder();
             const buildOptions = require('./build').parseBuildOptions(runOptions, null, self.root);
 
             // Android app bundles cannot be deployed directly to the device
@@ -110,7 +109,7 @@ module.exports.run = function (runOptions) {
                 throw packageTypeErrorMessage;
             }
 
-            resolve(builder.fetchBuildResults(buildOptions.buildType, buildOptions.arch));
+            resolve(self._builder.fetchBuildResults(buildOptions.buildType, buildOptions.arch));
         }).then(function (buildResults) {
             if (resolvedTarget && resolvedTarget.isEmulator) {
                 return emulator.wait_for_boot(resolvedTarget.target).then(function () {
diff --git a/spec/unit/Api.spec.js b/spec/unit/Api.spec.js
index b7242ce..94f4ed2 100644
--- a/spec/unit/Api.spec.js
+++ b/spec/unit/Api.spec.js
@@ -23,7 +23,6 @@ var common = require('cordova-common');
 var rewire = require('rewire');
 
 var AndroidProject = require('../../bin/templates/cordova/lib/AndroidProject');
-var builders = require('../../bin/templates/cordova/lib/builders/builders');
 
 var PluginInfo = common.PluginInfo;
 
@@ -31,7 +30,7 @@ var FIXTURES = path.join(__dirname, '../e2e/fixtures');
 var FAKE_PROJECT_DIR = path.join(os.tmpdir(), 'plugin-test-project');
 
 describe('addPlugin method', function () {
-    var api, Api, gradleBuilder;
+    var api, Api;
 
     beforeEach(function () {
         Api = rewire('../../bin/templates/cordova/Api');
@@ -49,22 +48,20 @@ describe('addPlugin method', function () {
         Api.__set__('selfEvents.emit', jasmine.createSpy());
 
         api = new Api('android', FAKE_PROJECT_DIR);
-
-        gradleBuilder = jasmine.createSpyObj('gradleBuilder', ['prepBuildFiles']);
-        spyOn(builders, 'getBuilder').and.returnValue(gradleBuilder);
+        spyOn(api._builder, 'prepBuildFiles');
     });
 
     const getPluginFixture = name => new PluginInfo(path.join(FIXTURES, name));
 
     it('Test#001 : should call gradleBuilder.prepBuildFiles for every plugin with frameworks', () => {
         return api.addPlugin(getPluginFixture('cordova-plugin-fake')).then(() => {
-            expect(gradleBuilder.prepBuildFiles).toHaveBeenCalled();
+            expect(api._builder.prepBuildFiles).toHaveBeenCalled();
         });
     });
 
     it('Test#002 : shouldn\'t trigger gradleBuilder.prepBuildFiles for plugins without android frameworks', () => {
         return api.addPlugin(getPluginFixture('cordova-plugin-fake-ios-frameworks')).then(() => {
-            expect(gradleBuilder.prepBuildFiles).not.toHaveBeenCalled();
+            expect(api._builder.prepBuildFiles).not.toHaveBeenCalled();
         });
     });
 });
diff --git a/spec/unit/run.spec.js b/spec/unit/run.spec.js
index 2f8f8b2..78104c7 100644
--- a/spec/unit/run.spec.js
+++ b/spec/unit/run.spec.js
@@ -18,6 +18,7 @@
 */
 
 const rewire = require('rewire');
+const builders = require('../../bin/templates/cordova/lib/builders/builders');
 
 describe('run', () => {
     let run;
@@ -59,6 +60,11 @@ describe('run', () => {
                 events: eventsSpyObj,
                 getInstallTarget: getInstallTargetSpy
             });
+
+            // run needs `this` to behave like an Api instance
+            run.run = run.run.bind({
+                _builder: builders.getBuilder('FakeRootPath')
+            });
         });
 
         it('should run on default device when no target arguments are specified', () => {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org