blob: 3f2f28fadb8b9d41cb60b7da7bfe4e454bb815b9 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
var test = require('tape');
var remote = require('./helpers/remote');
var debug = require('debug')('test');
var ms = require('ms');
var waterfall = require('run-waterfall');
var extend = require('xtend');
test('simple', function(t) {
var driver = remote();
// Hook into the test's end event to shutdown the driver session.
t.on('end', function end() {
debug('test ending, closing driver');
driver.quit(function onclose(err) {
if (err) {
debug('error: %o', err);
throw err;
}
});
});
var tasks = [
init,
wait(ms('4s')),
getCurrentActivity,
contexts,
wait(ms('4s')),
selectBlessing
];
// Run all the tasks above, one after the other.
waterfall(tasks, function done(err, res) {
if (err) {
t.end(err);
return;
}
debug('res: %o', res);
t.ok(true);
t.end();
});
function init(callback) {
var defaults = {
browserName: '',
'appium-version': '1.4.13',
platformName: 'Android',
};
// TODO(jasoncampbell): Support some kind of cinfiguration file for all
// these options.
var options = extend(defaults, {
platformVersion: '6.0',
deviceName: process.env.DEVICE_ID,
app: process.env.APK
});
debug('initializing driver with: %o', options);
driver.init(options, done);
function done(err) {
if (err) {
return callback(err);
}
callback(null, {});
}
}
function wait(miliseconds) {
miliseconds = miliseconds || 60;
return task;
function task(res, callback) {
setTimeout(function timeout() {
callback(null, res);
}, miliseconds);
}
}
function getCurrentActivity(res, callback) {
driver.getCurrentActivity(function done(err, activity) {
if (err) {
return callback(err);
}
res.activity = activity;
callback(null, res);
});
}
function contexts(res, callback) {
driver.contexts(function done(err, contexts) {
if (err) {
return callback(err);
}
res.contexts = contexts;
callback(null, res);
});
}
function selectBlessing(res, callback) {
var selector = [
'new UiSelector()',
'.className("android.widget.CheckedTextView")',
'.index(0)'
].join('');
driver.elementByAndroidUIAutomator(selector, function(err, element) {
if (err) {
return callback(err);
}
t.ok(element, 'Blessing selection UI should exist');
element.click(function(err) {
if (err) {
return callback(err);
}
res['check-box'] = element;
var selector = [
'new UiSelector()',
'.className("android.widget.Button")',
'.text("OK")'
].join('');
driver.elementByAndroidUIAutomator(selector, function(err, element) {
if (err) {
return callback(err);
}
element.click(function(err) {
if (err) {
return callback(err);
}
var selector = [
'new UiSelector()',
'.className("android.widget.Button")',
'.text("Allow")'
].join('');
driver
.elementByAndroidUIAutomator(selector, function(err, element) {
if (err) {
return callback(err);
}
element.click(function(err) {
if (err) {
return callback(err);
}
callback(null, res);
});
});
});
});
});
});
}
});
// NOTE: Below is a WIP example of how an API for running a single test which
// spans multiple devices might work. Ideally the managment of Appium clients,
// Appium servers, and the cloud instance could be managed by the setup helper.
var setup = require('./helpers/setup');
test.skip('bless application', setup(function(t, devices) {
devices.bless(function onbless(err) {
if (err) {
return t.error(err);
}
t.end();
});
}));