Skip to content

Commit

Permalink
Completed unit tests for the simctl list parser. Includes failing tes…
Browse files Browse the repository at this point in the history
…ts for iPad Pro (9.7 inch) and iPad Pro (12.9 inch).
  • Loading branch information
shazron committed Oct 19, 2016
1 parent 0bdeade commit ffa1289
Show file tree
Hide file tree
Showing 2 changed files with 173 additions and 6 deletions.
4 changes: 4 additions & 0 deletions lib/simctl-list-parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ SimctlListParser.prototype.parse = function(text) {
return this._result;
};

SimctlListParser.prototype._clear = function() {
clearResult.apply(this);
};

function clearResult() {
this._result = {
'devices': [],
Expand Down
175 changes: 169 additions & 6 deletions spec/simctl-list-parser.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,13 @@ THE SOFTWARE.

var SimCtlListParser = require('../lib/simctl-list-parser');

describe('list-parser tests', function() {
describe('list-parser device type tests', function() {

var parser = new SimCtlListParser();
var header = '== Device Types ==';

beforeEach(function() {
parser._clear();
});

afterEach(function() {
Expand Down Expand Up @@ -147,47 +148,209 @@ describe('list-parser tests', function() {
});
});

describe('list-parser test Runtimes', function() {
describe('list-parser runtimes test', function() {

var parser = new SimCtlListParser();
var header = '== Runtimes ==';

beforeEach(function() {
parser._clear();
});

afterEach(function() {
});

it('test parse', function() {
expect(true).toBe(true);
it('test parse runtimes', function() {
var lines = [
header,
'iOS 8.4 (8.4 - 12H141) (com.apple.CoreSimulator.SimRuntime.iOS-8-4)',
'iOS 9.3 (9.3 - 13E233) (com.apple.CoreSimulator.SimRuntime.iOS-9-3)',
'iOS 10.0 (10.0 - 14A345) (com.apple.CoreSimulator.SimRuntime.iOS-10-0)',
'tvOS 10.0 (10.0 - 14A345) (com.apple.CoreSimulator.SimRuntime.tvOS-10-0)',
'watchOS 3.0 (10.0 - 14A345) (com.apple.CoreSimulator.SimRuntime.watchOS-3-0)'
];

var result = parser.parse(lines.join('\n'));
expect(result.devicetypes.length).toEqual(0);
expect(result.devices.length).toEqual(0);
expect(result.runtimes.length).toEqual(5);

expect(result.runtimes[0].name).toEqual('iOS 8.4');
expect(result.runtimes[0].build).toEqual('8.4 - 12H141');
expect(result.runtimes[0].id).toEqual('com.apple.CoreSimulator.SimRuntime.iOS-8-4');
expect(result.runtimes[0].available).toEqual(true);
expect(result.runtimes[1].name).toEqual('iOS 9.3');
expect(result.runtimes[1].build).toEqual('9.3 - 13E233');
expect(result.runtimes[1].id).toEqual('com.apple.CoreSimulator.SimRuntime.iOS-9-3');
expect(result.runtimes[1].available).toEqual(true);
expect(result.runtimes[2].name).toEqual('iOS 10.0');
expect(result.runtimes[2].build).toEqual('10.0 - 14A345');
expect(result.runtimes[2].id).toEqual('com.apple.CoreSimulator.SimRuntime.iOS-10-0');
expect(result.runtimes[2].available).toEqual(true);
expect(result.runtimes[3].name).toEqual('tvOS 10.0');
expect(result.runtimes[3].build).toEqual('10.0 - 14A345');
expect(result.runtimes[3].id).toEqual('com.apple.CoreSimulator.SimRuntime.tvOS-10-0');
expect(result.runtimes[3].available).toEqual(true);
expect(result.runtimes[4].name).toEqual('watchOS 3.0');
expect(result.runtimes[4].build).toEqual('10.0 - 14A345');
expect(result.runtimes[4].id).toEqual('com.apple.CoreSimulator.SimRuntime.watchOS-3-0');
expect(result.runtimes[4].available).toEqual(true);
});
});

describe('list-parser test Devices', function() {

var parser = new SimCtlListParser();
var header = '== Devices ==';

beforeEach(function() {
parser._clear();
});

afterEach(function() {
});

it('test parse', function() {
expect(true).toBe(true);
it('test parse iPhone and iPad', function() {
var lines = [
header,
'-- iOS 8.4 --',
' Resizable iPad (E7348A97-6719-476F-B5A9-0C7F32336F0B) (Shutdown) (unavailable, device type profile not found)',
' Resizable iPhone (6B3D08F5-6010-4934-8259-81F0F5F86E20) (Shutdown) (unavailable, device type profile not found)',
'-- iOS 9.3 --',
' iPad Air 2 (9E3E156C-A96F-4D61-A2BB-D72F0BE2E7BB) (Shutdown)',
' iPad Pro (5B0E98E8-517D-49A7-860A-B7F820DA9C23) (Shutdown)',
'-- iOS 10.0 --',
' iPhone 6s (8C41DBA3-0F78-43FF-AE92-845D35DDD39D) (Shutdown)',
' iPhone 6s Plus (1B4E1A98-2408-404A-BEFC-F723A6889A63) (Shutdown)',
' iPhone 7 (87894360-0337-459E-816E-AE5EFD0A4570) (Shutdown)',
' iPhone 7 Plus (8D85405B-96CA-4268-87D1-CE594567F5EF) (Shutdown)',
' iPhone SE (175D9F25-0B08-4E4B-AD39-E3CBAC72CB4B) (Shutdown)',
' iPad Pro (9.7 inch) (1C5590C8-8AE7-4C27-AD06-84C801702945) (Shutdown)',
' iPad Pro (12.9 inch) (065BAEBF-1D7D-4B3B-B30D-79529356065B) (Shutdown)',
'-- tvOS 10.0 --',
' Apple TV 1080p (1A360376-E68E-45C2-8DBB-48BF7C60B4FB) (Shutdown)',
'-- watchOS 3.0 --',
' Apple Watch - 38mm (349DD23B-689C-43E4-A1F5-304C3E4DCFDD) (Shutdown)',
' Apple Watch - 42mm (B932A73B-477F-47A7-AB29-1E98D3F9095C) (Shutdown)',
' Apple Watch Series 2 - 38mm (B4BB8453-349F-4CBF-A5A9-87BE602DB13E) (Shutdown)',
' Apple Watch Series 2 - 42mm (0C527828-EBF4-4FD0-A66B-200FE716EB37) (Shutdown)',
'-- Unavailable: com.apple.CoreSimulator.SimRuntime.iOS-9-1 --',
' iPhone 4s (A27C69F5-1AFF-48D2-92B0-951F7E037E9C) (Shutdown) (unavailable, runtime profile not found)'
];

var result = parser.parse(lines.join('\n'));
expect(result.devicetypes.length).toEqual(0);
expect(result.devices.length).toEqual(6);
expect(result.runtimes.length).toEqual(0);

var device = result.devices[0];
expect(device.runtime).toEqual('iOS 8.4');
expect(device.devices[0].name).toEqual('Resizable iPad');
expect(device.devices[0].id).toEqual('E7348A97-6719-476F-B5A9-0C7F32336F0B');
expect(device.devices[0].state).toEqual('Shutdown');
expect(device.devices[0].available).toEqual(false);
expect(device.devices[1].name).toEqual('Resizable iPhone');
expect(device.devices[1].id).toEqual('6B3D08F5-6010-4934-8259-81F0F5F86E20');
expect(device.devices[1].state).toEqual('Shutdown');
expect(device.devices[1].available).toEqual(false);

device = result.devices[1];
expect(device.runtime).toEqual('iOS 9.3');
expect(device.devices[0].name).toEqual('iPad Air 2');
expect(device.devices[0].id).toEqual('9E3E156C-A96F-4D61-A2BB-D72F0BE2E7BB');
expect(device.devices[0].state).toEqual('Shutdown');
expect(device.devices[0].available).toEqual(true);
expect(device.devices[1].name).toEqual('iPad Pro');
expect(device.devices[1].id).toEqual('5B0E98E8-517D-49A7-860A-B7F820DA9C23');
expect(device.devices[1].state).toEqual('Shutdown');
expect(device.devices[1].available).toEqual(true);

device = result.devices[2];
expect(device.runtime).toEqual('iOS 10.0');
expect(device.devices[0].name).toEqual('iPhone 6s');
expect(device.devices[0].id).toEqual('8C41DBA3-0F78-43FF-AE92-845D35DDD39D');
expect(device.devices[0].state).toEqual('Shutdown');
expect(device.devices[0].available).toEqual(true);
expect(device.devices[1].name).toEqual('iPhone 6s Plus');
expect(device.devices[1].id).toEqual('1B4E1A98-2408-404A-BEFC-F723A6889A63');
expect(device.devices[1].state).toEqual('Shutdown');
expect(device.devices[1].available).toEqual(true);
expect(device.devices[2].name).toEqual('iPhone 7');
expect(device.devices[2].id).toEqual('87894360-0337-459E-816E-AE5EFD0A4570');
expect(device.devices[2].state).toEqual('Shutdown');
expect(device.devices[2].available).toEqual(true);
expect(device.devices[3].name).toEqual('iPhone 7 Plus');
expect(device.devices[3].id).toEqual('8D85405B-96CA-4268-87D1-CE594567F5EF');
expect(device.devices[3].state).toEqual('Shutdown');
expect(device.devices[3].available).toEqual(true);
expect(device.devices[4].name).toEqual('iPhone SE');
expect(device.devices[4].id).toEqual('175D9F25-0B08-4E4B-AD39-E3CBAC72CB4B');
expect(device.devices[4].state).toEqual('Shutdown');
expect(device.devices[4].available).toEqual(true);
expect(device.devices[5].name).toEqual('iPad Pro (9.7 inch)');
expect(device.devices[5].id).toEqual('1C5590C8-8AE7-4C27-AD06-84C801702945');
expect(device.devices[5].state).toEqual('Shutdown');
expect(device.devices[5].available).toEqual(true);
expect(device.devices[6].name).toEqual('iPad Pro (12.9 inch)');
expect(device.devices[6].id).toEqual('065BAEBF-1D7D-4B3B-B30D-79529356065B');
expect(device.devices[6].state).toEqual('Shutdown');
expect(device.devices[6].available).toEqual(true);

// tvOS //////////

device = result.devices[3];
expect(device.runtime).toEqual('tvOS 10.0');
expect(device.devices[0].name).toEqual('Apple TV 1080p');
expect(device.devices[0].id).toEqual('1A360376-E68E-45C2-8DBB-48BF7C60B4FB');
expect(device.devices[0].state).toEqual('Shutdown');
expect(device.devices[0].available).toEqual(true);

// watchOS //////////

device = result.devices[4];
expect(device.runtime).toEqual('watchOS 3.0');
expect(device.devices[0].name).toEqual('Apple Watch - 38mm');
expect(device.devices[0].id).toEqual('349DD23B-689C-43E4-A1F5-304C3E4DCFDD');
expect(device.devices[0].state).toEqual('Shutdown');
expect(device.devices[0].available).toEqual(true);
expect(device.devices[1].name).toEqual('Apple Watch - 42mm');
expect(device.devices[1].id).toEqual('B932A73B-477F-47A7-AB29-1E98D3F9095C');
expect(device.devices[1].state).toEqual('Shutdown');
expect(device.devices[1].available).toEqual(true);
expect(device.devices[2].name).toEqual('Apple Watch Series 2 - 38mm');
expect(device.devices[2].id).toEqual('B4BB8453-349F-4CBF-A5A9-87BE602DB13E');
expect(device.devices[2].state).toEqual('Shutdown');
expect(device.devices[2].available).toEqual(true);
expect(device.devices[3].name).toEqual('Apple Watch Series 2 - 42mm');
expect(device.devices[3].id).toEqual('0C527828-EBF4-4FD0-A66B-200FE716EB37');
expect(device.devices[3].state).toEqual('Shutdown');
expect(device.devices[3].available).toEqual(true);

// Unavailable //////////

device = result.devices[5];
expect(device.runtime).toEqual('Unavailable: com.apple.CoreSimulator.SimRuntime.iOS-9-1');
expect(device.devices[0].name).toEqual('iPhone 4s');
expect(device.devices[0].id).toEqual('A27C69F5-1AFF-48D2-92B0-951F7E037E9C');
expect(device.devices[0].state).toEqual('Shutdown');
expect(device.devices[0].available).toEqual(false);
});
});

describe('list-parser test Device Pairs', function() {

var parser = new SimCtlListParser();
var header = '== Device Pairs ==';

beforeEach(function() {
parser._clear();
});

afterEach(function() {
});

it('test parse', function() {
// TODO: see https://github.com/phonegap/simctl/issues/3
expect(true).toBe(true);
});

Expand Down

0 comments on commit ffa1289

Please sign in to comment.