Skip to content
This repository has been archived by the owner on Mar 20, 2024. It is now read-only.

Commit

Permalink
feat(eyes-common, eyes-sdk-core, visual-grid-client): Added accessibi…
Browse files Browse the repository at this point in the history
…lityLevel to match request.
  • Loading branch information
danielschwartz85 committed Sep 12, 2019
1 parent 4998285 commit df2a383
Show file tree
Hide file tree
Showing 18 changed files with 244 additions and 19 deletions.
25 changes: 25 additions & 0 deletions packages/eyes-common/lib/config/AccessibilityLevel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
'use strict';

/**
* The extent in which to check the image visual accessibility level.
*
* @readonly
* @enum {string}
*/
const AccessibilityLevel = {
/**
* No accessibility - default level.
*/
None: 'None',
/**
* Low accessibility level.
*/
AA: 'AA',
/**
* Highest accessibility level.
*/
AAA: 'AAA',
};

Object.freeze(AccessibilityLevel);
exports.AccessibilityLevel = AccessibilityLevel;
18 changes: 18 additions & 0 deletions packages/eyes-common/lib/config/Configuration.js
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,24 @@ class Configuration {
return this;
}

/**
* @return {AccessibilityLevel} - The test-wide accessibility level.
*/
getAccessibilityLevel() {
return this._defaultMatchSettings.getAccessibilityLevel();
}

/**
* The test-wide accessibility level to use when checking application screenshot.
*
* @param {AccessibilityLevel} value - The test-wide accessibility level to use when checking application screenshot.
* @return {this}
*/
setAccessibilityLevel(value) {
this._defaultMatchSettings.setAccessibilityLevel(value);
return this;
}

/**
* @return {boolean} - The test-wide useDom to use in match requests.
*/
Expand Down
24 changes: 23 additions & 1 deletion packages/eyes-common/lib/config/ImageMatchSettings.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ const { ArgumentGuard } = require('../utils/ArgumentGuard');
const { GeneralUtils } = require('../utils/GeneralUtils');
const { TypeUtils } = require('../utils/TypeUtils');
const { MatchLevel } = require('./MatchLevel');
const { AccessibilityLevel } = require('./AccessibilityLevel');
const { ExactMatchSettings } = require('./ExactMatchSettings');

const DEFAULT_VALUES = {
matchLevel: MatchLevel.Strict,
accessibilityLevel: AccessibilityLevel.None,
ignoreCaret: true,
useDom: false,
enablePatterns: false,
Expand All @@ -30,13 +32,15 @@ class ImageMatchSettings {
* @param {Region[]} [strict]
* @param {Region[]} [content]
* @param {FloatingMatchSettings[]} [floating]
* @param {AccessibilityLevel} [accessibilityLevel]
*/
constructor({ matchLevel, exact, ignoreCaret, useDom, enablePatterns, ignoreDisplacements, ignore, layout, strict, content, floating } = {}) {
constructor({ matchLevel, exact, ignoreCaret, useDom, enablePatterns, ignoreDisplacements, ignore, layout, strict, content, floating, accessibilityLevel } = {}) {
if (arguments.length > 1) {
throw new TypeError('Please, use object as a parameter to the constructor!');
}

ArgumentGuard.isValidEnumValue(matchLevel, MatchLevel, false);
ArgumentGuard.isValidEnumValue(accessibilityLevel, AccessibilityLevel, false);
ArgumentGuard.isBoolean(ignoreCaret, 'ignoreCaret', false);
ArgumentGuard.isBoolean(useDom, 'useDom', false);
ArgumentGuard.isBoolean(enablePatterns, 'enablePatterns', false);
Expand All @@ -49,6 +53,7 @@ class ImageMatchSettings {
ArgumentGuard.isValidType(exact, ExactMatchSettings, false);

this._matchLevel = TypeUtils.getOrDefault(matchLevel, DEFAULT_VALUES.matchLevel);
this._accessibilityLevel = TypeUtils.getOrDefault(accessibilityLevel, DEFAULT_VALUES.accessibilityLevel);
this._ignoreCaret = TypeUtils.getOrDefault(ignoreCaret, DEFAULT_VALUES.ignoreCaret);
this._useDom = TypeUtils.getOrDefault(useDom, DEFAULT_VALUES.useDom);
this._enablePatterns = TypeUtils.getOrDefault(enablePatterns, DEFAULT_VALUES.enablePatterns);
Expand Down Expand Up @@ -84,6 +89,23 @@ class ImageMatchSettings {
this._matchLevel = value;
}

// noinspection JSUnusedGlobalSymbols
/**
* @return {AccessibilityLevel} - The accessablity level to use.
*/
getAccessibilityLevel() {
return this._accessibilityLevel;
}

// noinspection JSUnusedGlobalSymbols
/**
* @param {AccessibilityLevel} value - The accessablity level to use.
*/
setAccessibilityLevel(value) {
ArgumentGuard.isValidEnumValue(value, AccessibilityLevel);
this._accessibilityLevel = value;
}

// noinspection JSUnusedGlobalSymbols
/**
* @return {ExactMatchSettings} - The additional threshold params when the {@code Exact} match level is used, if any.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ describe('Configuration', () => {

assert.deepStrictEqual(configuration.toJSON().defaultMatchSettings, {
matchLevel: 'Content',
accessibilityLevel: 'None',
enablePatterns: true,
ignoreDisplacements: true,
ignoreCaret: false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ describe('ImageMatchSettings', () => {
describe('toJSON()', () => {
it('empty instance', () => {
const ims = new ImageMatchSettings();
const expectedSerialization = '{"matchLevel":"Strict","ignoreCaret":true,"useDom":false,"enablePatterns":false,' +
const expectedSerialization = '{"matchLevel":"Strict","accessibilityLevel":"None","ignoreCaret":true,"useDom":false,"enablePatterns":false,' +
'"ignoreDisplacements":false,"ignore":[],"layout":[],"strict":[],"content":[],"floating":[]}';
assert.strictEqual(JSON.stringify(ims), expectedSerialization, 'ImageMatchSettings serialization does not match!');
});

it('with modified exact and ignore caret', () => {
const ims = new ImageMatchSettings({ matchLevel: MatchLevel.Content, exact: new ExactMatchSettings(), ignoreCaret: true });
const expectedSerialization = '{"matchLevel":"Content","ignoreCaret":true,"useDom":false,"enablePatterns":false,' +
const expectedSerialization = '{"matchLevel":"Content","accessibilityLevel":"None","ignoreCaret":true,"useDom":false,"enablePatterns":false,' +
'"ignoreDisplacements":false,"exact":{"minDiffIntensity":0,"minDiffWidth":0,"minDiffHeight":0,"matchThreshold":0},' +
'"ignore":[],"layout":[],"strict":[],"content":[],"floating":[]}';
assert.strictEqual(JSON.stringify(ims), expectedSerialization, 'ImageMatchSettings serialization does not match!');
Expand All @@ -24,15 +24,15 @@ describe('ImageMatchSettings', () => {
it('with ignore regions', () => {
const ims = new ImageMatchSettings();
ims.setIgnoreRegions([new Region(10, 20, 30, 40)]);
const expectedSerialization = '{"matchLevel":"Strict","ignoreCaret":true,"useDom":false,"enablePatterns":false,' +
const expectedSerialization = '{"matchLevel":"Strict","accessibilityLevel":"None","ignoreCaret":true,"useDom":false,"enablePatterns":false,' +
'"ignoreDisplacements":false,"ignore":[{"left":10,"top":20,"width":30,"height":40,"coordinatesType":' +
'"SCREENSHOT_AS_IS"}],"layout":[],"strict":[],"content":[],"floating":[]}';
assert.strictEqual(JSON.stringify(ims), expectedSerialization, 'ImageMatchSettings serialization does not match!');
});

it('with modified useDom and enablePatterns', () => {
const ims = new ImageMatchSettings({ useDom: true, enablePatterns: false });
const expectedSerialization = '{"matchLevel":"Strict","ignoreCaret":true,"useDom":true,"enablePatterns":false,' +
const expectedSerialization = '{"matchLevel":"Strict","accessibilityLevel":"None","ignoreCaret":true,"useDom":true,"enablePatterns":false,' +
'"ignoreDisplacements":false,"ignore":[],"layout":[],"strict":[],"content":[],"floating":[]}';
assert.strictEqual(JSON.stringify(ims), expectedSerialization, 'ImageMatchSettings serialization does not match!');
});
Expand Down
16 changes: 16 additions & 0 deletions packages/eyes-sdk-core/lib/EyesAbstract.js
Original file line number Diff line number Diff line change
Expand Up @@ -639,6 +639,22 @@ class EyesAbstract {
return this._configuration.getDefaultMatchSettings().getMatchLevel();
}

/**
* The test-wide accessibilityLevel level to use when checking application screenshot.
*
* @param {AccessibilityLevel} accessibilityLevel - The test-wide accessibilityLevel level to use when checking application screenshot.
*/
setAccessibilityLevel(accessibilityLevel) {
this._configuration.getDefaultMatchSettings().setAccessibilityLevel(accessibilityLevel);
}

/**
* @return {AccessibilityLevel} - The test-wide accessibilityLevel level.
*/
getAccessibilityLevel() {
return this._configuration.getDefaultMatchSettings().getAccessibilityLevel();
}

/**
* The test-wide useDom to use.
*
Expand Down
6 changes: 6 additions & 0 deletions packages/eyes-sdk-core/lib/MatchWindowTask.js
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,11 @@ class MatchWindowTask {
matchLevel = this._eyes.getDefaultMatchSettings().getMatchLevel();
}

let accessibilityLevel = checkSettings.getAccessibilityLevel();
if (TypeUtils.isNull(accessibilityLevel)) {
accessibilityLevel = this._eyes.getDefaultMatchSettings().getAccessibilityLevel();
}

let ignoreCaret = checkSettings.getIgnoreCaret();
if (TypeUtils.isNull(ignoreCaret)) {
ignoreCaret = this._eyes.getDefaultMatchSettings().getIgnoreCaret();
Expand All @@ -151,6 +156,7 @@ class MatchWindowTask {

imageMatchSettings = new ImageMatchSettings({
matchLevel,
accessibilityLevel,
exact: null,
ignoreCaret,
useDom,
Expand Down
22 changes: 22 additions & 0 deletions packages/eyes-sdk-core/lib/fluent/CheckSettings.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ class CheckSettings {
this._sendDom = undefined;
/** @type {MatchLevel} */
this._matchLevel = undefined;
/** @type {AccessibilityLevel} */
this._accessibilityLevel = undefined;
/** @type {boolean} */
this._useDom = undefined;
/** @type {boolean} */
Expand Down Expand Up @@ -171,6 +173,26 @@ class CheckSettings {
return this._matchLevel;
}

// noinspection JSUnusedGlobalSymbols
/**
* Set the accessibilityLevel level for the screenshot.
*
* @param {AccessibilityLevel} accessibilityLevel - The accessibilityLevel level to use.
* @return {this} - This instance of the settings object.
*/
accessibilityLevel(accessibilityLevel) {
this._accessibilityLevel = accessibilityLevel;
return this;
}

/**
* @ignore
* @return {AccessibilityLevel}
*/
getAccessibilityLevel() {
return this._accessibilityLevel;
}

// noinspection JSUnusedGlobalSymbols
/**
* Defines if to detect and ignore a blinking caret in the screenshot.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ describe('MatchSingleWindowTask', () => {

it('should return correct default values', async () => {
const ms = await task.createImageMatchSettings(checkSettings, null);
const expectedSerialization = '{"matchLevel":"Strict","ignoreCaret":false,"useDom":true,"enablePatterns":false,' +
const expectedSerialization = '{"matchLevel":"Strict","accessibilityLevel":"None","ignoreCaret":false,"useDom":true,"enablePatterns":false,' +
'"ignoreDisplacements":false,"exact":null,"ignore":[],"layout":[],"strict":[],"content":[],"floating":[]}';
assert.strictEqual(JSON.stringify(ms), expectedSerialization, 'ImageMatchSettings serialization does not match!');
});
Expand Down
2 changes: 1 addition & 1 deletion packages/eyes-sdk-core/test/unit/MatchWindowTask.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ describe('MatchWindowTask', () => {

it('should return correct default values', async () => {
const ms = await task.createImageMatchSettings(checkSettings, null);
const expectedSerialization = '{"matchLevel":"Strict","ignoreCaret":false,"useDom":false,"enablePatterns":false,' +
const expectedSerialization = '{"matchLevel":"Strict","accessibilityLevel":"None","ignoreCaret":false,"useDom":false,"enablePatterns":false,' +
'"ignoreDisplacements":false,"exact":null,"ignore":[],"layout":[],"strict":[],"content":[],"floating":[]}';
assert.strictEqual(JSON.stringify(ms), expectedSerialization, 'ImageMatchSettings serialization does not match!');
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ describe('SessionStartInfo', () => {
const expectedSerialization = '{"agentId":"some agent","sessionType":"SEQUENTIAL","appIdOrName":"my app",' +
`"verId":"1.0.0","scenarioIdOrName":"some scenario","displayName":"display name","batchInfo":${JSON.stringify(batchInfo)},` +
'"baselineEnvName":"some baseline name","environmentName":"env name","environment":{},' +
'"defaultMatchSettings":{"matchLevel":"Strict","ignoreCaret":true,"useDom":false,"enablePatterns":false,"ignoreDisplacements":false,' +
'"defaultMatchSettings":{"matchLevel":"Strict","accessibilityLevel":"None","ignoreCaret":true,"useDom":false,"enablePatterns":false,"ignoreDisplacements":false,' +
'"ignore":[],"layout":[],"strict":[],"content":[],"floating":[]},"branchName":"some branch name",' +
'"parentBranchName":"parent branch name","baselineBranchName":"base branch","compareWithParentBranch":false,' +
'"ignoreBaseline":false,"saveDiffs":false,"render":false,"properties":[{"name":"property name",' +
Expand Down
9 changes: 4 additions & 5 deletions packages/visual-grid-client/src/sdk/checkWindow.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ function makeCheckWindow({
openEyesPromises,
fetchHeaders,
matchLevel: _matchLevel,
accessibilityLevel: _accessibilityLevel,
}) {
return function checkWindow({
resourceUrls = [],
Expand All @@ -45,6 +46,7 @@ function makeCheckWindow({
floating,
sendDom = true,
matchLevel = _matchLevel,
accessibilityLevel = _accessibilityLevel,
layout,
strict,
useDom,
Expand Down Expand Up @@ -217,6 +219,8 @@ function makeCheckWindow({
enablePatterns,
ignoreDisplacements,
renderId,
matchLevel,
accessibilityLevel,
});

logger.verbose(
Expand All @@ -234,9 +238,6 @@ function makeCheckWindow({
`running wrapper.checkWindow for test ${testName} stepCount #${currStepCount}`,
);

const origMatchLevel = wrapper.getMatchLevel();
if (matchLevel !== undefined) wrapper.setMatchLevel(matchLevel);

await wrapper.checkWindow({
screenshotUrl,
tag,
Expand All @@ -245,8 +246,6 @@ function makeCheckWindow({
imageLocation,
source,
});

wrapper.setMatchLevel(origMatchLevel); // origMatchLevel cannot be undefined because eyes-sdk-core sets the default to MatchLevel.Strict
}

async function startRender() {
Expand Down
8 changes: 8 additions & 0 deletions packages/visual-grid-client/src/sdk/createCheckSettings.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ function createCheckSettings({
enablePatterns,
ignoreDisplacements,
renderId,
matchLevel,
accessibilityLevel,
}) {
const checkSettings = new CheckSettings(0);
setEachRegion(ignore, checkSettings.ignoreRegions.bind(checkSettings));
Expand Down Expand Up @@ -45,6 +47,12 @@ function createCheckSettings({
if (renderId !== undefined) {
checkSettings.renderId(renderId);
}
if (matchLevel !== undefined) {
checkSettings.matchLevel(matchLevel);
}
if (accessibilityLevel !== undefined) {
checkSettings.accessibilityLevel(accessibilityLevel);
}

return checkSettings;

Expand Down
4 changes: 4 additions & 0 deletions packages/visual-grid-client/src/sdk/openEyes.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ function makeOpenEyes({
ignoreCaret: _ignoreCaret,
isDisabled: _isDisabled,
matchLevel: _matchLevel,
accessibilityLevel: _accessibilityLevel,
useDom: _useDom,
enablePatterns: _enablePatterns,
ignoreDisplacements: _ignoreDisplacements,
Expand Down Expand Up @@ -73,6 +74,7 @@ function makeOpenEyes({
ignoreCaret = _ignoreCaret,
isDisabled = _isDisabled,
matchLevel = _matchLevel,
accessibilityLevel = _accessibilityLevel,
useDom = _useDom,
enablePatterns = _enablePatterns,
ignoreDisplacements = _ignoreDisplacements,
Expand Down Expand Up @@ -128,6 +130,7 @@ function makeOpenEyes({
envName,
ignoreCaret,
matchLevel,
accessibilityLevel,
useDom,
enablePatterns,
ignoreDisplacements,
Expand Down Expand Up @@ -186,6 +189,7 @@ function makeOpenEyes({
testName,
openEyesPromises,
matchLevel,
accessibilityLevel,
fetchHeaders: headers,
});

Expand Down
2 changes: 2 additions & 0 deletions packages/visual-grid-client/src/sdk/renderingGridClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ function makeRenderingGridClient({
ignoreCaret,
isDisabled,
matchLevel,
accessibilityLevel,
useDom,
enablePatterns,
ignoreDisplacements,
Expand Down Expand Up @@ -148,6 +149,7 @@ function makeRenderingGridClient({
ignoreCaret,
isDisabled,
matchLevel,
accessibilityLevel,
useDom,
enablePatterns,
ignoreDisplacements,
Expand Down
2 changes: 2 additions & 0 deletions packages/visual-grid-client/src/sdk/wrapperUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ function configureWrappers({
envName,
ignoreCaret,
matchLevel,
accessibilityLevel,
parentBranchName,
branchName,
proxy,
Expand Down Expand Up @@ -71,6 +72,7 @@ function configureWrappers({
ignoreCaret !== undefined && wrapper.setIgnoreCaret(ignoreCaret);
isDisabled !== undefined && wrapper.setIsDisabled(isDisabled);
matchLevel !== undefined && wrapper.setMatchLevel(matchLevel);
accessibilityLevel !== undefined && wrapper.setAccessibilityLevel(accessibilityLevel);
useDom !== undefined && wrapper.setUseDom(useDom);
enablePatterns !== undefined && wrapper.setEnablePatterns(enablePatterns);
ignoreDisplacements !== undefined && wrapper.setIgnoreDisplacements(ignoreDisplacements);
Expand Down
Loading

0 comments on commit df2a383

Please sign in to comment.