Commit 7c2137eb 7c2137eb036307d8f2cafec2758639f26b092dd1 by Nicolas Perriault

refs #259 - things were harder than initially expected

1 parent a04d47a8
Subproject commit 4826e2bb9a2ecbaf0511b6aec0fd3b68d566e23b
Subproject commit 3b87b13e5849f5c8d7555c9a5fc6712eda5aa7a8
......
......@@ -408,15 +408,37 @@
return nodes;
};
/**
* Retrieves the value of a form field.
*
* @param String inputName The for input name attr value
* @return Mixed
*/
this.getFieldValue = function getFieldValue(inputName) {
var inputs = this.findAll('[name="' + inputName + '"]');
var inputs = this.findAll('[name="' + inputName + '"]'), type;
switch (inputs.length) {
case 0:
return null;
case 1:
return inputs[0].value;
//this.log(inputs[0].nodeName.toLowerCase(), "error");
var input = inputs[0];
try {
type = input.getAttribute('type').toLowerCase();
} catch (e) {
type = 'other';
}
if (['checkbox', 'radio'].indexOf(type) === -1) {
return input.value;
}
// single checkbox or… radio button (weird, I know)
if (input.hasAttribute('value')) {
return input.checked ? input.getAttribute('value') : undefined;
} else {
return input.checked;
}
break;
default:
var type = inputs[0].getAttribute('type').toLowerCase();
type = inputs[0].getAttribute('type').toLowerCase();
if (type === 'radio') {
var value;
[].forEach.call(inputs, function(radio) {
......
......@@ -97,11 +97,12 @@ casper.then(function() {
casper.thenOpen('tests/site/form.html', function() {
t.comment('Tester.assertField()');
t.comment('1. Fill inputs');
var fpath = phantom.libraryPath + '/README.md';
this.fill('form[action="result.html"]', {
'email': 'chuck@norris.com',
'content': 'Am watching thou',
'check': 'on',
'check': true,
'choice': 'no',
'topic': 'bar',
'file': fpath,
......@@ -109,13 +110,33 @@ casper.thenOpen('tests/site/form.html', function() {
});
t.assertField('email', 'chuck@norris.com', 'Tester.assertField() works as expected with inputs');
t.assertField('content', 'Am watching thou', 'Tester.assertField() works as expected with textarea');
t.assertField('check', 'on', 'Tester.assertField() works as expected with checkboxes');
t.assertField('check', true, 'Tester.assertField() works as expected with checkboxes');
t.assertField('choice', 'no', 'Tester.assertField() works as expected with radios');
t.assertField('topic', 'bar', 'Tester.assertField() works as expected with selects');
t.assertField('file', 'C:\\fakepath\\README.md', 'Tester.assertField() works as expected with file inputs');
t.assertField('checklist[]', ['1', '3'], 'Tester.assertField() works as expected with check lists');
});
casper.reload(function() {
t.comment('2. Unfill inputs');
this.fill('form[action="result.html"]', {
'email': '',
'content': '',
'check': false,
'choice': '',
'topic': '',
'file': '',
'checklist[]': []
});
t.assertField('email', '', 'Tester.assertField() works as expected with inputs');
t.assertField('content', '', 'Tester.assertField() works as expected with textarea');
t.assertField('check', false, 'Tester.assertField() works as expected with checkboxes');
t.assertField('choice', null, 'Tester.assertField() works as expected with radios');
t.assertField('topic', 'foo', 'Tester.assertField() works as expected with selects');
t.assertField('file', '', 'Tester.assertField() works as expected with file inputs');
t.assertField('checklist[]', [], 'Tester.assertField() works as expected with check lists');
});
casper.then(function() {
t.comment('Tester.getFailures()');
t.assertEquals(typeof t.getFailures().length, "number", "Tester.getFailures() works as expected");
......