<!DOCTYPE HTML><html><!--https://bugzilla.mozilla.org/show_bug.cgi?id=395107--><head><title>Test for Bug 395107</title><scriptsrc="/tests/SimpleTest/SimpleTest.js"></script><linkrel="stylesheet"type="text/css"href="/tests/SimpleTest/test.css"/></head><body><atarget="_blank"href="https://bugzilla.mozilla.org/show_bug.cgi?id=395107">Mozilla Bug 395107</a><pid="display"></p><divid="content"style="display: none"></div><preid="test"><scriptclass="testbody"type="text/javascript">/** Test for Bug 395107 **/vartestNumber=0;functionassertSelected(aOption,aExpectDefaultSelected,aExpectSelected){++testNumber;is(aOption.defaultSelected,aExpectDefaultSelected,"Asserting default-selected state for option "+testNumber);is(aOption.selected,aExpectSelected,"Asserting selected state for option "+testNumber);}functionassertSame(aSel1,aSel2Str,aTestNumber){vardiv=document.createElement("div");div.innerHTML=aSel2Str;sel2=div.firstChild;is(aSel1.options.length,sel2.options.length,"Length should be same in select test "+aTestNumber);is(aSel1.selectedIndex,sel2.selectedIndex,"Selected index should be same in select test "+aTestNumber);for(vari=0;i<aSel1.options.length;++i){is(aSel1.options[i].selected,sel2.options[i].selected,"Options["+i+"].selected should be the same in select test "+aTestNumber);is(aSel1.options[i].defaultSelected,sel2.options[i].defaultSelected,"Options["+i+"].defaultSelected should be the same in select test "+aTestNumber);}}// In a single-select, setting an option selected should deselect an// existing selected option.varsel=document.createElement("select");sel.appendChild(newOption());is(sel.selectedIndex,0,"First option should be selected");assertSelected(sel.firstChild,false,true);sel.appendChild(newOption());is(sel.selectedIndex,0,"First option should still be selected");assertSelected(sel.firstChild,false,true);assertSelected(sel.firstChild.nextSibling,false,false);opt=newOption();sel.appendChild(opt);opt.defaultSelected=true;assertSelected(sel.firstChild,false,false);assertSelected(sel.firstChild.nextSibling,false,false);assertSelected(opt,true,true);is(opt,sel.firstChild.nextSibling.nextSibling,"What happened here?");is(sel.options[0],sel.firstChild,"Unexpected option 0");is(sel.options[1],sel.firstChild.nextSibling,"Unexpected option 1");is(sel.options[2],opt,"Unexpected option 2");is(sel.selectedIndex,2,"Unexpected selectedIndex in select test 1");assertSame(sel,"<select><option><option><option selected></select>",1);// Same, but with the option that gets set selected earlier in the selectsel=document.createElement("select");sel.appendChild(newOption());sel.appendChild(newOption());opt=newOption();opt.defaultSelected=true;sel.appendChild(opt);opt=newOption();sel.options[0]=opt;opt.defaultSelected=true;assertSelected(sel.options[0],true,true);assertSelected(sel.options[1],false,false);assertSelected(sel.options[2],true,false);is(sel.selectedIndex,0,"Unexpected selectedIndex in select test 2");// And now try unselecting optionssel=document.createElement("select");sel.appendChild(newOption());opt=newOption();opt.defaultSelected=true;sel.appendChild(opt);sel.appendChild(newOption());opt.defaultSelected=false;assertSelected(sel.options[0],false,true);assertSelected(sel.options[1],false,false);assertSelected(sel.options[2],false,false);is(sel.selectedIndex,0,"Unexpected selectedIndex in select test 2");</script></pre></body></html>