Skip to content

Commit

Permalink
massive form cleanup, hundreds of new unit tests. runs in FF.
Browse files Browse the repository at this point in the history
  • Loading branch information
client9 committed Apr 25, 2010
1 parent 15ce602 commit b9d78ef
Show file tree
Hide file tree
Showing 14 changed files with 625 additions and 179 deletions.
145 changes: 135 additions & 10 deletions specs/html/spec.js
Expand Up @@ -47,7 +47,7 @@ test('HTML Interfaces Available', function(){
ok(HTMLParamElement, 'HTMLParamElement defined');
ok(HTMLScriptElement, 'HTMLScriptElement defined');
ok(HTMLSelectElement, 'HTMLSelectElement defined');
ok(HTMLSpanElement, 'HTMLSpanElement defined');
ok(HTMLSpanElement, 'HTMLSpanElement defined');
ok(HTMLStyleElement, 'HTMLStyleElement defined');
ok(HTMLTableElement, 'HTMLTableElement defined');
ok(HTMLTableSectionElement, 'HTMLTableSectionElement defined');
Expand Down Expand Up @@ -299,6 +299,9 @@ test('HTMLAreaElement', function(){
equals(element.parentNode, null, '.parentNode');
equals(element.prefix, null, '.prefix');
equals(xmlserializer.serializeToString(element), '<AREA/>', 'xmlserializer');
equals(element.alt, '', 'alt');
element.alt = 'foo';
equals(element.alt, 'foo', 'set alt');

equals(element.toString(), '', 'toString returns href');
element.href = 'http://envjs.com/';
Expand Down Expand Up @@ -332,6 +335,7 @@ test('HTMLDocument.createElement(frame)', function(){
equals(element.scrolling, "", '.scrolling');
equals(element.src, "", '.src');
equals(element.tagName, 'FRAME', '.name');
equals(element.toString(), '[object HTMLFrameElement]', 'toString');
equals(xmlserializer.serializeToString(element), '<FRAME/>', 'xmlserializer');

});
Expand Down Expand Up @@ -391,6 +395,20 @@ test('HTMLBRElement', function() {
equals(a.toString(), '[object HTMLBRElement]');
});

test('HTMLButtonElement', function() {
var e;
e = document.createElement('button');
ok(e, 'element created');
equals(e.toString(), '[object HTMLButtonElement]', 'toString');

equals(e.type, 'submit', 'type');
equals(e.value, '', 'empty button value');
equals(typeof e.value, 'string', 'empty button value is string');

e.value = 'foo';
equals(e.value, 'foo', 'set value');
});

test('HTMLDivElement', function() {
var a = document.createElement('div');
ok(a, 'element created');
Expand Down Expand Up @@ -428,12 +446,37 @@ test('HTMLInputElement', function() {
equals(a.alt, '', 'empty alt is string');
a.alt = 'foo';
equals(a.alt, 'foo', 'set alt');

equals(a.type, 'text', 'type');
equals(a.src, '', 'empty src is string');
a.src = 'http://envjs.com/';
equals(a.src, 'http://envjs.com/', 'set src');
// TODO, src should make absolute any relative links

/**
* 'value' is a virtual state, NOT an attribute
*
*/
// relationship between defaultValue and Value
equals(a.value, '', 'default value');
equals(a.defaultValue, '', 'default defaultValue');

a.defaultValue = 'bar';
equals(a.defaultValue, 'bar', 'set defaultValue');
equals(a.value, 'bar', 'value is initially set by defaultValue');

a.value = 'foo';
equals(a.value, 'foo', 'set value');
equals(a.defaultValue, 'bar', 'defaultValue is unchanged');

a.defaultValue = 'dingbat';
equals(a.defaultValue, 'dingbat', 'set defaultValue');
equals(a.value, 'foo', 'value is unchanged');

// test with DOMAPI
a.setAttribute('value', 'foobar');
equals(a.defaultValue, 'foobar', 'set defaultValue via DOMAPI');
equals(a.value, 'foo', 'value is unchanged');

/**
* Checked is a virtual state, NOT an attribute
*
Expand Down Expand Up @@ -463,6 +506,7 @@ test('HTMLInputElement', function() {
equals(a.useMap, '', 'useMap is false');
equals(typeof a.useMap, 'string', 'default useMap value is boolean');


/**
* Numeric-like things
*/
Expand Down Expand Up @@ -542,6 +586,22 @@ test('HTMLMetaElement', function() {
equals(element.getAttribute('content'), 'foo', 'get content via attribute');
});

test('HTMLModElement', function() {
var a = document.createElement('del');
ok(a, 'element created');
//equals(a.toString(), '[object HTMLModElement]');

a = document.createElement('ins');
ok(a, 'element created');
//equals(a.toString(), '[object HTMLModElement]');
});

test('HTMLObjectElement', function() {
var a = document.createElement('object');
ok(a, 'element created');
equals(a.toString(), '[object HTMLObjectElement]');
});

test('HTMLOListElement', function() {
var a = document.createElement('ol');
ok(a, 'element created');
Expand Down Expand Up @@ -578,6 +638,26 @@ test('HTMLQuoteElement', function() {
// See http://dev.w3.org/html5/spec/Overview.html#dom-quote-cite
});

test('HTMLSelectElement', function() {
var a = document.createElement('select');
ok(a, 'element created');
equals(a.toString(), '[object HTMLSelectElement]');

equals(a.value, '', 'value');
equals(a.length, 0, 'length');
equals(a.selectedIndex, -1, 'selectedIndex');
equals(a.type, 'select-one', 'type');

equals(a.multiple, false, 'multiple');
a.multiple = true;
equals(a.multiple, true, 'set multiple');
equals(a.hasAttribute('multiple'), true, 'set multiple has attribute');
equals(a.getAttribute('multiple'), '', 'set multiple set attribute');
a.multiple = false;
equals(a.hasAttribute('multiple'), false,
'set multiple removes attribute');
});

test('HTMLSpanElement', function() {
var a = document.createElement('span');
ok(a, 'element created');
Expand All @@ -604,8 +684,8 @@ test('HTMLTableDataCellElement', function() {
ok(element, 'element created');
if (runningUnderEnvjs())
equals(element.toString(), '[object HTMLTableDataCellElement]',
'toString');
// don't run in-browser, FF uses HTMLTableCellElement
'toString');
// don't run in-browser, FF uses HTMLTableCellElement
});

test('HTMLTableHeaderCellElement', function() {
Expand All @@ -614,8 +694,8 @@ test('HTMLTableHeaderCellElement', function() {
ok(element, 'element created');
if (runningUnderEnvjs())
equals(element.toString(), '[object HTMLTableHeaderCellElement]',
'toString');
// don't run in-browser, FF uses HTMLTableCellElement
'toString');
// don't run in-browser, FF uses HTMLTableCellElement
});

test('HTMLTableRowElement', function() {
Expand All @@ -638,6 +718,7 @@ test('HTMLTextArea', function() {
ok(e, 'element created');
equals(e.toString(), '[object HTMLTextAreaElement]', 'toString');

equals(e.type, 'textarea', 'type');
equals(e.cols, -1, 'default cols is -1');
e.cols = '10';
equals(e.cols, 10, 'set cols');
Expand All @@ -648,6 +729,41 @@ test('HTMLTextArea', function() {
equals(e.rows, 11, 'set row');
equals(typeof e.rows, 'number', 'rows is a number');

// relationship between defaultValue and Value
equals(e.value, '', 'default value');
equals(e.defaultValue, '', 'default defaultValue');

e.defaultValue = 'bar';
equals(e.defaultValue, 'bar', 'set defaultValue');
equals(e.value, 'bar', 'value is initially set by defaultValue');

e.value = 'foo';
equals(e.value, 'foo', 'set value');
equals(e.defaultValue, 'bar', 'defaultValue is unchanged');

e.defaultValue = 'dingbat';
equals(e.defaultValue, 'dingbat', 'set defaultValue');
equals(e.value, 'foo', 'value is unchanged');

// change 'value' via DOMAPI setAttribute
e.value = 'foo';
e.defaultValue = 'bar';

// "setAttribute(value)" does nothing since the value of textarea is
// really in it's textContent child
e.setAttribute('value', 'dingbat');
equals(e.value, 'foo', 'value is NOT set via DOMAPI');
equals(e.defaultValue, 'bar', 'defaultValue is NOT set via setattr');
equals(e.textContent, 'bar', 'textContent is NOT set via setattr');

e.textContent = 'dingbat';
equals(e.textContent, 'dingbat', 'set textContent');
equals(e.value, 'foo', 'value is NOT set via textContent');
equals(e.defaultValue, 'dingbat', 'defaultValue is set via textContent');


// TODO: normalization of rawvalue

});

test('HTMLTitleElement', function() {
Expand Down Expand Up @@ -710,6 +826,7 @@ test("Option", function() {
equals(x.tagName, 'OPTION', 'constructor sets tagName');
equals(x.form, null, 'get form is null');
equals(x.selected, false, 'selected is false');
equals(typeof x.type, 'undefined', 'type is undefined');

x = new Option('text');
equals(x.text, 'text', 'text content');
Expand All @@ -719,11 +836,19 @@ test("Option", function() {
x = new Option('text', 'value');
equals(x.text, 'text', 'text content');
equals(x.value, 'value', 'value attribute');
equals(x.index, -1, 'index');
equals(x.form, null, 'form');

equals(x.selected, false, 'selected is false');
x.selected = true;
equals(x.selected, true, 'set selected');

// TODO: defaultSelect, and selected arguments
// Missing since logic to compute 'selectedness' is busted.
x = new Option('text', 'value', true);
x = new Option('text', 'value', true, true);
equals(x.defaultSelected, false, 'defaultselected');
x.defaultSelected = true;
equals(x.defaultSelected, true, 'set defaultselected');
x.defaultSelected = false;
equals(x.defaultSelected, false, 'set defaultselected');

x = new Option('text1', 'value1');
x = new Option('text2', 'value2', true, true);
});
1 change: 1 addition & 0 deletions specs/parser/boot.js
Expand Up @@ -5,6 +5,7 @@

load('specs/qunit.js');
load('specs/env.qunit.js');
load('specs/helpers.js');
QUnit.init();

load('dist/platform/core.js');
Expand Down

0 comments on commit b9d78ef

Please sign in to comment.