mirror of
https://github.com/apache/cordova-android.git
synced 2025-01-19 07:02:51 +08:00
feat: add listTarget api (#1602)
* feat: add listTarget api * test: write Platform API target list specs
This commit is contained in:
parent
cb48147398
commit
7da13ccf77
@ -277,6 +277,12 @@ class Api {
|
||||
});
|
||||
}
|
||||
|
||||
listTargets (options) {
|
||||
return require('./check_reqs').check_android().then(() => {
|
||||
return require('./run').runListDevices.call(this, options);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleans out the build artifacts from platform's directory, and also
|
||||
* cleans out the platform www directory if called without options specified.
|
||||
|
46
lib/run.js
46
lib/run.js
@ -83,3 +83,49 @@ module.exports.run = async function (runOptions = {}) {
|
||||
|
||||
return target.install(resolvedTarget, { manifest, buildResults, cordovaGradleConfigParser });
|
||||
};
|
||||
|
||||
module.exports.listDevices = async function () {
|
||||
events.emit('log', `\nAvailable ${this.platform} devices:`);
|
||||
|
||||
const { list } = require('./target');
|
||||
|
||||
await list().then(targets => {
|
||||
const deviceIds = targets
|
||||
.filter(({ type }) => type === 'device')
|
||||
.map(({ id }) => id);
|
||||
|
||||
console.log(deviceIds.join('\n'));
|
||||
}, function (err) {
|
||||
console.error('ERROR: ' + err);
|
||||
process.exit(2);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.listEmulators = async function () {
|
||||
events.emit('log', `\nAvailable ${this.platform} virtual devices:`);
|
||||
const emulators = require('./emulator');
|
||||
|
||||
await emulators.list_images().then(function (emulator_list) {
|
||||
emulator_list && emulator_list.forEach(function (emu) {
|
||||
console.log(emu.name);
|
||||
});
|
||||
}, function (err) {
|
||||
console.error('ERROR: ' + err);
|
||||
process.exit(2);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.runListDevices = async function (options = {}) {
|
||||
const { options: cliArgs = {} } = options;
|
||||
|
||||
if (cliArgs?.device) {
|
||||
await module.exports.listDevices.call(this);
|
||||
} else if (cliArgs?.emulator) {
|
||||
await module.exports.listEmulators.call(this);
|
||||
} else {
|
||||
await module.exports.listDevices.call(this);
|
||||
await module.exports.listEmulators.call(this);
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
@ -24,6 +24,8 @@ const EventEmitter = require('events');
|
||||
|
||||
const Api = require('../../lib/Api');
|
||||
const AndroidProject = require('../../lib/AndroidProject');
|
||||
const check_reqs = require('../../lib/check_reqs');
|
||||
const run_mod = require('../../lib/run');
|
||||
|
||||
const PluginInfo = common.PluginInfo;
|
||||
|
||||
@ -60,4 +62,19 @@ describe('Api', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('listTargets', () => {
|
||||
let api;
|
||||
|
||||
beforeEach(() => {
|
||||
api = new Api('android', FAKE_PROJECT_DIR, new EventEmitter());
|
||||
spyOn(check_reqs, 'run').and.returnValue(Promise.resolve());
|
||||
});
|
||||
it('should call into lib/run module', () => {
|
||||
spyOn(run_mod, 'runListDevices');
|
||||
return api.listTargets().then(() => {
|
||||
expect(run_mod.runListDevices).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -106,4 +106,32 @@ describe('run', () => {
|
||||
.toBeRejectedWithError(/Package type "bundle" is not supported/);
|
||||
});
|
||||
});
|
||||
|
||||
describe('--list option', () => {
|
||||
beforeEach(() => {
|
||||
spyOn(run, 'listDevices').and.returnValue(Promise.resolve());
|
||||
spyOn(run, 'listEmulators').and.returnValue(Promise.resolve());
|
||||
});
|
||||
|
||||
it('should delegate to "listDevices" when the "runListDevices" method options param contains "options.device".', () => {
|
||||
return run.runListDevices({ options: { device: true } }).then(() => {
|
||||
expect(run.listDevices).toHaveBeenCalled();
|
||||
expect(run.listEmulators).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
it('should delegate to "listDevices" when the "runListDevices" method options param contains "options.emulator".', () => {
|
||||
return run.runListDevices({ options: { emulator: true } }).then(() => {
|
||||
expect(run.listDevices).not.toHaveBeenCalled();
|
||||
expect(run.listEmulators).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
it('should delegate to both "listEmulators" and "listDevices" when the "runListDevices" method does not contain "options.device" or "options.emulator".', () => {
|
||||
return run.runListDevices({ options: {} }).then(() => {
|
||||
expect(run.listDevices).toHaveBeenCalled();
|
||||
expect(run.listEmulators).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user