Skip to content

Commit

Permalink
fix(meta-viewport): test that a user-scalable number does not prevent…
Browse files Browse the repository at this point in the history
… zoom

check if the user-scalable attribute of the viewport meta is between -1 & 1 to be able to zoom
  • Loading branch information
raroul authored and straker committed Jun 3, 2021
1 parent c6829fd commit 048c5c1
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 0 deletions.
12 changes: 12 additions & 0 deletions lib/checks/mobile/meta-viewport-scale-evaluate.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,18 @@ function metaViewportScaleEvaluate(node, options, virtualNode) {
return false;
}

const userScalableAsFloat = parseFloat(result['user-scalable']);
if (
!lowerBound &&
result['user-scalable'] &&
(userScalableAsFloat || userScalableAsFloat === 0) &&
userScalableAsFloat > -1 &&
userScalableAsFloat < 1
) {
this.data('user-scalable');
return false;
}

if (
result['maximum-scale'] &&
parseFloat(result['maximum-scale']) < scaleMinimum
Expand Down
48 changes: 48 additions & 0 deletions test/checks/mobile/meta-viewport-scale.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,30 @@ describe('meta-viewport', function() {
);
});

it('should return false on user-scalable in the range <-1, 1>', function() {
var vNode = queryFixture(
'<meta id="target" name="viewport" content="foo=bar, cats=dogs, user-scalable=0, more-stuff=ok">'
);

assert.isFalse(
axe.testUtils
.getCheckEvaluate('meta-viewport')
.call(checkContext, null, null, vNode)
);
});

it('should return false on user-scalable in the range <-1, 1>', function() {
var vNode = queryFixture(
'<meta id="target" name="viewport" content="foo=bar, cats=dogs, user-scalable=-0.5, more-stuff=ok">'
);

assert.isFalse(
axe.testUtils
.getCheckEvaluate('meta-viewport')
.call(checkContext, null, null, vNode)
);
});

it('should return true on user-scalable=yes', function() {
var vNode = queryFixture(
'<meta id="target" name="viewport" content="foo=bar, cats=dogs, user-scalable=yes, more-stuff=ok">'
Expand Down Expand Up @@ -171,6 +195,30 @@ describe('meta-viewport', function() {
assert.deepEqual(checkContext._data, 'user-scalable=no');
});

it('should return false on user-scalable in the range <-1, 1>', function() {
var vNode = queryFixture(
'<meta id="target" name="viewport" content="foo=bar, cats=dogs, user-scalable=0, more-stuff=ok">'
);

assert.isFalse(
axe.testUtils
.getCheckEvaluate('meta-viewport')
.call(checkContext, null, null, vNode)
);
});

it('should return false on user-scalable in the range <-1, 1>', function() {
var vNode = queryFixture(
'<meta id="target" name="viewport" content="foo=bar, cats=dogs, user-scalable=-0.5, more-stuff=ok">'
);

assert.isFalse(
axe.testUtils
.getCheckEvaluate('meta-viewport')
.call(checkContext, null, null, vNode)
);
});

it('should return true on user-scalable=yes', function() {
var vNode = queryFixture(
'<meta id="target" name="viewport" content="foo=bar, cats=dogs, user-scalable=yes, more-stuff=ok">'
Expand Down
14 changes: 14 additions & 0 deletions test/integration/virtual-rules/meta-viewport.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,20 @@ describe('meta-viewport virtual-rule', function() {
assert.lengthOf(results.incomplete, 0);
});

it('should fail for user-scalable=0', function() {
var results = axe.runVirtualRule('meta-viewport', {
nodeName: 'meta',
attributes: {
name: 'viewport',
content: 'user-scalable=0'
}
});

assert.lengthOf(results.passes, 0);
assert.lengthOf(results.violations, 1);
assert.lengthOf(results.incomplete, 0);
});

it('should fail for maximum-scale=yes', function() {
var results = axe.runVirtualRule('meta-viewport', {
nodeName: 'meta',
Expand Down

0 comments on commit 048c5c1

Please sign in to comment.