2017-03-15 04:12:57 +08:00
/ * *
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 .
* /
2017-06-14 02:42:20 +08:00
var emu = require ( '../../bin/templates/cordova/lib/emulator' ) ;
var superspawn = require ( 'cordova-common' ) . superspawn ;
var Q = require ( 'q' ) ;
var fs = require ( 'fs' ) ;
var path = require ( 'path' ) ;
var shelljs = require ( 'shelljs' ) ;
describe ( 'emulator' , function ( ) {
describe ( 'list_images_using_avdmanager' , function ( ) {
it ( 'should properly parse details of SDK Tools 25.3.1 `avdmanager` output' , function ( done ) {
2017-03-15 04:12:57 +08:00
var deferred = Q . defer ( ) ;
2017-06-14 02:42:20 +08:00
spyOn ( superspawn , 'spawn' ) . and . returnValue ( deferred . promise ) ;
deferred . resolve ( fs . readFileSync ( path . join ( 'spec' , 'fixtures' , 'sdk25.3-avdmanager_list_avd.txt' ) , 'utf-8' ) ) ;
return emu . list _images _using _avdmanager ( ) . then ( function ( list ) {
2017-03-15 04:12:57 +08:00
expect ( list ) . toBeDefined ( ) ;
2017-06-14 02:42:20 +08:00
expect ( list [ 0 ] . name ) . toEqual ( 'nexus5-5.1' ) ;
expect ( list [ 0 ] . target ) . toEqual ( 'Android 5.1 (API level 22)' ) ;
expect ( list [ 1 ] . device ) . toEqual ( 'pixel (Google)' ) ;
expect ( list [ 2 ] . abi ) . toEqual ( 'default/x86_64' ) ;
} ) . fail ( function ( err ) {
2017-03-15 04:12:57 +08:00
expect ( err ) . toBeUndefined ( ) ;
2017-06-14 02:42:20 +08:00
} ) . fin ( function ( ) {
2017-03-15 04:12:57 +08:00
done ( ) ;
} ) ;
} ) ;
} ) ;
2017-06-14 02:42:20 +08:00
describe ( 'list_images_using_android' , function ( ) {
it ( 'should invoke `android` with the `list avd` command and _not_ the `list avds` command, as the plural form is not supported in some Android SDK Tools versions' , function ( ) {
2017-04-07 04:48:58 +08:00
var deferred = Q . defer ( ) ;
2017-06-14 02:42:20 +08:00
spyOn ( superspawn , 'spawn' ) . and . returnValue ( deferred . promise ) ;
2017-04-07 04:48:58 +08:00
emu . list _images _using _android ( ) ;
2017-06-14 02:42:20 +08:00
expect ( superspawn . spawn ) . toHaveBeenCalledWith ( 'android' , [ 'list' , 'avd' ] ) ;
2017-04-07 04:48:58 +08:00
} ) ;
2017-06-14 02:42:20 +08:00
it ( 'should properly parse details of SDK Tools pre-25.3.1 `android list avd` output' , function ( done ) {
2017-03-15 04:12:57 +08:00
var deferred = Q . defer ( ) ;
2017-06-14 02:42:20 +08:00
spyOn ( superspawn , 'spawn' ) . and . returnValue ( deferred . promise ) ;
deferred . resolve ( fs . readFileSync ( path . join ( 'spec' , 'fixtures' , 'sdk25.2-android_list_avd.txt' ) , 'utf-8' ) ) ;
return emu . list _images _using _android ( ) . then ( function ( list ) {
2017-03-15 04:12:57 +08:00
expect ( list ) . toBeDefined ( ) ;
2017-06-14 02:42:20 +08:00
expect ( list [ 0 ] . name ) . toEqual ( 'QWR' ) ;
expect ( list [ 0 ] . device ) . toEqual ( 'Nexus 5 (Google)' ) ;
expect ( list [ 0 ] . path ) . toEqual ( '/Users/shazron/.android/avd/QWR.avd' ) ;
expect ( list [ 0 ] . target ) . toEqual ( 'Android 7.1.1 (API level 25)' ) ;
expect ( list [ 0 ] . abi ) . toEqual ( 'google_apis/x86_64' ) ;
expect ( list [ 0 ] . skin ) . toEqual ( '1080x1920' ) ;
} ) . fail ( function ( err ) {
2017-03-15 04:12:57 +08:00
expect ( err ) . toBeUndefined ( ) ;
2017-06-14 02:42:20 +08:00
} ) . fin ( function ( ) {
2017-03-15 04:12:57 +08:00
done ( ) ;
} ) ;
} ) ;
} ) ;
2017-06-14 02:42:20 +08:00
describe ( 'list_images' , function ( ) {
beforeEach ( function ( ) {
spyOn ( fs , 'realpathSync' ) . and . callFake ( function ( cmd ) {
2017-03-15 04:12:57 +08:00
return cmd ;
} ) ;
} ) ;
2017-06-14 02:42:20 +08:00
it ( 'should try to parse AVD information using `avdmanager` first' , function ( ) {
spyOn ( shelljs , 'which' ) . and . callFake ( function ( cmd ) {
if ( cmd === 'avdmanager' ) {
2017-03-15 04:12:57 +08:00
return true ;
} else {
return false ;
}
} ) ;
2017-06-14 02:42:20 +08:00
var avdmanager _spy = spyOn ( emu , 'list_images_using_avdmanager' ) . and . returnValue ( { catch : function ( ) { } } ) ;
2017-03-15 04:12:57 +08:00
emu . list _images ( ) ;
2017-04-07 04:48:58 +08:00
expect ( avdmanager _spy ) . toHaveBeenCalled ( ) ;
2017-03-15 04:12:57 +08:00
} ) ;
2017-06-14 02:42:20 +08:00
it ( 'should delegate to `android` if `avdmanager` cant be found and `android` can' , function ( ) {
spyOn ( shelljs , 'which' ) . and . callFake ( function ( cmd ) {
if ( cmd === 'avdmanager' ) {
2017-03-15 04:12:57 +08:00
return false ;
2017-04-07 06:08:22 +08:00
} else {
return true ;
2017-03-15 04:12:57 +08:00
}
} ) ;
2017-06-14 02:42:20 +08:00
var android _spy = spyOn ( emu , 'list_images_using_android' ) ;
2017-03-15 04:12:57 +08:00
emu . list _images ( ) ;
2017-04-07 04:48:58 +08:00
expect ( android _spy ) . toHaveBeenCalled ( ) ;
2017-03-15 04:12:57 +08:00
} ) ;
2017-06-14 02:42:20 +08:00
it ( 'should throw an error if neither `avdmanager` nor `android` are able to be found' , function ( done ) {
spyOn ( shelljs , 'which' ) . and . returnValue ( false ) ;
return emu . list _images ( ) . catch ( function ( err ) {
2017-03-15 04:12:57 +08:00
expect ( err ) . toBeDefined ( ) ;
2017-06-14 02:42:20 +08:00
expect ( err . message ) . toContain ( 'Could not find either `android` or `avdmanager`' ) ;
2017-03-15 04:12:57 +08:00
done ( ) ;
} ) ;
} ) ;
} ) ;
} ) ;