ioslib
Version:
iOS Utility Library
158 lines (133 loc) • 4.95 kB
JavaScript
/**
* Tests ioslib's xcode module.
*
* @copyright
* Copyright (c) 2014-2016 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
fs = require('fs'),
ioslib = require('..');
function checkXcode(xcode) {
should(xcode).be.an.Object;
should(xcode).have.keys('xcodeapp', 'path', 'selected', 'version', 'build',
'supported', 'eulaAccepted', 'sdks', 'sims', 'simDeviceTypes',
'simRuntimes', 'watchos', 'tvos', 'teams', 'executables');
should(xcode.xcodeapp).be.a.String;
should(xcode.xcodeapp).not.equal('');
should(fs.existsSync(xcode.xcodeapp)).be.true;
should(fs.statSync(xcode.xcodeapp).isDirectory()).be.true;
should(xcode.path).be.a.String;
should(xcode.path).not.equal('');
should(fs.existsSync(xcode.path)).be.true;
should(fs.statSync(xcode.path).isDirectory()).be.true;
should(xcode.selected).be.a.Boolean;
should(xcode.eulaAccepted).be.a.Boolean;
should(xcode.version).be.a.String;
should(xcode.version).not.equal('');
should(xcode.build).be.a.String;
should(xcode.build).not.equal('');
should([null, true, false, 'maybe']).containEql(xcode.supported);
should(xcode.sdks).be.an.Array;
xcode.sdks.forEach(function (s) {
should(s).be.a.String;
should(s).not.equal('');
});
should(xcode.sims).be.an.Array;
xcode.sims.forEach(function (s) {
should(s).be.a.String;
should(s).not.equal('');
});
should(xcode.simDeviceTypes).be.an.Object;
Object.keys(xcode.simDeviceTypes).forEach(function (name) {
should(xcode.simDeviceTypes[name]).be.an.Object;
should(xcode.simDeviceTypes[name]).have.keys('name', 'model', 'supportsWatch');
should(xcode.simDeviceTypes[name].name).be.a.String;
should(xcode.simDeviceTypes[name].name).not.equal('');
should(xcode.simDeviceTypes[name].model).be.a.String;
should(xcode.simDeviceTypes[name].model).not.equal('');
should(xcode.simDeviceTypes[name].supportsWatch).be.a.Boolean;
});
should(xcode.simRuntimes).be.an.Object;
Object.keys(xcode.simRuntimes).forEach(function (name) {
should(xcode.simRuntimes[name]).be.an.Object;
should(xcode.simRuntimes[name]).have.keys('name', 'version');
should(xcode.simRuntimes[name].name).be.a.String;
should(xcode.simRuntimes[name].name).not.equal('');
should(xcode.simRuntimes[name].version).be.a.String;
should(xcode.simRuntimes[name].version).not.equal('');
});
if (xcode.watchos !== null) {
should(xcode.watchos.sdks).be.an.Array;
xcode.watchos.sdks.forEach(function (s) {
should(s).be.a.String;
should(s).not.equal('');
});
should(xcode.watchos.sims).be.an.Array;
xcode.watchos.sims.forEach(function (s) {
should(s).be.a.String;
should(s).not.equal('');
});
}
should(xcode.teams).be.an.Object;
Object.keys(xcode.teams).forEach(function (teamId) {
should(xcode.teams[teamId]).be.an.Object;
should(xcode.teams[teamId]).have.keys('name', 'status', 'type');
should(xcode.teams[teamId].name).be.a.String();
should(xcode.teams[teamId].name).not.equal('');
should(xcode.teams[teamId].status).be.a.String();
should(xcode.teams[teamId].status).not.equal('');
should(xcode.teams[teamId].type).be.a.String();
should(xcode.teams[teamId].type).not.equal('');
});
var keys = ['xcodebuild', 'clang', 'clang_xx', 'libtool', 'lipo', 'otool', 'pngcrush', 'simulator', 'watchsimulator', 'simctl'];
should(xcode.executables).be.an.Object;
keys.forEach(function (key) {
should(xcode.executables).have.property(key);
if (xcode.executables[key] !== null) {
should(xcode.executables[key]).be.a.String;
should(xcode.executables[key]).not.equal('');
should(fs.existsSync(xcode.executables[key])).be.true;
should(fs.statSync(xcode.executables[key]).isDirectory()).be.false;
}
});
}
describe('xcode', function () {
it('namespace should be an object', function () {
should(ioslib.xcode).be.an.Object;
});
it('detect should find Xcode installations', function (done) {
this.timeout(5000);
this.slow(2000);
ioslib.xcode.detect(function (err, results) {
if (err) {
return done(err);
}
should(results).be.an.Object;
should(results).have.keys('selectedXcode', 'xcode', 'issues');
should(results.selectedXcode).be.an.Object;
should(results.xcode).be.an.Object;
should(results.issues).be.an.Array;
if (results.selectedXcode !== null) {
checkXcode(results.selectedXcode);
}
Object.keys(results.xcode).forEach(function (ver) {
checkXcode(results.xcode[ver]);
});
results.issues.forEach(function (issue) {
should(issue).be.an.Object;
should(issue).have.property('id');
should(issue).have.property('type');
should(issue).have.property('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();
});
});
});