From 3554267adf8d8e2c4e9b474fb188af3271b39b69 Mon Sep 17 00:00:00 2001 From: filmaj Date: Wed, 15 Mar 2017 07:47:51 -0700 Subject: [PATCH] CB-12546: more specs for android_sdk and check_reqs. added fixtures for sdk targets. refactored target listing. --- bin/templates/cordova/lib/android_sdk.js | 77 +- bin/templates/cordova/lib/check_reqs.js | 3 +- spec/fixtures/android_list_targets.txt | 116 +++ spec/fixtures/sdkmanager_list.txt | 1137 ++++++++++++++++++++++ spec/unit/android_sdk.spec.js | 122 +++ spec/unit/check_reqs.spec.js | 30 + 6 files changed, 1453 insertions(+), 32 deletions(-) create mode 100644 spec/fixtures/android_list_targets.txt create mode 100644 spec/fixtures/sdkmanager_list.txt create mode 100644 spec/unit/android_sdk.spec.js diff --git a/bin/templates/cordova/lib/android_sdk.js b/bin/templates/cordova/lib/android_sdk.js index 90fcfde1..112283fc 100755 --- a/bin/templates/cordova/lib/android_sdk.js +++ b/bin/templates/cordova/lib/android_sdk.js @@ -1,4 +1,4 @@ -#!/usr/bin/env node + /* Licensed to the Apache Software Foundation (ASF) under one @@ -44,51 +44,68 @@ module.exports.version_string_to_api_level = { '7.1.1': 25 }; -module.exports.list_targets = function() { +module.exports.list_targets_with_android = function() { return superspawn.spawn('android', ['list', 'targets']) .then(function(stdout) { var target_out = stdout.split('\n'); var targets = []; - for (var i = target_out.length; i >= 0; i--) { + for (var i = target_out.length - 1; i >= 0; i--) { if(target_out[i].match(/id:/)) { - targets.push(targets[i].split(' ')[1]); + targets.push(target_out[i].match(/"(.+)"/)[1]); } } return targets; - }).catch(function(err) { + }); +}; + +module.exports.list_targets_with_sdkmanager = function() { + return superspawn.spawn('sdkmanager', ['--list']) + .then(function(stdout) { + var parsing_installed_packages = false; + var lines = stdout.split('\n'); + var targets = []; + for (var i = 0, l = lines.length; i < l; i++) { + var line = lines[i]; + if (line.match(/Installed packages/)) { + parsing_installed_packages = true; + } else if (line.match(/Available Packages/) || line.match(/Available Updates/)) { + // we are done working through installed packages, exit + break; + } + if (parsing_installed_packages) { + // Match stock android platform + if (line.match(/platforms;android-\d+/)) { + targets.push(line.match(/(android-\d+)/)[1]); + } + // Match Google APIs + if (line.match(/addon-google_apis-google-\d+/)) { + var description = lines[i + 1]; + // munge description to match output from old android sdk tooling + var api_level = description.match(/Android (\d+)/); //[1]; + if (api_level) { + targets.push('Google Inc.:Google APIs:' + api_level[1]); + } + } + // TODO: match anything else? + } + } + return targets; + }); +}; + +module.exports.list_targets = function() { + return module.exports.list_targets_with_android() + .catch(function(err) { // there's a chance `android` no longer works. // lets see if `sdkmanager` is available and we can figure it out var avail_regex = /android command is no longer available/; if (err.code && (err.stdout.match(avail_regex) || err.stderr.match(avail_regex))) { - return superspawn.spawn('sdkmanager', ['--list']) - .then(function(stdout) { - var parsing_installed_packages = false; - var lines = stdout.split('\n'); - var targets = []; - for (var i = 0, l = lines.length; i < l; i++) { - var line = lines[i]; - if (line.match(/Installed packages/)) { - parsing_installed_packages = true; - } else if (line.match(/Available Packages/) || line.match(/Available Updates/)) { - // we are done working through installed packages, exit - break; - } - if (parsing_installed_packages && line.match(/platforms;android-\d+/)) { - targets.push(line.match(/android-\d+/)[0].split('-')[1]); - } - } - return targets; - }); + return module.exports.list_targets_with_sdkmanager(); } else throw err; }).then(function(targets) { if (targets.length === 0) { return Q.reject(new Error('No android targets (SDKs) installed!')); - } else { - // Ensure we are working with integers - targets = targets.map(function(t) { return parseInt(t); }); - // Sort them in descending order. - targets.sort(function(a, b) { return b-a; }); - return targets; } + return targets; }); }; diff --git a/bin/templates/cordova/lib/check_reqs.js b/bin/templates/cordova/lib/check_reqs.js index 7d954b46..24f2ad40 100644 --- a/bin/templates/cordova/lib/check_reqs.js +++ b/bin/templates/cordova/lib/check_reqs.js @@ -317,8 +317,7 @@ module.exports.check_android_target = function(originalError) { // android-L // Google Inc.:Google APIs:20 // Google Inc.:Glass Development Kit Preview:20 - var desired_api_level = parseInt(module.exports.get_target().replace(/android-/, '')); - // Changing "targets" to "target" is stupid and makes more code. Thanks Google! + var desired_api_level = module.exports.get_target(); return android_sdk.list_targets() .then(function(targets) { if (targets.indexOf(desired_api_level) >= 0) { diff --git a/spec/fixtures/android_list_targets.txt b/spec/fixtures/android_list_targets.txt new file mode 100644 index 00000000..b21e4bd3 --- /dev/null +++ b/spec/fixtures/android_list_targets.txt @@ -0,0 +1,116 @@ +Available Android targets: +---------- +id: 1 or "android-20" + Name: Android 4.4W.2 + Type: Platform + API level: 20 + Revision: 2 + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : no ABIs. +---------- +id: 2 or "android-21" + Name: Android 5.0.1 + Type: Platform + API level: 21 + Revision: 2 + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : android-tv/armeabi-v7a, android-tv/x86, default/armeabi-v7a, default/x86, default/x86_64 +---------- +id: 3 or "android-22" + Name: Android 5.1.1 + Type: Platform + API level: 22 + Revision: 2 + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : android-tv/armeabi-v7a, android-tv/x86, default/armeabi-v7a, default/x86, default/x86_64 +---------- +id: 4 or "android-MNC" + Name: Android M (Preview) + Type: Platform + API level: MNC + Revision: 1 + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : no ABIs. +---------- +id: 5 or "android-23" + Name: Android 6.0 + Type: Platform + API level: 23 + Revision: 3 + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : android-tv/armeabi-v7a, android-tv/x86, default/x86, default/x86_64 +---------- +id: 6 or "android-N" + Name: Android N (Preview) + Type: Platform + API level: N + Revision: 3 + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : no ABIs. +---------- +id: 7 or "android-24" + Name: Android 7.0 + Type: Platform + API level: 24 + Revision: 2 + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : android-tv/x86, default/x86, default/x86_64 +---------- +id: 8 or "android-25" + Name: Android 7.1.1 + Type: Platform + API level: 25 + Revision: 3 + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : android-tv/x86, google_apis/x86, google_apis/x86_64 +---------- +id: 9 or "Google Inc.:Google APIs:21" + Name: Google APIs + Type: Add-On + Vendor: Google Inc. + Revision: 1 + Description: Android + Google APIs + Based on Android 5.0.1 (API level 21) + Libraries: + * com.android.future.usb.accessory (usb.jar) + API for USB Accessories + * com.google.android.media.effects (effects.jar) + Collection of video effects + * com.google.android.maps (maps.jar) + API for Google Maps + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : google_apis/armeabi-v7a, google_apis/x86, google_apis/x86_64 +---------- +id: 10 or "Google Inc.:Google APIs:22" + Name: Google APIs + Type: Add-On + Vendor: Google Inc. + Revision: 1 + Description: Android + Google APIs + Based on Android 5.1.1 (API level 22) + Libraries: + * com.android.future.usb.accessory (usb.jar) + API for USB Accessories + * com.google.android.media.effects (effects.jar) + Collection of video effects + * com.google.android.maps (maps.jar) + API for Google Maps + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : google_apis/armeabi-v7a, google_apis/x86, google_apis/x86_64 +---------- +id: 11 or "Google Inc.:Google APIs:23" + Name: Google APIs + Type: Add-On + Vendor: Google Inc. + Revision: 1 + Description: Android + Google APIs + Based on Android 6.0 (API level 23) + Libraries: + * com.android.future.usb.accessory (usb.jar) + API for USB Accessories + * com.google.android.media.effects (effects.jar) + Collection of video effects + * com.google.android.maps (maps.jar) + API for Google Maps + Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in + Tag/ABIs : google_apis/armeabi-v7a, google_apis/x86, google_apis/x86_64 diff --git a/spec/fixtures/sdkmanager_list.txt b/spec/fixtures/sdkmanager_list.txt new file mode 100644 index 00000000..40dc3e01 --- /dev/null +++ b/spec/fixtures/sdkmanager_list.txt @@ -0,0 +1,1137 @@ +Info: Parsing /Users/maj/sdks/android/add-ons/addon-google_apis-google-19/package.xml +Info: Parsing /Users/maj/sdks/android/add-ons/addon-google_apis-google-21/package.xml +Info: Parsing /Users/maj/sdks/android/add-ons/addon-google_apis-google-22/package.xml +Info: Parsing /Users/maj/sdks/android/add-ons/addon-google_apis-google-23/package.xml +Info: Parsing /Users/maj/sdks/android/add-ons/addon-google_apis-google-24/package.xml +Info: Parsing /Users/maj/sdks/android/build-tools/25.0.2/package.xml +Info: Parsing /Users/maj/sdks/android/emulator/package.xml +Info: Parsing /Users/maj/sdks/android/extras/android/m2repository/package.xml +Info: Parsing /Users/maj/sdks/android/extras/google/google_play_services/package.xml +Info: Parsing /Users/maj/sdks/android/extras/google/m2repository/package.xml +Info: Parsing /Users/maj/sdks/android/extras/intel/Hardware_Accelerated_Execution_Manager/package.xml +Info: Parsing /Users/maj/sdks/android/extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.2/package.xml +Info: Parsing /Users/maj/sdks/android/extras/m2repository/com/android/support/constraint/constraint-layout/1.0.2/package.xml +Info: Parsing /Users/maj/sdks/android/patcher/v4/package.xml +Info: Parsing /Users/maj/sdks/android/platform-tools/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-19/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-21/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-22/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-23/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-24/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-25/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-19/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-21/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-22/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-23/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-24/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-25/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-19/default/x86/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-19/google_apis/x86/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-21/default/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-21/google_apis/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-22/default/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-22/google_apis/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-23/default/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-23/google_apis/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-24/default/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-24/google_apis/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-25/google_apis/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/tools/package.xml +Info: Parsing /Users/maj/sdks/android/add-ons/addon-google_apis-google-19/package.xml +Info: Parsing /Users/maj/sdks/android/add-ons/addon-google_apis-google-21/package.xml +Info: Parsing /Users/maj/sdks/android/add-ons/addon-google_apis-google-22/package.xml +Info: Parsing /Users/maj/sdks/android/add-ons/addon-google_apis-google-23/package.xml +Info: Parsing /Users/maj/sdks/android/add-ons/addon-google_apis-google-24/package.xml +Info: Parsing /Users/maj/sdks/android/build-tools/25.0.2/package.xml +Info: Parsing /Users/maj/sdks/android/emulator/package.xml +Info: Parsing /Users/maj/sdks/android/extras/android/m2repository/package.xml +Info: Parsing /Users/maj/sdks/android/extras/google/google_play_services/package.xml +Info: Parsing /Users/maj/sdks/android/extras/google/m2repository/package.xml +Info: Parsing /Users/maj/sdks/android/extras/intel/Hardware_Accelerated_Execution_Manager/package.xml +Info: Parsing /Users/maj/sdks/android/extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.2/package.xml +Info: Parsing /Users/maj/sdks/android/extras/m2repository/com/android/support/constraint/constraint-layout/1.0.2/package.xml +Info: Parsing /Users/maj/sdks/android/patcher/v4/package.xml +Info: Parsing /Users/maj/sdks/android/platform-tools/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-19/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-21/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-22/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-23/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-24/package.xml +Info: Parsing /Users/maj/sdks/android/platforms/android-25/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-19/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-21/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-22/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-23/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-24/package.xml +Info: Parsing /Users/maj/sdks/android/sources/android-25/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-19/default/x86/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-19/google_apis/x86/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-21/default/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-21/google_apis/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-22/default/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-22/google_apis/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-23/default/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-23/google_apis/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-24/default/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-24/google_apis/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/system-images/android-25/google_apis/x86_64/package.xml +Info: Parsing /Users/maj/sdks/android/tools/package.xml +Installed packages: +-------------------------------------- +add-ons;addon-google_apis-google-19 + Description: Google APIs, Android 19, rev 20 + Version: 20.0.0 + Installed Location: /Users/maj/sdks/android/add-ons/addon-google_apis-google-19 + +add-ons;addon-google_apis-google-21 + Description: Google APIs, Android 21 + Version: 1.0.0 + Installed Location: /Users/maj/sdks/android/add-ons/addon-google_apis-google-21 + +add-ons;addon-google_apis-google-22 + Description: Google APIs, Android 22 + Version: 1.0.0 + Installed Location: /Users/maj/sdks/android/add-ons/addon-google_apis-google-22 + +add-ons;addon-google_apis-google-23 + Description: Google APIs, Android 23 + Version: 1.0.0 + Installed Location: /Users/maj/sdks/android/add-ons/addon-google_apis-google-23 + +add-ons;addon-google_apis-google-24 + Description: Google APIs, Android 24 + Version: 1.0.0 + Installed Location: /Users/maj/sdks/android/add-ons/addon-google_apis-google-24 + +build-tools;25.0.2 + Description: Android SDK Build-Tools 25.0.2 + Version: 25.0.2 + Installed Location: /Users/maj/sdks/android/build-tools/25.0.2 + +emulator + Description: Android Emulator + Version: 25.3.1 + Installed Location: /Users/maj/sdks/android/emulator + +extras;android;m2repository + Description: Android Support Repository + Version: 44.0.0 + Installed Location: /Users/maj/sdks/android/extras/android/m2repository + +extras;google;google_play_services + Description: Google Play services, rev 38 + Version: 38.0.0 + Installed Location: /Users/maj/sdks/android/extras/google/google_play_services + +extras;google;m2repository + Description: Google Repository + Version: 44 + Installed Location: /Users/maj/sdks/android/extras/google/m2repository + +extras;intel;Hardware_Accelerated_Execution_Manager + Description: Intel x86 Emulator Accelerator (HAXM installer), rev 6.0.5 + Version: 6.0.5 + Installed Location: /Users/maj/sdks/android/extras/intel/Hardware_Accelerated_Execution_Manager + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2 + Description: Solver for ConstraintLayout 1.0.2 + Version: 1 + Installed Location: /Users/maj/sdks/android/extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.2 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2 + Description: ConstraintLayout for Android 1.0.2 + Version: 1 + Installed Location: /Users/maj/sdks/android/extras/m2repository/com/android/support/constraint/constraint-layout/1.0.2 + +patcher;v4 + Description: SDK Patch Applier v4 + Version: 1 + Installed Location: /Users/maj/sdks/android/patcher/v4 + +platform-tools + Description: Android SDK Platform-Tools 25.0.3 + Version: 25.0.3 + Installed Location: /Users/maj/sdks/android/platform-tools + +platforms;android-19 + Description: Android SDK Platform 19, rev 4 + Version: 4 + Installed Location: /Users/maj/sdks/android/platforms/android-19 + +platforms;android-21 + Description: Android SDK Platform 21, rev 2 + Version: 2 + Installed Location: /Users/maj/sdks/android/platforms/android-21 + +platforms;android-22 + Description: Android SDK Platform 22, rev 2 + Version: 2 + Installed Location: /Users/maj/sdks/android/platforms/android-22 + +platforms;android-23 + Description: Android SDK Platform 23, rev 3 + Version: 3 + Installed Location: /Users/maj/sdks/android/platforms/android-23 + +platforms;android-24 + Description: Android SDK Platform 24, rev 2 + Version: 2 + Installed Location: /Users/maj/sdks/android/platforms/android-24 + +platforms;android-25 + Description: Android SDK Platform 25, rev 3 + Version: 3 + Installed Location: /Users/maj/sdks/android/platforms/android-25 + +sources;android-19 + Description: Sources for Android 19 + Version: 2 + Installed Location: /Users/maj/sdks/android/sources/android-19 + +sources;android-21 + Description: Sources for Android 21 + Version: 1 + Installed Location: /Users/maj/sdks/android/sources/android-21 + +sources;android-22 + Description: Sources for Android 22 + Version: 1 + Installed Location: /Users/maj/sdks/android/sources/android-22 + +sources;android-23 + Description: Sources for Android 23 + Version: 1 + Installed Location: /Users/maj/sdks/android/sources/android-23 + +sources;android-24 + Description: Sources for Android 24 + Version: 1 + Installed Location: /Users/maj/sdks/android/sources/android-24 + +sources;android-25 + Description: Sources for Android 25 + Version: 1 + Installed Location: /Users/maj/sdks/android/sources/android-25 + +system-images;android-19;default;x86 + Description: Intel x86 Atom System Image + Version: 5 + Installed Location: /Users/maj/sdks/android/system-images/android-19/default/x86 + +system-images;android-19;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 26 + Installed Location: /Users/maj/sdks/android/system-images/android-19/google_apis/x86 + +system-images;android-21;default;x86_64 + Description: Intel x86 Atom_64 System Image + Version: 4 + Installed Location: /Users/maj/sdks/android/system-images/android-21/default/x86_64 + +system-images;android-21;google_apis;x86_64 + Description: Google APIs Intel x86 Atom_64 System Image + Version: 18 + Installed Location: /Users/maj/sdks/android/system-images/android-21/google_apis/x86_64 + +system-images;android-22;default;x86_64 + Description: Intel x86 Atom_64 System Image + Version: 5 + Installed Location: /Users/maj/sdks/android/system-images/android-22/default/x86_64 + +system-images;android-22;google_apis;x86_64 + Description: Google APIs Intel x86 Atom_64 System Image + Version: 12 + Installed Location: /Users/maj/sdks/android/system-images/android-22/google_apis/x86_64 + +system-images;android-23;default;x86_64 + Description: Intel x86 Atom_64 System Image + Version: 9 + Installed Location: /Users/maj/sdks/android/system-images/android-23/default/x86_64 + +system-images;android-23;google_apis;x86_64 + Description: Google APIs Intel x86 Atom_64 System Image + Version: 19 + Installed Location: /Users/maj/sdks/android/system-images/android-23/google_apis/x86_64 + +system-images;android-24;default;x86_64 + Description: Intel x86 Atom_64 System Image + Version: 7 + Installed Location: /Users/maj/sdks/android/system-images/android-24/default/x86_64 + +system-images;android-24;google_apis;x86_64 + Description: Google APIs Intel x86 Atom_64 System Image + Version: 10 + Installed Location: /Users/maj/sdks/android/system-images/android-24/google_apis/x86_64 + +system-images;android-25;google_apis;x86_64 + Description: Google APIs Intel x86 Atom_64 System Image + Version: 3 + Installed Location: /Users/maj/sdks/android/system-images/android-25/google_apis/x86_64 + +tools + Description: Android SDK Tools + Version: 25.3.1 + Installed Location: /Users/maj/sdks/android/tools + +Available Packages: +-------------------------------------- +add-ons;addon-google_apis-google-15 + Description: Google APIs + Version: 3 + +add-ons;addon-google_apis-google-16 + Description: Google APIs + Version: 4 + +add-ons;addon-google_apis-google-17 + Description: Google APIs + Version: 4 + +add-ons;addon-google_apis-google-18 + Description: Google APIs + Version: 4 + +add-ons;addon-google_apis-google-19 + Description: Google APIs + Version: 20 + +add-ons;addon-google_apis-google-21 + Description: Google APIs + Version: 1 + +add-ons;addon-google_apis-google-22 + Description: Google APIs + Version: 1 + +add-ons;addon-google_apis-google-23 + Description: Google APIs + Version: 1 + +add-ons;addon-google_apis-google-24 + Description: Google APIs + Version: 1 + +add-ons;addon-google_gdk-google-19 + Description: Glass Development Kit Preview + Version: 11 + +build-tools;19.1.0 + Description: Android SDK Build-Tools 19.1 + Version: 19.1.0 + +build-tools;20.0.0 + Description: Android SDK Build-Tools 20 + Version: 20.0.0 + +build-tools;21.1.2 + Description: Android SDK Build-Tools 21.1.2 + Version: 21.1.2 + +build-tools;22.0.1 + Description: Android SDK Build-Tools 22.0.1 + Version: 22.0.1 + +build-tools;23.0.1 + Description: Android SDK Build-Tools 23.0.1 + Version: 23.0.1 + +build-tools;23.0.2 + Description: Android SDK Build-Tools 23.0.2 + Version: 23.0.2 + +build-tools;23.0.3 + Description: Android SDK Build-Tools 23.0.3 + Version: 23.0.3 + +build-tools;24.0.0 + Description: Android SDK Build-Tools 24 + Version: 24.0.0 + +build-tools;24.0.1 + Description: Android SDK Build-Tools 24.0.1 + Version: 24.0.1 + +build-tools;24.0.2 + Description: Android SDK Build-Tools 24.0.2 + Version: 24.0.2 + +build-tools;24.0.3 + Description: Android SDK Build-Tools 24.0.3 + Version: 24.0.3 + +build-tools;25.0.0 + Description: Android SDK Build-Tools 25 + Version: 25.0.0 + +build-tools;25.0.1 + Description: Android SDK Build-Tools 25.0.1 + Version: 25.0.1 + +build-tools;25.0.2 + Description: Android SDK Build-Tools 25.0.2 + Version: 25.0.2 + +cmake;3.6.3155560 + Description: CMake 3.6.3155560 + Version: 3.6.3155560 + +docs + Description: Documentation for Android SDK + Version: 1 + +emulator + Description: Android Emulator + Version: 25.3.1 + Dependencies: + tools Revision 25.3 + +extras;android;gapid;1 + Description: GPU Debugging tools + Version: 1.0.3 + +extras;android;gapid;3 + Description: GPU Debugging tools + Version: 3.1.0 + +extras;android;m2repository + Description: Android Support Repository + Version: 45.0.0 + +extras;google;auto + Description: Android Auto Desktop Head Unit emulator + Version: 1.1 + +extras;google;google_play_services + Description: Google Play services + Version: 39 + Dependencies: + patcher;v4 + +extras;google;m2repository + Description: Google Repository + Version: 44 + Dependencies: + patcher;v4 + +extras;google;market_apk_expansion + Description: Google Play APK Expansion library + Version: 1 + +extras;google;market_licensing + Description: Google Play Licensing Library + Version: 1 + +extras;google;play_billing + Description: Google Play Billing Library + Version: 5 + +extras;google;simulators + Description: Android Auto API Simulators + Version: 1 + +extras;google;webdriver + Description: Google Web Driver + Version: 2 + +extras;intel;Hardware_Accelerated_Execution_Manager + Description: Intel x86 Emulator Accelerator (HAXM installer) + Version: 6.0.5 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0 + Description: Solver for ConstraintLayout 1.0.0 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha2 + Description: com.android.support.constraint:constraint-layout-solver:1.0.0-alpha2 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha3 + Description: com.android.support.constraint:constraint-layout-solver:1.0.0-alpha3 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha4 + Description: com.android.support.constraint:constraint-layout-solver:1.0.0-alpha4 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha5 + Description: Solver for ConstraintLayout 1.0.0-alpha5 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha6 + Description: Solver for ConstraintLayout 1.0.0-alpha6 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha7 + Description: Solver for ConstraintLayout 1.0.0-alpha7 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha8 + Description: Solver for ConstraintLayout 1.0.0-alpha8 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha9 + Description: Solver for ConstraintLayout 1.0.0-alpha9 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta1 + Description: Solver for ConstraintLayout 1.0.0-beta1 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta2 + Description: Solver for ConstraintLayout 1.0.0-beta2 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta3 + Description: Solver for ConstraintLayout 1.0.0-beta3 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta4 + Description: Solver for ConstraintLayout 1.0.0-beta4 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta5 + Description: Solver for ConstraintLayout 1.0.0-beta5 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1 + Description: Solver for ConstraintLayout 1.0.1 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2 + Description: Solver for ConstraintLayout 1.0.2 + Version: 1 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0 + Description: ConstraintLayout for Android 1.0.0 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha2 + Description: com.android.support.constraint:constraint-layout:1.0.0-alpha2 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha2 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha3 + Description: com.android.support.constraint:constraint-layout:1.0.0-alpha3 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha3 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha4 + Description: com.android.support.constraint:constraint-layout:1.0.0-alpha4 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha4 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha5 + Description: ConstraintLayout for Android 1.0.0-alpha5 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha5 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha6 + Description: ConstraintLayout for Android 1.0.0-alpha6 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha6 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha7 + Description: ConstraintLayout for Android 1.0.0-alpha7 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha7 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha8 + Description: ConstraintLayout for Android 1.0.0-alpha8 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha8 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-alpha9 + Description: ConstraintLayout for Android 1.0.0-alpha9 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha9 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta1 + Description: ConstraintLayout for Android 1.0.0-beta1 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta1 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta2 + Description: ConstraintLayout for Android 1.0.0-beta2 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta2 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta3 + Description: ConstraintLayout for Android 1.0.0-beta3 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta3 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta4 + Description: ConstraintLayout for Android 1.0.0-beta4 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta4 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta5 + Description: ConstraintLayout for Android 1.0.0-beta5 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta5 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1 + Description: ConstraintLayout for Android 1.0.1 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1 + +extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2 + Description: ConstraintLayout for Android 1.0.2 + Version: 1 + Dependencies: + extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2 + +lldb;2.0 + Description: LLDB 2.0 + Version: 2.0.2558144 + +lldb;2.1 + Description: LLDB 2.1 + Version: 2.1.2852477 + +lldb;2.2 + Description: LLDB 2.2 + Version: 2.2.3271982 + Dependencies: + patcher;v4 + +lldb;2.3 + Description: LLDB 2.3 + Version: 2.3.3614996 + Dependencies: + patcher;v4 + +ndk-bundle + Description: NDK + Version: 14.0.3770861 + +patcher;v4 + Description: SDK Patch Applier v4 + Version: 1 + +platform-tools + Description: Android SDK Platform-Tools + Version: 25.0.3 + +platforms;android-10 + Description: Android SDK Platform 10 + Version: 2 + +platforms;android-11 + Description: Android SDK Platform 11 + Version: 2 + +platforms;android-12 + Description: Android SDK Platform 12 + Version: 3 + +platforms;android-13 + Description: Android SDK Platform 13 + Version: 1 + +platforms;android-14 + Description: Android SDK Platform 14 + Version: 4 + +platforms;android-15 + Description: Android SDK Platform 15 + Version: 5 + +platforms;android-16 + Description: Android SDK Platform 16 + Version: 5 + +platforms;android-17 + Description: Android SDK Platform 17 + Version: 3 + +platforms;android-18 + Description: Android SDK Platform 18 + Version: 3 + +platforms;android-19 + Description: Android SDK Platform 19 + Version: 4 + +platforms;android-20 + Description: Android SDK Platform 20 + Version: 2 + +platforms;android-21 + Description: Android SDK Platform 21 + Version: 2 + +platforms;android-22 + Description: Android SDK Platform 22 + Version: 2 + +platforms;android-23 + Description: Android SDK Platform 23 + Version: 3 + +platforms;android-24 + Description: Android SDK Platform 24 + Version: 2 + +platforms;android-25 + Description: Android SDK Platform 25 + Version: 3 + +platforms;android-7 + Description: Android SDK Platform 7 + Version: 3 + +platforms;android-8 + Description: Android SDK Platform 8 + Version: 3 + +platforms;android-9 + Description: Android SDK Platform 9 + Version: 2 + +sources;android-15 + Description: Sources for Android 15 + Version: 2 + +sources;android-16 + Description: Sources for Android 16 + Version: 2 + +sources;android-17 + Description: Sources for Android 17 + Version: 1 + +sources;android-18 + Description: Sources for Android 18 + Version: 1 + +sources;android-19 + Description: Sources for Android 19 + Version: 2 + +sources;android-20 + Description: Sources for Android 20 + Version: 1 + +sources;android-21 + Description: Sources for Android 21 + Version: 1 + +sources;android-22 + Description: Sources for Android 22 + Version: 1 + +sources;android-23 + Description: Sources for Android 23 + Version: 1 + +sources;android-24 + Description: Sources for Android 24 + Version: 1 + +sources;android-25 + Description: Sources for Android 25 + Version: 1 + +system-images;android-10;default;armeabi-v7a + Description: ARM EABI v7a System Image + Version: 4 + +system-images;android-10;default;x86 + Description: Intel x86 Atom System Image + Version: 4 + +system-images;android-10;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 5 + +system-images;android-10;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 5 + +system-images;android-14;default;armeabi-v7a + Description: ARM EABI v7a System Image + Version: 2 + +system-images;android-15;default;armeabi-v7a + Description: ARM EABI v7a System Image + Version: 4 + Dependencies: + patcher;v4 + +system-images;android-15;default;mips + Description: MIPS System Image + Version: 1 + +system-images;android-15;default;x86 + Description: Intel x86 Atom System Image + Version: 4 + +system-images;android-15;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 5 + +system-images;android-15;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 5 + +system-images;android-16;default;armeabi-v7a + Description: ARM EABI v7a System Image + Version: 4 + +system-images;android-16;default;mips + Description: MIPS System Image + Version: 1 + +system-images;android-16;default;x86 + Description: Intel x86 Atom System Image + Version: 5 + +system-images;android-16;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 5 + +system-images;android-16;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 5 + +system-images;android-17;default;armeabi-v7a + Description: ARM EABI v7a System Image + Version: 5 + Dependencies: + patcher;v4 + +system-images;android-17;default;mips + Description: MIPS System Image + Version: 1 + +system-images;android-17;default;x86 + Description: Intel x86 Atom System Image + Version: 3 + Dependencies: + patcher;v4 + +system-images;android-17;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 5 + +system-images;android-17;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 5 + +system-images;android-18;default;armeabi-v7a + Description: ARM EABI v7a System Image + Version: 4 + Dependencies: + patcher;v4 + +system-images;android-18;default;x86 + Description: Intel x86 Atom System Image + Version: 3 + Dependencies: + patcher;v4 + +system-images;android-18;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 5 + +system-images;android-18;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 5 + +system-images;android-19;default;armeabi-v7a + Description: ARM EABI v7a System Image + Version: 5 + Dependencies: + patcher;v4 + +system-images;android-19;default;x86 + Description: Intel x86 Atom System Image + Version: 5 + Dependencies: + patcher;v4 + +system-images;android-19;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 27 + Dependencies: + patcher;v4 + +system-images;android-19;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 27 + Dependencies: + patcher;v4 + +system-images;android-21;android-tv;armeabi-v7a + Description: Android TV ARM EABI v7a System Image + Version: 3 + +system-images;android-21;android-tv;x86 + Description: Android TV Intel x86 Atom System Image + Version: 3 + +system-images;android-21;default;armeabi-v7a + Description: ARM EABI v7a System Image + Version: 4 + Dependencies: + patcher;v4 + +system-images;android-21;default;x86 + Description: Intel x86 Atom System Image + Version: 4 + Dependencies: + patcher;v4 + +system-images;android-21;default;x86_64 + Description: Intel x86 Atom_64 System Image + Version: 4 + Dependencies: + patcher;v4 + +system-images;android-21;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 19 + Dependencies: + patcher;v4 + +system-images;android-21;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 19 + Dependencies: + patcher;v4 + +system-images;android-21;google_apis;x86_64 + Description: Google APIs Intel x86 Atom_64 System Image + Version: 19 + Dependencies: + patcher;v4 + +system-images;android-22;android-tv;armeabi-v7a + Description: Android TV ARM EABI v7a System Image + Version: 1 + +system-images;android-22;android-tv;x86 + Description: Android TV Intel x86 Atom System Image + Version: 3 + +system-images;android-22;default;armeabi-v7a + Description: ARM EABI v7a System Image + Version: 2 + Dependencies: + patcher;v4 + +system-images;android-22;default;x86 + Description: Intel x86 Atom System Image + Version: 5 + Dependencies: + patcher;v4 + +system-images;android-22;default;x86_64 + Description: Intel x86 Atom_64 System Image + Version: 5 + Dependencies: + patcher;v4 + +system-images;android-22;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 13 + Dependencies: + patcher;v4 + +system-images;android-22;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 13 + Dependencies: + patcher;v4 + +system-images;android-22;google_apis;x86_64 + Description: Google APIs Intel x86 Atom_64 System Image + Version: 13 + Dependencies: + patcher;v4 + +system-images;android-23;android-tv;armeabi-v7a + Description: Android TV ARM EABI v7a System Image + Version: 3 + +system-images;android-23;android-tv;x86 + Description: Android TV Intel x86 Atom System Image + Version: 9 + Dependencies: + patcher;v4 + +system-images;android-23;android-wear;armeabi-v7a + Description: Android Wear ARM EABI v7a System Image + Version: 6 + Dependencies: + patcher;v4 + +system-images;android-23;android-wear;x86 + Description: Android Wear Intel x86 Atom System Image + Version: 6 + Dependencies: + patcher;v4 + +system-images;android-23;default;x86 + Description: Intel x86 Atom System Image + Version: 9 + Dependencies: + patcher;v4 + +system-images;android-23;default;x86_64 + Description: Intel x86 Atom_64 System Image + Version: 9 + Dependencies: + patcher;v4 + +system-images;android-23;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 20 + Dependencies: + patcher;v4 + +system-images;android-23;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 20 + Dependencies: + patcher;v4 + +system-images;android-23;google_apis;x86_64 + Description: Google APIs Intel x86 Atom_64 System Image + Version: 20 + Dependencies: + patcher;v4 + +system-images;android-24;android-tv;x86 + Description: Android TV Intel x86 Atom System Image + Version: 10 + Dependencies: + patcher;v4 + +system-images;android-24;default;arm64-v8a + Description: ARM 64 v8a System Image + Version: 7 + +system-images;android-24;default;armeabi-v7a + Description: ARM EABI v7a System Image + Version: 7 + Dependencies: + patcher;v4 + +system-images;android-24;default;x86 + Description: Intel x86 Atom System Image + Version: 7 + +system-images;android-24;default;x86_64 + Description: Intel x86 Atom_64 System Image + Version: 7 + Dependencies: + patcher;v4 + +system-images;android-24;google_apis;arm64-v8a + Description: Google APIs ARM 64 v8a System Image + Version: 11 + Dependencies: + patcher;v4 + +system-images;android-24;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 11 + Dependencies: + patcher;v4 + +system-images;android-24;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 11 + Dependencies: + patcher;v4 + +system-images;android-24;google_apis;x86_64 + Description: Google APIs Intel x86 Atom_64 System Image + Version: 11 + Dependencies: + patcher;v4 + +system-images;android-25;android-tv;x86 + Description: Android TV Intel x86 Atom System Image + Version: 3 + +system-images;android-25;android-wear;armeabi-v7a + Description: Android Wear ARM EABI v7a System Image + Version: 3 + Dependencies: + patcher;v4 + +system-images;android-25;android-wear;x86 + Description: Android Wear Intel x86 Atom System Image + Version: 3 + Dependencies: + patcher;v4 + +system-images;android-25;google_apis;arm64-v8a + Description: Google APIs ARM 64 v8a System Image + Version: 4 + +system-images;android-25;google_apis;armeabi-v7a + Description: Google APIs ARM EABI v7a System Image + Version: 4 + +system-images;android-25;google_apis;x86 + Description: Google APIs Intel x86 Atom System Image + Version: 4 + +system-images;android-25;google_apis;x86_64 + Description: Google APIs Intel x86 Atom_64 System Image + Version: 4 + +tools + Description: Android SDK Tools + Version: 25.3.1 + Dependencies: + emulator + platform-tools Revision 20 + +Available Updates: +-------------------------------------- +extras;android;m2repository + Local Version: 44.0.0 + Remote Version: 45.0.0 +extras;google;google_play_services + Local Version: 38.0.0 + Remote Version: 39 +system-images;android-19;google_apis;x86 + Local Version: 26 + Remote Version: 27 +system-images;android-21;google_apis;x86_64 + Local Version: 18 + Remote Version: 19 +system-images;android-22;google_apis;x86_64 + Local Version: 12 + Remote Version: 13 +system-images;android-23;google_apis;x86_64 + Local Version: 19 + Remote Version: 20 +system-images;android-24;google_apis;x86_64 + Local Version: 10 + Remote Version: 11 +system-images;android-25;google_apis;x86_64 + Local Version: 3 + Remote Version: 4 +done diff --git a/spec/unit/android_sdk.spec.js b/spec/unit/android_sdk.spec.js new file mode 100644 index 00000000..a796a98e --- /dev/null +++ b/spec/unit/android_sdk.spec.js @@ -0,0 +1,122 @@ +/** + 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. +*/ +/* jshint laxcomma:true */ + +var android_sdk = require("../../bin/templates/cordova/lib/android_sdk"); +var superspawn = require("cordova-common").superspawn; +var fs = require("fs"); +var path = require("path"); +var Q = require("q"); + +describe("android_sdk", function () { + describe("list_targets_with_android", function() { + it("should parse and return results from `android list targets` command", function(done) { + var deferred = Q.defer(); + spyOn(superspawn, "spawn").and.returnValue(deferred.promise); + deferred.resolve(fs.readFileSync(path.join("spec", "fixtures", "android_list_targets.txt"), "utf-8")); + return android_sdk.list_targets_with_android() + .then(function(list) { + [ "Google Inc.:Google APIs:23", + "Google Inc.:Google APIs:22", + "Google Inc.:Google APIs:21", + "android-25", + "android-24", + "android-N", + "android-23", + "android-MNC", + "android-22", + "android-21", + "android-20" ].forEach(function(target) { + expect(list).toContain(target); + }); + }).fail(function(err) { + console.log(err); + expect(err).toBeUndefined(); + }).fin(function() { + done(); + }); + }); + }); + describe("list_targets_with_sdkmanager", function() { + it("should parse and return results from `sdkmanager --list` command", function(done) { + var deferred = Q.defer(); + spyOn(superspawn, "spawn").and.returnValue(deferred.promise); + deferred.resolve(fs.readFileSync(path.join("spec", "fixtures", "sdkmanager_list.txt"), "utf-8")); + return android_sdk.list_targets_with_sdkmanager() + .then(function(list) { + [ "Google Inc.:Google APIs:19", + "Google Inc.:Google APIs:21", + "Google Inc.:Google APIs:22", + "Google Inc.:Google APIs:23", + "Google Inc.:Google APIs:24", + "android-19", + "android-21", + "android-22", + "android-23", + "android-24", + "android-25" ].forEach(function(target) { + expect(list).toContain(target); + }); + }).fail(function(err) { + console.log(err); + expect(err).toBeUndefined(); + }).fin(function() { + done(); + }); + }); + }); + describe("list_targets", function() { + it("should parse Android SDK installed target information with `android` command first", function() { + var deferred = Q.defer(); + var android_spy = spyOn(android_sdk, "list_targets_with_android").and.returnValue(deferred.promise); + android_sdk.list_targets(); + expect(android_spy).toHaveBeenCalled(); + }); + it("should parse Android SDK installed target information with `avdmanager` command if list_targets_with_android fails due to `android` command being obsolete", function(done) { + var deferred = Q.defer(); + spyOn(android_sdk, "list_targets_with_android").and.returnValue(deferred.promise); + deferred.reject({ + code: 1, + stdout: "The android command is no longer available." + }); + var twoferred = Q.defer(); + twoferred.resolve(["target1"]); + var sdkmanager_spy = spyOn(android_sdk, "list_targets_with_sdkmanager").and.returnValue(twoferred.promise); + return android_sdk.list_targets() + .then(function(targets) { + expect(sdkmanager_spy).toHaveBeenCalled(); + expect(targets[0]).toEqual("target1"); + done(); + }); + }); + it("should throw an error if no Android targets were found.", function(done) { + var deferred = Q.defer(); + spyOn(android_sdk, "list_targets_with_android").and.returnValue(deferred.promise); + deferred.resolve([]); + return android_sdk.list_targets() + .then(function(targets) { + done.fail(); + }).catch(function(err) { + expect(err).toBeDefined(); + expect(err.message).toContain("No android targets (SDKs) installed!"); + done(); + }); + }); + }); +}); diff --git a/spec/unit/check_reqs.spec.js b/spec/unit/check_reqs.spec.js index 33c3b3fd..971d3a6f 100644 --- a/spec/unit/check_reqs.spec.js +++ b/spec/unit/check_reqs.spec.js @@ -19,9 +19,11 @@ /* jshint laxcomma:true */ var check_reqs = require("../../bin/templates/cordova/lib/check_reqs"); +var android_sdk = require("../../bin/templates/cordova/lib/android_sdk"); var shelljs = require("shelljs"); var fs = require("fs"); var path = require("path"); +var Q = require("q"); describe("check_reqs", function () { var original_env; @@ -218,4 +220,32 @@ describe("check_reqs", function () { expect(target).toContain("android-"); }); }); + describe("check_android_target", function() { + it("should should return full list of supported targets if there is a match to ideal api level", function(done) { + var deferred = Q.defer(); + spyOn(android_sdk, "list_targets").and.returnValue(deferred.promise); + var fake_targets = ["you are my fire", "my one desire"]; + deferred.resolve(fake_targets); + spyOn(check_reqs, "get_target").and.returnValue("you are my fire"); + return check_reqs.check_android_target() + .then(function(targets) { + expect(targets).toBeDefined(); + expect(targets).toEqual(fake_targets); + done(); + }); + }); + it("should error out if there is no match between ideal api level and installed targets", function(done) { + var deferred = Q.defer(); + spyOn(android_sdk, "list_targets").and.returnValue(deferred.promise); + var fake_targets = ["you are my fire", "my one desire"]; + deferred.resolve(fake_targets); + spyOn(check_reqs, "get_target").and.returnValue("and i knowwwwwwwwwwww"); + return check_reqs.check_android_target() + .catch(function(err) { + expect(err).toBeDefined(); + expect(err.message).toContain("Please install Android target"); + done(); + }); + }); + }); });