orca r4259 - in trunk/test: html keystrokes/firefox



Author: joanied
Date: Thu Sep 25 04:06:26 2008
New Revision: 4259
URL: http://svn.gnome.org/viewvc/orca?rev=4259&view=rev

Log:
New and updated regression tests.


Added:
   trunk/test/html/java-sun-com.html
   trunk/test/html/steaks.html
   trunk/test/keystrokes/firefox/line_nav_bug_547573.py
   trunk/test/keystrokes/firefox/line_nav_bug_549128.py
   trunk/test/keystrokes/firefox/line_nav_slash_test.py
Modified:
   trunk/test/keystrokes/firefox/label_guess_bug_509809.py
   trunk/test/keystrokes/firefox/label_guess_bug_546815.py
   trunk/test/keystrokes/firefox/label_guess_bugzilla_search.py
   trunk/test/keystrokes/firefox/label_guess_entries.py
   trunk/test/keystrokes/firefox/line_nav_bugzilla_search.py
   trunk/test/keystrokes/firefox/line_nav_simple_form.py

Added: trunk/test/html/java-sun-com.html
==============================================================================
--- (empty file)
+++ trunk/test/html/java-sun-com.html	Thu Sep 25 04:06:26 2008
@@ -0,0 +1,1057 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd";>
+<html class="regenabled gecko jsenabled"><head>
+
+<!-- InstanceBegin template="/Templates/dreamweaver-webnotes-template.dwt" codeOutsideHTMLIsLocked="false" -->
+
+<!-- InstanceBeginEditable name="doctitle" -->
+<title>Installation Notes</title>
+<meta name="collection" content="reference">
+<!-- InstanceEndEditable -->
+<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+<style>
+/* font tag overwrite */
+font{font-size:12px !important;font-family:Arial,Helvetica,FreeSans,"Luxi-sans","Nimbus Sans L",sans-serif!important}
+
+/* font family */
+body,pre.sunfont,input,select,textarea,button{font-family:Arial,Helvetica,FreeSans,"Luxi-sans","Nimbus Sans L",sans-serif}
+code,kbd,tt,pre{font-family:Monaco,Courier,"Courier New"}
+
+/* font size */
+body,h6,input,select,textarea,button{font-size:12px}
+.smaller,small,.small,div.sitelinks,#breadcrumb,.breadcrumb,div.footlinks,.a5{font-size:11px}
+td.sectiontitle2,h5,big,.big{font-size:13px}
+h4,td.sectiontitle1,.xbig{font-size:14px}
+h3,.xxbig,.xxlarge{font-size:15px}
+h1,h2{font-size:16px}
+div.pagetitle2{font-size:17px}
+div.smallpagetitle,div.pagetitle,span.pagetitleblue,div.pagetitlenopad,div.smallpagetitle h1,div.pagetitle h1,div.pagetitlenopad h1{font-size:21px}
+div.pagetitlebig{font-size:36px}
+
+/* generic */
+body{color:#000}
+code,kbd,tt,pre{color:#444}
+h1,h2,h3,h4,h5,h6{margin:3px 0px 0px 0px;padding:0px;text-decoration:none}
+a[name]:hover{text-decoration:none}
+a{text-decoration:none}
+a:visited{color:#917E9C}
+a:link,a.named:visited,div#breadcrumb a:visited,div.breadcrumb,div.breadcrumb a:visited,div.sitelinks a:visited,.e2 table.navblue a:visited,.e5 a:visited,.e8v0 a:visited,.e9v0 a:visited{color:#3E6B8A}
+a:hover,b.error,span.error,p.error{text-decoration:underline}
+dt{font-weight:bold;padding:5px 0px 0px 0px}
+ul li{list-style-image:url("/im/ul_bullet.gif")}
+form{display:inline}
+form,select,input,textarea,ul li{margin:0px;padding:0px}
+li{margin-left:14px;padding-left:0px}
+ul,ul li,ol,ol li{margin-left:12px;padding-left:0px}
+h1 + p,h2 + p,h3 + p,h4 + p,h5 + p{margin-top:0px}
+
+/* text styles */
+div.pagetitle2{font-weight:bold}
+div.pagetitle{padding:0px 10px}
+div.pagetitle,div.pagetitle h1{font-weight:bold;color:#E76F00;margin:0px}
+div.smallpagetitle{padding:0px 10px}
+div.smallpagetitle,div.smallpagetitle h1{font-weight:bold;color:#E76F00;margin:0px}
+div.resultstitle{padding:0px 10px;font-weight:bold;color:#888;margin:0px}
+div.pagetitlenopad,div.pagetitlebig,div.pagetitlenopad h1,div.pagetitlebig h1{padding:0px;font-weight:bold;color:#E76F00;margin:0px}
+span.pagetitleblue{color:#35556B}
+div.navtitle{padding:0px 0px 5px 0px;font-weight:bold}
+p.compact{margin:0px}
+p.compact2{margin:0px 0px 7px 0px}
+span.rightarrowblue{color:#5382A1}
+span.rightarrowred{color:#E76F00}
+span.rightarrowwhite{color:#FFF}
+span.rightarrow,span.rightarrowblue,span.rightarrowred,span.rightarrowwhite{font-size:12px;font-weight:bold}
+a.redlink,a.redlink:visited,.red,.sunblue .red,.sunyellow .red,b.error,p.error,span.error{color:#D12124}
+.new{color:#F00}
+.note{color:#000}
+.new,.note{text-transform:uppercase;font-weight:bold}
+p.compact{margin:0px}
+p.compact2{margin:0px 0px 7px 0px}
+.highlight{background-color:#FF9}
+.centertext{text-align:center}
+.lefttext{text-align:left}
+.righttext{text-align:right}
+
+/* pad & spacer */
+div.breadcrumb{padding:0px 25px}
+div.pad0x10,div.sitelinks,div.pagetitle2{padding:0px 10px}
+div.pad6{padding:6px}
+div.pad8{padding:8px}
+div.pad10{padding:10px}
+div.pad5x10{padding:5px 10px}
+div.pad10x0{padding:10px 0px}
+div.pad3x0{padding:3px 0px}
+div.contentdivider{padding:3px 0px 6px 0px}
+div.pad2x0x10x0{padding:2px 0px 10px 0px}
+.sp10{font-size:8px !important}
+.sp8{font-size:7px !important}
+.sp5{font-size:4px !important}
+.sp4{font-size:3px !important}
+.sp2{font-size:2px !important}
+span.sp20{font-size:19px !important}
+
+/* table colors */
+table.dkgrey{background:#666}
+.sunred{background:#E76F00}
+.sunblue{background:#35556B}
+.sunyellow{background:#FFC726}
+.sunred,.sunblue,td.sunred a,td.sunblue a{color:#FFF}
+td.sunred b,td.sunred div.navtitle{color:#FFDE00;font-weight:bold}
+td.sunred li,td.sunblue li,td.sunred ul,td.sunblue ul{color:#FFF;list-style-image:url("/im/ic_bullet_white.gif")}
+td.sunyellow b,td.sunyellow div.navtitle,td.sunyellow a:link,td.sunyellow a:visited{color:#3E6B8A}
+td.sunyellow a:hover{color:#3E6B8A;text-decoration:underline}
+table.white,td.white,th.white,tr.white td,tr.white th,table tr td.white,table tr th.white,td.white,table.white1,td.white1,th.white1,tr.white1 td,tr.white1 th,table tr td.white1,table tr th.white1,td.white1{background:#FFF}
+table.ltgrey,td.ltgrey,th.ltgrey,tr.ltgrey td,tr.ltgrey th,table tr td.ltgrey,table tr th.ltgrey{background:#CCC}
+table.vltgrey,td.vltgrey,th.vltgrey,tr.vltgrey td,tr.vltgrey th,table tr td.vltgrey,table tr th.vltgrey{background:#DDD}
+table.grey3,td.grey3,th.grey3,tr.grey3 td,tr.grey3 th,table tr td.grey3,table tr th.grey3{background:#E3E3E3}
+table.blue1,td.blue1,th.blue1,tr.blue1 td,tr.blue1 th,table tr td.blue1,table tr th.blue1{background:#8A9CE8}
+table.yellow2,td.yellow2,th.yellow2,tr.yellow2 td,tr.yellow2 th,table tr td.yellow2,table tr th.yellow2{background:#FFFFE2}
+
+/* helping ns4 */
+.l1,.l1 a{color:#fff}
+.l1 .l1lft{padding-left:18px;padding-right:10px;padding-bottom:10px}
+.pn0,.pn0 p{color:#fff}
+.pn0v1,.pn0v2,.pn0v3,.pn0v5,.pn0v7{margin-left:79px}
+.pn0v9{margin-left:99px}
+.pn0v4{padding-left:79px}
+
+/* misc */
+hr.ltgrey{background:#CCC;color:#CCC}
+hr.grey3{color:#E3E3E3}
+.sectiontitle1,.sectiontitle1 a,.sectiontitle2,.sectiontitle2 a{font-size:16px;font-weight:bold}
+span.quotehighlight{color:#666;font-size:16px;line-height:21px}
+div.sectiontitle1 a{font-weight:bold}
+td.selectcell{font-size:12px} /* this is a workaround to patch ns4's bug regarding styled select elements */
+table.topnav td a,table.topnav td,table.topnavlight td a,table.topnavlight td,td.selectcell,span.ltcaption1,span.ltcaption1 a,span.dkcaption1,span.dkcaption1 a,div.footer,div.footer a{font-size:12px}
+a:visited span.ltcaption1{color:#96C}
+a:link span.ltcaption1{color:#5382A1}
+p{margin-top:3px;margin-bottom:17px}
+table.dkgrey2,tr.dkgrey2,th.dkgrey2,td.dkgrey2{background-color:#D6D6D6}
+table.grey4,tr.grey4,th.grey4,td.grey4{background-color:#E7E7E7}
+table.grey5,tr.grey5,th.grey5,td.grey5{background-color:#F1F1F1}
+div.datacell{padding:3px 6px 4px 6px}
+div.pad4x9{padding:4px 9px}
+div.pad3x5{padding:3px 5px}
+div.pad3{padding:3px}
+div.colpadding1{padding:7px 10px 8px 10px}
+div.colpadding2{padding:4px 8px 8px 8px}
+div.colpadding3{padding:4px 10px 8px 10px}
+div.colcaption1{padding:4px 6px 0px 6px}
+div.padbottom10{padding-bottom:10px}
+div.headerpadding2{padding:1px 6px 2px 6px}
+table.topnav td{color:#666}
+table.topnavlight td a,table.topnavlight td a:visited,table.topnavlight td{color:#FFF}
+table.topnav td a:visited{color:#5382A1}
+table.topnav span.rightarrowblue,table.topnav span.rightarrowwhite{font-size:11px}
+td.headerbar1{color:#333;background:#E7E7E7;font-weight:bold}
+td.headerbar2{color:#666;background:#E7E7E7;font-weight:bold}
+td.headerbar3{color:#FFF;background:#35556B;font-weight:bold}
+td.headerbar4{color:#FFF;background:#666;font-weight:bold}
+td.headerbar5{color:#FFF;background:#5382A1;font-weight:bold}
+td.headerbar6,th.headerbar6{color:#FFF;background:#999;font-weight:bold}
+span.ltcaption1,span.ltcaption2{color:#999}
+span.dkcaption1,b.dkgrey{color:#666}
+span.termhighlight{background-color:#FF9;layer-background-color:#FF9}
+span.eventdate{font-size:23px !important;color:#666}
+input.medium{width:95px}
+input.large,select.large,textarea.large{width:155px}
+input.xxlarge,textarea.xxlarge,select.xxlarge{width:300px}
+div.greyformfield select,div.greyformfield input,div.greyformfield textarea{background:#F1F1F1}
+input.buttonltblue,input.buttonblue2{cursor:hand;color:#FFF;height:1.45em;font-size:11px;padding:0px;margin:0px;border:0px none #000;font-weight:bold}
+div.leftnav1{font-weight:bold;color:#999}
+div.leftnav1 a{font-weight:bold}
+td.tooltabon,td.tooltab{vertical-align:bottom}
+td.tooltabon div{padding:3px 0px 3px 6px}
+td.tooltabon b{color:#FFF}
+input.buttonblue2{background:#5382A1}
+input.buttonltblue{background:#87A8BD}
+table.photobackground{background-repeat:no-repeat}
+.hyphen{color:#5382A1;text-align:right;white-space:nowrap}
+div.footer{color:#999;padding:5px 0px 10px 0px}
+a.red{color:#D12124;font-size:9px}
+a.red:link,a.red:visited,div.red a:visited{color:#D12124;font-size:10px;font-weight:bold}
+.trafficalert{color:#666;background-color:#F1F1F1;font-size:10px;margin:1px;font-weight:bold}
+table.highlight,td.highlight,th.highlight,tr.highlight td,tr.highlight th,table tr td.highlight,table tr th.highlight{background:#FFFFE2}
+.contentdivider table.grey4 img{height:2px}
+
+/* MVS GENERALIZED PASTED AUGMENTATION FROM EXISTING JSC PAGES */
+span.wrapper{font-size:13px}
+span.title{color:#000;font-size:20px;font-weight:bold}
+span.body{color:#000;font-size:13px}
+span.copyright{color:#000;font-size:10px}
+span.date{color:#CCC;font-size:10px}
+span.byline{color:#000;font-size:13px}
+a.tab:link,a.tab:active,a.tab:visited,a.tab2:link,a.tab2:active,a.tab2:visited{text-decoration:none;font-size:14px;font-weight:bold}
+a.tab:link,a.tab:visited{color:#336}
+a.tab:active,a.tab2:active{color:#000}
+a.tab2:link,a.tab2:visited{color:#FFF}
+a.footer:link,a.footer:visited,a.footer:active{font-size:10px}
+a.footer:link{color:#00F}
+a.footer:visited{color:#606}
+a.footer:active{color:#000}
+td.dkgray{background:#999}
+td.yellow{background:#FFC}
+
+/* MVS GENERALIZED PASTED AUGMENTATION FROM EXISTING WIRELESS PAGES */
+span.search{color:#FFF;font-size:13px}
+span.subtitle{color:#000;font-size:13px;font-weight:bold}
+span.rtbtitle{color:#666;font-size:13px;font-weight:bold}
+span.right{color:#3C6;font-size:13px;font-weight:bold}
+span.wrong{color:#C00;font-size:13px;font-weight:bold}
+div.box2{padding-top:0px}
+div.box{padding-top:4px}
+td.leftnav div.box{padding-top:3px}
+td.leftnav div.box2{padding-top:1px}
+table.black{background:#000}
+table.gray{background:#CCC}
+table.ltgray,tr.ltgray{background:#EEE}
+td.code{font-size:12px;font-family:Monaco,Courier,"Courier New"}
+td.ltblue{background:#C3E1FF;color:#000}
+td.gray{background:#EEE;font-size:13px;text-decoration:none;color:#000}
+td.grayline{background:#CCC}
+td.heading{background:#EEE;color:#9A9A9A;font-size:14px;font-weight:bold}
+td.whitetitle{background:#FFF;font-size:13px;font-weight:bold}
+td.yellowtitle{background:#FFC;font-size:13px;font-weight:bold;color:#666}
+td.ltyellow{background:#FFC}
+input.textentry{color:#000;font-size:10px;font-weight:normal}
+a.tree:link,a.tree:visited,a.tree:active{color:#000;text-decoration:none;font-size:12px}
+a.map{text-decoration:none;color:#000;font-size:13px}
+a.jscnav:link,a.jscnav:active,a.jscnav:visited{text-decoration:none;color:#99C;font-size:13px;font-weight:bold}
+a.wdnav:link,a.wdnav:active,a.wdnav:visited{text-decoration:none;color:#339;font-size:13px;font-weight:bold}
+.menu{position:absolute;background-color:#FFC;width:300px}
+.menuborder{position:absolute;background-color:#CCC;width:302px}
+.origin{position:absolute;background-color:#000}
+.popText{color:#000;text-decoration:none;font-size:12px}
+
+/* navblue2 fade */
+table.navblue,td.navblue,th.navblue,tr.navblue td,tr.navblue th,table tr td.navblue,table tr th.navblue{background:#E4EAF0}
+table.navblue2,tr.navblue2,td.navblue2{background:#DDE6EC}
+table.navblue,table.navblue2{background:url("/im/bg_navblue.gif") repeat-x left bottom #DDE6EC}
+
+/* tooltabon */
+td.tooltabon,td.tooltabon + td {background:url("/im/a2_background.gif") repeat-x left top !important}
+td.tooltabon div{padding:6px 7px 8px 7px}
+td.tooltab{background:#CCDAE3 url("/im/d7_tab_bg.gif") repeat-x;border-right:1px solid #FFF;border-top:3px solid #FFF}
+td.tooltab div{background:url("/im/corner_navblue_tr.gif") no-repeat right top;padding:9px 7px 5px 7px}
+td.tooltab div{padding:6px 7px 8px 7px}
+td.tooltab div a:visited{color:#35556B}
+
+/* headerbar */
+tr td.headerbar1 div.headerpadding2{padding:5px 6px}
+tr td.headerbar1{background:url("/im/bg_titlebar5.gif") repeat-x left top}
+tr td.headerbar2{padding:0px;background:url("/im/bg_titlebar4.gif") no-repeat left top}
+tr td.headerbar2 div.headerpadding2{background:url("/im/generic_tr.gif") no-repeat right top;padding:6px 8px 4px 10px}
+tr td.headerbar4{padding:0px;background:url("/im/bg_titlebar.gif") no-repeat left top}
+tr td.headerbar4 div.headerpadding2{background:url("/im/a2_corner_tr.gif") no-repeat right top;padding:6px 8px 4px 10px}
+tr td.headerbar3{padding:0px;background:url("/im/bg_titlebar.gif") no-repeat left top}
+tr td.headerbar3 div.headerpadding2{background:url("/im/a2_corner_tr.gif") no-repeat right top;padding:6px 8px 4px 10px}
+tr td.headerbar5{padding:0px;background:url("/im/bg_titlebar2.gif") no-repeat left top}
+tr td.headerbar5 div.headerpadding2{background:url("/im/generic_tr.gif") no-repeat right top;padding:6px 8px 4px 10px}
+tr td.headerbar6 div.headerpadding2,tr th.headerbar6 div.headerpadding2{padding:5px 6px}
+tr td.headerbar6,tr th.headerbar6{background:url("/im/bg_titlebar6.gif") repeat-x left top}
+
+/* vaa2 */
+body.vaa2v0{margin:0px auto;width:800px;padding:0px} 
+body.vaa2v1{width:100%} 
+
+/* bread fix */
+.vatop {clear:both}
+
+/* a0 */
+body.a0v0,div.a0{margin:0px auto;width:800px;padding:0px}
+body.a0v1,div#a0v1{width:100%;max-width:1770px}
+body.a0v1,div#a0v1{_width:98%}/* iepc56 */
+
+/* a1 */
+.a1{margin:2px 22px 3px 23px;float:none}
+* html .a1{margin:0 22px}
+.a1 div.a1v0,.a1 div.a1v1,.a1 div.a1v2,.a1 div.a1v3,.a1 div.a1v4,.a1 div.a1v5{width:100%;min-width:755px}
+.a1 .skiplink {position:absolute;left:-2000px}
+.a1 .skiplink:focus {left:0;padding:5px;border:1px #35556B solid;margin:10px;background:#FFD868;text-decoration:underline}
+div.a1 .a1menu {padding:0;margin-top:9px;float:none;visibility:hidden;position:absolute;z-index:40;left:0;top:-20000px}
+.toolbarlinks {float:left}
+.siteid {float:right}
+div.a1 .a1menux1 {height:4px;background:url("/im/a1_topline.gif") bottom left transparent no-repeat}
+div.a1 .a1menuw1 {background:url("/im/bg_navblue.gif") repeat-x bottom left #DDE6EC;padding:10px;border:#5b87a5 solid 1px;border-top:0}
+div.a1 .a1menuw1 a{font-size:12px;border:0;padding:0}
+div.a1Large{width:422px}
+div.a1Large .a1menuw1{width:400px}
+* html div.a1Large .a1menuw1{width:394px}
+div.a1Medium{width:302px}
+div.a1Medium .a1menuw1{width:280px}
+div.a1Small{width:202px}
+div.a1Small .a1menuw1{width:180px}
+.a1r1 .selectorlinks{float:right;padding-right:10px}
+.toolbarlinks a,.selectorlinks span{padding:0 5px 0 2px;font-size:11px;border-right:1px solid #A3B8CB}
+.toolbarlinks a.k2over{border-right:0}
+.toolbarlinks a.lastlink,.selectorlinks span.lastlink{border-right:0;padding:0 3px 0 2px;font-size:11px}
+.siteid span,.siteid a,.selectorlinks span a,.selectorlinks span.lastlink a{font-size:11px}
+.siteid span{padding:0 2px 0 3px}
+.siteid a,.siteid span.nolink{border-left:1px solid #A3B8CB;padding:0 2px 0 6px}
+.siteid a.firstlink,.siteid span.firstlink{border-left:0;padding-left:0}
+.browserExplorer7 div.a1 .a1menu{background:url("/im/a.gif") repeat 0 0}
+* html div.a1 .a1menu {margin-top:2px}
+div[class="a1menux1"]{margin:0 4px 4px -4px}
+div[class="a1menuw1"]{margin:-4px 0 0 -4px}
+div[class="a1menuw2"]{background:url("/im/shadow_box.png") bottom right no-repeat;padding:0 4px 4px 0;margin:0 0 0 0}
+.a1menu p {margin:0;font-size:11px}
+.toolbarlinks a,.selectorlinks span{padding:0 5px 0 2px;font-size:11px;border-right:1px solid #A3B8CB}
+.jsenabled span.toolbarlinks a.karrow {background:transparent}
+.jsenabled span.toolbarlinks a.k2over,.jsenabled .siteid a.language-select{padding-right:12px;background:url("/im/a1_cartandarrow.gif") right top no-repeat;margin-right:3px;border-right:0}
+span.toolbarlinks span.carticon{background:url("/im/a1_cartandarrow.gif") bottom left no-repeat;padding-left:16px}
+span.toolbarlinks a.a1cart{padding-left:16px}
+.jsenabled div.a1 span.toolbarlinks a.dividelink{border-right:0;margin-right:20px}
+div.a1 h5{margin-bottom:6px}
+a.language-select,a:link.language-select,a:visited.language-select,a:hover.language-select,a:active.language-select{text-decoration:none;cursor:default;color:black}
+* html .a1-2colwrap{background:url("/im/a.gif")}
+.a1-2colwrap{float:left}
+.a1-2colul ul{width:47%;margin-right:10px;float:left}
+
+/* a1 - OLD */
+.a1 table{width:100%;background:#fff}
+
+/* a2 */
+* html .a2w0 .a2{float:left}
+html > body .a2w0 .a2{border-top:3px solid white}
+.a2w0 + table,.a2w0 + br,.a2w0 + div,.a2w0 + form > table{clear:both}
+.a2{background:#5885A4 url("/im/a2_bg_logo.gif") no-repeat;margin:3px 10px;float:none;min-width:780px;clear:both}
+.a0v0 .a2{width:780px}
+.a2,.a2w4{min-height:60px}
+#a2v7,#a2v7 .a2w4{min-width:400px}
+.a2w1,.a2w2,.a2w3,.a2w4{background-color:transparent;width:100%;float:left}
+.a2w1{background:url("/im/generic_tl.png") no-repeat top left}
+.a2w2{background:url("/im/generic_tr.png") no-repeat top right}
+.a2w3{background:url("/im/generic_bl.png") no-repeat bottom left}
+.a2w4{background:url("/im/generic_br.png") no-repeat bottom right;min-width:780px}
+.a2 li a:link,.a2 li a:hover,.a2 li a:active,.a2 li a:visited {color:#fff;font-weight:bold;text-decoration:none;display:block;float:left}
+.a2 li a:hover,.a2 li a:focus{text-decoration:underline}
+.a2topiclinks ul{margin:0;padding-left:7px;float:left}
+.a2topiclinks li{display:block;float:left;margin:0 0 0 5px;padding:0}
+.a2search{float:right;background-color:transparent;text-align:right;margin:0;padding:0}
+.a2search select{width:140px;padding:0}
+.a2search a:link,.a2search a:visited{color:#fff}
+#venuespacer {display:block}
+#sunlogo{float:left;padding:1px;display:inline}
+#sunlogo:focus{border:#fff dotted 1px;padding:0}
+#searchfield,.searchfield{width:67px;margin:0;padding:1px 0 1px 0}
+#searchfield:focus,.searchfield:focus{width:100px;background:#fffaea}
+#searchfield,.searchfield,.a2search select{background:#BFCDDB;border:#1A242C solid 2px;border-right:#D1DCE5 solid 2px;border-bottom:#D1DCE5 solid 2px}
+#searchbttn{padding:1px;vertical-align:middle;margin-right:1px}
+#searchbttn:focus{border:#fff dotted 1px;padding:0}
+#a2v0 .a2search,#a2v6 .a2search{padding:20px 5px 0 0}
+#a2v1 .a2search,#a2v2 .a2search,#a2v3 .a2search{margin:0;padding:8px 6px 0 0;position:relative;top:0px}
+#a2v0 li a,#a2v4 li a{height:34px;padding:26px 7px 0 4px;margin:0;display:block}
+#a2v1 li a,#a2v3 li a,#a2v5 li a{height:18px;margin:0;padding:6px 5px 3px 5px;display:block}
+div.a2m{position:absolute !important;margin:0;padding:0 20px 12px 20px !important;display:none;background:url("/im/a2_bg_for_menus.png") 20px 100% no-repeat;width:179px;margin-top:60px;left:0px;z-index:32}
+.browserSafari div.a2m{background-image:url("/im/a2_bg_for_menus_safari.png")}
+#a2v1 div.a2m,#a2v2 div.a2m,#a2v3 div.a2m,#a2v5 div.a2m{margin-top:27px}
+#mtopics,#mtopics li{position:relative;z-index:31}
+div.a2m ul{display:block;margin:0;padding:3px 3px 0 0;background:url("/im/a2_bg_for_menus.png") top right repeat-y}
+div.a2m ul li{display:block;margin:0;padding:0;height:auto !important}
+#mtopics li ul li a,div.a2m ul li a{margin:0 !important;padding:4px 8px !important;height:auto !important;font-weight:normal;width:160px;border-top:#A3B8CB solid 1px}
+#mtopics li ul li.firstchild a{padding-top:5px;border:0}
+div.a2m ul li a:hover,div.a2m ul li a:focus{background:#E97D19 !important;border-top:#A14D00 solid 1px;padding-top:4px}
+#mtopics li.a2mshow,#mtopics li:hover{background:url("/im/a2_bg_for_menus.png") top right repeat-y}
+#a2v1 #mtopics li.a2mshow,#a2v3 #mtopics li.a2mshow,#a2v5 #mtopics li.a2mshow,#a2v1 #mtopics li:hover,#a2v3 #mtopics li:hover,#a2v5 #mtopics li:hover{background-position:-210px 100%;background-repeat:no-repeat}
+.a2mshow div.a2m, #mtopics li:hover div.a2m{display:block}
+.a2nomenu{background:transparent !important}
+
+/* a2 - OLD - TABLE CODE */
+#a2v0 td.navlinks div,#a2v4 td.navlinks div{padding:7px 8px 20px 8px}
+#a2v1 td.navlinks,#a2v2 td.navlinks,#a2v3 td.navlinks,#a2v5 td.navlinks{height:17px;padding:0 8px 7px 8px}
+td.navlinks{white-space:nowrap}
+td.navlinks div.a2m{white-space:normal}
+td.navlinks a:hover{text-decoration:underline}
+.a2 td.navlinks a,.a2 td.navlinks a:visited{color:#fff;font-weight:bold}
+.a2 div.cornerTL,.a2 div.cornerTR,.a2 div.cornerBL,.a2 div.cornerBR{width:100%;height:60px}
+.a2 div.cornerTL{background:url("/im/a2_corner_tl.gif") no-repeat top left}
+.a2 div.cornerTR{background:url("/im/a2_corner_tr.gif") no-repeat top right}
+.a2	div.cornerBL{background:url("/im/a2_corner_bl.gif") no-repeat bottom left}
+.a2 div.cornerBR{background:url("/im/a2_corner_br.gif") no-repeat bottom right}
+.a2 .cornerTL,.a2 .cornerTR,.a2 .cornerBL,.a2 .cornerBR,.a2table tr td.sunlogo,td.a2links,.a2search,td.a2title{background-color:transparent}
+#a2v1 .a2topiclinks td,#a2v2 .a2topiclinks td,#a2v3 .a2topiclinks td,#a2v5 .a2topiclinks td{vertical-align:bottom}
+.a2topiclinks table td div{position:relative;z-index:32}
+.a2topiclinks td div.a2m a{font-weight:normal !important}
+.a2topiclinks td div.a2m ul li.firstchild a{padding-top:5px;border:0}
+.a2topiclinks td div.a2m{margin-top:0px;left:-1px !important;top:42px}
+* html .a2topiclinks td div.a2m{left:-9px !important}
+#a2v1 .a2topiclinks td div.a2m,#a2v2 .a2topiclinks td div.a2m,#a2v3 .a2topiclinks td div.a2m,#a2v5 .a2topiclinks td div.a2m{margin-top:0px;left:-8px !important;top:21px}
+.a2topiclinks td.a2mshow,.a2topiclinks td.navlinks:hover{background:url("/im/a2_bg_for_menus.png") top right repeat-y}
+#a2v1 .a2topiclinks td.a2mshow,#a2v3 .a2topiclinks td.a2mshow,#a2v5 .a2topiclinks td.a2mshow,#a2v1 .a2topiclinks td.navlinks:hover,#a2v3 .a2topiclinks td.navlinks:hover,#a2v5 .a2topiclinks td.navlinks:hover{background-position:-210px 100%;background-repeat:no-repeat}
+.a2topiclinks td.navlinks:hover div.a2m{display:block}
+#a2v1 td .a2search,#a2v3 td .a2search,#a2v5 td .a2search{top:-5px}
+
+/* a2 - IE */
+* html .a0v1 .a2w0{margin-left:-10px}
+* html .a2,* html .a2w4{height:60px}
+* html .a0v0 .a2{margin:3px 5px !important}
+* html .a2w1{background-image:url("/im/a2_corner_tl.gif")}
+* html .a2w2{background-image:url("/im/a2_corner_tr.gif")}
+* html .a2w3{background-image:url("/im/a2_corner_bl.gif")}
+* html .a2w4{background-image:url("/im/a2_corner_br.gif")}
+* html #mtopics li.a2mshow,* html #mtopics li ul,* html div.a2m, * html .a2topiclinks td.a2mshow, * html .a2topiclinks td.navlinks:hover, * html div.a2m ul{background-image:url("/im/a2_bg_for_menus.gif")}
+
+/* a2 for dev */
+#sunlogo img{width:90px}
+.a2{background-image:url('/im/vnv1_bg_logo.gif')}
+
+/* a4 */
+div#breadcrumb,div.breadcrumb{clear:both;padding:5px 25px;color:#3E6B8A}
+
+/* g9 */
+.g9 select{background:#BFCDDB;border:#1A242C solid 2px;border-right:#D1DCE5 solid 2px;border-bottom:#D1DCE5 solid 2px}
+.g9 select{width:150px;padding:0}
+
+/* custom b3 - requires b3w1 & b3w2 DIVs inside b3 DIV */
+.b3	.b3w1{width:100%;background:url("/im/generic_bl.gif") no-repeat bottom left;height:23px}
+.b3 .b3w2{width:100%;background:url("/im/generic_br.gif") no-repeat bottom right;height:23px}
+.b3 {position:relative;margin:6px 10px 2px 10px;background:url("/im/bg_home_b3.gif")  0px 3px repeat-x;height:27px}
+.newsitems {font-weight:bold;white-space:nowrap;width:500px;position:absolute;z-index:2;visibility:hidden}
+#newsitem1 {visibility:visible}
+#newsextra span.xmlbttn{font-weight:normal}
+#newsextra span.newslink{float:left;font-weight:bold;padding-left:18px;padding-right:5px}
+/* ie5mac hack \*/
+#newsextra span.newslink{background:url("/im/ar_lg_orange_h.gif") no-repeat top left;font-weight:bold;padding-left:18px;padding-right:5px}
+div.b3 {position:relative;margin:6px 10px 2px 10px;background:url("/im/bg_home_b3.gif")  0px 1px repeat-x;height:24px}
+div.newsitems {font-weight:bold;white-space:nowrap;width:500px;position:absolute;z-index:2;opacity:0;filter:alpha(opacity=0);-moz-opacity:0;visibility:visible}
+div#newsitem1 {opacity:.99;filter:alpha(opacity=99);-moz-opacity:.99}
+div#newsextra span.xmlbttn{float:right;font-weight:normal}
+div#newsextra span.newslink{float:none}
+/* do not delete this */
+#newsextra {position:absolute;top:5px;left:585px;z-index:8;padding:0px 0px 0px 18px;width:170px;text-align:right}
+#newstitle {position:absolute;top:5px;left:15px;z-index:8}
+#newstitle,#newstitle a{font-weight:bold}
+#newsticker {width:470px;height:15px;overflow:hidden;white-space:nowrap;z-index:8;position:absolute;padding:1px 1px 1px 10px;margin:4px 0px 0px 90px;left:-8px}
+/* b3v1 */
+.b3v1 #newsextra a{font-weight:bold}
+.b3v1 #newsextra{color:#a3b8cb}
+.b3v1 #newsextra{left:568px;width:205px;padding:0px}
+.b3v1 a.xmlbttn img{vertical-align:top;border:0px}
+.b3v1 .small a{position:relative;top:1px}
+.b3v1 .small a.xmlbttn{position:relative;top:0px}
+.b3v1 a.xmlbttn{padding-left:4px}
+
+table.grey4 pre{font-size:11px}
+
+ media screen {
+    body.vaa2v0 table.grey4 pre {width:380px;overflow:scroll}
+}
+
+
+</style>
+<!-- END METADATA -->
+
+<script language="javascript1.2" type="text/javascript" src="java-sun-com_files/sniff.js"></script>
+<script language="javascript1.2" type="text/javascript" src="java-sun-com_files/menucontent.js"></script>
+<script language="javascript1.2" type="text/javascript" src="java-sun-com_files/menucode.js"></script>
+<script language="javascript1.2" type="text/javascript" src="java-sun-com_files/developer.js"></script>
+
+<!--stopindex-->
+
+</head><body leftmargin="0" topmargin="0" rightmargin="0" onload="prepmenus(); done=true" bgcolor="#ffffff" marginheight="0" marginwidth="0">
+<a name="top"></a>
+
+
+   
+
+<!-- BEGIN A1 COMPONENT V.0 -->
+<div class="a1 a1r2">
+<div class="a1v0">
+<a href="#skip2content" class="skiplink">Skip to Content</a>
+<span class="toolbarlinks">
+<a class="karrow k2over a1menu1 y3 x-6" href="http://java.sun.com/global/mh/suncom/index.html";>Sun</a><div id="a1menu1" class="a1menu a1Large"><div class="a1menux1"></div>
+<div class="a1menuw2"><div class="a1menuw1">
+<div class="a1-2colwrap"><div class="a1-2colul"><ul class="bluearrows"><li><a href="http://www.sun.com/";>Sun.com</a></li><li><a href="http://www.sun.com/aboutsun/";>About Sun</a></li><li><a href="http://www.sun.com/download/";>Downloads</a></li><li><a href="http://www.sun.com/products/";>Products</a></li></ul><ul class="bluearrows"><li><a href="http://www.sun.com/servicessolutions/";>Solutions</a></li><li><a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=tous";>Support</a></li><li><a href="http://www.sun.com/training/";>Training</a><p></p></li></ul></div></div><br class="clear"></div><div class="a1menux2"></div></div></div>
+<a class="karrow k2over a1menu2 y3 x-6" href="http://java.sun.com/global/mh/java/";>Java</a><div id="a1menu2" class="a1menu a1Large"><div class="a1menux1"></div>
+<div class="a1menuw2"><div class="a1menuw1">
+<div class="a1-2colwrap"><div class="a1-2colul"><ul class="bluearrows"><li><a href="http://java.com/download/";>Java for your computer</a><p>Stay up to date with the latest versions of Java for your desktop computer.</p></li><li><a href="http://www.sun.com/software/opensource/java/";>Free and Open Source Java</a><p>Get your own copy of the underlying software code for the Java language.</p></li><li><a href="http://java.sun.com/javase/downloads/";>Download the latest JDK</a><p>The basic developer kit for Java developers.</p></li><li><a href="http://java.sun.com/javaee/downloads/";>Download the Java EE SDK</a><p>The SDK supports Java SE 6 and the latest Java EE 5 technologies.</p></li><li><a href="http://download.netbeans.org/netbeans/6.0/final/";>Download NetBeans IDE</a><p>Get the award-winning, open-source tool suite for developing Java applications.</p></li><li><a href="http://java.sun.com/";>Java Developer Resources</a><p>Visit java.sun.com for everything you need to know about
  the Java technology.</p></li></ul><ul class="bluearrows"><li><a href="http://developers.sun.com/prodtech/javatools/";>Java Developer Tools</a><p>See and download all software tools available from Sun.</p></li><li><a href="http://java.sun.com/javase/";>Java Standard Edition</a><p>For developing and deploying Java applications for the desktop, servers, embedded, and real-time environments.</p></li><li><a href="http://java.sun.com/javaee/";>Java Enterprise Edition</a><p>For enterprise, server-side Java applications.</p></li><li><a href="http://java.sun.com/javame/";>Java Micro Edition</a><p>For Java applications running on mobile devices.</p></li><li><a href="http://java.sun.com/learning/training/";>Java Training</a><p>Sharpen your Java skills with courses from the source.</p></li><li><a href="http://developers.sun.com/services/";>Java Support</a><p>Get dedicated help from Sun including technical assistance, product support, and support for deployed Java applications.</p></li></ul><
 /div></div><br class="clear"></div><div class="a1menux2"></div></div></div>
+<a class="karrow k2over a1menu3 y3 x-6" href="http://java.sun.com/global/mh/solaris/";>Solaris</a><div id="a1menu3" class="a1menu a1Medium"><div class="a1menux1"></div>
+<div class="a1menuw2"><div class="a1menuw1">
+<ul class="bluearrows"><li><a href="http://www.sun.com/software/solaris/get.jsp";>Solaris</a><p>Download the most advanced operating system in the world</p></li><li><a href="http://developers.sun.com/sunstudio/";>Sun Studio</a><p>Optimizing compilers and tools for C/C++/Fortran application development</p></li><li><a href="http://developers.sun.com/solaris/";>Solaris Developer Center</a><p>Explore the resources and community available to the Solaris developer.</p></li><li><a href="http://developers.sun.com/services/";>Sun Developer Services</a><p>Get technical assistance, product support, training, and other services from the source.</p></li><li><a href="http://www.sun.com/bigadmin/home/index.html";>BigAdmin</a><p>A
+community site with Solaris system administration information, hardware
+compatibility, a script library, and other resources for administrators
+of Sun products.</p></li><li><a href="http://www.opensolaris.org/";>OpenSolaris</a><p>Join the open-source community for collaboration and conversation around the OpenSolaris technology.</p></li></ul></div><div class="a1menux2"></div></div></div>
+<a href="http://java.sun.com/global/mh/communities/"; class="dividelink karrow k2over a1menu4 y3 x-6">Communities</a><div id="a1menu4" class="a1menu a1Large"><div class="a1menux1"></div>
+<div class="a1menuw2"><div class="a1menuw1">
+<div class="a1-2colwrap"><div class="a1-2colul"><ul class="bluearrows"><li><a href="https://openjdk.dev.java.net/";>OpenJDK</a><p>The place to collaborate on the open-source JDK, an implementation of the Java Platform, Standard Edition specification.</p></li><li><a href="http://community.java.net/mobileandembedded/";>Mobile &amp; Embedded </a><p>The
+Mobile &amp; Embedded Community enables and empowers developers to
+collaborate and innovate, driving the evolution and adoption of the
+Java(TM) Platform, Micro Edition (Java ME) for mobile and embedded
+devices.</p></li><li><a href="http://glassfish.dev.java.net/";>GlassFish</a><p>The GlassFish community is building free, open source, production-quality, enterprise software.</p> </li><li><a href="http://netbeans.org/";>NetBeans</a><p>You
+have the opportunity to submit bugs and feature requests in IssueZilla,
+submit news for the NetBeans Community, and contribute code or even
+create a project of your own. Welcome to the team!</p></li><li><a href="http://www.sun.com/software/opensource/opensolaris.jsp";>OpenSolaris</a><p>The OpenSolaris source code is already cutting edge, but innovation happens everywhere, so we welcome your involvement.</p></li><li><a href="http://www.opensparc.net/";>OpenSPARC</a><p>OpenSPARC.net
+is the genesis of a vision to create a larger community where open
+conversations and collaborative development projects spawn dramatic
+innovations around chip design.</p></li></ul><ul class="bluearrows"><li><a href="http://developers.sun.com/openstorage/";>Open Storage</a><p>The
+OpenSolaris storage community is your gateway to data management
+related communities and projects - file sharing, file systems, volume
+managers, data services, storage drivers, and much more.</p></li><li><a href="https://openjfx.dev.java.net/";>OpenJFX</a><p>Project
+OpenJFX is a community for sharing early versions of the JavaFX Script
+language and for collaborating on its development.</p></li><li><a href="http://java.net/";>java.net</a><p>A gathering place for Java technology enthusiasts and existing communities across industries, platforms, and interest groups.</p></li><li><a href="http://developers.sun.com/learning/academic/";>Sun Student Developers</a><p>The SDN Academic Developer Program offers you ready access to tools, resources, and student communities.</p></li><li><a href="http://jcp.org/";>Java Community Process</a><p>The
+JCP gives you a chance to both have your own work become an official
+component of the Java platform, and to offer suggestions for improving
+and growing the technology.</p></li></ul></div></div><br class="clear"></div><div class="a1menux2"></div></div></div>
+<a class="karrow k2over a1menu5 y3 x-6" href="http://developers.sun.com/global/my_profile.html";>My SDN Account</a><div id="a1menu5" class="a1menu a1Small"><div class="a1menux1"></div>
+<div class="a1menuw2"><div class="a1menuw1">
+<ul class="bluearrows"><li><a href="https://reg.sun.com/updateaccount?program=sdn&amp;goto=http://developers.sun.com";>Update My Profile</a></li></ul></div><div class="a1menux2"></div></div></div>
+<a href="http://developers.sun.com/global/join_sdn.html"; class="dividelink karrow k2over a1menu6 y3 x-6">Join SDN</a><div id="a1menu6" class="a1menu a1Medium"><div class="a1menux1"></div>
+<div class="a1menuw2"><div class="a1menuw1">
+<ul class="bluearrows"><li><a href="https://reg.sun.com/register?program=sdn";>Join SDN Now</a></li><li><a href="http://developers.sun.com/user_registration/whyregister.jsp";>Why Join</a><p>Becoming
+an Sun Developer Network (SDN) member makes you part of a vibrant
+worldwide community of developers, and gives you access to cool stuff
+and exclusive offers.</p></li></ul></div><div class="a1menux2"></div></div></div>
+</span>
+</div>
+</div>
+<!-- END A1 COMPONENT V.0 -->
+
+<!-- BEGIN A2 COMPONENT V.1 -->
+<div class="a2w0">
+<div class="a2" id="a2v1">
+<div class="a2w1"><div class="a2w2"><div class="a2w3"><div class="a2w4">
+<div class="a2topiclinks">
+<div class="a2search">
+<form action="http://developers.sun.com/search/onesearch/index.jsp"; accept-charset="utf-8" method="get">
+<input name="charset" value="utf-8" type="hidden">
+<input name="col" value="developer-reference" type="hidden">
+<span class="rightarrowwhite">»</span>&nbsp;<a href="http://developers.sun.com/global/search_tips.html";>search tips</a>&nbsp;
+<input name="qt" class="searchfield" size="7" onfocus="if( this.value==this.defaultValue ) this.value='';" value="Search">
+<input id="searchbttn" src="java-sun-com_files/a2_bttn_search.gif" alt="Submit Search" border="0" type="image">
+</form>
+</div>
+<a href="http://www.sun.com/"; title="Home Page" id="sunlogo"><img src="java-sun-com_files/a_002.gif" alt="Home Page" border="0" height="58" width="98"></a>
+<a href="http://developers.sun.com/"; title="Sun Developer Network"><img src="java-sun-com_files/a_002.gif" id="venuespacer" alt="Sun Developer Network" border="0" height="33" width="400"></a>
+<ul id="mtopics">
+<li id="mtopic1"><a id="glink1" class="tpclink a2menu" title="See All APIs" href="http://java.sun.com/global/mh/api/index.html";>APIs</a><div style="margin-left: -20px;" class="a2m"><ul><li class="firstchild"><a href="http://java.sun.com/reference/api/";>Java SE</a></li>
+<li><a href="http://java.sun.com/javaee/reference/";>Java EE</a></li>
+<li><a href="http://java.sun.com/javame/reference/apis.jsp";>Java ME</a></li>
+<li><a href="http://developers.sun.com/solaris/reference/docs/";>Solaris</a></li>
+<li><a href="http://developers.sun.com/sunstudio/reference/docs/";>Sun Studio Compilers &amp; Tools</a></li>
+<li><a href="http://java.sun.com/webservices/reference/api/";>Web Services</a></li>
+<li><a href="http://java.sun.com/products/javacard/reference/docs/";>Java Card</a></li>
+<li><a href="http://java.sun.com/global/mh/api/index.html";>See All »</a></li></ul></div></li>
+<li id="mtopic2"><a id="glink2" class="tpclink a2menu" title="See All Downloads" href="http://java.sun.com/global/mh/downloads/index.html";>Downloads</a><div style="margin-left: -20px;" class="a2m"><ul><li class="firstchild"><a href="http://java.sun.com/downloads/ea/";>Early Access</a></li>
+<li><a href="http://java.sun.com/javase/downloads/";>Java SE</a></li>
+<li><a href="http://java.sun.com/javaee/downloads/";>Java EE</a></li>
+<li><a href="http://java.sun.com/javame/downloads/";>Java ME</a></li>
+<li><a href="http://java.sun.com/javafx/downloads/";>JavaFX</a></li>
+<li><a href="http://developers.sun.com/solaris/downloads/";>Solaris</a></li>
+<li><a href="http://www.netbeans.org/downloads/index.html";>NetBeans</a></li>
+<li><a href="http://developers.sun.com/sunstudio/downloads/";>Sun Studio Compilers &amp; Tools</a></li>
+<li><a href="http://www.sun.com/software/products/mysql/getit.jsp";>MySQL</a></li>
+<li><a href="http://www.sun.com/software/products/virtualbox/get.jsp";>VirtualBox</a></li>
+<li><a href="http://java.sun.com/global/mh/downloads/index.html";>See All »</a></li></ul></div></li>
+<li id="mtopic3"><a id="glink3" class="tpclink a2menu" title="See All Products" href="http://java.sun.com/global/mh/products/index.html";>Products</a><div style="margin-left: -20px;" class="a2m"><ul><li class="firstchild"><a href="http://java.sun.com/javase/";>Java SE</a></li>
+<li><a href="http://java.sun.com/javaee/";>Java EE</a></li>
+<li><a href="http://java.sun.com/javame/";>Java ME</a></li>
+<li><a href="http://java.sun.com/javafx/";>JavaFX</a></li>
+<li><a href="http://developers.sun.com/web/scripting/";>Scripting</a></li>
+<li><a href="http://developers.sun.com/solaris/";>Solaris</a></li>
+<li><a href="http://developers.sun.com/sunstudio/";>Sun Studio Compilers &amp; Tools</a></li>
+<li><a href="http://www.netbeans.org/";>NetBeans IDE </a></li>
+<li><a href="http://developers.sun.com/openstorage/";>Open Storage</a></li>
+<li><a href="http://developers.sun.com/mobility/";>Mobility</a></li>
+<li><a href="http://www.sun.com/software/products/mysql/index.jsp";>MySQL</a></li>
+<li><a href="http://developers.sun.com/javadb/";>Java DB</a></li>
+<li><a href="http://java.sun.com/global/mh/products/index.html";>See All »</a></li></ul></div></li>
+<li id="mtopic4"><a id="glink4" class="tpclink a2menu" title="See All Support" href="http://java.sun.com/global/mh/support/index.html";>Support</a><div style="margin-left: -20px;" class="a2m"><ul><li class="firstchild"><a href="http://www.sun.com/bigadmin/home/?intcmp=1394";>Big Admin</a></li>
+<li><a href="http://developers.sun.com/services/";>Developer Services</a></li>
+<li><a href="http://forum.java.sun.com/index.jspa";>Forums</a></li>
+<li><a href="http://developers.sun.com/global/";>Globalization</a></li>
+<li><a href="http://java.sun.com/global/mh/support/index.html";>See All »</a></li></ul></div></li>
+<li id="mtopic5"><a id="glink5" class="tpclink a2menu" title="See All Training" href="http://java.sun.com/global/mh/training/index.html";>Training</a><div style="margin-left: -20px;" class="a2m"><ul><li class="firstchild"><a href="http://www.sun.com/training/certification/index.xml?intcmp=1394";>Certification</a></li>
+<li><a href="http://www.sun.com/training/catalog/developer.xml?intcmp=1394";>Developer Training</a></li>
+<li><a href="http://java.sun.com/global/mh/training/index.html";>See All »</a></li></ul></div></li>
+<li id="mtopic6"><a id="glink6" class="tpclink a2menu" title="See All Participate" href="http://java.sun.com/global/mh/participate/index.html";>Participate</a><div style="margin-left: -20px;" class="a2m"><ul><li class="firstchild"><a href="http://forum.java.sun.com/index.jspa";>Forums</a></li>
+<li><a href="http://blogs.sun.com/";>Blogs</a></li>
+<li><a href="http://developers.sun.com/sdnshare/";>SDN Share</a></li>
+<li><a href="http://wikis.sun.com/";>Wikis</a></li>
+<li><a href="http://java.sun.com/community/usergroups/";>Java User Groups</a></li>
+<li><a href="http://developers.sun.com/newsletters/index.html";>Newsletters</a></li>
+<li><a href="http://developers.sun.com/events/";>Events</a></li>
+<li><a href="http://java.sun.com/global/mh/participate/index.html";>See All »</a></li></ul></div></li>
+</ul>
+</div>
+</div></div></div></div>
+</div></div>
+<!-- END A2 COMPONENT V.1 -->
+<!-- BEGIN BREADCRUMB -->
+<div id="breadcrumb">
+</div><br>
+<!-- END BREADCRUMB -->
+
+<!-- BEGIN VNV3 PAGETITLE, two-level variation -->
+<div class="pagetitle2">Java<sup><font size="-2">TM</font></sup> SE 6 Release Notes</div>
+<div id="sharepage" class="smallpagetitle"><h1><!-- InstanceBeginEditable name="title" -->
+  <div class="smallpagetitle"><h1>Linux Installation (32-bit)</h1></div>
+  <!-- InstanceEndEditable --></h1><div class="sharepage">		<div class="sharepagew1 share-mailto">		<table summary="layout" cellpadding="0" cellspacing="0"><tbody><tr>		<td id="share-mailto"><a href="mailto:?subject=Sun%20Web%20Page:%20Linux%20Installation%20%2832-bit%29&amp;body=Check%20out%20this%20page%20on%20sun.com:%20%0A%0Ahttp%3A%2F%2Fjava.sun.com%2Fjavase%2F6%2Fwebnotes%2Finstall%2Fjdk%2Finstall-linux.html"; class="sharelink mailto" title="Email this page to a friend"></a></td>		<td id="share-technorati"><a href="http://www.technorati.com/search/http%3A%2F%2Fjava.sun.com%2Fjavase%2F6%2Fwebnotes%2Finstall%2Fjdk%2Finstall-linux.html"; class="sharelink technorati" title="See who links to this page on Technorati"></a></td>		<td id="share-delicious"><a href="http://del.icio.us/post?v=4;url=http%3A%2F%2Fjava.sun.com%2Fjavase%2F6%2Fwebnotes%2Finstall%2Fjdk%2Finstall-linux.html;title=Installation%20Notes"; class="sharelink delicious" title="Bookmark this page in del.icio.us"></
 a></td>		<td id="share-digg"><a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fjava.sun.com%2Fjavase%2F6%2Fwebnotes%2Finstall%2Fjdk%2Finstall-linux.html&amp;title=Installation%20Notes"; class="sharelink digg" title="Submit this page to Digg"></a></td>		<td id="share-slashdot"><a href="http://slashdot.org/bookmark.pl?title=Installation%20Notes&amp;url=http%3A%2F%2Fjava.sun.com%2Fjavase%2F6%2Fwebnotes%2Finstall%2Fjdk%2Finstall-linux.html"; class="sharelink slashdot" title="Submit this page to Slashdot"></a></td>		<td id="share-blank"> </td></tr></tbody></table></div></div></div>
+<!-- END VNV3 PAGETITLE, two-level variation -->
+
+<!-- BEGIN WRAPPER TABLE, 1 COLUMN, MAIN -->
+<table border="0" cellpadding="10" cellspacing="0" width="100%">
+<tbody><tr><td valign="top" width="100%">
+<!-- BEGIN CENTRAL COLUMN COMPONENTS -->
+
+<!--startindex-->
+<a name="skip2content"></a>
+
+
+<!-- ============ Following table is not part of the standard header for java.sun.com, =======->
+<!-->
+<!-- ============ Links to JDK Docs and Japanese Release Notes Index Page ================== -->
+
+<hr>
+
+<table border="0" cellpadding="0" cellspacing="0" width="99%">
+<tbody><tr valign="top" align="left">
+<td>
+</td>
+<td align="right">
+<font size="-1">
+<a href="http://java.sun.com/javase/6/docs/index.html";>JDK Documentation</a>
+<!--<p><A href="http://java.sun.com/javase/ja/6/docs/ja/index.html";><IMG src="http://java.sun.com/javase/6/ja/docs/ja/images/Japanese12B.gif"; border="0" alt="Japanese"></A></p>
+-->
+</font></td>
+</tr>
+</tbody></table>
+<!-- ==================== -->
+<!--  BEGIN MAIN CONTENT  -->
+<!-- ==================== -->
+<!-- InstanceBeginEditable name="content" --> 
+
+      <h2>Contents</h2>
+      <blockquote> <b> <a href="#requirements">System Requirements</a><br>
+        <a href="#install">JDK Installation Instructions</a><br>
+        </b> &nbsp;&nbsp;&nbsp;<a href="#self-extracting">Installation
+of Self-Extracting Binary</a><br>
+&nbsp;&nbsp;&nbsp;<a href="#install-rpm">Installation of RPM File</a><br>
+        <b> <a href="#plugin">Java Plugin Browser Registration
+Instructions</a><br>
+        <a href="#jws">Java Web Start Installation Notes</a><br>
+        <a href="#troubleshooting">Troubleshooting</a><br>
+        </b> </blockquote>
+<!-- BEGIN FRAGMENT | HR TAG -->
+      <div class="contentdivider">
+      <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+        <tbody>
+          <tr>
+            <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+          </tr>
+        </tbody>
+      </table>
+      </div>
+<!-- END FRAGMENT | HR TAG --> <a name="requirements"></a>
+      <h2>System Requirements</h2>
+See supported <a href="http://java.sun.com/javase/6/webnotes/install/system-configurations.html";>System
+Configurations</a>
+for information about supported platforms, operating systems, desktop
+managers, and browsers.
+      <p> For issues, see the <a href="#troubleshooting">Troubleshooting</a>
+section below.
+<!-- 
+and the <a href="../../index.html#linux">Linux Notes</a>
+section of the Release Notes. 
+-->
+</p>
+      <p><!-- BEGIN FRAGMENT | HR TAG --> </p>
+      <div class="contentdivider">
+      <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+        <tbody>
+          <tr>
+            <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+          </tr>
+        </tbody>
+      </table>
+      </div>
+<!-- END FRAGMENT | HR TAG --> <a name="install"></a>
+      <h2>Installation Instructions</h2>
+Installing the JDK automatically installs the Java Plugin and Java Web
+Start. Note that the Java Plugin needs to be registered with the
+browser. After installing the JDK, refer to:
+      <ul>
+        <li> <a href="#plugin">Java Plugin Browser Registration
+Instructions</a> </li>
+        <li> <a href="#jws">Java Web Start Installation Notes</a> </li>
+      </ul>
+      <a name="installformats"></a> <b>Install formats</b> - This
+version of the JDK is available in two installation formats.
+      <ul>
+        <li><b>Self-extracting Binary File</b> - This file can be used
+to install the JDK in a location chosen by the user. This one can be
+installed by anyone (not only root users), and it can easily be
+installed in any location. As long as you are not root user, it cannot
+displace the system version of the Java platform suppled by Linux. To
+use this file, see <a href="#self-extracting">Installation of
+Self-Extracting Binary</a> below.
+          <p> </p>
+        </li>
+        <li><b>RPM Packages</b> - A <tt>rpm.bin</tt> file containing
+RPM packages, installed with the <tt>rpm</tt> utility. Requires root
+access to install.
+RPM packages
+are the recommended method for installation on Linux. To use this
+bundle, see <a href="#install-rpm">Installation of RPM File</a> below.
+        </li>
+      </ul>
+Choose the install format that is most suitable to your needs.
+      <blockquote><!-- BEGIN FRAGMENT | HR TAG -->
+        <div class="contentdivider">
+        <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+          <tbody>
+            <tr>
+              <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+            </tr>
+          </tbody>
+        </table>
+        </div>
+<!-- END FRAGMENT | HR TAG --> <b>Note:</b> For any text on this page
+containing the following notation, you must substitute the appropriate
+JDK update version number for the notation.
+        <blockquote>
+          <pre><code>&lt;version&gt;</code>
+          </pre>
+        </blockquote>
+For example, if you were downloading update 6_01, the following
+command:
+        <blockquote>
+          <pre><code>./jdk-6&lt;version&gt;-linux-i586.bin</code>
+          </pre>
+        </blockquote>
+would become:
+        <blockquote>
+          <pre><code>./jdk-6u1-linux-i586.bin</code>
+          </pre>
+        </blockquote>
+<!-- BEGIN FRAGMENT | HR TAG -->
+        <div class="contentdivider">
+        <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+          <tbody>
+            <tr>
+              <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+            </tr>
+          </tbody>
+        </table>
+        </div>
+<!-- END FRAGMENT | HR TAG --> </blockquote>
+<!-- BEGIN FRAGMENT | HR TAG -->
+      <div class="contentdivider">
+      <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+        <tbody>
+          <tr>
+            <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+          </tr>
+        </tbody>
+      </table>
+      </div>
+<!-- END FRAGMENT | HR TAG --><!-- ================ Self-Extracting Binary ============== -->
+      <a name="self-extracting"></a>
+      <h3>Installation of Self-Extracting Binary</h3>
+Use these instructions if you want to use the self-extracting binary
+file to install the JDK. If you want to install RPM packages instead,
+see <a href="#install-rpm">Installation of RPM File</a>.
+      <p><!-- ===================== Check Size ===================== -->
+      <a name="Check"></a> </p>
+      <p> <font color="ff0000" size="+1"><strong>1.</strong></font> <strong>Download
+and check the download file size</strong> to ensure that you have
+downloaded the full, uncorrupted software bundle.<br>
+      </p>
+      <blockquote> You can download to any directory you choose; it
+does not have to be the directory where you want to install the JDK.
+        <p> Before you download the file, notice its byte size provided
+on the download page on the web site. Once the download has completed,
+compare that file size to the size of the downloaded file to make sure
+they are equal. </p>
+      </blockquote>
+<!-- ===================== Set Permissions ===================== --> <font color="ff0000" size="+1"><strong>2.</strong></font> <strong>Make sure
+that execute permissions are set</strong> on the self-extracting
+binary.
+      <blockquote> Run this command:<br>
+        <tt><b>chmod +x jdk-6&lt;version&gt;-linux-i586.bin</b></tt>
+      </blockquote>
+      <p><!-- ===================== Change Dir ===================== -->
+      <font color="ff0000" size="+1"><strong>3.</strong></font> <strong>Change
+directory</strong> to the location where you would like the files to be
+installed. </p>
+      <blockquote> The next step installs the JDK into the current
+directory. </blockquote>
+<!-- ===================== Run Binary ===================== -->
+      <p> <font color="ff0000" size="+1"><strong>4.</strong></font> <strong>
+Run the self-extracting binary.</strong> </p>
+      <blockquote> Execute the downloaded file, prepended by the path
+to it. For example, if the file is in the current directory, prepend it
+with "<tt>./</tt>" (necessary if "<tt>.</tt>" is not in the PATH
+environment variable):
+        <p> <tt><b>./jdk-6&lt;version&gt;-linux-i586.bin</b></tt>
+        </p>
+        <p> The binary code license is displayed, and you are prompted
+to agree to its terms. </p>
+        <p> The JDK files are installed in a directory called <tt>jdk1.6.0_&lt;version&gt;</tt>
+in the current directory. Follow this link to see its <a href="http://java.sun.com/javase/6/docs/technotes/tools/linux/jdkfiles.html";> directory
+structure</a>. The JDK documentation is a separate download. </p>
+      </blockquote>
+      <p><!-- ===================== Notes ===================== --> </p>
+      <blockquote><!-- BEGIN FRAGMENT | HR TAG -->
+        <div class="contentdivider">
+        <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+          <tbody>
+            <tr>
+              <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+            </tr>
+          </tbody>
+        </table>
+        </div>
+<!-- END FRAGMENT | HR TAG --> <b>Note about Root Access</b>:
+Unbundling the software automatically creates a directory called <code>jdk1.6.0_&lt;version&gt;</code>.
+Note that if you choose to install the JDK into system-wide location
+such as <tt>/usr/local</tt>, you must first become root to gain the
+necessary permissions. If you do not have root access, simply install
+the JDK into your home directory, or a subdirectory that you have
+permission to write to.
+        <p> <b>Note about Overwriting Files</b>: If you unpack the
+software in a directory that contains a subdirectory named <tt>jdk1.6.0_&lt;version&gt;</tt>,
+the new software overwrites files of the same name in that <tt>jdk1.6.0_&lt;version&gt;</tt>
+directory. Please be careful to rename the old directory if it contains
+files you would like to keep. </p>
+        <p> <b>Note about System Preferences</b>: By default, the
+installation script configures the system such that the backing store
+for system preferences is created inside the JDK's installation
+directory. If the JDK is installed on a network-mounted drive, it and
+the system preferences can be exported for sharing with Java runtime
+environments on other machines. <br>
+        </p>
+        <p> See the <a href="http://java.sun.com/javase/6/docs/technotes/guides/preferences/index.html";>Preferences
+API</a> documentation for more information about preferences in the
+Java platform.<!-- BEGIN FRAGMENT | HR TAG --> </p>
+        <div class="contentdivider">
+        <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+          <tbody>
+            <tr>
+              <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+            </tr>
+          </tbody>
+        </table>
+        </div>
+<!-- END FRAGMENT | HR TAG --> </blockquote>
+<!-- BEGIN FRAGMENT | HR TAG -->
+      <div class="contentdivider">
+      <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+        <tbody>
+          <tr>
+            <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+          </tr>
+        </tbody>
+      </table>
+      </div>
+<!-- END FRAGMENT | HR TAG --><!-- ===================== RPM File ===================== -->
+      <a name="install-rpm"></a>
+      <h3>Installation of RPM File</h3>
+      <p> Use these instructions if you want to install JDK in the form
+of RPM packages. If you want to use the self-extracting binary file
+instead, see <a href="#self-extracting">Installation of
+Self-Extracting Binary</a>. </p>
+      <p><!-- ===================== Check Size ===================== -->
+      <a name="checksize"></a> <font color="ff0000" size="+1"><strong>1.</strong></font>
+      <strong>Download and check the file size.</strong> </p>
+      <blockquote> You can download to any directory you choose.
+        <p> Before you download the file, notice its byte size provided
+on the download page on the web site. Once the download has completed,
+compare that file size to the size of the downloaded file to make sure
+they are equal. </p>
+      </blockquote>
+      <p><!-- ===================== Become Root ===================== -->
+      <a name="root"></a> <font color="ff0000" size="+1"><strong>2.</strong></font>
+      <strong>Become root</strong> by running the <tt>su</tt> command
+and entering the super-user password. </p>
+      <p><!-- ===================== Extract and Install Contents ============== -->
+      <a name="extract"></a> <font color="ff0000" size="+1"><strong>3.</strong></font>
+      <strong>Extract and install the contents</strong> of the
+downloaded file. </p>
+      <blockquote> Change directory to where the downloaded file is
+located and run these commands to first set the executable permissions
+and then run the binary to extract and run the RPM file:
+        <p> </p>
+        <pre><b>chmod a+x jdk-6&lt;version&gt;-linux-i586-rpm.bin<br><br>./jdk-6&lt;version&gt;-linux-i586-rpm.bin</b>
+        </pre>
+        <p> Note that the initial "<tt>./</tt>" is required if you do
+not have "<tt>.</tt>" in your PATH environment variable. </p>
+        <p> The script displays a binary license agreement, which you
+are asked to agree to before installation can proceed. Once you have
+agreed to the license, the install script creates and runs the file <tt>jdk-6&lt;version&gt;-linux-i586.rpm</tt>
+in the current directory. </p>
+        <p> <b>NOTE</b> - If instead you want to only extract the RPM
+file but not install it, you can run the .bin file with the -x
+argument. You do not need to be root to do this. </p>
+      </blockquote>
+      <p><!-- ===================== Delete Files ===================== -->
+      <font color="ff0000" size="+1"><strong>4.</strong></font> <strong>Delete
+the <tt>bin</tt> and <tt>rpm</tt> file</strong> if you want to save
+disk space. </p>
+      <p><!-- ===================== Exit root ======================= -->
+      <a name="exitroot"></a> <font color="ff0000" size="+1"><strong>5.</strong></font>
+      <strong>Exit the root shell.<br>
+      </strong></p>
+The RPM packages creates two links /usr/java/latest and
+/usr/java/default.&nbsp; <br>
+      <b></b>
+      <ul>
+        <li>The /usr/java/latest link will always point to the version
+of Java that
+Sun Microsystems considers the latest version.&nbsp; Subsequent
+upgrades of
+the packages will overwrite this value if it is not the latest version.</li>
+      </ul>
+      <ul>
+        <li>By default, /usr/java/default points to /usr/java/latest.
+However, if administrators change /usr/java/default to&nbsp; point to
+another version of Java, subsequent package upgrades will be provided
+by the administrators and cannot be overwritten.<br>
+        </li>
+      </ul>
+When the JDK is installed, links to&nbsp; javac jar and javadoc are
+also created apart from the JRE links. These links point to the
+appropriate tool referenced by /usr/java/default. This allows the user
+to easily run the default version of these Java tools.<br>
+      <br>
+A new service script, named jexec, is added to /etc/init.d. This script
+allows users to directly execute any standalone JAR file that has an
+execution permission set. This can be demonstrated using an example
+from the JDK:<br>
+      <pre><b>	cd /usr/java/jdk1.6.0/demo/jfc/SwingSet2<br>	chmod +x SwingSet2.jar<br>	./SwingSet2.jar</b></pre>
+      <p><!-- BEGIN FRAGMENT | HR TAG --> </p>
+      <div class="contentdivider">
+      <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+        <tbody>
+          <tr>
+            <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+          </tr>
+        </tbody>
+      </table>
+      </div>
+<!-- END FRAGMENT | HR TAG --> <a name="plugin"></a>
+      <h3>Java Plugin Browser Registration Instructions</h3>
+      <blockquote> You must register the Java Plugin product with
+Netscape or Mozilla for the Plugin to work. Click on the following link
+to see the instructions for manual registration. Note that for SuSE the
+8.1 or higher version of Mozilla must be used, and for non-SuSE Linux,
+the version of Mozilla must be 1.1 or higher. Please follow these
+instructions:
+        <p style="margin-left: 2em;"> <a href="http://java.sun.com/javase/6/webnotes/install/jre/manual-plugin-install-linux.html";>Manual Registration
+Instructions</a> </p>
+        <p> Also see <a href="http://java.sun.com/javase/6/docs/technotes/guides/plugin/index.html";>documentation
+on the Java Plugin component</a>. </p>
+      </blockquote>
+<!-- BEGIN FRAGMENT | HR TAG -->
+      <div class="contentdivider">
+      <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+        <tbody>
+          <tr>
+            <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+          </tr>
+        </tbody>
+      </table>
+      </div>
+<!-- END FRAGMENT | HR TAG --> <a name="jws"></a>
+      <h3>Java Web Start Installation Notes</h3>
+      <blockquote>
+        <p>This JDK release includes Java Web Start; it is installed
+automatically with the JDK. But note the following:</p>
+        <ul>
+          <li> <b>Compatibility:</b> The release of Java Web Start
+that comes with this JDK/JRE can be run on SDK/JRE 1.2.2 or later. It
+will not work with SDK/JRE 1.1.x or earlier. </li>
+          <li> <b>Upgrading from Previous Versions:</b> If you have a
+previous release of Java Web Start, do not uninstall it. Uninstalling
+it will cause the download cache to be cleared, and all previously
+installed Java Web Start applications will have to be downloaded again.
+This new release will overwrite previous installations and
+automatically update browsers to use this new release. The
+configuration files and program files folder used by Java Web Start
+have not changed, so all your settings will remain intact after the
+upgrade. </li>
+          <li> <b>Using Java Web Start with Netscape 6.x/7.x:</b> For
+Netscape 6.x/7.x users, setup the Java Web Start MIME type (JNLP) in
+the Edit-&gt;Preferences-&gt;Navigator-&gt;Helper Applications section.
+The file extension is <code>jnlp</code>; MIME Type is <code>application/x-java-jnlp-file</code>.
+It should be handled by the <code>javaws</code> executable file in
+your Java Web Start directory. Also note that, due to a problem with
+the JavaScript in Netscape 6.x/7.x, you must use the non-JavaScript
+version of the demos page</li>
+        </ul>
+      </blockquote>
+<!-- BEGIN FRAGMENT | HR TAG -->
+      <div class="contentdivider">
+      <table class="grey4" border="0" cellpadding="0" cellspacing="0" width="100%">
+        <tbody>
+          <tr>
+            <td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="4" width="1"></td>
+          </tr>
+        </tbody>
+      </table>
+      </div>
+<!-- END FRAGMENT | HR TAG -->
+      <h3><a name="troubleshooting">Troubleshooting</a></h3>
+      <p> </p>
+      <ul>
+        <li>To print on Linux, the <tt>/usr/sbin/lpc</tt> utility must
+be installed. This is a standard Linux utility. On RedHat 7.1, for
+example, this utility is in the "LPRng-3.7.4-22 RPM" package.
+          <p> </p>
+        </li>
+      </ul>
+      <!-- InstanceEndEditable --></td>
+      <!-- ================== -->
+      <!--  END MAIN CONTENT  -->
+      <!-- ================== -->
+      <!--stopindex-->
+      <!-- END CENTRAL COLUMN COMPONENTS -->
+  </tr>
+<!-- BEGIN SPACER ROW -->
+<tr><td><img src="java-sun-com_files/a_002.gif" alt=" " border="0" height="1" width="750"></td></tr>
+<!-- END SPACER ROW -->
+</tbody></table>
+<!-- END WRAPPER TABLE, 1 COLUMN, MAIN -->
+
+<!-- BEGIN G9 VARIATION 0 -->
+<script language="javascript" type="text/javascript" charset="UTF-8" src="java-sun-com_files/oo_engine.js"></script>
+<script language="javascript" type="text/javascript" charset="UTF-8" src="java-sun-com_files/oo_conf_en-US.js"></script><div id="O_o" style="position: absolute; z-index: 999; visibility: visible; left: 962.5px; top: 838px;" onmouseover='_Ps("O_c",_Gd("O_o",0)-91,_Gd("O_o",1)-39);if(!_stop){_Sh("O_o",0);_Sh("O_c",1)}'><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="text-align: center;" align="center"><a href="#" onmouseover="_stop=0" onmouseout="_stop=1;_Sh('O_c',0);_Sh('O_o',1);return 1"><img src="java-sun-com_files/black_oo.gif" alt="" title="" border="0" height="17" width="19"></a></td></tr><tr><td style="text-align: center;" align="center"><a href="#" onmouseover="_stop=1" onmouseout="_stop=1;_Sh('O_c',0);_Sh('O_o',1);return 1"><img src="java-sun-com_files/black_fb_en-US.gif" border="0"></a></td></tr></tbody></table></div><br><div id="O_c" style="position: absolute; top: 0px; left: 0px; visibility: hidden; z-index: 999;"><table valign="top" border=
 "0" cellpadding="0" cellspacing="0" width="138" align="left"><tbody><tr><td><a href='javascript:{_fW(_ht,1);_hdn=1;O_LC();_Sh("O_c",0)}' onmouseover='_Ps("O_c",_Gd("O_o",0)-91,_Gd("O_o",1)-39);_Sh("O_o",0);_Sh("O_c",1)' onmouseout='_Sh("O_c",0);_Sh("O_o",1);return 1'><img src="java-sun-com_files/black_popns_en-US.gif" alt="Please click here to give us feedback." title="Please click here to give us feedback." border="0" height="56" width="115"></a><a href='javascript:{_fW(_ht,1);_hdn=1;O_LC();_Sh("O_c",0)}' onmouseover='_Ps("O_c",_Gd("O_o",0)-91,_Gd("O_o",1)-39);_Sh("O_o",0);_Sh("O_c",1)' onmouseout='_Sh("O_c",0);_Sh("O_o",1);return 1'><img src="java-sun-com_files/black_dot.gif" alt="" title="" border="0" height="17" width="4"><img src="java-sun-com_files/black_comment.gif" alt="Comments?" title="Comments?" border="0" height="17" width="19"></a></td></tr></tbody></table></div>
+<!-- END G9 VARIATION 0 -->
+<!-- BEGIN VNV5 FOOTER  -->
+<table border="0" cellpadding="0" cellspacing="10" width="100%">
+<tbody><tr>
+<td>
+<table class="vatop" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tbody><tr>
+<td colspan="4" class="grey3" valign="top"><img src="java-sun-com_files/a.gif" alt="" border="0" height="2" width="1"></td></tr>
+<tr>
+<td><img src="java-sun-com_files/a.gif" alt="" border="0" height="1" width="190"><br>
+<a href="http://www.sun.com/";><img src="java-sun-com_files/logo_sun_small_sdn.gif" alt="" border="0" height="29" vspace="5" width="61"></a></td>
+<td valign="top" width="100%"><img src="java-sun-com_files/a.gif" alt="" border="0" height="1" width="350"><br>
+<div class="footer">
+<a href="http://developers.sun.com/global/aboutsun.html";>About Sun</a> &nbsp;|&nbsp;
+<a href="http://developers.sun.com/global/aboutsdn.html";>About This Site</a> &nbsp;|&nbsp;
+<a href="http://developers.sun.com/global/newsletters.html";>Newsletters</a> &nbsp;|&nbsp;
+<a href="http://developers.sun.com/global/contact.html";>Contact Us</a> &nbsp;|&nbsp;
+<a href="http://developers.sun.com/global/employment.html";>Employment</a><br>
+<a href="http://developers.sun.com/global/howtobuy.html";>How to Buy</a> &nbsp;|&nbsp;
+<a href="http://developers.sun.com/global/licensing.html";>Licensing</a> &nbsp;|&nbsp;
+<a href="http://developers.sun.com/global/termsofuse.html";>Terms of Use</a> &nbsp;|&nbsp;
+<a href="http://developers.sun.com/global/privacy.html";>Privacy</a> &nbsp;|&nbsp;
+<a href="http://developers.sun.com/global/trademarks.html";>Trademarks</a>
+<br><span class="sp10">&nbsp;</span><br>
+<br><span class="sp10">&nbsp;</span><br>
+Copyright <span id="copyDate" class="cssDate">1994-2008 </span> Sun Microsystems, Inc.
+</div></td>
+<td><img src="java-sun-com_files/a.gif" alt="" border="0" height="1" width="40"></td>
+<td valign="top"><div class="footer"><b><a href="http://developers.sun.com/global/aboutsdn.html";>A Sun Developer Network Site</a></b></div>
+<div class="footer">
+<img src="java-sun-com_files/a.gif" alt="" border="0" height="1" width="170"><br>
+Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this <a href="http://developers.sun.com/global/berkeley_license.html";>License</a>.
+<br><span class="sp5">&nbsp;</span><br>
+<a href="http://developers.sun.com/global/rss_sdn.html";><img src="java-sun-com_files/ic_feed_16x.gif" alt="XML" border="0" height="16" width="16" align="top"></a>&nbsp;<a href="http://developers.sun.com/global/content_feeds.html";>Sun Developer RSS Feeds</a>
+</div></td></tr>
+<tr><td colspan="4" class="grey3" valign="top"><img src="java-sun-com_files/a.gif" alt="" border="0" height="2" width="1"></td></tr>
+</tbody></table>
+</td></tr>
+</tbody></table>
+<!-- END VNV5 FOOTER -->
+<!-- InstanceEnd --><script language="JavaScript" src="java-sun-com_files/s_code_remote.js"></script><script language="JavaScript" src="java-sun-com_files/metrics_group1.js"></script></body></html>

Added: trunk/test/html/steaks.html
==============================================================================
--- (empty file)
+++ trunk/test/html/steaks.html	Thu Sep 25 04:06:26 2008
@@ -0,0 +1,69 @@
+<html>
+<head>
+<title>Tofu is Better For You -- and Tastier, Too!</title>
+</head>
+<body>
+<table cellpadding="0" cellspacing="0" border="0" width="180"><tr><td class="bar1" height="25" align="center">
+<b>Holiday Gift Giving</b>
+</td></tr><tr><td>
+<table cellpadding="11" cellspacing="0" border="0"><tr><td><img imagetype="1" src="foo.gif" border="0"/></td></tr></table>
+</td></tr></table>
+<div class="captions1">Shop Early - Deliver Later<br/>
+<img src="bar.gif" width="1" height="6" border="0"/><br/></div>
+<table cellpadding="0" cellspacing="0" border="0" align="center"><tr><td>
+<A HREF="foobar.html"><b class="itemlink2">  The Ideal Gift Collection</b></A><br/>
+					<span class="bodysmall">
+					&nbsp;
+
+					2
+					(5 oz.)
+					Filet Mignons<br/>
+					</span>
+				
+					<span class="bodysmall">
+					&nbsp;
+					2
+					(5 oz.)
+					Top Sirloins<br/>
+					</span>
+				
+					<span class="bodysmall">
+					&nbsp;
+
+					4
+					(4 oz.)
+					Foobar Steaks Burgers<br/>
+					</span>
+				
+					<span class="bodysmall">
+					&nbsp;
+					6
+					(5.75 oz.)
+					Stuffed Baked Potatoes<br/>
+					</span>
+				
+					<span class="bodysmall">
+					&nbsp;
+
+					2
+					(4.5 oz.)
+					Stuffed Sole with Scallops and Crab<br/>
+					</span>
+				
+					<span class="bodysmall">
+					&nbsp;
+					1
+					(6 in.)
+					Chocolate Lover's Cake<br/>
+					</span>
+				
+				<span class="body"><i>Regular $133.00,
+				</i><b class="savings"><nobr>Now $59.99</nobr><br/><br/>
+
+				</b></span>
+			
+		</td></tr></table>
+	</td>
+</tr></table>
+</body>
+</html>

Modified: trunk/test/keystrokes/firefox/label_guess_bug_509809.py
==============================================================================
--- trunk/test/keystrokes/firefox/label_guess_bug_509809.py	(original)
+++ trunk/test/keystrokes/firefox/label_guess_bug_509809.py	Thu Sep 25 04:06:26 2008
@@ -49,6 +49,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'search mozilla: search mozilla:  $l Go Button'",
      "     VISIBLE:  'search mozilla:  $l Go Button', cursor=17",
+     "BRAILLE LINE:  'search mozilla: search mozilla:  $l Go Button'",
+     "     VISIBLE:  'search mozilla:  $l Go Button', cursor=17",
      "SPEECH OUTPUT: 'search mozilla: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -69,6 +71,8 @@
     "Next form field",
     ["BRAILLE LINE:  'Your email address:  $l'",
      "     VISIBLE:  'Your email address:  $l', cursor=21",
+     "BRAILLE LINE:  'Your email address:  $l'",
+     "     VISIBLE:  'Your email address:  $l', cursor=21",
      "SPEECH OUTPUT: 'Your email address: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -79,6 +83,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Your name (optional):  $l'",
      "     VISIBLE:  'Your name (optional):  $l', cursor=23",
+     "BRAILLE LINE:  'Your name (optional):  $l'",
+     "     VISIBLE:  'Your name (optional):  $l', cursor=23",
      "SPEECH OUTPUT: 'Your name (optional): text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -149,6 +155,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Admin address:  $l Password:  $l Visit Subscriber List Button'",
      "     VISIBLE:  ' $l Visit Subscriber List Button', cursor=1",
+     "BRAILLE LINE:  'Admin address:  $l Password:  $l Visit Subscriber List Button'",
+     "     VISIBLE:  ' $l Visit Subscriber List Button', cursor=1",
      "SPEECH OUTPUT: 'Password: password'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -169,6 +177,8 @@
     "Next form field",
     ["BRAILLE LINE:  ' $l Unsubscribe or edit options Button'",
      "     VISIBLE:  ' $l Unsubscribe or edit options ', cursor=1",
+     "BRAILLE LINE:  ' $l Unsubscribe or edit options Button'",
+     "     VISIBLE:  ' $l Unsubscribe or edit options ', cursor=1",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())

Modified: trunk/test/keystrokes/firefox/label_guess_bug_546815.py
==============================================================================
--- trunk/test/keystrokes/firefox/label_guess_bug_546815.py	(original)
+++ trunk/test/keystrokes/firefox/label_guess_bug_546815.py	Thu Sep 25 04:06:26 2008
@@ -49,6 +49,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Enter your Name:  $l text field using default type=text'",
      "     VISIBLE:  ' $l text field using default typ', cursor=1",
+     "BRAILLE LINE:  'Enter your Name:  $l text field using default type=text'",
+     "     VISIBLE:  ' $l text field using default typ', cursor=1",
      "SPEECH OUTPUT: 'Enter your Name: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -59,6 +61,8 @@
     "Next form field", 
     ["BRAILLE LINE:  '1. Enter your Address:  $l text field using SIZE and MAXLENGTH'",
      "     VISIBLE:  ' $l text field using SIZE and MA', cursor=1",
+     "BRAILLE LINE:  '1. Enter your Address:  $l text field using SIZE and MAXLENGTH'",
+     "     VISIBLE:  ' $l text field using SIZE and MA', cursor=1",
      "SPEECH OUTPUT: '1. Enter your Address: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -69,6 +73,8 @@
     "Next form field",
     ["BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l text field using value'",
      "     VISIBLE:  ' $l 3. Enter your State:  $l 4. ', cursor=1",
+     "BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l text field using value'",
+     "     VISIBLE:  ' $l 3. Enter your State:  $l 4. ', cursor=1",
      "SPEECH OUTPUT: '2. Enter your City: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -79,6 +85,8 @@
     "Next form field", 
     ["BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l text field using value'",
      "     VISIBLE:  ' $l 4. Enter your Country: US $l', cursor=1",
+     "BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l text field using value'",
+     "     VISIBLE:  ' $l 4. Enter your Country: US $l', cursor=1",
      "SPEECH OUTPUT: '3. Enter your State: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -89,6 +97,8 @@
     "Next form field", 
     ["BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l text field using value'",
      "     VISIBLE:  'US $l text field using value', cursor=1",
+     "BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l text field using value'",
+     "     VISIBLE:  'US $l text field using value', cursor=1",
      "SPEECH OUTPUT: '4. Enter your Country: text US'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -99,6 +109,8 @@
     "Next form field", 
     ["BRAILLE LINE:  '5. Enter your Zip:  $l'",
      "     VISIBLE:  '5. Enter your Zip:  $l', cursor=20",
+     "BRAILLE LINE:  '5. Enter your Zip:  $l'",
+     "     VISIBLE:  '5. Enter your Zip:  $l', cursor=20",
      "SPEECH OUTPUT: '5. Enter your Zip: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -109,6 +121,8 @@
     "Next form field",
     ["BRAILLE LINE:  '6. What happens when a fixed-width font(the default) is used for a one-byte text input area, let's try it.. Enter one character:  $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  '6. What happens when a fixed-width font(the default) is used for a one-byte text input area, let's try it.. Enter one character:  $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: '6. What happens when a fixed-width font(the default) is used for a one-byte text input area, let's try it.. Enter one character: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -199,6 +213,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Enter your Name:  $l text field using default type=text'",
      "     VISIBLE:  ' $l text field using default typ', cursor=1",
+     "BRAILLE LINE:  'Enter your Name:  $l text field using default type=text'",
+     "     VISIBLE:  ' $l text field using default typ', cursor=1",
      "SPEECH OUTPUT: 'Wrapping to top.'",
      "SPEECH OUTPUT: 'Enter your Name: text'"]))
 

Modified: trunk/test/keystrokes/firefox/label_guess_bugzilla_search.py
==============================================================================
--- trunk/test/keystrokes/firefox/label_guess_bugzilla_search.py	(original)
+++ trunk/test/keystrokes/firefox/label_guess_bugzilla_search.py	Thu Sep 25 04:06:26 2008
@@ -67,6 +67,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Summary: contains all of the words/strings Combo  $l Search Button'",
      "     VISIBLE:  ' $l Search Button', cursor=1",
+     "BRAILLE LINE:  'Summary: contains all of the words/strings Combo  $l Search Button'",
+     "     VISIBLE:  ' $l Search Button', cursor=1",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -196,6 +198,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Keywords Link : contains all of the keywords Combo  $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Keywords Link : contains all of the keywords Combo  $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -322,6 +326,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -394,6 +400,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -416,6 +424,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Only include Combo bugs numbered:  $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Only include Combo bugs numbered:  $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'bugs numbered: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -427,6 +437,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l and Now $l'",
      "     VISIBLE:  ' $l and Now $l', cursor=1",
+     "BRAILLE LINE:  ' $l and Now $l'",
+     "     VISIBLE:  ' $l and Now $l', cursor=1",
      "SPEECH OUTPUT: 'Only bugs changed between: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -438,6 +450,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  and Now $l'",
      "     VISIBLE:  ' $l  and Now $l', cursor=10",
+     "BRAILLE LINE:  ' $l  and Now $l'",
+     "     VISIBLE:  ' $l  and Now $l', cursor=10",
      "SPEECH OUTPUT: 'and text Now'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -460,6 +474,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'and the new value was: text'"]))
 
 sequence.append(utils.StartRecordingAction())

Modified: trunk/test/keystrokes/firefox/label_guess_entries.py
==============================================================================
--- trunk/test/keystrokes/firefox/label_guess_entries.py	(original)
+++ trunk/test/keystrokes/firefox/label_guess_entries.py	Thu Sep 25 04:06:26 2008
@@ -53,6 +53,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Type something Link  rather amusing Link  here:  $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Type something Link  rather amusing Link  here:  $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'Type something rather amusing here: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -61,7 +63,9 @@
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "Next form field", 
-    ["BUG? - We're getting an extra and",
+    ["BUG? - We're getting an extra and in braille",
+     "BRAILLE LINE:  'Amusing numbers fall between  and  $l and  $l .'",
+     "     VISIBLE:  ' $l and  $l .', cursor=1",
      "BRAILLE LINE:  'Amusing numbers fall between  and  $l and  $l .'",
      "     VISIBLE:  ' $l and  $l .', cursor=1",
      "SPEECH OUTPUT: 'Amusing numbers fall between text'"]))
@@ -74,6 +78,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Amusing numbers fall between  $l  and  $l .'",
      "     VISIBLE:  ' $l .', cursor=1",
+     "BRAILLE LINE:  'Amusing numbers fall between  $l  and  $l .'",
+     "     VISIBLE:  ' $l .', cursor=1",
      "SPEECH OUTPUT: 'and text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -84,6 +90,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l I'm a label'",
      "     VISIBLE:  ' $l I'm a label', cursor=1",
+     "BRAILLE LINE:  ' $l I'm a label'",
+     "     VISIBLE:  ' $l I'm a label', cursor=1",
      "SPEECH OUTPUT: 'I'm a label text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -94,6 +102,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l Am I a label as well?'",
      "     VISIBLE:  ' $l Am I a label as well?', cursor=1",
+     "BRAILLE LINE:  ' $l Am I a label as well?'",
+     "     VISIBLE:  ' $l Am I a label as well?', cursor=1",
      "SPEECH OUTPUT: 'Am I a label as well? text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -104,6 +114,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l Too far away to be a label.'",
      "     VISIBLE:  ' $l Too far away to be a label.', cursor=1",
+     "BRAILLE LINE:  ' $l Too far away to be a label.'",
+     "     VISIBLE:  ' $l Too far away to be a label.', cursor=1",
      "SPEECH OUTPUT: 'Looking at what follows visually, I'm not sure what I would type/i.e. what the labels are. text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -114,6 +126,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Distance doesn't count on the left  $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Distance doesn't count on the left  $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'Distance doesn't count on the left text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -125,6 +139,8 @@
     ["BUG? - Below is what we should be getting. We were accidentally getting this from guessLabelFromLine, but the guessed label isn't on this line and should be guessed by getLabelFromOtherLines",
      "BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'First Name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -136,6 +152,8 @@
     ["BUG? - Below is what we should be getting. We were accidentally getting this from guessLabelFromLine, but the guessed label isn't on this line and should be guessed by getLabelFromOtherLines",
      "BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'M.I. text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -147,6 +165,8 @@
     ["BUG? - Below is what we should be getting. We were accidentally getting this from guessLabelFromLine, but the guessed label isn't on this line and should be guessed by getLabelFromOtherLines",
      "BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'Last Name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -157,6 +177,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=1",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=1",
      "SPEECH OUTPUT: 'First name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -167,6 +189,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=5",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=5",
      "SPEECH OUTPUT: 'Middle",
      "initial text'"]))
 
@@ -179,6 +203,8 @@
     ["BUG? - We're not guessing this correctly",
      "BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=9",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=9",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -189,6 +215,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=1",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=1",
      "SPEECH OUTPUT: 'First Name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -199,6 +227,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=5",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=5",
      "SPEECH OUTPUT: 'Middle",
      "initial text'"]))
 
@@ -210,6 +240,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=9",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=9",
      "SPEECH OUTPUT: 'Last text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -220,6 +252,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=1",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=1",
      "SPEECH OUTPUT: 'Given name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -230,6 +264,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=5",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=5",
      "SPEECH OUTPUT: 'initial text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -240,6 +276,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=9",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=9",
      "SPEECH OUTPUT: 'Surname text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -250,6 +288,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=1",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=1",
      "SPEECH OUTPUT: 'First name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -260,6 +300,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=5",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=5",
      "SPEECH OUTPUT: 'Middle",
      "initial text'"]))
 
@@ -271,6 +313,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l', cursor=9",
+     "BRAILLE LINE:  ' $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l', cursor=9",
      "SPEECH OUTPUT: 'Last name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -281,6 +325,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=1",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=1",
      "SPEECH OUTPUT: 'First name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -291,6 +337,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=5",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=5",
      "SPEECH OUTPUT: 'Middle",
      "initial text'"]))
 
@@ -302,6 +350,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=9",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=9",
      "SPEECH OUTPUT: 'Last name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -313,6 +363,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=13",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=13",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -323,6 +375,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=1",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=1",
      "SPEECH OUTPUT: 'First name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -333,6 +387,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=5",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=5",
      "SPEECH OUTPUT: 'Middle",
      "initial text'"]))
 
@@ -344,6 +400,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=9",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=9",
      "SPEECH OUTPUT: 'Last name text'",]))
 
 sequence.append(utils.StartRecordingAction())
@@ -354,6 +412,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=13",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=13",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -364,6 +424,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=1",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=1",
      "SPEECH OUTPUT: 'First name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -374,6 +436,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=5",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=5",
      "SPEECH OUTPUT: 'Middle",
      "initial text'"]))
 
@@ -385,6 +449,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=9",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=9",
      "SPEECH OUTPUT: 'Last name text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -396,6 +462,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l  $l  $l  $l'",
      "     VISIBLE:  ' $l  $l  $l  $l', cursor=13",
+     "BRAILLE LINE:  ' $l  $l  $l  $l'",
+     "     VISIBLE:  ' $l  $l  $l  $l', cursor=13",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -406,6 +474,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'bandaid graphic Image  $l'",
      "     VISIBLE:  'bandaid graphic Image  $l', cursor=23",
+     "BRAILLE LINE:  'bandaid graphic Image  $l'",
+     "     VISIBLE:  'bandaid graphic Image  $l', cursor=23",
      "SPEECH OUTPUT: 'bandaid graphic text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -416,6 +486,8 @@
     "Next form field", 
     ["BRAILLE LINE:  ' $l bandaid graphic redux Image'",
      "     VISIBLE:  ' $l bandaid graphic redux Image', cursor=1",
+     "BRAILLE LINE:  ' $l bandaid graphic redux Image'",
+     "     VISIBLE:  ' $l bandaid graphic redux Image', cursor=1",
      "SPEECH OUTPUT: 'bandaid graphic redux text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -450,6 +522,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'I $l'",
      "     VISIBLE:  'I $l', cursor=1",
+     "BRAILLE LINE:  'I $l'",
+     "     VISIBLE:  'I $l', cursor=1",
      "SPEECH OUTPUT: 'Tell me a little more about yourself: text I'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -460,6 +534,8 @@
     "Next form field", 
     ["BRAILLE LINE:  'Type something Link  rather amusing Link  here:  $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Type something Link  rather amusing Link  here:  $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'Wrapping to top.'",
      "SPEECH OUTPUT: 'Type something rather amusing here: text'"]))
 

Added: trunk/test/keystrokes/firefox/line_nav_bug_547573.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/line_nav_bug_547573.py	Thu Sep 25 04:06:26 2008
@@ -0,0 +1,1664 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of line navigation output of Firefox. 
+"""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "java-sun-com.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Link'",
+     "     VISIBLE:  'Link', cursor=1",
+     "SPEECH OUTPUT: 'link'"]))
+
+########################################################################
+# Down Arrow.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Line Down",
+    ["BRAILLE LINE:  'Skip to Content Link Sun Link Java Link Solaris Link Communities Link My SDN Account Link Join SDN Link'",
+     "     VISIBLE:  'Skip to Content Link Sun Link Ja', cursor=1",
+     "SPEECH OUTPUT: 'Skip to Content link Sun link Java link Solaris link Communities link My SDN Account link Join SDN link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Line Down",
+    ["BUG? - For some reason we're acting as if the page had just loaded",
+     "BRAILLE LINE:  'Â search tips Link Search $l Submit Search Button Home Page Link Image  $l'",
+     "     VISIBLE:  'Â search tips Link Search $l Sub', cursor=1",
+     "BRAILLE LINE:  'Installation Notes'",
+     "     VISIBLE:  'Installation Notes', cursor=0",
+     "BRAILLE LINE:  'Â search tips Link Search $l Submit Search Button Home Page Link Image  $l'",
+     "     VISIBLE:  'Â search tips Link Search $l Sub', cursor=1",
+     "SPEECH OUTPUT: ' search tips link  text Search Submit Search button Home Page link image'",
+     "SPEECH OUTPUT: 'Installation Notes page'",
+     "SPEECH OUTPUT: ' search tips link  text Search Submit Search button Home Page link image'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Line Down",
+    ["BRAILLE LINE:  'APIs Link Downloads Link Products Link Support Link Training Link Participate Link'",
+     "     VISIBLE:  'APIs Link Downloads Link Product', cursor=1",
+     "SPEECH OUTPUT: 'APIs link Downloads link Products link Support link Training link Participate link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Line Down",
+    ["BRAILLE LINE:  'JavaTM SE 6 Release Notes'",
+     "     VISIBLE:  'JavaTM SE 6 Release Notes', cursor=1",
+     "SPEECH OUTPUT: 'JavaTM SE 6 Release Notes'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Line Down",
+    ["BRAILLE LINE:  'Linux Installation (32-bit) h1'",
+     "     VISIBLE:  'Linux Installation (32-bit) h1', cursor=1",
+     "SPEECH OUTPUT: 'Linux Installation (32-bit) heading level 1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Line Down",
+    ["BRAILLE LINE:  'Separator'",
+     "     VISIBLE:  'Separator', cursor=1",
+     "SPEECH OUTPUT: 'separator'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Line Down",
+    ["BRAILLE LINE:  'JDK Documentation Link'",
+     "     VISIBLE:  'JDK Documentation Link', cursor=1",
+     "SPEECH OUTPUT: 'JDK Documentation link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Line Down",
+    ["BRAILLE LINE:  'Contents h2'",
+     "     VISIBLE:  'Contents h2', cursor=1",
+     "SPEECH OUTPUT: 'Contents heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Line Down",
+    ["BRAILLE LINE:  'System Requirements Link'",
+     "     VISIBLE:  'System Requirements Link', cursor=1",
+     "SPEECH OUTPUT: 'System Requirements link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Line Down",
+    ["BRAILLE LINE:  'JDK Installation Instructions Link'",
+     "     VISIBLE:  'JDK Installation Instructions Li', cursor=1",
+     "SPEECH OUTPUT: 'JDK Installation Instructions link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Line Down",
+    ["BRAILLE LINE:  'Installation of Self-Extracting Binary Link'",
+     "     VISIBLE:  'Installation of Self-Extracting ', cursor=0",
+     "SPEECH OUTPUT: 'ÂÂÂ Installation of Self-Extracting Binary link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Line Down",
+    ["BRAILLE LINE:  'Installation of RPM File Link'",
+     "     VISIBLE:  'Installation of RPM File Link', cursor=0",
+     "SPEECH OUTPUT: 'ÂÂÂ Installation of RPM File link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Line Down",
+    ["BRAILLE LINE:  'Java Plugin Browser Registration Instructions Link'",
+     "     VISIBLE:  'Java Plugin Browser Registration', cursor=1",
+     "SPEECH OUTPUT: 'Java Plugin Browser Registration Instructions link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Line Down",
+    ["BRAILLE LINE:  'Java Web Start Installation Notes Link'",
+     "     VISIBLE:  'Java Web Start Installation Note', cursor=1",
+     "SPEECH OUTPUT: 'Java Web Start Installation Notes link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Line Down",
+    ["BRAILLE LINE:  'Troubleshooting Link'",
+     "     VISIBLE:  'Troubleshooting Link', cursor=1",
+     "SPEECH OUTPUT: 'Troubleshooting link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "17. Line Down",
+    ["BRAILLE LINE:  'System Requirements h2'",
+     "     VISIBLE:  'System Requirements h2', cursor=1",
+     "SPEECH OUTPUT: 'System Requirements heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "18. Line Down",
+    ["BRAILLE LINE:  'See supported System Configurations Link  for information about supported platforms, operating systems, desktop managers, and browsers.'",
+     "     VISIBLE:  'See supported System Configurati', cursor=1",
+     "SPEECH OUTPUT: 'See supported System Configurations link  for information about supported platforms, operating systems, desktop managers, and browsers.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "19. Line Down",
+    ["BRAILLE LINE:  'For issues, see the Troubleshooting Link  section below.'",
+     "     VISIBLE:  'For issues, see the Troubleshoot', cursor=1",
+     "SPEECH OUTPUT: 'For issues, see the Troubleshooting link  section below.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "20. Line Down",
+    ["BRAILLE LINE:  'Installation Instructions h2'",
+     "     VISIBLE:  'Installation Instructions h2', cursor=1",
+     "SPEECH OUTPUT: 'Installation Instructions heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "21. Line Down",
+    ["BRAILLE LINE:  'Installing the JDK automatically installs the Java Plugin and Java Web Start. Note that the Java Plugin needs to be registered with the browser. After installing the JDK, refer to:'",
+     "     VISIBLE:  'Installing the JDK automatically', cursor=1",
+     "SPEECH OUTPUT: 'Installing the JDK automatically installs the Java Plugin and Java Web Start. Note that the Java Plugin needs to be registered with the browser. After installing the JDK, refer to:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "22. Line Down",
+    ["BRAILLE LINE:  'â Java Plugin Browser Registration Instructions Link'",
+     "     VISIBLE:  'â Java Plugin Browser Registrati', cursor=1",
+     "SPEECH OUTPUT: 'â Java Plugin Browser Registration Instructions link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "23. Line Down",
+    ["BRAILLE LINE:  'â Java Web Start Installation Notes Link'",
+     "     VISIBLE:  'â Java Web Start Installation No', cursor=1",
+     "SPEECH OUTPUT: 'â Java Web Start Installation Notes link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "24. Line Down",
+    ["BRAILLE LINE:  'Install formats - This version of the JDK is available in two installation formats.'",
+     "     VISIBLE:  'Install formats - This version o', cursor=1",
+     "SPEECH OUTPUT: 'Install formats - This version of the JDK is available in two installation formats.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "25. Line Down",
+    ["BRAILLE LINE:  'Link  â Self-extracting Binary File - This file can be used to install the JDK in a location chosen by the user. This one can be installed by anyone (not only root users), and it can'",
+     "     VISIBLE:  'â Self-extracting Binary File - ', cursor=1",
+     "SPEECH OUTPUT: 'link Install formats - This version of the JDK is available in two installation formats. â Self-extracting Binary File - This file can be used to install the JDK in a location chosen by the user. This one can be installed by anyone (not only root users), and it can'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "26. Line Down",
+    ["BRAILLE LINE:  'easily be installed in any location. As long as you are not root user, it cannot displace the system version of the Java platform suppled by Linux. To use this file, see'",
+     "     VISIBLE:  'easily be installed in any locat', cursor=1",
+     "SPEECH OUTPUT: 'easily be installed in any location. As long as you are not root user, it cannot displace the system version of the Java platform suppled by Linux. To use this file, see'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "27. Line Down",
+    ["BRAILLE LINE:  'Installation of Self-Extracting Binary Link below.'",
+     "     VISIBLE:  'Installation of Self-Extracting ', cursor=1",
+     "SPEECH OUTPUT: 'Installation of Self-Extracting Binary link below.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "28. Line Down",
+    ["BRAILLE LINE:  'â RPM Packages - A rpm.bin file containing RPM packages, installed with the rpm utility. Requires root access to install. RPM packages are the recommended method for'",
+     "     VISIBLE:  'â RPM Packages - A rpm.bin file ', cursor=1",
+     "SPEECH OUTPUT: 'â RPM Packages - A rpm.bin file containing RPM packages, installed with the rpm utility. Requires root access to install. RPM packages are the recommended method for'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "29. Line Down",
+    ["BRAILLE LINE:  'installation on Linux. To use this bundle, see Installation of RPM File Link  below.'",
+     "     VISIBLE:  'installation on Linux. To use th', cursor=1",
+     "SPEECH OUTPUT: 'installation on Linux. To use this bundle, see Installation of RPM File link  below.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "30. Line Down",
+    ["BRAILLE LINE:  'Choose the install format that is most suitable to your needs.'",
+     "     VISIBLE:  'Choose the install format that i', cursor=1",
+     "SPEECH OUTPUT: 'Choose the install format that is most suitable to your needs.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "31. Line Down",
+    ["BRAILLE LINE:  'Note: For any text on this page containing the following notation, you must substitute the appropriate JDK update version number for the notation.'",
+     "     VISIBLE:  'Note: For any text on this page ', cursor=1",
+     "SPEECH OUTPUT: 'Note: For any text on this page containing the following notation, you must substitute the appropriate JDK update version number for the notation.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "32. Line Down",
+    ["BRAILLE LINE:  '<version>'",
+     "     VISIBLE:  '<version>', cursor=1",
+     "SPEECH OUTPUT: '<version>",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "33. Line Down",
+    ["BUG? - Even if we're not saying anything here, shouldn't there be a SPEECH OUTPUT line?",
+     "BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "34. Line Down",
+    ["BRAILLE LINE:  'For example, if you were downloading update 6_01, the following command:'",
+     "     VISIBLE:  'For example, if you were downloa', cursor=1",
+     "SPEECH OUTPUT: 'For example, if you were downloading update 6_01, the following command:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "35. Line Down",
+    ["BRAILLE LINE:  './jdk-6<version>-linux-i586.bin'",
+     "     VISIBLE:  './jdk-6<version>-linux-i586.bin', cursor=1",
+     "SPEECH OUTPUT: './jdk-6<version>-linux-i586.bin",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "36. Line Down",
+    ["BUG? - Even if we're not saying anything here, shouldn't there be a SPEECH OUTPUT line?",
+     "BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "37. Line Down",
+    ["BRAILLE LINE:  'would become:'",
+     "     VISIBLE:  'would become:', cursor=1",
+     "SPEECH OUTPUT: 'would become:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "38. Line Down",
+    ["BRAILLE LINE:  './jdk-6u1-linux-i586.bin'",
+     "     VISIBLE:  './jdk-6u1-linux-i586.bin', cursor=1",
+     "SPEECH OUTPUT: './jdk-6u1-linux-i586.bin",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "39. Line Down",
+    ["BUG? - Even if we're not saying anything here, shouldn't there be a SPEECH OUTPUT line?",
+     "BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "40. Line Down",
+    ["BRAILLE LINE:  'Installation of Self-Extracting Binary h3'",
+     "     VISIBLE:  'Installation of Self-Extracting ', cursor=1",
+     "SPEECH OUTPUT: 'Installation of Self-Extracting Binary heading level 3'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "41. Line Down",
+    ["BRAILLE LINE:  'Use these instructions if you want to use the self-extracting binary file to install the JDK. If you want to install RPM packages instead, see Installation of RPM File Link .'",
+     "     VISIBLE:  'Use these instructions if you wa', cursor=1",
+     "SPEECH OUTPUT: 'Use these instructions if you want to use the self-extracting binary file to install the JDK. If you want to install RPM packages instead, see Installation of RPM File link .'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "42. Line Down",
+    ["BRAILLE LINE:  '1. Download and check the download file size to ensure that you have downloaded the full, uncorrupted software bundle.'",
+     "     VISIBLE:  '1. Download and check the downlo', cursor=1",
+     "SPEECH OUTPUT: '1. Download and check the download file size to ensure that you have downloaded the full, uncorrupted software bundle.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "43. Line Down",
+    ["BRAILLE LINE:  'You can download to any directory you choose; it does not have to be the directory where you want to install the JDK.'",
+     "     VISIBLE:  'You can download to any director', cursor=1",
+     "SPEECH OUTPUT: 'You can download to any directory you choose; it does not have to be the directory where you want to install the JDK.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "44. Line Down",
+    ["BRAILLE LINE:  'Before you download the file, notice its byte size provided on the download page on the web site. Once the download has completed, compare that file size to the'",
+     "     VISIBLE:  'Before you download the file, no', cursor=1",
+     "SPEECH OUTPUT: 'Before you download the file, notice its byte size provided on the download page on the web site. Once the download has completed, compare that file size to the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "45. Line Down",
+    ["BRAILLE LINE:  'size of the downloaded file to make sure they are equal.'",
+     "     VISIBLE:  'size of the downloaded file to m', cursor=1",
+     "SPEECH OUTPUT: 'size of the downloaded file to make sure they are equal.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "46. Line Down",
+    ["BRAILLE LINE:  '2. Make sure that execute permissions are set on the self-extracting binary.'",
+     "     VISIBLE:  '2. Make sure that execute permis', cursor=1",
+     "SPEECH OUTPUT: '2. Make sure that execute permissions are set on the self-extracting binary.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "47. Line Down",
+    ["BRAILLE LINE:  'Run this command:'",
+     "     VISIBLE:  'Run this command:', cursor=1",
+     "SPEECH OUTPUT: 'Run this command:",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "48. Line Down",
+    ["BRAILLE LINE:  'chmod +x jdk-6<version>-linux-i586.bin'",
+     "     VISIBLE:  'chmod +x jdk-6<version>-linux-i5', cursor=1",
+     "SPEECH OUTPUT: 'chmod +x jdk-6<version>-linux-i586.bin'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "49. Line Down",
+    ["BRAILLE LINE:  '3. Change directory to the location where you would like the files to be installed.'",
+     "     VISIBLE:  '3. Change directory to the locat', cursor=1",
+     "SPEECH OUTPUT: '3. Change directory to the location where you would like the files to be installed.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "50. Line Down",
+    ["BRAILLE LINE:  'The next step installs the JDK into the current directory.'",
+     "     VISIBLE:  'The next step installs the JDK i', cursor=1",
+     "SPEECH OUTPUT: 'The next step installs the JDK into the current directory.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "51. Line Down",
+    ["BRAILLE LINE:  '4. Run the self-extracting binary.'",
+     "     VISIBLE:  '4. Run the self-extracting binar', cursor=1",
+     "SPEECH OUTPUT: '4. Run the self-extracting binary.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "52. Line Down",
+    ["BRAILLE LINE:  'Execute the downloaded file, prepended by the path to it. For example, if the file is in the current directory, prepend it with \"./\" (necessary if \".\" is not in the PATH'",
+     "     VISIBLE:  'Execute the downloaded file, pre', cursor=1",
+     "SPEECH OUTPUT: 'Execute the downloaded file, prepended by the path to it. For example, if the file is in the current directory, prepend it with \"./\" (necessary if \".\" is not in the PATH'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "53. Line Down",
+    ["BRAILLE LINE:  'environment variable):'",
+     "     VISIBLE:  'environment variable):', cursor=1",
+     "SPEECH OUTPUT: 'environment variable):'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "54. Line Down",
+    ["BRAILLE LINE:  './jdk-6<version>-linux-i586.bin'",
+     "     VISIBLE:  './jdk-6<version>-linux-i586.bin', cursor=1",
+     "SPEECH OUTPUT: './jdk-6<version>-linux-i586.bin'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "55. Line Down",
+    ["BRAILLE LINE:  'The binary code license is displayed, and you are prompted to agree to its terms.'",
+     "     VISIBLE:  'The binary code license is displ', cursor=1",
+     "SPEECH OUTPUT: 'The binary code license is displayed, and you are prompted to agree to its terms.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "56. Line Down",
+    ["BRAILLE LINE:  'The JDK files are installed in a directory called jdk1.6.0_<version> in the current directory. Follow this link to see its directory structure Link . The JDK'",
+     "     VISIBLE:  'The JDK files are installed in a', cursor=1",
+     "SPEECH OUTPUT: 'The JDK files are installed in a directory called jdk1.6.0_<version> in the current directory. Follow this link to see its directory structure link . The JDK'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "57. Line Down",
+    ["BRAILLE LINE:  'documentation is a separate download.'",
+     "     VISIBLE:  'documentation is a separate down', cursor=1",
+     "SPEECH OUTPUT: 'documentation is a separate download.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "58. Line Down",
+    ["BRAILLE LINE:  'Note about Root Access: Unbundling the software automatically creates a directory called jdk1.6.0_<version>. Note that if you choose to install the JDK into'",
+     "     VISIBLE:  'Note about Root Access: Unbundli', cursor=1",
+     "SPEECH OUTPUT: 'Note about Root Access: Unbundling the software automatically creates a directory called jdk1.6.0_<version>. Note that if you choose to install the JDK into'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "59. Line Down",
+    ["BRAILLE LINE:  'system-wide location such as /usr/local, you must first become root to gain the necessary permissions. If you do not have root access, simply install the JDK'",
+     "     VISIBLE:  'system-wide location such as /us', cursor=1",
+     "SPEECH OUTPUT: 'system-wide location such as /usr/local, you must first become root to gain the necessary permissions. If you do not have root access, simply install the JDK'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "60. Line Down",
+    ["BRAILLE LINE:  'into your home directory, or a subdirectory that you have permission to write to.'",
+     "     VISIBLE:  'into your home directory, or a s', cursor=1",
+     "SPEECH OUTPUT: 'into your home directory, or a subdirectory that you have permission to write to.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "61. Line Down",
+    ["BRAILLE LINE:  'Note about Overwriting Files: If you unpack the software in a directory that contains a subdirectory named jdk1.6.0_<version>, the new software overwrites'",
+     "     VISIBLE:  'Note about Overwriting Files: If', cursor=1",
+     "SPEECH OUTPUT: 'Note about Overwriting Files: If you unpack the software in a directory that contains a subdirectory named jdk1.6.0_<version>, the new software overwrites'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "62. Line Down",
+    ["BRAILLE LINE:  'files of the same name in that jdk1.6.0_<version> directory. Please be careful to rename the old directory if it contains files you would like to keep.'",
+     "     VISIBLE:  'files of the same name in that j', cursor=1",
+     "SPEECH OUTPUT: 'files of the same name in that jdk1.6.0_<version> directory. Please be careful to rename the old directory if it contains files you would like to keep.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "63. Line Down",
+    ["BRAILLE LINE:  'Note about System Preferences: By default, the installation script configures the system such that the backing store for system preferences is created inside the'",
+     "     VISIBLE:  'Note about System Preferences: B', cursor=1",
+     "SPEECH OUTPUT: 'Note about System Preferences: By default, the installation script configures the system such that the backing store for system preferences is created inside the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "64. Line Down",
+    ["BRAILLE LINE:  'JDK's installation directory. If the JDK is installed on a network-mounted drive, it and the system preferences can be exported for sharing with Java runtime'",
+     "     VISIBLE:  'JDK's installation directory. If', cursor=1",
+     "SPEECH OUTPUT: 'JDK's installation directory. If the JDK is installed on a network-mounted drive, it and the system preferences can be exported for sharing with Java runtime'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "65. Line Down",
+    ["BRAILLE LINE:  'environments on other machines.'",
+     "     VISIBLE:  'environments on other machines.', cursor=1",
+     "SPEECH OUTPUT: 'environments on other machines.", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "66. Line Down",
+    ["BRAILLE LINE:  'See the Preferences API Link  documentation for more information about preferences in the Java platform.'",
+     "     VISIBLE:  'See the Preferences API Link  do', cursor=1",
+     "SPEECH OUTPUT: 'See the Preferences API link  documentation for more information about preferences in the Java platform.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "67. Line Down",
+    ["BRAILLE LINE:  'Installation of RPM File h3'",
+     "     VISIBLE:  'Installation of RPM File h3', cursor=1",
+     "SPEECH OUTPUT: 'Installation of RPM File heading level 3'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "68. Line Down",
+    ["BRAILLE LINE:  'Use these instructions if you want to install JDK in the form of RPM packages. If you want to use the self-extracting binary file instead, see Installation of Self-Extracting Binary Link .'",
+     "     VISIBLE:  'Use these instructions if you wa', cursor=1",
+     "SPEECH OUTPUT: 'Use these instructions if you want to install JDK in the form of RPM packages. If you want to use the self-extracting binary file instead, see Installation of Self-Extracting Binary link .'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "69. Line Down",
+    ["BRAILLE LINE:  '1. Download and check the file size.'",
+     "     VISIBLE:  '1. Download and check the file s', cursor=1",
+     "SPEECH OUTPUT: '1. Download and check the file size.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "70. Line Down",
+    ["BRAILLE LINE:  'Link 1. Download and check the file size. You can download to any directory you choose.'",
+     "     VISIBLE:  'You can download to any director', cursor=1",
+     "SPEECH OUTPUT: 'link 1. Download and check the file size. You can download to any directory you choose.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "71. Line Down",
+    ["BRAILLE LINE:  'Before you download the file, notice its byte size provided on the download page on the web site. Once the download has completed, compare that file size to the'",
+     "     VISIBLE:  'Before you download the file, no', cursor=1",
+     "SPEECH OUTPUT: 'Before you download the file, notice its byte size provided on the download page on the web site. Once the download has completed, compare that file size to the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "72. Line Down",
+    ["BRAILLE LINE:  'size of the downloaded file to make sure they are equal.'",
+     "     VISIBLE:  'size of the downloaded file to m', cursor=1",
+     "SPEECH OUTPUT: 'size of the downloaded file to make sure they are equal.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "73. Line Down",
+    ["BRAILLE LINE:  '2. Become root by running the su command and entering the super-user password.'",
+     "     VISIBLE:  '2. Become root by running the su', cursor=1",
+     "SPEECH OUTPUT: '2. Become root by running the su command and entering the super-user password.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "74. Line Down",
+    ["BRAILLE LINE:  'Link 2. Become root by running the su command and entering the super-user password. 3. Extract and install the contents of the downloaded file.'",
+     "     VISIBLE:  '3. Extract and install the conte', cursor=1",
+     "SPEECH OUTPUT: 'link 2. Become root by running the su command and entering the super-user password. 3. Extract and install the contents of the downloaded file.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "75. Line Down",
+    ["BRAILLE LINE:  'Link 2. Become root by running the su command and entering the super-user password. Link 3. Extract and install the contents of the downloaded file. Change directory to where the downloaded file is located and run these commands to first set the executable permissions and then run the binary to extract and'",
+     "     VISIBLE:  'Change directory to where the do', cursor=1",
+     "SPEECH OUTPUT: 'link 2. Become root by running the su command and entering the super-user password. link 3. Extract and install the contents of the downloaded file. Change directory to where the downloaded file is located and run these commands to first set the executable permissions and then run the binary to extract and'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "76. Line Down",
+    ["BRAILLE LINE:  'run the RPM file:'",
+     "     VISIBLE:  'run the RPM file:', cursor=1",
+     "SPEECH OUTPUT: 'run the RPM file:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "77. Line Down",
+    ["BRAILLE LINE:  'chmod a+x jdk-6<version>-linux-i586-rpm.bin'",
+     "     VISIBLE:  'chmod a+x jdk-6<version>-linux-i', cursor=1",
+     "SPEECH OUTPUT: 'chmod a+x jdk-6<version>-linux-i586-rpm.bin", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "78. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "79. Line Down",
+    ["BRAILLE LINE:  './jdk-6<version>-linux-i586-rpm.bin'",
+     "     VISIBLE:  './jdk-6<version>-linux-i586-rpm.', cursor=1",
+     "SPEECH OUTPUT: './jdk-6<version>-linux-i586-rpm.bin", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "80. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "81. Line Down",
+    ["BRAILLE LINE:  'Note that the initial \"./\" is required if you do not have \".\" in your PATH environment variable.'",
+     "     VISIBLE:  'Note that the initial \"./\" is re', cursor=1",
+     "SPEECH OUTPUT: 'Note that the initial \"./\" is required if you do not have \".\" in your PATH environment variable.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "82. Line Down",
+    ["BRAILLE LINE:  'The script displays a binary license agreement, which you are asked to agree to before installation can proceed. Once you have agreed to the license, the install'",
+     "     VISIBLE:  'The script displays a binary lic', cursor=1",
+     "SPEECH OUTPUT: 'The script displays a binary license agreement, which you are asked to agree to before installation can proceed. Once you have agreed to the license, the install'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "83. Line Down",
+    ["BRAILLE LINE:  'script creates and runs the file jdk-6<version>-linux-i586.rpm in the current directory.'",
+     "     VISIBLE:  'script creates and runs the file', cursor=1",
+     "SPEECH OUTPUT: 'script creates and runs the file jdk-6<version>-linux-i586.rpm in the current directory.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "84. Line Down",
+    ["BRAILLE LINE:  'NOTE - If instead you want to only extract the RPM file but not install it, you can run the .bin file with the -x argument. You do not need to be root to do this.'",
+     "     VISIBLE:  'NOTE - If instead you want to on', cursor=1",
+     "SPEECH OUTPUT: 'NOTE - If instead you want to only extract the RPM file but not install it, you can run the .bin file with the -x argument. You do not need to be root to do this.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "85. Line Down",
+    ["BRAILLE LINE:  '4. Delete the bin and rpm file if you want to save disk space.'",
+     "     VISIBLE:  '4. Delete the bin and rpm file i', cursor=1",
+     "SPEECH OUTPUT: '4. Delete the bin and rpm file if you want to save disk space.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "86. Line Down",
+    ["BRAILLE LINE:  '5. Exit the root shell.'",
+     "     VISIBLE:  '5. Exit the root shell.', cursor=1",
+     "SPEECH OUTPUT: '5. Exit the root shell.", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "87. Line Down",
+    ["BRAILLE LINE:  'Link  The RPM packages creates two links /usr/java/latest and /usr/java/default.'",
+     "     VISIBLE:  'The RPM packages creates two lin', cursor=1",
+     "SPEECH OUTPUT: 'link 5. Exit the root shell.",
+     " The RPM packages creates two links /usr/java/latest and /usr/java/default. ",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "88. Line Down",
+    ["BRAILLE LINE:  'â The /usr/java/latest link will always point to the version of Java that Sun Microsystems considers the latest version. Subsequent upgrades of the packages will overwrite this'",
+     "     VISIBLE:  'â The /usr/java/latest link will', cursor=1",
+     "SPEECH OUTPUT: 'â The /usr/java/latest link will always point to the version of Java that Sun Microsystems considers the latest version. Subsequent upgrades of the packages will overwrite this'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "89. Line Down",
+    ["BRAILLE LINE:  'value if it is not the latest version.'",
+     "     VISIBLE:  'value if it is not the latest ve', cursor=1",
+     "SPEECH OUTPUT: 'value if it is not the latest version.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "90. Line Down",
+    ["BRAILLE LINE:  'â By default, /usr/java/default points to /usr/java/latest. However, if administrators change /usr/java/default to point to another version of Java, subsequent package upgrades'",
+     "     VISIBLE:  'â By default, /usr/java/default ', cursor=1",
+     "SPEECH OUTPUT: 'â By default, /usr/java/default points to /usr/java/latest. However, if administrators change /usr/java/default to point to another version of Java, subsequent package upgrades'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "91. Line Down",
+    ["BRAILLE LINE:  'will be provided by the administrators and cannot be overwritten.'",
+     "     VISIBLE:  'will be provided by the administ', cursor=1",
+     "SPEECH OUTPUT: 'will be provided by the administrators and cannot be overwritten.", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "92. Line Down",
+    ["BRAILLE LINE:  'When the JDK is installed, links to javac jar and javadoc are also created apart from the JRE links. These links point to the appropriate tool referenced by /usr/java/default. This'",
+     "     VISIBLE:  'When the JDK is installed, links', cursor=1",
+     "SPEECH OUTPUT: 'When the JDK is installed, links to javac jar and javadoc are also created apart from the JRE links. These links point to the appropriate tool referenced by /usr/java/default. This'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "93. Line Down",
+    ["BRAILLE LINE:  'allows the user to easily run the default version of these Java tools.'",
+     "     VISIBLE:  'allows the user to easily run th', cursor=1",
+     "SPEECH OUTPUT: 'allows the user to easily run the default version of these Java tools.", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "94. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "95. Line Down",
+    ["BRAILLE LINE:  'A new service script, named jexec, is added to /etc/init.d. This script allows users to directly execute any standalone JAR file that has an execution permission set. This can be'",
+     "     VISIBLE:  'A new service script, named jexe', cursor=1",
+     "SPEECH OUTPUT: 'A new service script, named jexec, is added to /etc/init.d. This script allows users to directly execute any standalone JAR file that has an execution permission set. This can be'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "96. Line Down",
+    ["BRAILLE LINE:  'demonstrated using an example from the JDK:'",
+     "     VISIBLE:  'demonstrated using an example fr', cursor=1",
+     "SPEECH OUTPUT: 'demonstrated using an example from the JDK:", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "97. Line Down",
+    ["BRAILLE LINE:  '	cd /usr/java/jdk1.6.0/demo/jfc/SwingSet2'",
+     "     VISIBLE:  '	cd /usr/java/jdk1.6.0/demo/jfc/', cursor=1",
+     "SPEECH OUTPUT: '	cd /usr/java/jdk1.6.0/demo/jfc/SwingSet2", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "98. Line Down",
+    ["BRAILLE LINE:  '	chmod +x SwingSet2.jar'",
+     "     VISIBLE:  '	chmod +x SwingSet2.jar', cursor=1",
+     "SPEECH OUTPUT: '	chmod +x SwingSet2.jar", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "99. Line Down",
+    ["BRAILLE LINE:  '	./SwingSet2.jar'",
+     "     VISIBLE:  '	./SwingSet2.jar', cursor=1",
+     "SPEECH OUTPUT: '	./SwingSet2.jar'"]))
+
+########################################################################
+# Up Arrow.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Line Up",
+    ["BRAILLE LINE:  '	chmod +x SwingSet2.jar'",
+     "     VISIBLE:  '	chmod +x SwingSet2.jar', cursor=1",
+     "SPEECH OUTPUT: '	chmod +x SwingSet2.jar", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Line Up",
+    ["BRAILLE LINE:  '	cd /usr/java/jdk1.6.0/demo/jfc/SwingSet2'",
+     "     VISIBLE:  '	cd /usr/java/jdk1.6.0/demo/jfc/', cursor=1",
+     "SPEECH OUTPUT: '	cd /usr/java/jdk1.6.0/demo/jfc/SwingSet2", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Line Up",
+    ["BRAILLE LINE:  'demonstrated using an example from the JDK:'",
+     "     VISIBLE:  'demonstrated using an example fr', cursor=1",
+     "SPEECH OUTPUT: 'demonstrated using an example from the JDK:", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Line Up",
+    ["BRAILLE LINE:  'A new service script, named jexec, is added to /etc/init.d. This script allows users to directly execute any standalone JAR file that has an execution permission set. This can be'",
+     "     VISIBLE:  'A new service script, named jexe', cursor=1",
+     "SPEECH OUTPUT: 'A new service script, named jexec, is added to /etc/init.d. This script allows users to directly execute any standalone JAR file that has an execution permission set. This can be'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Line Up",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Line Up",
+    ["BRAILLE LINE:  'allows the user to easily run the default version of these Java tools.'",
+     "     VISIBLE:  'allows the user to easily run th', cursor=1",
+     "SPEECH OUTPUT: 'allows the user to easily run the default version of these Java tools.", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Line Up",
+    ["BRAILLE LINE:  'When the JDK is installed, links to javac jar and javadoc are also created apart from the JRE links. These links point to the appropriate tool referenced by /usr/java/default. This'",
+     "     VISIBLE:  'When the JDK is installed, links', cursor=1",
+     "SPEECH OUTPUT: 'When the JDK is installed, links to javac jar and javadoc are also created apart from the JRE links. These links point to the appropriate tool referenced by /usr/java/default. This'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Line Up",
+    ["BRAILLE LINE:  'will be provided by the administrators and cannot be overwritten.'",
+     "     VISIBLE:  'will be provided by the administ', cursor=1",
+     "SPEECH OUTPUT: 'will be provided by the administrators and cannot be overwritten.", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Line Up",
+    ["BRAILLE LINE:  'â By default, /usr/java/default points to /usr/java/latest. However, if administrators change /usr/java/default to point to another version of Java, subsequent package upgrades'",
+     "     VISIBLE:  'â By default, /usr/java/default ', cursor=1",
+     "SPEECH OUTPUT: 'â By default, /usr/java/default points to /usr/java/latest. However, if administrators change /usr/java/default to point to another version of Java, subsequent package upgrades'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Line Up",
+    ["BRAILLE LINE:  'value if it is not the latest version.'",
+     "     VISIBLE:  'value if it is not the latest ve', cursor=1",
+     "SPEECH OUTPUT: 'value if it is not the latest version.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Line Up",
+    ["BRAILLE LINE:  'â The /usr/java/latest link will always point to the version of Java that Sun Microsystems considers the latest version. Subsequent upgrades of the packages will overwrite this'",
+     "     VISIBLE:  'â The /usr/java/latest link will', cursor=1",
+     "SPEECH OUTPUT: 'â The /usr/java/latest link will always point to the version of Java that Sun Microsystems considers the latest version. Subsequent upgrades of the packages will overwrite this'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Line Up",
+    ["BRAILLE LINE:  'Link 5. Exit the root shell. '",
+     "     VISIBLE:  'Link 5. Exit the root shell. ', cursor=6",
+     "SPEECH OUTPUT: 'link 5. Exit the root shell.",
+     " The RPM packages creates two links /usr/java/latest and /usr/java/default. ",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Line Up",
+    ["BRAILLE LINE:  '4. Delete the bin and rpm file if you want to save disk space.'",
+     "     VISIBLE:  '4. Delete the bin and rpm file i', cursor=1",
+     "SPEECH OUTPUT: '4. Delete the bin and rpm file if you want to save disk space.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Line Up",
+    ["BRAILLE LINE:  'NOTE - If instead you want to only extract the RPM file but not install it, you can run the .bin file with the -x argument. You do not need to be root to do this.'",
+     "     VISIBLE:  'NOTE - If instead you want to on', cursor=1",
+     "SPEECH OUTPUT: 'NOTE - If instead you want to only extract the RPM file but not install it, you can run the .bin file with the -x argument. You do not need to be root to do this.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Line Up",
+    ["BRAILLE LINE:  'script creates and runs the file jdk-6<version>-linux-i586.rpm in the current directory.'",
+     "     VISIBLE:  'script creates and runs the file', cursor=1",
+     "SPEECH OUTPUT: 'script creates and runs the file jdk-6<version>-linux-i586.rpm in the current directory.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Line Up",
+    ["BRAILLE LINE:  'The script displays a binary license agreement, which you are asked to agree to before installation can proceed. Once you have agreed to the license, the install'",
+     "     VISIBLE:  'The script displays a binary lic', cursor=1",
+     "SPEECH OUTPUT: 'The script displays a binary license agreement, which you are asked to agree to before installation can proceed. Once you have agreed to the license, the install'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "17. Line Up",
+    ["BRAILLE LINE:  'Note that the initial \"./\" is required if you do not have \".\" in your PATH environment variable.'",
+     "     VISIBLE:  'Note that the initial \"./\" is re', cursor=1",
+     "SPEECH OUTPUT: 'Note that the initial \"./\" is required if you do not have \".\" in your PATH environment variable.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "18. Line Up",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "19. Line Up",
+    ["BRAILLE LINE:  './jdk-6<version>-linux-i586-rpm.bin'",
+     "     VISIBLE:  './jdk-6<version>-linux-i586-rpm.', cursor=1",
+     "SPEECH OUTPUT: './jdk-6<version>-linux-i586-rpm.bin", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "20. Line Up",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "21. Line Up",
+    ["BRAILLE LINE:  'chmod a+x jdk-6<version>-linux-i586-rpm.bin'",
+     "     VISIBLE:  'chmod a+x jdk-6<version>-linux-i', cursor=1",
+     "SPEECH OUTPUT: 'chmod a+x jdk-6<version>-linux-i586-rpm.bin", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "22. Line Up",
+    ["BRAILLE LINE:  'run the RPM file:'",
+     "     VISIBLE:  'run the RPM file:', cursor=1",
+     "SPEECH OUTPUT: 'run the RPM file:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "23. Line Up",
+    ["BRAILLE LINE:  'Link 2. Become root by running the su command and entering the super-user password. Link 3. Extract and install the contents of the downloaded file. '",
+     "     VISIBLE:  '2. Become root by running the su', cursor=1",
+     "SPEECH OUTPUT: 'link 2. Become root by running the su command and entering the super-user password. link 3. Extract and install the contents of the downloaded file. Change directory to where the downloaded file is located and run these commands to first set the executable permissions and then run the binary to extract and'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "24. Line Up",
+    ["BRAILLE LINE:  'size of the downloaded file to make sure they are equal.'",
+     "     VISIBLE:  'size of the downloaded file to m', cursor=1",
+     "SPEECH OUTPUT: 'size of the downloaded file to make sure they are equal.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "25. Line Up",
+    ["BRAILLE LINE:  'Before you download the file, notice its byte size provided on the download page on the web site. Once the download has completed, compare that file size to the'",
+     "     VISIBLE:  'Before you download the file, no', cursor=1",
+     "SPEECH OUTPUT: 'Before you download the file, notice its byte size provided on the download page on the web site. Once the download has completed, compare that file size to the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "26. Line Up",
+    ["BRAILLE LINE:  'Link 1. Download and check the file size. '",
+     "     VISIBLE:  '1. Download and check the file s', cursor=1",
+     "SPEECH OUTPUT: 'link 1. Download and check the file size. You can download to any directory you choose.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "27. Line Up",
+    ["BRAILLE LINE:  'Use these instructions if you want to install JDK in the form of RPM packages. If you want to use the self-extracting binary file instead, see Installation of Self-Extracting Binary Link .'",
+     "     VISIBLE:  'Use these instructions if you wa', cursor=1",
+     "SPEECH OUTPUT: 'Use these instructions if you want to install JDK in the form of RPM packages. If you want to use the self-extracting binary file instead, see Installation of Self-Extracting Binary link .'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "28. Line Up",
+    ["BRAILLE LINE:  'Installation of RPM File h3'",
+     "     VISIBLE:  'Installation of RPM File h3', cursor=1",
+     "SPEECH OUTPUT: 'Installation of RPM File heading level 3'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "29. Line Up",
+    ["BRAILLE LINE:  'See the Preferences API Link  documentation for more information about preferences in the Java platform.'",
+     "     VISIBLE:  'See the Preferences API Link  do', cursor=1",
+     "SPEECH OUTPUT: 'See the Preferences API link  documentation for more information about preferences in the Java platform.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "30. Line Up",
+    ["BRAILLE LINE:  'environments on other machines.'",
+     "     VISIBLE:  'environments on other machines.', cursor=1",
+     "SPEECH OUTPUT: 'environments on other machines. ", 
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "31. Line Up",
+    ["BRAILLE LINE:  'JDK's installation directory. If the JDK is installed on a network-mounted drive, it and the system preferences can be exported for sharing with Java runtime'",
+     "     VISIBLE:  'JDK's installation directory. If', cursor=1",
+     "SPEECH OUTPUT: 'JDK's installation directory. If the JDK is installed on a network-mounted drive, it and the system preferences can be exported for sharing with Java runtime'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "32. Line Up",
+    ["BRAILLE LINE:  'Note about System Preferences: By default, the installation script configures the system such that the backing store for system preferences is created inside the'",
+     "     VISIBLE:  'Note about System Preferences: B', cursor=1",
+     "SPEECH OUTPUT: 'Note about System Preferences: By default, the installation script configures the system such that the backing store for system preferences is created inside the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "33. Line Up",
+    ["BRAILLE LINE:  'files of the same name in that jdk1.6.0_<version> directory. Please be careful to rename the old directory if it contains files you would like to keep.'",
+     "     VISIBLE:  'files of the same name in that j', cursor=1",
+     "SPEECH OUTPUT: 'files of the same name in that jdk1.6.0_<version> directory. Please be careful to rename the old directory if it contains files you would like to keep.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "34. Line Up",
+    ["BRAILLE LINE:  'Note about Overwriting Files: If you unpack the software in a directory that contains a subdirectory named jdk1.6.0_<version>, the new software overwrites'",
+     "     VISIBLE:  'Note about Overwriting Files: If', cursor=1",
+     "SPEECH OUTPUT: 'Note about Overwriting Files: If you unpack the software in a directory that contains a subdirectory named jdk1.6.0_<version>, the new software overwrites'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "35. Line Up",
+    ["BRAILLE LINE:  'into your home directory, or a subdirectory that you have permission to write to.'",
+     "     VISIBLE:  'into your home directory, or a s', cursor=1",
+     "SPEECH OUTPUT: 'into your home directory, or a subdirectory that you have permission to write to.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "36. Line Up",
+    ["BRAILLE LINE:  'system-wide location such as /usr/local, you must first become root to gain the necessary permissions. If you do not have root access, simply install the JDK'",
+     "     VISIBLE:  'system-wide location such as /us', cursor=1",
+     "SPEECH OUTPUT: 'system-wide location such as /usr/local, you must first become root to gain the necessary permissions. If you do not have root access, simply install the JDK'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "37. Line Up",
+    ["BRAILLE LINE:  'Note about Root Access: Unbundling the software automatically creates a directory called jdk1.6.0_<version>. Note that if you choose to install the JDK into'",
+     "     VISIBLE:  'Note about Root Access: Unbundli', cursor=1",
+     "SPEECH OUTPUT: 'Note about Root Access: Unbundling the software automatically creates a directory called jdk1.6.0_<version>. Note that if you choose to install the JDK into'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "38. Line Up",
+    ["BRAILLE LINE:  'documentation is a separate download.'",
+     "     VISIBLE:  'documentation is a separate down', cursor=1",
+     "SPEECH OUTPUT: 'documentation is a separate download.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "39. Line Up",
+    ["BRAILLE LINE:  'The JDK files are installed in a directory called jdk1.6.0_<version> in the current directory. Follow this link to see its directory structure Link . The JDK'",
+     "     VISIBLE:  'The JDK files are installed in a', cursor=1",
+     "SPEECH OUTPUT: 'The JDK files are installed in a directory called jdk1.6.0_<version> in the current directory. Follow this link to see its directory structure link . The JDK'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "40. Line Up",
+    ["BRAILLE LINE:  'The binary code license is displayed, and you are prompted to agree to its terms.'",
+     "     VISIBLE:  'The binary code license is displ', cursor=1",
+     "SPEECH OUTPUT: 'The binary code license is displayed, and you are prompted to agree to its terms.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "41. Line Up",
+    ["BRAILLE LINE:  './jdk-6<version>-linux-i586.bin'",
+     "     VISIBLE:  './jdk-6<version>-linux-i586.bin', cursor=1",
+     "SPEECH OUTPUT: './jdk-6<version>-linux-i586.bin'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "42. Line Up",
+    ["BRAILLE LINE:  'environment variable):'",
+     "     VISIBLE:  'environment variable):', cursor=1",
+     "SPEECH OUTPUT: 'environment variable):'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "43. Line Up",
+    ["BRAILLE LINE:  'Execute the downloaded file, prepended by the path to it. For example, if the file is in the current directory, prepend it with \"./\" (necessary if \".\" is not in the PATH'",
+     "     VISIBLE:  'Execute the downloaded file, pre', cursor=1",
+     "SPEECH OUTPUT: 'Execute the downloaded file, prepended by the path to it. For example, if the file is in the current directory, prepend it with \"./\" (necessary if \".\" is not in the PATH'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "44. Line Up",
+    ["BRAILLE LINE:  '4. Run the self-extracting binary.'",
+     "     VISIBLE:  '4. Run the self-extracting binar', cursor=1",
+     "SPEECH OUTPUT: '4. Run the self-extracting binary.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "45. Line Up",
+    ["BRAILLE LINE:  'The next step installs the JDK into the current directory.'",
+     "     VISIBLE:  'The next step installs the JDK i', cursor=1",
+     "SPEECH OUTPUT: 'The next step installs the JDK into the current directory.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "46. Line Up",
+    ["BRAILLE LINE:  '3. Change directory to the location where you would like the files to be installed.'",
+     "     VISIBLE:  '3. Change directory to the locat', cursor=1",
+     "SPEECH OUTPUT: '3. Change directory to the location where you would like the files to be installed.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "47. Line Up",
+    ["BRAILLE LINE:  'chmod +x jdk-6<version>-linux-i586.bin'",
+     "     VISIBLE:  'chmod +x jdk-6<version>-linux-i5', cursor=1",
+     "SPEECH OUTPUT: 'chmod +x jdk-6<version>-linux-i586.bin'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "48. Line Up",
+    ["BRAILLE LINE:  'Run this command:'",
+     "     VISIBLE:  'Run this command:', cursor=1",
+     "SPEECH OUTPUT: 'Run this command:",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "49. Line Up",
+    ["BRAILLE LINE:  '2. Make sure that execute permissions are set on the self-extracting binary.'",
+     "     VISIBLE:  '2. Make sure that execute permis', cursor=1",
+     "SPEECH OUTPUT: '2. Make sure that execute permissions are set on the self-extracting binary.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "50. Line Up",
+    ["BRAILLE LINE:  'size of the downloaded file to make sure they are equal.'",
+     "     VISIBLE:  'size of the downloaded file to m', cursor=1",
+     "SPEECH OUTPUT: 'size of the downloaded file to make sure they are equal.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "51. Line Up",
+    ["BRAILLE LINE:  'Before you download the file, notice its byte size provided on the download page on the web site. Once the download has completed, compare that file size to the'",
+     "     VISIBLE:  'Before you download the file, no', cursor=1",
+     "SPEECH OUTPUT: 'Before you download the file, notice its byte size provided on the download page on the web site. Once the download has completed, compare that file size to the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "52. Line Up",
+    ["BRAILLE LINE:  'You can download to any directory you choose; it does not have to be the directory where you want to install the JDK.'",
+     "     VISIBLE:  'You can download to any director', cursor=1",
+     "SPEECH OUTPUT: 'You can download to any directory you choose; it does not have to be the directory where you want to install the JDK.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "53. Line Up",
+    ["BRAILLE LINE:  '1. Download and check the download file size to ensure that you have downloaded the full, uncorrupted software bundle.'",
+     "     VISIBLE:  '1. Download and check the downlo', cursor=1",
+     "SPEECH OUTPUT: '1. Download and check the download file size to ensure that you have downloaded the full, uncorrupted software bundle.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "54. Line Up",
+    ["BRAILLE LINE:  'Use these instructions if you want to use the self-extracting binary file to install the JDK. If you want to install RPM packages instead, see Installation of RPM File Link .'",
+     "     VISIBLE:  'Use these instructions if you wa', cursor=1",
+     "SPEECH OUTPUT: 'Use these instructions if you want to use the self-extracting binary file to install the JDK. If you want to install RPM packages instead, see Installation of RPM File link .'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "55. Line Up",
+    ["BRAILLE LINE:  'Installation of Self-Extracting Binary h3'",
+     "     VISIBLE:  'Installation of Self-Extracting ', cursor=1",
+     "SPEECH OUTPUT: 'Installation of Self-Extracting Binary heading level 3'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "56. Line Up",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "57. Line Up",
+    ["BRAILLE LINE:  './jdk-6u1-linux-i586.bin'",
+     "     VISIBLE:  './jdk-6u1-linux-i586.bin', cursor=1",
+     "SPEECH OUTPUT: './jdk-6u1-linux-i586.bin",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "58. Line Up",
+    ["BRAILLE LINE:  'would become:'",
+     "     VISIBLE:  'would become:', cursor=1",
+     "SPEECH OUTPUT: 'would become:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "59. Line Up",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "60. Line Up",
+    ["BRAILLE LINE:  './jdk-6<version>-linux-i586.bin'",
+     "     VISIBLE:  './jdk-6<version>-linux-i586.bin', cursor=1",
+     "SPEECH OUTPUT: './jdk-6<version>-linux-i586.bin",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "61. Line Up",
+    ["BRAILLE LINE:  'For example, if you were downloading update 6_01, the following command:'",
+     "     VISIBLE:  'For example, if you were downloa', cursor=1",
+     "SPEECH OUTPUT: 'For example, if you were downloading update 6_01, the following command:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "62. Line Up",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "63. Line Up",
+    ["BRAILLE LINE:  '<version>'",
+     "     VISIBLE:  '<version>', cursor=1",
+     "SPEECH OUTPUT: '<version>",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "64. Line Up",
+    ["BRAILLE LINE:  'Note: For any text on this page containing the following notation, you must substitute the appropriate JDK update version number for the notation.'",
+     "     VISIBLE:  'Note: For any text on this page ', cursor=1",
+     "SPEECH OUTPUT: 'Note: For any text on this page containing the following notation, you must substitute the appropriate JDK update version number for the notation.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "65. Line Up",
+    ["BRAILLE LINE:  'Choose the install format that is most suitable to your needs.'",
+     "     VISIBLE:  'Choose the install format that i', cursor=1",
+     "SPEECH OUTPUT: 'Choose the install format that is most suitable to your needs.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "66. Line Up",
+    ["BRAILLE LINE:  'installation on Linux. To use this bundle, see Installation of RPM File Link  below.'",
+     "     VISIBLE:  'installation on Linux. To use th', cursor=1",
+     "SPEECH OUTPUT: 'installation on Linux. To use this bundle, see Installation of RPM File link  below.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "67. Line Up",
+    ["BRAILLE LINE:  'â RPM Packages - A rpm.bin file containing RPM packages, installed with the rpm utility. Requires root access to install. RPM packages are the recommended method for'",
+     "     VISIBLE:  'â RPM Packages - A rpm.bin file ', cursor=1",
+     "SPEECH OUTPUT: 'â RPM Packages - A rpm.bin file containing RPM packages, installed with the rpm utility. Requires root access to install. RPM packages are the recommended method for'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "68. Line Up",
+    ["BRAILLE LINE:  'Installation of Self-Extracting Binary Link below.'",
+     "     VISIBLE:  'Installation of Self-Extracting ', cursor=1",
+     "SPEECH OUTPUT: 'Installation of Self-Extracting Binary link below.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "69. Line Up",
+    ["BRAILLE LINE:  'easily be installed in any location. As long as you are not root user, it cannot displace the system version of the Java platform suppled by Linux. To use this file, see'",
+     "     VISIBLE:  'easily be installed in any locat', cursor=1",
+     "SPEECH OUTPUT: 'easily be installed in any location. As long as you are not root user, it cannot displace the system version of the Java platform suppled by Linux. To use this file, see'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "70. Line Up",
+    ["BRAILLE LINE:  'Link Install formats - This version of the JDK is available in two installation formats. '",
+     "     VISIBLE:  'Install formats - This version o', cursor=1",
+     "SPEECH OUTPUT: 'link Install formats - This version of the JDK is available in two installation formats. â Self-extracting Binary File - This file can be used to install the JDK in a location chosen by the user. This one can be installed by anyone (not only root users), and it can'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "71. Line Up",
+    ["BRAILLE LINE:  'â Java Web Start Installation Notes Link'",
+     "     VISIBLE:  'â Java Web Start Installation No', cursor=1",
+     "SPEECH OUTPUT: 'â Java Web Start Installation Notes link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "72. Line Up",
+    ["BRAILLE LINE:  'â Java Plugin Browser Registration Instructions Link'",
+     "     VISIBLE:  'â Java Plugin Browser Registrati', cursor=1",
+     "SPEECH OUTPUT: 'â Java Plugin Browser Registration Instructions link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "73. Line Up",
+    ["BRAILLE LINE:  'Installing the JDK automatically installs the Java Plugin and Java Web Start. Note that the Java Plugin needs to be registered with the browser. After installing the JDK, refer to:'",
+     "     VISIBLE:  'Installing the JDK automatically', cursor=1",
+     "SPEECH OUTPUT: 'Installing the JDK automatically installs the Java Plugin and Java Web Start. Note that the Java Plugin needs to be registered with the browser. After installing the JDK, refer to:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "74. Line Up",
+    ["BRAILLE LINE:  'Installation Instructions h2'",
+     "     VISIBLE:  'Installation Instructions h2', cursor=1",
+     "SPEECH OUTPUT: 'Installation Instructions heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "75. Line Up",
+    ["BRAILLE LINE:  'For issues, see the Troubleshooting Link  section below.'",
+     "     VISIBLE:  'For issues, see the Troubleshoot', cursor=1",
+     "SPEECH OUTPUT: 'For issues, see the Troubleshooting link  section below.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "76. Line Up",
+    ["BRAILLE LINE:  'See supported System Configurations Link  for information about supported platforms, operating systems, desktop managers, and browsers.'",
+     "     VISIBLE:  'See supported System Configurati', cursor=1",
+     "SPEECH OUTPUT: 'See supported System Configurations link  for information about supported platforms, operating systems, desktop managers, and browsers.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "77. Line Up",
+    ["BRAILLE LINE:  'System Requirements h2'",
+     "     VISIBLE:  'System Requirements h2', cursor=1",
+     "SPEECH OUTPUT: 'System Requirements heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "78. Line Up",
+    ["BRAILLE LINE:  'Troubleshooting Link'",
+     "     VISIBLE:  'Troubleshooting Link', cursor=1",
+     "SPEECH OUTPUT: 'Troubleshooting link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "79. Line Up",
+    ["BRAILLE LINE:  'Java Web Start Installation Notes Link'",
+     "     VISIBLE:  'Java Web Start Installation Note', cursor=1",
+     "SPEECH OUTPUT: 'Java Web Start Installation Notes link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "80. Line Up",
+    ["BRAILLE LINE:  'Java Plugin Browser Registration Instructions Link'",
+     "     VISIBLE:  'Java Plugin Browser Registration', cursor=1",
+     "SPEECH OUTPUT: 'Java Plugin Browser Registration Instructions link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "81. Line Up",
+    ["BRAILLE LINE:  'Installation of RPM File Link'",
+     "     VISIBLE:  'Installation of RPM File Link', cursor=0",
+     "SPEECH OUTPUT: 'ÂÂÂ Installation of RPM File link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "82. Line Up",
+    ["BRAILLE LINE:  'Installation of Self-Extracting Binary Link'",
+     "     VISIBLE:  'Installation of Self-Extracting ', cursor=0",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "83. Line Up",
+    ["BRAILLE LINE:  'Installation of Self-Extracting Binary Link'",
+     "     VISIBLE:  'Installation of Self-Extracting ', cursor=0",
+     "SPEECH OUTPUT: 'Â Installation of Self-Extracting Binary link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "84. Line Up",
+    ["BRAILLE LINE:  'JDK Installation Instructions Link'",
+     "     VISIBLE:  'JDK Installation Instructions Li', cursor=1",
+     "SPEECH OUTPUT: 'JDK Installation Instructions link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "85. Line Up",
+    ["BRAILLE LINE:  'System Requirements Link'",
+     "     VISIBLE:  'System Requirements Link', cursor=1",
+     "SPEECH OUTPUT: 'System Requirements link",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "86. Line Up",
+    ["BRAILLE LINE:  'Contents h2'",
+     "     VISIBLE:  'Contents h2', cursor=1",
+     "SPEECH OUTPUT: 'Contents heading level 2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "87. Line Up",
+    ["BRAILLE LINE:  'JDK Documentation Link'",
+     "     VISIBLE:  'JDK Documentation Link', cursor=1",
+     "SPEECH OUTPUT: 'JDK Documentation link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "88. Line Up",
+    ["BRAILLE LINE:  'Separator'",
+     "     VISIBLE:  'Separator', cursor=1",
+     "SPEECH OUTPUT: 'separator'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "89. Line Up",
+    ["BRAILLE LINE:  'Linux Installation (32-bit) h1'",
+     "     VISIBLE:  'Linux Installation (32-bit) h1', cursor=1",
+     "SPEECH OUTPUT: 'Linux Installation (32-bit) heading level 1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "90. Line Up",
+    ["BRAILLE LINE:  'JavaTM SE 6 Release Notes'",
+     "     VISIBLE:  'JavaTM SE 6 Release Notes', cursor=1",
+     "SPEECH OUTPUT: 'JavaTM SE 6 Release Notes'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "91. Line Up",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "92. Line Up",
+    ["BRAILLE LINE:  'APIs Link Downloads Link Products Link Support Link Training Link Participate Link'",
+     "     VISIBLE:  'APIs Link Downloads Link Product', cursor=1",
+     "SPEECH OUTPUT: 'APIs link Downloads link Products link Support link Training link Participate link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "93. Line Up",
+    ["BRAILLE LINE:  'Â search tips Link Search $l Submit Search Button Home Page Link Image  $l'",
+     "     VISIBLE:  'Â search tips Link Search $l Sub', cursor=1",
+     "SPEECH OUTPUT: ' search tips link  text Search Submit Search button Home Page link image'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "94. Line Up",
+    ["BRAILLE LINE:  'Skip to Content Link Sun Link Java Link Solaris Link Communities Link My SDN Account Link Join SDN Link'",
+     "     VISIBLE:  'Skip to Content Link Sun Link Ja', cursor=1",
+     "SPEECH OUTPUT: 'Skip to Content link Sun link Java link Solaris link Communities link My SDN Account link Join SDN link'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "95. Line Up",
+    [""]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Added: trunk/test/keystrokes/firefox/line_nav_bug_549128.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/line_nav_bug_549128.py	Thu Sep 25 04:06:26 2008
@@ -0,0 +1,274 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of line navigation output of Firefox. 
+"""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "steaks.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Holiday Gift Giving'",
+     "     VISIBLE:  'Holiday Gift Giving', cursor=0",
+     "SPEECH OUTPUT: 'Holiday Gift Giving'"]))
+
+########################################################################
+# Down Arrow.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Line Down",
+    ["BRAILLE LINE:  'Shop Early - Deliver Later'",
+     "     VISIBLE:  'Shop Early - Deliver Later', cursor=1",
+     "SPEECH OUTPUT: 'Shop Early - Deliver Later",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Line Down",
+    ["BRAILLE LINE:  'The Ideal Gift Collection Link'",
+     "     VISIBLE:  'The Ideal Gift Collection Link', cursor=1",
+     "SPEECH OUTPUT: 'The Ideal Gift Collection link ",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Line Down",
+    ["BRAILLE LINE:  'Â 2 (5 oz.) Filet Mignons'",
+     "     VISIBLE:  'Â 2 (5 oz.) Filet Mignons', cursor=1",
+     "SPEECH OUTPUT: 'Â 2 (5 oz.) Filet Mignons",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Line Down",
+    ["BUG? - Note that the braille is messed up here and on many lines that follow in this test. This is mostly an FF bug, but something we should be handling better.",
+     "BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "SPEECH OUTPUT: 'Â 2 (5 oz.) Top Sirloins",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "SPEECH OUTPUT: 'Â 4 (4 oz.) Foobar Steaks Burgers",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "SPEECH OUTPUT: 'Â 6 (5.75 oz.) Stuffed Baked Potatoes",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "SPEECH OUTPUT: 'Â 2 (4.5 oz.) Stuffed Sole with Scallops and Crab",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "SPEECH OUTPUT: 'Â 1 (6 in.) Chocolate Lover's Cake",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "SPEECH OUTPUT: 'Regular $133.00, Now $59.99",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Line Down",
+    [""]))
+
+########################################################################
+# Up Arrow.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Line Up",
+    ["BRAILLE LINE:  'R'",
+     "     VISIBLE:  'R', cursor=1",
+     "SPEECH OUTPUT: 'Regular $133.00, Now $59.99",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Line Up",
+    ["BRAILLE LINE:  'Â'",
+     "     VISIBLE:  'Â', cursor=1",
+     "SPEECH OUTPUT: 'Â 1 (6 in.) Chocolate Lover's Cake",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Line Up",
+    ["BRAILLE LINE:  'Â'",
+     "     VISIBLE:  'Â', cursor=1",
+     "SPEECH OUTPUT: 'Â 2 (4.5 oz.) Stuffed Sole with Scallops and Crab",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Line Up",
+    ["BRAILLE LINE:  'Â'",
+     "     VISIBLE:  'Â', cursor=1",
+     "SPEECH OUTPUT: 'Â 6 (5.75 oz.) Stuffed Baked Potatoes",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Line Up",
+    ["BRAILLE LINE:  'Â'",
+     "     VISIBLE:  'Â', cursor=1",
+     "SPEECH OUTPUT: 'Â 4 (4 oz.) Foobar Steaks Burgers",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Line Up",
+    ["BRAILLE LINE:  'Â'",
+     "     VISIBLE:  'Â', cursor=1",
+     "SPEECH OUTPUT: 'Â 2 (5 oz.) Top Sirloins",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Line Up",
+    ["BRAILLE LINE:  'Â 2 (5 oz.) Filet Mignons'",
+     "     VISIBLE:  'Â 2 (5 oz.) Filet Mignons', cursor=1",
+     "SPEECH OUTPUT: 'Â 2 (5 oz.) Filet Mignons",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Line Up",
+    ["BRAILLE LINE:  'The Ideal Gift Collection Link'",
+     "     VISIBLE:  'The Ideal Gift Collection Link', cursor=1",
+     "SPEECH OUTPUT: 'The Ideal Gift Collection link ",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Line Up",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Line Up",
+    ["BRAILLE LINE:  'Shop Early - Deliver Later'",
+     "     VISIBLE:  'Shop Early - Deliver Later', cursor=1",
+     "SPEECH OUTPUT: 'Shop Early - Deliver Later",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Line Up",
+    ["BRAILLE LINE:  'Holiday Gift Giving'",
+     "     VISIBLE:  'Holiday Gift Giving', cursor=1",
+     "SPEECH OUTPUT: 'Holiday Gift Giving'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Line Up",
+    [""]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()

Modified: trunk/test/keystrokes/firefox/line_nav_bugzilla_search.py
==============================================================================
--- trunk/test/keystrokes/firefox/line_nav_bugzilla_search.py	(original)
+++ trunk/test/keystrokes/firefox/line_nav_bugzilla_search.py	Thu Sep 25 04:06:26 2008
@@ -347,6 +347,8 @@
     "Line Down",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -411,6 +413,8 @@
     "Line Down",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -459,6 +463,8 @@
     "Line Down",
     ["BRAILLE LINE:  ' $l and Now $l'",
      "     VISIBLE:  ' $l and Now $l', cursor=1",
+     "BRAILLE LINE:  ' $l and Now $l'",
+     "     VISIBLE:  ' $l and Now $l', cursor=1",
      "SPEECH OUTPUT: 'Only bugs changed between: text and text Now",
      "'"]))
 
@@ -500,6 +506,8 @@
     "Line Down",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'and the new value was: text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -767,6 +775,8 @@
     "Line Up",
     ["BRAILLE LINE:  ' $l  and Now $l'",
      "     VISIBLE:  ' $l  and Now $l', cursor=1",
+     "BRAILLE LINE:  ' $l  and Now $l'",
+     "     VISIBLE:  ' $l  and Now $l', cursor=1",
      "SPEECH OUTPUT: 'Only bugs changed between: text  and text Now",
      "'"]))
 
@@ -816,6 +826,8 @@
     "Line Up",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -880,6 +892,8 @@
     "Line Up",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())

Modified: trunk/test/keystrokes/firefox/line_nav_simple_form.py
==============================================================================
--- trunk/test/keystrokes/firefox/line_nav_simple_form.py	(original)
+++ trunk/test/keystrokes/firefox/line_nav_simple_form.py	Thu Sep 25 04:06:26 2008
@@ -73,6 +73,8 @@
     "4. line Down",
     ["BRAILLE LINE:  'I am a monkey with a long tail.  I like  $l'",
      "     VISIBLE:  'I am a monkey with a long tail. ', cursor=1",
+     "BRAILLE LINE:  'I am a monkey with a long tail.  I like  $l'",
+     "     VISIBLE:  'I am a monkey with a long tail. ', cursor=1",
      "SPEECH OUTPUT: 'Tell me a little more about yourself: text I am a monkey with a long tail.  I like'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -216,6 +218,8 @@
     "6. line Up",
     ["BRAILLE LINE:  '      $l'",
      "     VISIBLE:  '      $l', cursor=1",
+     "BRAILLE LINE:  '      $l'",
+     "     VISIBLE:  '      $l', cursor=1",
      "SPEECH OUTPUT: 'Tell me a little more about yourself: text'"]))
 
 sequence.append(utils.StartRecordingAction())

Added: trunk/test/keystrokes/firefox/line_nav_slash_test.py
==============================================================================
--- (empty file)
+++ trunk/test/keystrokes/firefox/line_nav_slash_test.py	Thu Sep 25 04:06:26 2008
@@ -0,0 +1,256 @@
+# -*- coding: utf-8 -*-
+#!/usr/bin/python
+
+"""Test of line navigation output of Firefox."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+########################################################################
+# We wait for the focus to be on a blank Firefox window.
+#
+sequence.append(WaitForWindowActivate("Minefield",None))
+
+########################################################################
+# Load the local "simple form" test case.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction(utils.htmlURLPrefix + "slash-test.html"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+sequence.append(WaitForFocus("",
+                             acc_role=pyatspi.ROLE_DOCUMENT_FRAME))
+
+########################################################################
+# Press Control+Home to move to the top.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "Top of file",
+    ["BRAILLE LINE:  'Stories h4'",
+     "     VISIBLE:  'Stories h4', cursor=1",
+     "SPEECH OUTPUT: 'Stories heading level 4'"]))
+
+########################################################################
+# Down Arrow.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Line Down",
+    ["BRAILLE LINE:  'About h4'",
+     "     VISIBLE:  'About h4', cursor=1",
+     "SPEECH OUTPUT: 'About heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Line Down",
+    ["BRAILLE LINE:  'Services h4'",
+     "     VISIBLE:  'Services h4', cursor=1",
+     "SPEECH OUTPUT: 'Services heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Line Down",
+    ["BRAILLE LINE:  'Science Link h4'",
+     "     VISIBLE:  'Science Link h4', cursor=1",
+     "SPEECH OUTPUT: 'Science link heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Line Down",
+    ["BRAILLE LINE:  'Recent Tags Link h4'",
+     "     VISIBLE:  'Recent Tags Link h4', cursor=1",
+     "SPEECH OUTPUT: 'Recent Tags link heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Line Down",
+    ["BRAILLE LINE:  'Recent Tags Link Slashdot Login h4'",
+     "     VISIBLE:  'Slashdot Login h4', cursor=1",
+     "SPEECH OUTPUT: 'Slashdot Login heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Line Down",
+    ["BRAILLE LINE:  'Nickname  $l Password  $l Log in Button'",
+     "     VISIBLE:  'Nickname  $l Password  $l Log in', cursor=1",
+     "SPEECH OUTPUT: 'Nickname text Password password Log in button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Line Down",
+    ["BRAILLE LINE:  'Some Poll h4'",
+     "     VISIBLE:  'Some Poll h4', cursor=1",
+     "SPEECH OUTPUT: 'Some Poll heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Line Down",
+    ["BRAILLE LINE:  'What is your favorite poison?'",
+     "     VISIBLE:  'What is your favorite poison?', cursor=1",
+     "SPEECH OUTPUT: 'What is your favorite poison? ",
+     " panel'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Line Down",
+    ["BRAILLE LINE:  '& y RadioButton Some polls'",
+     "     VISIBLE:  '& y RadioButton Some polls', cursor=1",
+     "SPEECH OUTPUT: 'Some polls not selected radio button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Line Down",
+    ["BRAILLE LINE:  'Book Reviews Link h4'",
+     "     VISIBLE:  'Book Reviews Link h4', cursor=1",
+     "SPEECH OUTPUT: 'Book Reviews link heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Line Down",
+    ["BRAILLE LINE:  'Book Reviews Link Older Stuff h4'",
+     "     VISIBLE:  'Book Reviews Link Older Stuff h4', cursor=19",
+     "SPEECH OUTPUT: 'Older Stuff heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Line Down",
+    [""]))
+
+########################################################################
+# Up Arrow.
+#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Line Up",
+    ["BRAILLE LINE:  'Book Reviews Link h4'",
+     "     VISIBLE:  'Book Reviews Link h4', cursor=1",
+     "SPEECH OUTPUT: 'Book Reviews link heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Line Up",
+    ["BRAILLE LINE:  '& y RadioButton Some polls'",
+     "     VISIBLE:  '& y RadioButton Some polls', cursor=1",
+     "SPEECH OUTPUT: 'Some polls not selected radio button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Line Up",
+    ["BRAILLE LINE:  'What is your favorite poison?'",
+     "     VISIBLE:  'What is your favorite poison?', cursor=1",
+     "SPEECH OUTPUT: 'What is your favorite poison? ",
+     " panel'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Line Up",
+    ["BRAILLE LINE:  'Some Poll h4'",
+     "     VISIBLE:  'Some Poll h4', cursor=1",
+     "SPEECH OUTPUT: 'Some Poll heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Line Up",
+    ["BRAILLE LINE:  'Nickname  $l Password  $l Log in Button'",
+     "     VISIBLE:  'Nickname  $l Password  $l Log in', cursor=1",
+     "SPEECH OUTPUT: 'Nickname text Password password Log in button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Line Up",
+    ["BRAILLE LINE:  'Slashdot Login h4'",
+     "     VISIBLE:  'Slashdot Login h4', cursor=1",
+     "SPEECH OUTPUT: 'Slashdot Login heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Line Up",
+    ["BRAILLE LINE:  'Recent Tags Link h4'",
+     "     VISIBLE:  'Recent Tags Link h4', cursor=1",
+     "SPEECH OUTPUT: 'Recent Tags link heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Line Up",
+    ["BRAILLE LINE:  'Science Link h4'",
+     "     VISIBLE:  'Science Link h4', cursor=1",
+     "SPEECH OUTPUT: 'Science link heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Line Up",
+    ["BRAILLE LINE:  'Services h4 Science Link h4'",
+     "     VISIBLE:  'Services h4 Science Link h4', cursor=1",
+     "SPEECH OUTPUT: 'Services heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Line Up",
+    ["BRAILLE LINE:  'About h4'",
+     "     VISIBLE:  'About h4', cursor=1",
+     "SPEECH OUTPUT: 'About heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Line Up",
+    ["BRAILLE LINE:  'Stories h4'",
+     "     VISIBLE:  'Stories h4', cursor=1",
+     "SPEECH OUTPUT: 'Stories heading level 4'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Line Up",
+    [""]))
+
+########################################################################
+# Move to the location bar by pressing Control+L.  When it has focus
+# type "about:blank" and press Return to restore the browser to the
+# conditions at the test's start.
+#
+sequence.append(KeyComboAction("<Control>l"))
+sequence.append(WaitForFocus("Location", acc_role=pyatspi.ROLE_ENTRY))
+
+sequence.append(TypeAction("about:blank"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(WaitForDocLoad())
+
+# Just a little extra wait to let some events get through.
+#
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.AssertionSummaryAction())
+
+sequence.start()



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]