Skip to content

Commit 189116f

Browse files
committed
feat(rules): add 'valid-by-id' rule
1 parent 8dfdc41 commit 189116f

File tree

3 files changed

+97
-1
lines changed

3 files changed

+97
-1
lines changed

index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ var validLocatorType = require('./lib/rules/valid-locator-type')
3131
var noCompoundClasses = require('./lib/rules/no-compound-classes')
3232
var useCountMethod = require('./lib/rules/use-count-method')
3333
var noBrowserDriver = require('./lib/rules/no-browser-driver')
34+
var validById = require('./lib/rules/valid-by-id')
3435

3536
module.exports = {
3637
rules: {
@@ -64,7 +65,8 @@ module.exports = {
6465
'valid-locator-type': validLocatorType,
6566
'no-compound-classes': noCompoundClasses,
6667
'use-count-method': useCountMethod,
67-
'no-browser-driver': noBrowserDriver
68+
'no-browser-driver': noBrowserDriver,
69+
'valid-by-id': validById
6870
},
6971
configs: {
7072
recommended: {
@@ -76,6 +78,7 @@ module.exports = {
7678
'protractor/no-array-finder-methods': 2,
7779
'protractor/valid-locator-type': 2,
7880
'protractor/no-compound-classes': 2,
81+
'protractor/valid-by-id': 2,
7982
'protractor/missing-wait-message': 1,
8083
'protractor/no-browser-sleep': 1,
8184
'protractor/no-by-xpath': 1,

lib/rules/valid-by-id.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
'use strict'
2+
3+
/**
4+
* @fileoverview asdads
5+
* @author Raul Gallegos
6+
*/
7+
8+
var isHtmlID = /^[A-Za-z]+[\w\-:.]*$/
9+
10+
module.exports = {
11+
meta: {
12+
schema: []
13+
},
14+
15+
create: function (context) {
16+
return {
17+
'CallExpression': function (node) {
18+
var object = node.callee.object
19+
var property = node.callee.property
20+
var insideById = object && property && object.name === 'by' && property.name === 'id'
21+
var argumentExists = node.arguments && node.arguments.length && node.arguments[0].value
22+
if (insideById && argumentExists) {
23+
var idValue = node.arguments[0].value
24+
if (!idValue.match(isHtmlID)) {
25+
context.report({
26+
node: node,
27+
message: 'Invalid ID value: "' + idValue + '"'
28+
})
29+
}
30+
}
31+
}
32+
}
33+
}
34+
}

test/rules/valid-by-id.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
'use strict'
2+
3+
var rule = require('../../lib/rules/valid-by-id')
4+
var RuleTester = require('eslint').RuleTester
5+
6+
var eslintTester = new RuleTester()
7+
8+
eslintTester.run('valid-by-id', rule, {
9+
valid: [
10+
'element(by.id("validID"));',
11+
'element(by.css(".myclass"));',
12+
'element.all(by.id("simpleid"));',
13+
'element.all(by.id("foo-bar"));',
14+
'element.all(by.id("foo:bar"));',
15+
'element.all(by.id("foo_bar"));',
16+
'element.all(by.id("foo.bar"));',
17+
'element.all(by.id("a123456789"));',
18+
'element.all(by.id("a1-_:.r2D2"));'
19+
],
20+
21+
invalid: [
22+
{
23+
code: 'element(by.id("#id"));',
24+
errors: [{
25+
message: 'Invalid ID value: "#id"'
26+
}]
27+
},
28+
{
29+
code: 'element(by.id("1startwithnumber"));',
30+
errors: [{
31+
message: 'Invalid ID value: "1startwithnumber"'
32+
}]
33+
},
34+
{
35+
code: 'element(by.id("_"));',
36+
errors: [{
37+
message: 'Invalid ID value: "_"'
38+
}]
39+
},
40+
{
41+
code: 'element(by.id("#"));',
42+
errors: [{
43+
message: 'Invalid ID value: "#"'
44+
}]
45+
},
46+
{
47+
code: 'element(by.id("invalid*id"));',
48+
errors: [{
49+
message: 'Invalid ID value: "invalid*id"'
50+
}]
51+
},
52+
{
53+
code: 'element(by.id("id with spaces"));',
54+
errors: [{
55+
message: 'Invalid ID value: "id with spaces"'
56+
}]
57+
}
58+
]
59+
})

0 commit comments

Comments
 (0)