diff options
Diffstat (limited to 'accessible/tests/browser/e10s/browser_caching_description.js')
-rw-r--r-- | accessible/tests/browser/e10s/browser_caching_description.js | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/accessible/tests/browser/e10s/browser_caching_description.js b/accessible/tests/browser/e10s/browser_caching_description.js new file mode 100644 index 000000000..18ee58bd0 --- /dev/null +++ b/accessible/tests/browser/e10s/browser_caching_description.js @@ -0,0 +1,164 @@ +/* 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'; + +/* global EVENT_DESCRIPTION_CHANGE, EVENT_NAME_CHANGE, EVENT_REORDER */ + +loadScripts({ name: 'name.js', dir: MOCHITESTS_DIR }); + +/** + * Test data has the format of: + * { + * desc {String} description for better logging + * expected {String} expected description value for a given accessible + * attrs {?Array} an optional list of attributes to update + * waitFor {?Array} an optional list of accessible events to wait for when + * attributes are updated + * } + */ +const tests = [{ + desc: 'No description when there are no @alt, @title and @aria-describedby', + expected: '' +}, { + desc: 'Description from @aria-describedby attribute', + attrs: [{ + attr: 'aria-describedby', + value: 'description' + }], + waitFor: [{ eventType: EVENT_DESCRIPTION_CHANGE, id: 'image' }], + expected: 'aria description' +}, { + desc: 'No description from @aria-describedby since it is the same as the ' + + '@alt attribute which is used as the name', + attrs: [{ + attr: 'alt', + value: 'aria description' + }], + waitFor: [{ eventType: EVENT_REORDER, id: 'body' }], + expected: '' +}, { + desc: 'Description from @aria-describedby attribute when @alt and ' + + '@aria-describedby are not the same', + attrs: [{ + attr: 'aria-describedby', + value: 'description2' + }], + waitFor: [{ eventType: EVENT_DESCRIPTION_CHANGE, id: 'image' }], + expected: 'another description' +}, { + desc: 'Description from @aria-describedby attribute when @title (used for ' + + 'name) and @aria-describedby are not the same', + attrs: [{ + attr: 'alt' + }, { + attr: 'title', + value: 'title' + }], + waitFor: [{ eventType: EVENT_REORDER, id: 'body' }], + expected: 'another description' +}, { + desc: 'No description from @aria-describedby since it is the same as the ' + + '@title attribute which is used as the name', + attrs: [{ + attr: 'title', + value: 'another description' + }], + waitFor: [{ eventType: EVENT_NAME_CHANGE, id: 'image' }], + expected: '' +}, { + desc: 'No description with only @title attribute which is used as the name', + attrs: [{ + attr: 'aria-describedby' + }], + waitFor: [{ eventType: EVENT_DESCRIPTION_CHANGE, id: 'image' }], + expected: '' +}, { + desc: 'Description from @title attribute when @alt and @atitle are not the ' + + 'same', + attrs: [{ + attr: 'alt', + value: 'aria description' + }], + waitFor: [{ eventType: EVENT_REORDER, id: 'body' }], + expected: 'another description' +}, { + desc: 'No description from @title since it is the same as the @alt ' + + 'attribute which is used as the name', + attrs: [{ + attr: 'alt', + value: 'another description' + }], + waitFor: [{ eventType: EVENT_NAME_CHANGE, id: 'image' }], + expected: '' +}, { + desc: 'No description from @aria-describedby since it is the same as the ' + + '@alt (used for name) and @title attributes', + attrs: [{ + attr: 'aria-describedby', + value: 'description2' + }], + waitFor: [{ eventType: EVENT_DESCRIPTION_CHANGE, id: 'image' }], + expected: '' +}, { + desc: 'Description from @aria-describedby attribute when it is different ' + + 'from @alt (used for name) and @title attributes', + attrs: [{ + attr: 'aria-describedby', + value: 'description' + }], + waitFor: [{ eventType: EVENT_DESCRIPTION_CHANGE, id: 'image' }], + expected: 'aria description' +}, { + desc: 'No description from @aria-describedby since it is the same as the ' + + '@alt attribute (used for name) but different from title', + attrs: [{ + attr: 'alt', + value: 'aria description' + }], + waitFor: [{ eventType: EVENT_NAME_CHANGE, id: 'image' }], + expected: '' +}, { + desc: 'Description from @aria-describedby attribute when @alt (used for ' + + 'name) and @aria-describedby are not the same but @title and ' + + 'aria-describedby are', + attrs: [{ + attr: 'aria-describedby', + value: 'description2' + }], + waitFor: [{ eventType: EVENT_DESCRIPTION_CHANGE, id: 'image' }], + expected: 'another description' +}]; + +/** + * Test caching of accessible object description + */ +addAccessibleTask(` + <p id="description">aria description</p> + <p id="description2">another description</p> + <img id="image" />`, + function*(browser, accDoc) { + let imgAcc = findAccessibleChildByID(accDoc, 'image'); + + for (let { desc, waitFor, attrs, expected } of tests) { + info(desc); + let onUpdate; + if (waitFor) { + onUpdate = waitForMultipleEvents(waitFor); + } + if (attrs) { + for (let { attr, value } of attrs) { + yield invokeSetAttribute(browser, 'image', attr, value); + } + } + yield onUpdate; + // When attribute change (alt) triggers reorder event, accessible will + // become defunct. + if (isDefunct(imgAcc)) { + imgAcc = findAccessibleChildByID(accDoc, 'image'); + } + testDescr(imgAcc, expected); + } + } +); |