Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  browser_roles_generic.js

  Sprache: JAVA
 

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


"use strict";

/* import-globals-from ../../mochitest/role.js */
loadScripts({ name: "role.js", dir: MOCHITESTS_DIR });

/**
 * Test ARIA role map
 */

addAccessibleTask(
  `<span id="aria_alert" role="alert"></span>
  <span id="aria_alert_mixed" role="aLERt"></span>
  <span id="aria_alertdialog" role="alertdialog"></span>
  <span id="aria_alertdialog_mixed" role="aLERTDIALOg"></span>
  <span id="aria_application" role="application"></span>
  <span id="aria_application_mixed" role="aPPLICATIOn"></span>
  <span id="aria_article" role="article"></span>
  <span id="aria_article_mixed" role="aRTICLe"></span>
  <span id="aria_blockquote" role="blockquote"></span>
  <span id="aria_blockquote_mixed" role="bLOCKQUOTe"></span>
  <span id="aria_button" role="button"></span>
  <span id="aria_button_mixed" role="bUTTOn"></span>
  <span id="aria_caption" role="caption"></span>
  <span id="aria_caption_mixed" role="cAPTIOn"></span>
  <span id="aria_checkbox" role="checkbox"></span>
  <span id="aria_checkbox_mixed" role="cHECKBOx"></span>
  <span id="aria_code" role="code"></span>
  <span id="aria_code_mixed" role="cODe"></span>
  <span id="aria_combobox" role="combobox"></span>
  <span id="aria_combobox_mixed" role="cOMBOBOx"></span>
  <span id="aria_comment" role="comment"></span>
  <span id="aria_comment_mixed" role="cOMMENt"></span>
  <span id="aria_deletion" role="deletion"></span>
  <span id="aria_deletion_mixed" role="dELETIOn"></span>
  <span id="aria_dialog" role="dialog"></span>
  <span id="aria_dialog_mixed" role="dIALOg"></span>
  <span id="aria_directory" role="directory"></span>
  <span id="aria_directory_mixed" role="dIRECTORy"></span>
  <span id="aria_document" role="document"></span>
  <span id="aria_document_mixed" role="dOCUMENt"></span>
  <span id="aria_form" role="form"></span>
  <span id="aria_form_mixed" role="fORm"></span>
  <span id="aria_form_with_label" role="form" aria-label="Label"></span>
  <span id="aria_form_with_label_mixed" role="fORm" aria-label="Label"></span>
  <span id="aria_feed" role="feed"></span>
  <span id="aria_feed_mixed" role="fEEd"></span>
  <span id="aria_figure" role="figure"></span>
  <span id="aria_figure_mixed" role="fIGURe"></span>
  <span id="aria_grid" role="grid"></span>
  <span id="aria_grid_mixed" role="gRId"></span>
  <span id="aria_group" role="group"></span>
  <span id="aria_group_mixed" role="gROUp"></span>
  <span id="aria_heading" role="heading"></span>
  <span id="aria_heading_mixed" role="hEADINg"></span>
  <span id="aria_img" role="img"></span>
  <span id="aria_img_mixed" role="iMg"></span>
  <span id="aria_insertion" role="insertion"></span>
  <span id="aria_insertion_mixed" role="iNSERTIOn"></span>
  <span id="aria_link" role="link"></span>
  <span id="aria_link_mixed" role="lINk"></span>
  <span id="aria_list" role="list"></span>
  <span id="aria_list_mixed" role="lISt"></span>
  <span id="aria_listbox" role="listbox"></span>
  <span id="aria_listbox_mixed" role="lISTBOx"></span>
  <span id="aria_log" role="log"></span>
  <span id="aria_log_mixed" role="lOg"></span>
  <span id="aria_mark" role="mark"></span>
  <span id="aria_mark_mixed" role="mARk"></span>
  <span id="aria_marquee" role="marquee"></span>
  <span id="aria_marquee_mixed" role="mARQUEe"></span>
  <span id="aria_math" role="math"></span>
  <span id="aria_math_mixed" role="mATh"></span>
  <span id="aria_menu" role="menu"></span>
  <span id="aria_menu_mixed" role="mENu"></span>
  <span id="aria_menubar" role="menubar"></span>
  <span id="aria_menubar_mixed" role="mENUBAr"></span>
  <span id="aria_meter" role="meter"></span>
  <span id="aria_meter_mixed" role="meTer"></span>
  <span id="aria_note" role="note"></span>
  <span id="aria_note_mixed" role="nOTe"></span>
  <span id="aria_paragraph" role="paragraph"></span>
  <span id="aria_paragraph_mixed" role="pARAGRAPh"></span>
  <span id="aria_presentation" role="presentation" tabindex="0"></span>
  <span id="aria_presentation_mixed" role="pRESENTATIOn" tabindex="0"></span>
  <span id="aria_progressbar" role="progressbar"></span>
  <span id="aria_progressbar_mixed" role="pROGRESSBAr"></span>
  <span id="aria_radio" role="radio"></span>
  <span id="aria_radio_mixed" role="rADIo"></span>
  <span id="aria_radiogroup" role="radiogroup"></span>
  <span id="aria_radiogroup_mixed" role="rADIOGROUp"></span>
  <span id="aria_region_no_name" role="region"></span>
  <span id="aria_region_no_name_mixed" role="rEGIOn"></span>
  <span id="aria_region_has_label" role="region" aria-label="label"></span>
  <span id="aria_region_has_label_mixed" role="rEGIOn" aria-label="label"></span>
  <span id="aria_region_has_labelledby" role="region" aria-labelledby="label"><span id="label" aria-label="label"></span></span>
  <span id="aria_region_has_labelledby_mixed" role="rEGIOn" aria-labelledby="label"><span id="label" aria-label="label"></span></span>
  <span id="aria_region_has_title" role="region" title="title"></span>
  <span id="aria_region_has_title_mixed" role="rEGIOn" title="title"></span>
  <span id="aria_region_empty_name" role="region" aria-label="" title="" aria-labelledby="empty"></span><span id="empty"></span>
  <span id="aria_region_empty_name_mixed" role="rEGIOn" aria-label="" title="" aria-labelledby="empty"></span><span id="empty"></span>
  <table id="aria_region_as_table_with_caption" role="region"><caption>hello</caption></table>
  <table id="aria_region_as_table_with_caption_mixed" role="rEGIOn"><caption>hello</caption></table>
  <table id="aria_region_as_table_with_miscaption" role="region"><caption role="option">hello</caption></table>
  <table id="aria_region_as_table_with_miscaption_mixed" role="rEGIOn"><caption role="option">hello</caption></table>
  <span id="aria_scrollbar" role="scrollbar"></span>
  <span id="aria_scrollbar_mixed" role="sCROLLBAr"></span>
  <span id="aria_searchbox" role="searchbox"></span>
  <span id="aria_searchbox_mixed" role="sEARCHBOx"></span>
  <span id="aria_separator" role="separator"></span>
  <span id="aria_separator_mixed" role="sEPARATOr"></span>
  <span id="aria_slider" role="slider"></span>
  <span id="aria_slider_mixed" role="sLIDEr"></span>
  <span id="aria_spinbutton" role="spinbutton"></span>
  <span id="aria_spinbutton_mixed" role="sPINBUTTOn"></span>
  <span id="aria_status" role="status"></span>
  <span id="aria_status_mixed" role="sTATUs"></span>
  <span id="aria_subscript" role="subscript"></span>
  <span id="aria_subscript_mixed" role="sUBSCRIPt"></span>
  <span id="aria_suggestion" role="suggestion"></span>
  <span id="aria_suggestion_mixed" role="sUGGESTIOn"></span>
  <span id="aria_superscript" role="superscript"></span>
  <span id="aria_superscript_mixed" role="sUPERSCRIPt"></span>
  <span id="aria_switch" role="switch"></span>
  <span id="aria_switch_mixed" role="sWITCh"></span>
  <span id="aria_tablist" role="tablist"></span>
  <span id="aria_tablist_mixed" role="tABLISt"></span>
  <span id="aria_tabpanel" role="tabpanel"></span>
  <span id="aria_tabpanel_mixed" role="tABPANEl"></span>
  <span id="aria_term" role="term"></span>
  <span id="aria_term_mixed" role="tERm"></span>
  <span id="aria_textbox" role="textbox"></span>
  <span id="aria_textbox_mixed" role="tEXTBOx"></span>
  <span id="aria_timer" role="timer"></span>
  <span id="aria_timer_mixed" role="tIMEr"></span>
  <span id="aria_toolbar" role="toolbar"></span>
  <span id="aria_toolbar_mixed" role="tOOLBAr"></span>
  <span id="aria_tooltip" role="tooltip"></span>
  <span id="aria_tooltip_mixed" role="tOOLTIp"></span>
  <span id="aria_tree" role="tree"></span>
  <span id="aria_tree_mixed" role="tREe"></span>
  <span id="aria_treegrid" role="treegrid"></span>
  <span id="aria_treegrid_mixed" role="tREEGRId"></span>`,
  async function testARIARoleMap(browser, accDoc) {
    let getAcc = id => findAccessibleChildByID(accDoc, id);
    testRole(getAcc("aria_alert"), ROLE_ALERT);
    testRole(getAcc("aria_alert_mixed"), ROLE_ALERT);
    testRole(getAcc("aria_alertdialog"), ROLE_DIALOG);
    testRole(getAcc("aria_alertdialog_mixed"), ROLE_DIALOG);
    testRole(getAcc("aria_application"), ROLE_APPLICATION);
    testRole(getAcc("aria_application_mixed"), ROLE_APPLICATION);
    testRole(getAcc("aria_article"), ROLE_ARTICLE);
    testRole(getAcc("aria_article_mixed"), ROLE_ARTICLE);
    testRole(getAcc("aria_blockquote"), ROLE_BLOCKQUOTE);
    testRole(getAcc("aria_blockquote_mixed"), ROLE_BLOCKQUOTE);
    testRole(getAcc("aria_button"), ROLE_PUSHBUTTON);
    testRole(getAcc("aria_button_mixed"), ROLE_PUSHBUTTON);
    testRole(getAcc("aria_caption"), ROLE_CAPTION);
    testRole(getAcc("aria_caption_mixed"), ROLE_CAPTION);
    testRole(getAcc("aria_checkbox"), ROLE_CHECKBUTTON);
    testRole(getAcc("aria_checkbox_mixed"), ROLE_CHECKBUTTON);
    testRole(getAcc("aria_code"), ROLE_CODE);
    testRole(getAcc("aria_code_mixed"), ROLE_CODE);
    testRole(getAcc("aria_combobox"), ROLE_EDITCOMBOBOX);
    testRole(getAcc("aria_combobox_mixed"), ROLE_EDITCOMBOBOX);
    testRole(getAcc("aria_comment"), ROLE_COMMENT);
    testRole(getAcc("aria_comment_mixed"), ROLE_COMMENT);
    testRole(getAcc("aria_deletion"), ROLE_CONTENT_DELETION);
    testRole(getAcc("aria_deletion_mixed"), ROLE_CONTENT_DELETION);
    testRole(getAcc("aria_dialog"), ROLE_DIALOG);
    testRole(getAcc("aria_dialog_mixed"), ROLE_DIALOG);
    testRole(getAcc("aria_directory"), ROLE_LIST);
    testRole(getAcc("aria_directory_mixed"), ROLE_LIST);
    testRole(getAcc("aria_document"), ROLE_NON_NATIVE_DOCUMENT);
    testRole(getAcc("aria_document_mixed"), ROLE_NON_NATIVE_DOCUMENT);
    testRole(getAcc("aria_form"), ROLE_TEXT);
    testRole(getAcc("aria_form_mixed"), ROLE_TEXT);
    testRole(getAcc("aria_form_with_label"), ROLE_FORM);
    testRole(getAcc("aria_form_with_label_mixed"), ROLE_FORM);
    testRole(getAcc("aria_feed"), ROLE_GROUPING);
    testRole(getAcc("aria_feed_mixed"), ROLE_GROUPING);
    testRole(getAcc("aria_figure"), ROLE_FIGURE);
    testRole(getAcc("aria_figure_mixed"), ROLE_FIGURE);
    testRole(getAcc("aria_grid"), ROLE_GRID);
    testRole(getAcc("aria_grid_mixed"), ROLE_GRID);
    testRole(getAcc("aria_group"), ROLE_GROUPING);
    testRole(getAcc("aria_group_mixed"), ROLE_GROUPING);
    testRole(getAcc("aria_heading"), ROLE_HEADING);
    testRole(getAcc("aria_heading_mixed"), ROLE_HEADING);
    testRole(getAcc("aria_img"), ROLE_GRAPHIC);
    testRole(getAcc("aria_img_mixed"), ROLE_GRAPHIC);
    testRole(getAcc("aria_insertion"), ROLE_CONTENT_INSERTION);
    testRole(getAcc("aria_insertion_mixed"), ROLE_CONTENT_INSERTION);
    testRole(getAcc("aria_link"), ROLE_LINK);
    testRole(getAcc("aria_link_mixed"), ROLE_LINK);
    testRole(getAcc("aria_list"), ROLE_LIST);
    testRole(getAcc("aria_list_mixed"), ROLE_LIST);
    testRole(getAcc("aria_listbox"), ROLE_LISTBOX);
    testRole(getAcc("aria_listbox_mixed"), ROLE_LISTBOX);
    testRole(getAcc("aria_log"), ROLE_TEXT); // weak role
    testRole(getAcc("aria_log_mixed"), ROLE_TEXT); // weak role
    testRole(getAcc("aria_mark"), ROLE_MARK);
    testRole(getAcc("aria_mark_mixed"), ROLE_MARK);
    testRole(getAcc("aria_marquee"), ROLE_ANIMATION);
    testRole(getAcc("aria_marquee_mixed"), ROLE_ANIMATION);
    testRole(getAcc("aria_math"), ROLE_FLAT_EQUATION);
    testRole(getAcc("aria_math_mixed"), ROLE_FLAT_EQUATION);
    testRole(getAcc("aria_menu"), ROLE_MENUPOPUP);
    testRole(getAcc("aria_menu_mixed"), ROLE_MENUPOPUP);
    testRole(getAcc("aria_menubar"), ROLE_MENUBAR);
    testRole(getAcc("aria_menubar_mixed"), ROLE_MENUBAR);
    testRole(getAcc("aria_meter"), ROLE_METER);
    testRole(getAcc("aria_meter_mixed"), ROLE_METER);
    testRole(getAcc("aria_note"), ROLE_NOTE);
    testRole(getAcc("aria_note_mixed"), ROLE_NOTE);
    testRole(getAcc("aria_paragraph"), ROLE_PARAGRAPH);
    testRole(getAcc("aria_paragraph_mixed"), ROLE_PARAGRAPH);
    testRole(getAcc("aria_presentation"), ROLE_TEXT); // weak role
    testRole(getAcc("aria_presentation_mixed"), ROLE_TEXT); // weak role
    testRole(getAcc("aria_progressbar"), ROLE_PROGRESSBAR);
    testRole(getAcc("aria_progressbar_mixed"), ROLE_PROGRESSBAR);
    testRole(getAcc("aria_radio"), ROLE_RADIOBUTTON);
    testRole(getAcc("aria_radio_mixed"), ROLE_RADIOBUTTON);
    testRole(getAcc("aria_radiogroup"), ROLE_RADIO_GROUP);
    testRole(getAcc("aria_radiogroup_mixed"), ROLE_RADIO_GROUP);
    testRole(getAcc("aria_region_no_name"), ROLE_TEXT);
    testRole(getAcc("aria_region_no_name_mixed"), ROLE_TEXT);
    testRole(getAcc("aria_region_has_label"), ROLE_REGION);
    testRole(getAcc("aria_region_has_label_mixed"), ROLE_REGION);
    testRole(getAcc("aria_region_has_labelledby"), ROLE_REGION);
    testRole(getAcc("aria_region_has_labelledby_mixed"), ROLE_REGION);
    testRole(getAcc("aria_region_has_title"), ROLE_REGION);
    testRole(getAcc("aria_region_has_title_mixed"), ROLE_REGION);
    testRole(getAcc("aria_region_empty_name"), ROLE_TEXT);
    testRole(getAcc("aria_region_empty_name_mixed"), ROLE_TEXT);
    testRole(getAcc("aria_region_as_table_with_caption"), ROLE_REGION);
    testRole(getAcc("aria_region_as_table_with_caption_mixed"), ROLE_REGION);
    testRole(getAcc("aria_region_as_table_with_miscaption"), ROLE_REGION);
    testRole(getAcc("aria_region_as_table_with_miscaption_mixed"), ROLE_REGION);
    testRole(getAcc("aria_scrollbar"), ROLE_SCROLLBAR);
    testRole(getAcc("aria_scrollbar_mixed"), ROLE_SCROLLBAR);
    testRole(getAcc("aria_searchbox"), ROLE_SEARCHBOX);
    testRole(getAcc("aria_searchbox_mixed"), ROLE_SEARCHBOX);
    testRole(getAcc("aria_separator"), ROLE_SEPARATOR);
    testRole(getAcc("aria_separator_mixed"), ROLE_SEPARATOR);
    testRole(getAcc("aria_slider"), ROLE_SLIDER);
    testRole(getAcc("aria_slider_mixed"), ROLE_SLIDER);
    testRole(getAcc("aria_spinbutton"), ROLE_SPINBUTTON);
    testRole(getAcc("aria_spinbutton_mixed"), ROLE_SPINBUTTON);
    testRole(getAcc("aria_status"), ROLE_STATUSBAR);
    testRole(getAcc("aria_status_mixed"), ROLE_STATUSBAR);
    testRole(getAcc("aria_subscript"), ROLE_SUBSCRIPT);
    testRole(getAcc("aria_subscript_mixed"), ROLE_SUBSCRIPT);
    testRole(getAcc("aria_suggestion"), ROLE_SUGGESTION);
    testRole(getAcc("aria_suggestion_mixed"), ROLE_SUGGESTION);
    testRole(getAcc("aria_superscript"), ROLE_SUPERSCRIPT);
    testRole(getAcc("aria_superscript_mixed"), ROLE_SUPERSCRIPT);
    testRole(getAcc("aria_switch"), ROLE_SWITCH);
    testRole(getAcc("aria_switch_mixed"), ROLE_SWITCH);
    testRole(getAcc("aria_tablist"), ROLE_PAGETABLIST);
    testRole(getAcc("aria_tablist_mixed"), ROLE_PAGETABLIST);
    testRole(getAcc("aria_tabpanel"), ROLE_PROPERTYPAGE);
    testRole(getAcc("aria_tabpanel_mixed"), ROLE_PROPERTYPAGE);
    testRole(getAcc("aria_term"), ROLE_TERM);
    testRole(getAcc("aria_term_mixed"), ROLE_TERM);
    testRole(getAcc("aria_textbox"), ROLE_ENTRY);
    testRole(getAcc("aria_textbox_mixed"), ROLE_ENTRY);
    testRole(getAcc("aria_timer"), ROLE_TEXT); // weak role
    testRole(getAcc("aria_timer_mixed"), ROLE_TEXT); // weak role
    testRole(getAcc("aria_toolbar"), ROLE_TOOLBAR);
    testRole(getAcc("aria_toolbar_mixed"), ROLE_TOOLBAR);
    testRole(getAcc("aria_tooltip"), ROLE_TOOLTIP);
    testRole(getAcc("aria_tooltip_mixed"), ROLE_TOOLTIP);
    testRole(getAcc("aria_tree"), ROLE_OUTLINE);
    testRole(getAcc("aria_tree_mixed"), ROLE_OUTLINE);
    testRole(getAcc("aria_treegrid"), ROLE_TREE_TABLE);
    testRole(getAcc("aria_treegrid_mixed"), ROLE_TREE_TABLE);
  },
  { chrome: true, topLevel: true }
);

/**
 * Test ARIA landmarks
 */

addAccessibleTask(
  `  <article id="articlemain" role="main">a main area</article>
  <article id="articlemain_mixed" role="mAIn">a main area</article>
  <article id="articleform" role="form">a form area</article>
  <article id="articleform_mixed" role="fORm">a form area</article>
  <article id="articleform_label" aria-label="form" role="form">a form area</article>
  <article id="articleform_label_mixed" aria-label="form" role="fORm">a form area</article>

  <div id="testArticle" role="article" title="Test article">
    <p>This is a paragraph inside the article.</p>
  </div>

  <div id="testArticle_mixed" role="aRTICLe" title="Test article">
    <p>This is a paragraph inside the article.</p>
  </div>

  <!-- "live" roles -->
  <table role="log" id="log_table">
    <tr><td>Table based log</td></tr>
  </table>
  <table role="LOG" id="log_table_mixed">
    <tr><td>Table based log</td></tr>
  </table>
  <h1 role="marquee" id="marquee_h1">marquee</h1>
  <h1 role="MARQUEE" id="marquee_h1_mixed">marquee</h1>
  <div role="timer" id="timer_div">timer</div>
  <div role="TIMER" id="timer_div_mixed">timer</div>

  <!-- landmarks -->
  <div role="application" id="application">application</div>
  <div role="aPPLICATIOn" id="application_mixed">application</div>
  <div role="form" id="form">form</div>
  <div role="fORm" id="form_mixed">form</div>
  <div role="form" id="form_label" aria-label="form">form</div>
  <div role="fORm" id="form_label_mixed" aria-label="form">form</div>

  <!-- weak landmarks -->
  <div role="banner" id="banner">banner</div>
  <div role="bANNEr" id="banner_mixed">banner</div>
  <div role="complementary" id="complementary">complementary</div>
  <div role="cOMPLEMENTARy" id="complementary_mixed">complementary</div>
  <div role="contentinfo" id="contentinfo">contentinfo</div>
  <div role="cONTENTINFo" id="contentinfo_mixed">contentinfo</div>
  <div role="main" id="main">main</div>
  <div role="mAIN" id="main_mixed">main</div>
  <div role="navigation" id="navigation">navigation</div>
  <div role="nAVIGATIOn" id="navigation_mixed">navigation</div>
  <div role="search" id="search">search</div>
  <div role="sEARCh" id="search_mixed">search</div>

  <!-- landmarks are tables -->
  <table role="application" id="application_table">application table
    <tr><td>hi</td></tr></table>
  <table role="aPPLICATIOn" id="application_table_mixed">application table
    <tr><td>hi</td></tr></table>
  <table role="banner" id="banner_table">banner table
    <tr><td>hi</td></tr></table>
  <table role="bANNEr" id="banner_table_mixed">banner table
    <tr><td>hi</td></tr></table>
  <table role="complementary" id="complementary_table">complementary table
    <tr><td>hi</td></tr></table>
  <table role="cOMPLEMENTARy" id="complementary_table_mixed">complementary table
    <tr><td>hi</td></tr></table>    
  <table role="contentinfo" id="contentinfo_table">contentinfo table
    <tr><td>hi</td></tr></table>
  <table role="cONTENTINFo" id="contentinfo_table_mixed">contentinfo table
    <tr><td>hi</td></tr></table>    
  <table role="main" id="main_table">main table
    <tr><td>hi</td></tr></table>
  <table role="mAIn" id="main_table_mixed">main table
    <tr><td>hi</td></tr></table>    
  <table role="navigation" id="navigation_table">navigation table
    <tr><td>hi</td></tr></table>
  <table role="nAVIGATIOn" id="navigation_table_mixed">navigation table
    <tr><td>hi</td></tr></table>    
  <table role="search" id="search_table">search table
    <tr><td>hi</td></tr></table>
  <table role="sEARCh" id="search_table_mixed">search table
    <tr><td>hi</td></tr></table>
`,
  async function testLandMarks(browser, accDoc) {
    let getAcc = id => findAccessibleChildByID(accDoc, id);
    // Note:
    // The phrase "weak foo" here means that there is no good foo-to-gecko
    // role mapping. Similarly "strong foo" means there is a good foo-to-
    // gecko role mapping.

    testRole(getAcc("articlemain"), ROLE_LANDMARK);
    testRole(getAcc("articlemain_mixed"), ROLE_LANDMARK);
    testRole(getAcc("articleform"), ROLE_ARTICLE);
    testRole(getAcc("articleform_mixed"), ROLE_ARTICLE);
    testRole(getAcc("articleform_label"), ROLE_FORM);
    testRole(getAcc("articleform_label_mixed"), ROLE_FORM);

    // Test article exposed as article
    testRole(getAcc("testArticle"), ROLE_ARTICLE);
    testRole(getAcc("testArticle_mixed"), ROLE_ARTICLE);

    // weak roles that are forms of "live regions"
    testRole(getAcc("log_table"), ROLE_TABLE);
    testRole(getAcc("log_table_mixed"), ROLE_TABLE);
    testRole(getAcc("timer_div"), ROLE_SECTION);
    testRole(getAcc("timer_div_mixed"), ROLE_SECTION);

    // other roles that are forms of "live regions"
    testRole(getAcc("marquee_h1"), ROLE_ANIMATION);
    testRole(getAcc("marquee_h1_mixed"), ROLE_ANIMATION);

    // strong landmark
    testRole(getAcc("application"), ROLE_APPLICATION);
    testRole(getAcc("application_mixed"), ROLE_APPLICATION);
    testRole(getAcc("form"), ROLE_SECTION);
    testRole(getAcc("form_mixed"), ROLE_SECTION);
    testRole(getAcc("form_label"), ROLE_FORM);
    testRole(getAcc("form_label_mixed"), ROLE_FORM);
    testRole(getAcc("application_table"), ROLE_APPLICATION);
    testRole(getAcc("application_table_mixed"), ROLE_APPLICATION);

    function testLandmark(landmarkId) {
      testRole(getAcc(landmarkId), ROLE_LANDMARK);
      testRole(getAcc(`${landmarkId}_mixed`), ROLE_LANDMARK);

      let landmarkTable = getAcc(`${landmarkId}_table`);
      testRole(landmarkTable, ROLE_LANDMARK);
      ok(
        !!landmarkTable.QueryInterface(nsIAccessibleTable),
        "landmarked table should have nsIAccessibleTable"
      );

      let landmarkTableMixed = getAcc(`${landmarkId}_table_mixed`);
      testRole(landmarkTableMixed, ROLE_LANDMARK);
      ok(
        !!landmarkTableMixed.QueryInterface(nsIAccessibleTable),
        "landmarked table should have nsIAccessibleTable"
      );
      is(landmarkTableMixed.getCellAt(00).firstChild.name, "hi""no cell");
    }

    testLandmark("banner");
    testLandmark("complementary");
    testLandmark("contentinfo");
    testLandmark("main");
    testLandmark("navigation");
    testLandmark("search");
  },
  { chrome: true, topLevel: true }
);

/**
 * Test abstract roles.
 * User agents must not map abstract roles to anything but a generic "section" gecko role.
 */

addAccessibleTask(
  `<!-- test abstract base type roles -->
  <div role="composite" id="composite">composite</div>
  <div role="cOMPOSITe" id="composite_mixed">composite</div>
  <div role="landmark" id="landmark">landmark</div>
  <div role="lANDMARk" id="landmark_mixed">landmark</div>
  <div role="roletype" id="roletype">roletype</div>
  <div role="rOLETYPe" id="roletype_mixed">roletype</div>
  <div role="structure" id="structure">structure</div>
  <div role="sTRUCTURe" id="structure_mixed">structure</div>
  <div role="widget" id="widget">widget</div>
  <div role="wIDGEt" id="widget_mixed">widget</div>
  <div role="window" id="window">window</div>
  <div role="wINDOw" id="window_mixed">window</div>
  <!-- test abstract input roles -->
  <div role="input" id="input">input</div>
  <div role="iNPUt" id="input_mixed">input</div>
  <div role="range" id="range">range</div>
  <div role="rANGe" id="range_mixed">range</div>
  <div role="select" id="select">select</div>
  <div role="sELECt" id="select_mixed">select</div>
  <!-- test abstract structure roles -->
  <div role="section" id="section">section</div>
  <div role="sECTIOn" id="section_mixed">section</div>
  <div role="sectionhead" id="sectionhead">sectionhead</div>
  <div role="sECTIONHEAd" id="sectionhead_mixed">sectionhead</div>
  <div role="command" id="command">command</div>
  <div role="cOmManD" id="command_mixed">command</div>
`,
  async function testAbstract(browser, accDoc) {
    let getAcc = id => findAccessibleChildByID(accDoc, id);

    function testAbstractRole(id) {
      testRole(getAcc(id), ROLE_SECTION);
      testRole(getAcc(`${id}_mixed`), ROLE_SECTION);
    }

    testAbstractRole("composite");
    testAbstractRole("landmark");
    testAbstractRole("structure");
    testAbstractRole("widget");
    testAbstractRole("window");
    testAbstractRole("input");
    testAbstractRole("range");
    testAbstractRole("select");
    testAbstractRole("section");
    testAbstractRole("sectionhead");
    testAbstractRole("command");
  },
  { chrome: true, topLevel: true }
);

/**
 * Test child roles dependent on ancestor role presence
 */

addAccessibleTask(
  `<table role="button">
    <tr id="buttontable_row">
      <td id="buttontable_cell">cell</td>
    </tr>
  </table>
  <table role="bUTTOn">
    <tr id="buttontable_row_mixed">
      <td id="buttontable_cell_mixed">cell</td>
    </tr>
  </table>

    <!-- roles transformed by ARIA roles of ancestors -->
  <table role="grid">
    <tr>
      <td id="implicit_gridcell">foo</td>
    </tr>
  </table>
  <table role="gRId">
    <tr>
      <td id="implicit_gridcell_mixed">foo</td>
    </tr>
  </table>

  <!-- child roles dependent on ancestor role presence -->
  <div role="grid">
    <div role="row">
      <span id="aria_columnheader" role="columnheader"></span>
      <span id="aria_columnheader_mixed" role="cOLUMNHEADEr"></span>
      <span id="aria_gridcell" role="gridcell"></span>
      <span id="aria_gridcell_mixed" role="gRIDCELl"></span>
      <span id="aria_rowheader" role="rowheader"></span>
      <span id="aria_rowheader_mixed" role="rOWHEADEr"></span>
    </div>
  </div>
  <div role="list">
    <span id="aria_listitem" role="listitem"></span>
    <span id="aria_listitem_mixed" role="lISTITEm"></span>
  </div>
  <div role="menu">
    <span id="aria_menuitem" role="menuitem"></span>
    <span id="aria_menuitem_mixed" role="mENUITEm"></span>
    <span id="aria_menuitemcheckbox" role="menuitemcheckbox"></span>
    <span id="aria_menuitemcheckbox_mixed" role="mENUITEMCHECKBOx"></span>
    <span id="aria_menuitemradio" role="menuitemradio"></span>
    <span id="aria_menuitemradio_mixed" role="mENUITEMRADIo"></span>
  </div>
  <div role="table">
    <span id="aria_row" role="row"></span>
    <span id="aria_row_mixed" role="rOw"></span>
  </div>
  <div role="tablist">
    <span id="aria_tab" role="tab"></span>
    <span id="aria_tab_mixed" role="tAb"></span>
  </div>
  <div role="tree">
    <span id="aria_treeitem" role="treeitem"></span>
    <span id="aria_treeitem_mixed" role="tREEITEm"></span>
  </div>
  <div role="listbox">
    <span id="listOption" role="option"></span>
  </div>
  <div role="combobox">
    <div role="listbox">
      <span id="comboOption1" role="option"></span>
      <div role="group">
        <span id="comboOption2" role="option"></span>
      </div>
    </div>
  </div>

  <!-- roles transformed by ARIA state attributes -->
  <button aria-pressed="true" id="togglebutton"></button>
  <button aria-pressed="tRUe" id="togglebutton_mixed"></button>

  `,
  async function testAncestorDependent(browser, accDoc) {
    let getAcc = id => findAccessibleChildByID(accDoc, id);

    testRole(getAcc("buttontable_row"), ROLE_TEXT_CONTAINER);
    testRole(getAcc("buttontable_row_mixed"), ROLE_TEXT_CONTAINER);
    testRole(getAcc("buttontable_cell"), ROLE_TEXT_CONTAINER);
    testRole(getAcc("buttontable_cell_mixed"), ROLE_TEXT_CONTAINER);

    testRole(getAcc("implicit_gridcell"), ROLE_GRID_CELL);
    testRole(getAcc("implicit_gridcell_mixed"), ROLE_GRID_CELL);

    testRole(getAcc("aria_columnheader"), ROLE_COLUMNHEADER);
    testRole(getAcc("aria_columnheader_mixed"), ROLE_COLUMNHEADER);
    testRole(getAcc("aria_gridcell"), ROLE_GRID_CELL);
    testRole(getAcc("aria_gridcell_mixed"), ROLE_GRID_CELL);
    testRole(getAcc("aria_rowheader"), ROLE_ROWHEADER);
    testRole(getAcc("aria_rowheader_mixed"), ROLE_ROWHEADER);
    testRole(getAcc("aria_listitem"), ROLE_LISTITEM);
    testRole(getAcc("aria_listitem_mixed"), ROLE_LISTITEM);
    testRole(getAcc("aria_menuitem"), ROLE_MENUITEM);
    testRole(getAcc("aria_menuitem_mixed"), ROLE_MENUITEM);
    testRole(getAcc("aria_menuitemcheckbox"), ROLE_CHECK_MENU_ITEM);
    testRole(getAcc("aria_menuitemcheckbox_mixed"), ROLE_CHECK_MENU_ITEM);
    testRole(getAcc("aria_menuitemradio"), ROLE_RADIO_MENU_ITEM);
    testRole(getAcc("aria_menuitemradio_mixed"), ROLE_RADIO_MENU_ITEM);
    testRole(getAcc("aria_row"), ROLE_ROW);
    testRole(getAcc("aria_row_mixed"), ROLE_ROW);
    testRole(getAcc("aria_tab"), ROLE_PAGETAB);
    testRole(getAcc("aria_tab_mixed"), ROLE_PAGETAB);
    testRole(getAcc("aria_treeitem"), ROLE_OUTLINEITEM);
    testRole(getAcc("aria_treeitem_mixed"), ROLE_OUTLINEITEM);
    testRole(getAcc("listOption"), ROLE_OPTION);
    testRole(getAcc("comboOption1"), ROLE_COMBOBOX_OPTION);
    testRole(getAcc("comboOption2"), ROLE_COMBOBOX_OPTION);

    // roles transformed by ARIA state attributes
    testRole(getAcc("togglebutton"), ROLE_TOGGLE_BUTTON);
    testRole(getAcc("togglebutton_mixed"), ROLE_TOGGLE_BUTTON);
  },
  { chrome: true, topLevel: true }
);

/**
 * Test misc quirks
 */

addAccessibleTask(
  `<!-- take the first known mappable role -->
  <div role="wiggly:worm abc123 button" id="unknown_roles">worm button</div>
  <div role="wiggly:worm abc123 bUTTOn" id="unknown_roles_mixed">worm button</div>

  <!-- misc roles -->
  <div role="note" id="note">note</div>
  <div role="nOTe" id="note_mixed">note</div>
  <div role="scrollbar" id="scrollbar">scrollbar</div>
  <div role="sCROLLBAr" id="scrollbar_mixed">scrollbar</div>

  <div id="dir" role="directory">
    <div role="listitem">A</div>
    <div role="listitem">B</div>
    <div role="listitem">C</div>
  </div>

  <div id="dir_mixed" role="dIRECTORy">
    <div role="listitem">A</div>
    <div role="listitem">B</div>
    <div role="listitem">C</div>
  </div>`,
  async function testRoleQuirks(browser, accDoc) {
    let getAcc = id => findAccessibleChildByID(accDoc, id);

    // ////////////////////////////////////////////////////////////////////////
    // ignore unknown roles, take first known
    testRole(getAcc("unknown_roles"), ROLE_PUSHBUTTON);
    testRole(getAcc("unknown_roles_mixed"), ROLE_PUSHBUTTON);

    // ////////////////////////////////////////////////////////////////////////
    // misc roles
    testRole(getAcc("note"), ROLE_NOTE);
    testRole(getAcc("note_mixed"), ROLE_NOTE);
    testRole(getAcc("scrollbar"), ROLE_SCROLLBAR);
    testRole(getAcc("scrollbar_mixed"), ROLE_SCROLLBAR);
    testRole(getAcc("dir"), ROLE_LIST);
    testRole(getAcc("dir_mixed"), ROLE_LIST);
  },
  { chrome: true, topLevel: true }
);

/**
 * Test equations
 */

addAccessibleTask(
  `<p>Image:
    <img id="img_eq" role="math" src="foo" alt="x^2 + y^2 + z^2">
  </p>

  <p>Image:
    <img id="img_eq_mixed" role="mATh" src="foo" alt="x^2 + y^2 + z^2">
  </p>

  <p>Text:
    <span id="txt_eq" role="math" title="x^2 + y^2 + z^2">x<sup>2</sup> +
      y<sup>2</sup> + z<sup>2</sup></span>
  </p>
  <p>Text:
    <span id="txt_eq_mixed" role="mATh" title="x^2 + y^2 + z^2">x<sup>2</sup> +
      y<sup>2</sup> + z<sup>2</sup></span>
  </p>

  `,
  async function testRoleQuirks(browser, accDoc) {
    let getAcc = id => findAccessibleChildByID(accDoc, id);
    // Test equation image
    testRole(getAcc("img_eq"), ROLE_FLAT_EQUATION);
    testRole(getAcc("img_eq_mixed"), ROLE_FLAT_EQUATION);

    // Test textual equation
    testRole(getAcc("txt_eq"), ROLE_FLAT_EQUATION);
    testRole(getAcc("txt_eq_mixed"), ROLE_FLAT_EQUATION);
  },
  { chrome: true, topLevel: true }
);

/**
 * Test doc role changes
 */

addAccessibleTask(
  ``,
  async function testRoleQuirks(browser, accDoc) {
    await invokeSetAttribute(browser, "body""role""application");
    await untilCacheIs(
      () => accDoc.role,
      ROLE_APPLICATION,
      "Doc role is 'application'"
    );

    await invokeSetAttribute(browser, "body""role""dialog");
    await untilCacheIs(() => accDoc.role, ROLE_DIALOG, "Doc role is 'dialog'");

    // Other roles aren't valid on body elements.

    await invokeSetAttribute(browser, "body""role""document");
    await untilCacheIs(
      () => accDoc.role,
      ROLE_DOCUMENT,
      "Doc role is 'document'"
    );

    await invokeSetAttribute(browser, "body""role""button");
    await untilCacheIs(
      () => accDoc.role,
      ROLE_DOCUMENT,
      "Doc role is 'document'"
    );

    // ... but mixed roles should still function like their regular variants

    await invokeSetAttribute(browser, "body""role""ApPLiCaTiOn");
    await untilCacheIs(
      () => accDoc.role,
      ROLE_APPLICATION,
      "Doc role is 'application'"
    );

    await invokeSetAttribute(browser, "body""role""dIaLoG");
    await untilCacheIs(() => accDoc.role, ROLE_DIALOG, "Doc role is 'dialog'");
  },
  { chrome: true, topLevel: true }
);

/**
 * Test re-parented option's role gets recomputed.
 */

addAccessibleTask(
  `<div role="combobox"><div id="listbox" role="listbox"></div></div>
  <div role="option" id="option">Bananas</div>`,
  async function testRelocation(browser, accDoc) {
    is(
      findAccessibleChildByID(accDoc, "option").role,
      ROLE_OPTION,
      "option outside of combobox should have option role"
    );

    let evt = waitForEvent(EVENT_INNER_REORDER, "listbox");
    await invokeSetAttribute(browser, "listbox""aria-owns""option");
    await evt;

    is(
      findAccessibleChildByID(accDoc, "option").role,
      ROLE_COMBOBOX_OPTION,
      "option in combobox should have combobox option role"
    );
  },
  { chrome: true, topLevel: true }
);

/**
 * Test that a menuitem outside of a menu still gets a role of menuitem.
 * Strictly speaking, this is an authoring error, but the spec allows browsers
 * to expose the role regardless. Unfortunately, some sites rely on this,
 * including Google Docs, so this test ensures we don't regress those.
 */

addAccessibleTask(
  `
<div role="menubar">
  <div role="menuitem" aria-owns="child"></div>
</div>
<div role="menu">
  <div id="child" role="menuitem">child</div>
</div>
  `,
  async function testOrphanedMenuitem(browser, docAcc) {
    const child = findAccessibleChildByID(docAcc, "child");
    testRole(child, ROLE_MENUITEM);
  },
  { chrome: true, topLevel: true }
);

Messung V0.5 in Prozent
C=97 H=100 G=98

¤ Dauer der Verarbeitung: 0.12 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Statistik
#Sources=277311
#Domains=655579