Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
332 lines
11 KiB
JavaScript
Executable file
332 lines
11 KiB
JavaScript
Executable file
'use strict';
|
|
|
|
var Dialer = require('./lib/dialer');
|
|
var ReflowHelper =
|
|
require('../../../../../tests/jsmarionette/plugins/reflow_helper.js');
|
|
|
|
marionette('Dialer > Keypad', function() {
|
|
var assert = require('assert');
|
|
|
|
var client = marionette.client(Dialer.config);
|
|
var subject;
|
|
var selectors;
|
|
var actions;
|
|
|
|
var reflowHelper;
|
|
|
|
setup(function() {
|
|
actions = client.loader.getActions();
|
|
subject = new Dialer(client);
|
|
subject.launch();
|
|
|
|
selectors = Dialer.Selectors;
|
|
|
|
var keypad = subject.client.findElement(selectors.keypadView);
|
|
client.waitFor(function() {
|
|
return keypad.displayed();
|
|
});
|
|
|
|
reflowHelper = new ReflowHelper(client);
|
|
});
|
|
|
|
function typeNumber() {
|
|
var one = subject.client.findElement(selectors.one);
|
|
keypadTap(one);
|
|
|
|
var two = subject.client.findElement(selectors.two);
|
|
keypadTap(two);
|
|
|
|
var three = subject.client.findElement(selectors.three);
|
|
keypadTap(three);
|
|
}
|
|
|
|
// Taps digits in 1, 2, 3 sequence until producing an ellipsis. We make this
|
|
// instead of entering fixed number as the digit at which the ellipsis
|
|
// appears depends on the integration environment.
|
|
function typeLongNumber() {
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
var numberTyped = '';
|
|
|
|
var one = subject.client.findElement(selectors.one);
|
|
var two = subject.client.findElement(selectors.two);
|
|
var three = subject.client.findElement(selectors.three);
|
|
var sequence = [one, two, three];
|
|
var length = sequence.length;
|
|
for (var i = 0, digit; (digit = sequence[i]); i = (i+1) % length) {
|
|
keypadTap(digit);
|
|
numberTyped += digit.getAttribute('data-value');
|
|
if (number.getAttribute('value').indexOf('\u2026') === 0) {
|
|
return numberTyped;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Avoid "all the same number" patterns like 111111... because, under
|
|
// ellipsis scenaries, the value of the input won't change and the test
|
|
// will timeout.
|
|
function keypadTap(elem, longPress) {
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
var previousValue = number.getAttribute('value');
|
|
|
|
if (longPress) {
|
|
actions.longPress(elem, 1).perform();
|
|
} else {
|
|
actions.tap(elem).perform();
|
|
}
|
|
|
|
client.waitFor(function () {
|
|
return number.getAttribute('value') !== previousValue;
|
|
});
|
|
}
|
|
|
|
function loadSuggestionDOM() {
|
|
typeNumber();
|
|
|
|
var del = subject.client.findElement(selectors.del);
|
|
actions.longPress(del, 1).perform();
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
client.waitFor(function() {
|
|
return (number.getAttribute('value') === '');
|
|
});
|
|
}
|
|
|
|
test('Add a contact from dialer', function() {
|
|
subject.keypadView.typePhoneNumber(12345);
|
|
var addToContactsActivities = subject.keypadView.addToContacts();
|
|
var newContact = addToContactsActivities.pickCreateNew();
|
|
|
|
var contactName = 'Name';
|
|
var dialer = newContact.createNewContactAndReturnToDialer(contactName);
|
|
var contactList = dialer.tabs.goToContactList();
|
|
var contactCreated = contactList.getContactFirstName();
|
|
|
|
assert.strictEqual(contactCreated, contactName);
|
|
});
|
|
|
|
test('Entering a 3 digits number with the keypad', function() {
|
|
loadSuggestionDOM();
|
|
reflowHelper.startTracking(Dialer.URL + '/manifest.webapp');
|
|
typeNumber();
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
assert.equal(number.getAttribute('value'), '123');
|
|
var reflowCount = reflowHelper.getCount();
|
|
assert.equal(reflowCount, 0);
|
|
reflowHelper.stopTracking();
|
|
});
|
|
|
|
test('Entering a digit in the middle of the number', function() {
|
|
typeNumber();
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
number.scriptWith(function (numberElement) {
|
|
numberElement.selectionStart = numberElement.selectionEnd = 1;
|
|
numberElement.click();
|
|
});
|
|
|
|
var zero = subject.client.findElement(selectors.zero);
|
|
keypadTap(zero);
|
|
assert.equal(number.getAttribute('value'), '1023');
|
|
});
|
|
|
|
test('Replace a selection in the middle of the number', function() {
|
|
typeNumber();
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
number.scriptWith(function (numberElement) {
|
|
numberElement.selectionStart = 1;
|
|
numberElement.selectionEnd = 2;
|
|
numberElement.click();
|
|
});
|
|
|
|
var zero = subject.client.findElement(selectors.zero);
|
|
keypadTap(zero);
|
|
assert.equal(number.getAttribute('value'), '103');
|
|
});
|
|
|
|
test('Replace a selection in the middle of the number with a long press',
|
|
function() {
|
|
typeNumber();
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
number.scriptWith(function (numberElement) {
|
|
numberElement.selectionStart = 1;
|
|
numberElement.selectionEnd = 2;
|
|
numberElement.click();
|
|
});
|
|
|
|
var zero = subject.client.findElement(selectors.zero);
|
|
keypadTap(zero, true);
|
|
assert.equal(number.getAttribute('value'), '1+3');
|
|
});
|
|
|
|
test('Entering a long press in the middle of the number', function() {
|
|
typeNumber();
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
number.scriptWith(function (numberElement) {
|
|
numberElement.selectionStart = numberElement.selectionEnd = 1;
|
|
numberElement.click();
|
|
});
|
|
|
|
var zero = subject.client.findElement(selectors.zero);
|
|
keypadTap(zero, true);
|
|
assert.equal(number.getAttribute('value'), '1+23');
|
|
});
|
|
|
|
test('Entering a digit in the middle of a long number', function() {
|
|
var insPosition = 3; // index where the cursor would be placed by the user
|
|
var realInsPosition = insPosition + 2; // index inside the complete number
|
|
// +2 for the space of the ellipsis
|
|
|
|
var typedNumber = typeLongNumber();
|
|
var numberAfterInsertion =
|
|
typedNumber.substr(0, realInsPosition) + '0' +
|
|
typedNumber.substr(realInsPosition);
|
|
var expectedValueAfterInsertion =
|
|
'\u2026' + numberAfterInsertion.substr(4); // 1 for the overflowing char,
|
|
// 2 for the ellipsis itself,
|
|
// 1 more for the new char.
|
|
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
var args = [number, insPosition];
|
|
client.executeScript(function (numberElement, insPosition) {
|
|
numberElement.selectionStart = numberElement.selectionEnd = insPosition;
|
|
numberElement.click();
|
|
}, args);
|
|
|
|
var zero = subject.client.findElement(selectors.zero);
|
|
keypadTap(zero);
|
|
assert.equal(number.getAttribute('value'), expectedValueAfterInsertion);
|
|
});
|
|
|
|
test('Entering a long press in the middle of a long number', function() {
|
|
var insPosition = 3; // index where the cursor would be placed by the user
|
|
var realInsPosition = insPosition + 2; // index inside the complete number
|
|
// +2 for the space of the ellipsis
|
|
|
|
var typedNumber = typeLongNumber();
|
|
var numberAfterInsertion =
|
|
typedNumber.substr(0, realInsPosition) + '+' +
|
|
typedNumber.substr(realInsPosition);
|
|
var expectedValueAfterInsertion =
|
|
'\u2026' + numberAfterInsertion.substr(4); // 1 for the overflowing char,
|
|
// 2 for the ellipsis itself,
|
|
// 1 more for the new char.
|
|
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
var args = [number, insPosition];
|
|
client.executeScript(function (numberElement, insPosition) {
|
|
numberElement.selectionStart = numberElement.selectionEnd = insPosition;
|
|
numberElement.click();
|
|
}, args);
|
|
|
|
var zero = subject.client.findElement(selectors.zero);
|
|
keypadTap(zero, true);
|
|
assert.equal(number.getAttribute('value'), expectedValueAfterInsertion);
|
|
});
|
|
|
|
test('Using the special extention key', function() {
|
|
var zero = subject.client.findElement(selectors.zero);
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
|
|
keypadTap(zero, true);
|
|
assert.equal(number.getAttribute('value'), '+');
|
|
keypadTap(zero, false);
|
|
assert.equal(number.getAttribute('value'), '+0');
|
|
});
|
|
|
|
test('Deleting a digit', function() {
|
|
typeNumber();
|
|
|
|
var del = subject.client.findElement(selectors.del);
|
|
actions.tap(del).perform();
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
client.waitFor(function() {
|
|
return (number.getAttribute('value').length == 2);
|
|
});
|
|
assert.equal(number.getAttribute('value'), '12');
|
|
});
|
|
|
|
test('Deleting a digit in the middle of the number', function() {
|
|
typeNumber();
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
number.scriptWith(function (numberElement) {
|
|
numberElement.selectionStart = numberElement.selectionEnd = 2;
|
|
numberElement.click();
|
|
});
|
|
|
|
var del = subject.client.findElement(selectors.del);
|
|
actions.tap(del).perform();
|
|
|
|
client.waitFor(function() {
|
|
return (number.getAttribute('value').length == 2);
|
|
});
|
|
assert.equal(number.getAttribute('value'), '13');
|
|
});
|
|
|
|
test('Deleting a digit in the middle of a long number', function() {
|
|
var delPosition = 3; // index where the cursor would be placed by the user
|
|
var realDelPosition = delPosition + 2; // index inside the complete number
|
|
// +2 for the space of the ellipsis
|
|
|
|
var typedNumber = typeLongNumber();
|
|
var expectedNumberAfterDeletion =
|
|
typedNumber.substr(0, realDelPosition - 1) +
|
|
typedNumber.substr(realDelPosition);
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
var args = [number, delPosition];
|
|
client.executeScript(function (numberElement, delPosition) {
|
|
numberElement.selectionStart = numberElement.selectionEnd = delPosition;
|
|
numberElement.click();
|
|
}, args);
|
|
|
|
var del = subject.client.findElement(selectors.del);
|
|
actions.tap(del).perform();
|
|
client.waitFor(function() {
|
|
return (number.getAttribute('value') == expectedNumberAfterDeletion);
|
|
});
|
|
assert.ok(true);
|
|
});
|
|
|
|
test('Deleting a couple of digits in the middle of the number', function() {
|
|
typeNumber();
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
number.scriptWith(function (numberElement) {
|
|
numberElement.selectionStart = numberElement.selectionEnd = 2;
|
|
numberElement.click();
|
|
});
|
|
|
|
var del = subject.client.findElement(selectors.del);
|
|
actions.doubleTap(del).perform();
|
|
|
|
assert.equal(number.getAttribute('value'), '3');
|
|
});
|
|
|
|
test('Clearing the number partially by long pressing the delete key',
|
|
function() {
|
|
typeNumber();
|
|
|
|
var number = subject.client.findElement(selectors.phoneNumber);
|
|
number.scriptWith(function (numberElement) {
|
|
numberElement.selectionStart = numberElement.selectionEnd = 2;
|
|
numberElement.click();
|
|
});
|
|
|
|
var del = subject.client.findElement(selectors.del);
|
|
actions.longPress(del, 1).perform();
|
|
|
|
client.waitFor(function() {
|
|
return (number.getAttribute('value') === '3');
|
|
});
|
|
assert.ok(true, 'cleaned the phone number view');
|
|
});
|
|
|
|
});
|