restart sim if safari dirs don't exist too, and add tests for safari caps on ios7

This commit is contained in:
Jonathan Lipps
2014-02-12 15:55:50 -08:00
parent f1961181bc
commit 55c997460a
3 changed files with 153 additions and 56 deletions
+20 -6
View File
@@ -97,6 +97,7 @@ IOS.prototype.init = function (args) {
this.curCoords = null;
this.curWebCoords = null;
this.onPageChangeCb = null;
this.dontDeleteSimApps = false;
this.useRobot = args.robotPort > 0;
this.robotUrl = this.useRobot ? "http://" + args.robotAddress + ":" + args.robotPort + "" : null;
this.logNoColors = args.logNoColors;
@@ -428,12 +429,18 @@ IOS.prototype.setPreferences = function (cb) {
'safariIgnoreFraudWarning',
'safariOpenLinksInBackground'
];
var safariSettingsCaps = settingsCaps.slice(2, 4);
var needToSet = false;
var needToSetSafari = false;
_.each(settingsCaps, function (cap) {
if (_.has(this.capabilities, cap)) {
needToSet = true;
if (_.contains(safariSettingsCaps, cap)) {
needToSetSafari = true;
}
}
}.bind(this));
if (!needToSet) {
logger.info("No iOS / app preferences to set");
return cb();
@@ -459,7 +466,8 @@ IOS.prototype.setPreferences = function (cb) {
}.bind(this);
logger.info("Setting iOS and app preferences");
if (!settings.simDirsExist(this.iOSSDKVersion)) {
if (!settings.simDirsExist(this.iOSSDKVersion) ||
(needToSetSafari && !settings.safari7DirsExist(this.iOSSDKVersion))) {
logger.info("Sim files for this SDK do not yet exist, launching the sim " +
"to populate the applications and preference dirs");
this.instantLaunchAndQuit(setPrefs);
@@ -528,6 +536,7 @@ IOS.prototype.setSafariPrefs = function () {
}
if (_.size(settings) > 0) {
settings.updateSafariSettings(this.iOSSDKVersion, safariSettings);
this.dontDeleteSimApps = true;
}
};
@@ -763,6 +772,11 @@ IOS.prototype.setDeviceAndLaunchSimulator = function (cb) {
} else {
var cleanup = function (cb) {
if ((this.fullReset || this.reset) && this.dontDeleteSimApps) {
logger.info("Not deleting simulator apps since we need to update " +
"their plists before launch");
return cb();
}
if (this.fullReset) {
this.deleteSim(cb);
} else if (this.reset) {
@@ -896,11 +910,11 @@ IOS.prototype.cleanupAppState = function (cb) {
logger.info("Deleted " + tcc);
}
//var caches = path.join(root, 'Library/Caches');
//if (fs.existsSync(caches)) {
//rimraf.sync(caches);
//logger.info("Deleted " + caches);
//}
var caches = path.join(root, 'Library/Caches');
if (fs.existsSync(caches)) {
rimraf.sync(caches);
logger.info("Deleted " + caches);
}
var media = path.join(root, 'Media');
if (fs.existsSync(media)) {
+11 -3
View File
@@ -136,9 +136,10 @@ var getSafari7Dirs = function (sdk) {
}
if (safariDir) {
safariDirs.push(safariDir);
} else {
logger.warn("Could not find MobileSafari in sim applications at " +
appsDir);
}
logger.warn("Could not find MobileSafari in sim applications at " +
appsDir);
});
return safariDirs;
};
@@ -252,7 +253,6 @@ settings.updateLocationSettings = function (sdk, bundleId, authorized) {
});
settings.writeSettings('locationClients', prefSetPerFile, true);
settings.writeSettings('locationCache', cachePrefSetPerFile, true);
console.log(settings.getSettings(sdk, 'locationClients'));
};
settings.updateSafariSettings = function (sdk, settingSet) {
@@ -304,4 +304,12 @@ settings.simDirsExist = function (sdk) {
return getSimDirs(sdk).length > 0;
};
settings.safari7DirsExist = function (sdk) {
try {
return getSafari7Dirs(sdk).length > 0;
} catch (e) {
return false;
}
};
module.exports = settings;
+122 -47
View File
@@ -3,6 +3,7 @@
var env = require("../../helpers/env")
, setup = require("../common/setup-base")
, initSession = require('../../helpers/session').initSession
, settingsPlists = require('../../../lib/devices/ios/settings.js')
, chai = require('chai')
, _ = require('underscore');
@@ -47,24 +48,6 @@ describe("prefs @skip-ios7", function () {
}).nodeify(cb);
};
var checkSafariSetting = function (driver, setting, expected, cb) {
driver
.elementsByTagName("tableCell")
.then(function (els) { return els[4].click(); })
.then(function () {
if (setting === 'fraud') {
return driver.elementByName("Fraud Warning");
} else if (setting === 'popups') {
return driver.elementByName("Block Pop-ups");
} else {
return new Error("Bad setting " + setting);
}
})
.getValue().then(function (checked) {
(!!parseInt(checked, 10)).should.eql(!!expected);
}).nodeify(cb);
};
describe('settings app with location services', function () {
var driver;
setup(this, _.defaults({locationServicesEnabled: true}, desired))
@@ -84,46 +67,138 @@ describe("prefs @skip-ios7", function () {
checkLocServ(driver, 0, done);
});
});
});
describe('safari prefs', function () {
describe('using safariIgnoreFraudWarning', function () {
var driver;
setup(this, _.defaults({safariIgnoreFraudWarning: true}, desired))
.then(function (d) { driver = d; });
describe('safari prefs @skip-ios7', function () {
var checkSafariSetting = function (driver, setting, expected, cb) {
driver
.elementsByTagName("tableCell")
.then(function (els) { return els[4].click(); })
.then(function () {
if (setting === 'fraud') {
return driver.elementByName("Fraud Warning");
} else if (setting === 'popups') {
return driver.elementByName("Block Pop-ups");
} else {
return new Error("Bad setting " + setting);
}
})
.getValue().then(function (checked) {
(!!parseInt(checked, 10)).should.eql(!!expected);
}).nodeify(cb);
};
it('should respond to cap when true', function (done) {
checkSafariSetting(driver, 'fraud', 0, done);
});
describe('using safariIgnoreFraudWarning', function () {
var driver;
setup(this, _.defaults({safariIgnoreFraudWarning: true}, desired))
.then(function (d) { driver = d; });
it('should respond to cap when true', function (done) {
checkSafariSetting(driver, 'fraud', 0, done);
});
});
describe('using safariIgnoreFraudWarning', function () {
var driver;
setup(this, _.defaults({safariIgnoreFraudWarning: false}, desired))
.then(function (d) { driver = d; });
describe('using safariIgnoreFraudWarning', function () {
var driver;
setup(this, _.defaults({safariIgnoreFraudWarning: false}, desired))
.then(function (d) { driver = d; });
it('should respond to cap when false', function (done) {
checkSafariSetting(driver, 'fraud', 1, done);
});
it('should respond to cap when false', function (done) {
checkSafariSetting(driver, 'fraud', 1, done);
});
});
describe('using safariAllowPopups', function () {
var driver;
setup(this, _.defaults({safariAllowPopups: true}, desired))
.then(function (d) { driver = d; });
describe('using safariAllowPopups', function () {
var driver;
setup(this, _.defaults({safariAllowPopups: true}, desired))
.then(function (d) { driver = d; });
it('should respond to cap when true', function (done) {
checkSafariSetting(driver, 'popups', 0, done);
});
it('should respond to cap when true', function (done) {
checkSafariSetting(driver, 'popups', 0, done);
});
});
describe('using safariAllowPopups', function () {
var driver;
setup(this, _.defaults({safariAllowPopups: false}, desired))
.then(function (d) { driver = d; });
describe('using safariAllowPopups', function () {
var driver;
setup(this, _.defaults({safariAllowPopups: false}, desired))
.then(function (d) { driver = d; });
it('should respond to cap when false', function (done) {
checkSafariSetting(driver, 'popups', 1, done);
});
it('should respond to cap when false', function (done) {
checkSafariSetting(driver, 'popups', 1, done);
});
});
});
describe('safari ios7 prefs @skip-ios6', function () {
var desired = {
app: 'safari'
, device: 'iPhone Simulator'
};
var checkSafariSetting = function (setting, expected, cb) {
var settingsSets;
var foundSettings;
try {
settingsSets = settingsPlists.getSettings('7', 'mobileSafari');
} catch (e) {
return cb(e);
}
_.size(settingsSets).should.be.above(0);
for (var i = 0; i < settingsSets.length; i++) {
try {
foundSettings.push(settingsSets[i][setting]);
} catch (e) {
return cb(e);
}
}
if (settingsSets.length > 0) {
console.log("More than one safari settings set found, a failure here " +
"might not be accurate");
}
for (i = 0; i < settingsSets.length; i++) {
foundSettings[i].should.eql(expected);
}
cb();
};
describe('using safariIgnoreFraudWarning', function () {
var driver;
setup(this, _.defaults({safariIgnoreFraudWarning: true}, desired))
.then(function (d) { driver = d; });
it('should respond to cap when true', function (done) {
checkSafariSetting('WarnAboutFraudulentWebsites', false, done);
});
});
describe('using safariIgnoreFraudWarning', function () {
var driver;
setup(this, _.defaults({safariIgnoreFraudWarning: false}, desired))
.then(function (d) { driver = d; });
it('should respond to cap when false', function (done) {
checkSafariSetting('WarnAboutFraudulentWebsites', true, done);
});
});
describe('using safariAllowPopups', function () {
var driver;
setup(this, _.defaults({safariAllowPopups: true}, desired))
.then(function (d) { driver = d; });
it('should respond to cap when true', function (done) {
checkSafariSetting('WebKitJavaScriptCanOpenWindowsAutomatically', true, done);
});
});
describe('using safariAllowPopups', function () {
var driver;
setup(this, _.defaults({safariAllowPopups: false}, desired))
.then(function (d) { driver = d; });
it('should respond to cap when false', function (done) {
checkSafariSetting('WebKitJavaScriptCanOpenWindowsAutomatically', false, done);
});
});
});