UNPKG

ioslib

Version:
179 lines (145 loc) 4.81 kB
/** * Tests ioslib's device module. * * @copyright * Copyright (c) 2014 by Appcelerator, Inc. All Rights Reserved. * * @license * Licensed under the terms of the Apache Public License. * Please see the LICENSE included with this distribution for details. */ const appc = require('node-appc'), exec = require('child_process').exec, fs = require('fs'), ioslib = require('..'), path = require('path'); function build(app, provisioningProfileUUID, certName, defs, done){ if (typeof defs === 'function') { done = defs; defs = []; } ioslib.xcode.detect(function (err, env) { if (err) { return done(err); } if (env.selectedXcode === null) { return done(new Error(__('No selected Xcode'))); } var cmd = [ env.selectedXcode.executables.xcodebuild, 'clean', 'build', '-configuration', 'Debug', '-sdk', 'iphoneos' + appc.version.format(env.selectedXcode.sdks[0], 2, 2), 'PROVISIONING_PROFILE=' + provisioningProfileUUID, 'DEPLOYMENT_POSTPROCESSING=YES', // 'CODE_SIGN_IDENTITY="' + certName + '"', 'GCC_PREPROCESSOR_DEFINITIONS="' + defs.join(' ') + '"' ].join(' '); exec(cmd, { cwd: path.join(__dirname, app) }, function (code, out, err) { should(out).match(/BUILD SUCCEEDED/); var appPath = path.join(__dirname, app, 'build', 'Debug-iphoneos', app + '.app'); should(fs.existsSync(appPath)).be.true; done(null, appPath); }); }); } describe('device', function () { it('namespace should be an object', function () { should(ioslib.device).be.an.Object; }); it('detect iOS devices', function (done) { this.timeout(5000); this.slow(2000); ioslib.device.detect(function (err, results) { if (err) { return done(err); } should(results).be.an.Object; should(results).have.keys('devices', 'issues'); should(results.devices).be.an.Array; results.devices.forEach(function (dev) { should(dev).be.an.Object; should(dev).have.keys('udid', 'name', 'buildVersion', 'cpuArchitecture', 'deviceClass', 'deviceColor', 'hardwareModel', 'modelNumber', 'productType', 'productVersion', 'serialNumber'); should(dev.udid).be.a.String; should(dev.udid).not.equal(''); should(dev.name).be.a.String; should(dev.name).not.equal(''); should(dev.buildVersion).be.a.String; should(dev.buildVersion).not.equal(''); should(dev.cpuArchitecture).be.a.String; should(dev.cpuArchitecture).not.equal(''); should(dev.deviceClass).be.a.String; should(dev.deviceClass).not.equal(''); should(dev.deviceColor).be.a.String; should(dev.deviceColor).not.equal(''); should(dev.hardwareModel).be.a.String; should(dev.hardwareModel).not.equal(''); should(dev.modelNumber).be.a.String; should(dev.modelNumber).not.equal(''); should(dev.productType).be.a.String; should(dev.productType).not.equal(''); should(dev.productVersion).be.a.String; should(dev.productVersion).not.equal(''); should(dev.serialNumber).be.a.String; should(dev.serialNumber).not.equal(''); }); should(results.issues).be.an.Array; results.issues.forEach(function (issue) { should(issue).be.an.Object; should(issue).have.keys('id', 'type', 'message'); should(issue.id).be.a.String; should(issue.type).be.a.String; should(issue.type).match(/^info|warning|error$/); should(issue.message).be.a.String; }); done(); }); }); (process.env.TRAVIS || process.env.JENKINS ? it.skip : it)('should fail to install app bad app path', function (done) { this.timeout(30000); this.slow(30000); ioslib.device .install(null, '/path/to/something/that/does/not/exist', 'foo', function (err) { done(new Error('Callback was called unexpectedly')); }) .on('error', function (err) { should(err).be.an.instanceOf(Error); done(); }); }); (process.env.TRAVIS || process.env.JENKINS ? it.skip : it)('should be able to install app to device', function (done) { this.timeout(60000); this.slow(60000); var appId = 'com.appcelerator.testapp3'; // find us a device ioslib.findValidDeviceCertProfileCombos({ appId: appId, unmanagedProvisioningProfile: true }, function (err, results) { function noop() {} if (err) { return done(err); } if (!results.length) { return done(new Error('No valid device/cert/provisioning profile combos found')); } build('TestApp', results[0].ppUUID, results[0].certName, ['TEST_BASIC_LOGGING'], function (err, appPath) { should(err).not.be.ok; should(appPath).be.a.String; should(fs.existsSync(appPath)).be.ok; ioslib.device .install(results[0].deviceUDID, appPath, appId) .on('installed', function () { done(); }) .on('error', function (err) { done(err); }); }); }); }); });