Skip to content

Commit 6a3c368

Browse files
authored
Adds text-shadow analysis (#151)
Closes #145
1 parent ba3991a commit 6a3c368

File tree

4 files changed

+114
-0
lines changed

4 files changed

+114
-0
lines changed

src/analyzer/values/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module.exports = declarations => {
77
const colors = require('./colors.js')(declarations)
88
const browserhacks = require('./browserhacks.js')(declarations)
99
const boxshadows = require('./box-shadows.js')(declarations)
10+
const textshadows = require('./text-shadows.js')(declarations)
1011
const zindexes = require('./z-indexes.js')(declarations)
1112

1213
return {
@@ -17,6 +18,7 @@ module.exports = declarations => {
1718
colors,
1819
browserhacks,
1920
boxshadows,
21+
textshadows,
2022
zindexes
2123
}
2224
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const uniquer = require('../../utils/uniquer')
2+
const {KEYWORDS} = require('../../utils/css')
3+
4+
module.exports = declarations => {
5+
const all = declarations
6+
.filter(({property}) => property === 'text-shadow')
7+
.filter(({value}) => !KEYWORDS.includes(value))
8+
.map(declaration => declaration.value)
9+
10+
const {unique, totalUnique} = uniquer(all)
11+
12+
return {
13+
total: all.length,
14+
unique,
15+
totalUnique
16+
}
17+
}

test/analyzer/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ test('it returns the correct analysis object structure', async t => {
126126
'values.boxshadows.total': 0,
127127
'values.boxshadows.unique': [],
128128
'values.boxshadows.totalUnique': 0,
129+
'values.textshadows.total': 0,
130+
'values.textshadows.unique': [],
131+
'values.textshadows.totalUnique': 0,
129132
'values.browserhacks.total': 0,
130133
'values.browserhacks.unique': [],
131134
'values.browserhacks.totalUnique': 0,
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
const test = require('ava')
2+
const analyze = require('../../../src/analyzer/values/text-shadows.js')
3+
4+
test('It responds with the correct structure', t => {
5+
const actual = analyze([])
6+
const expected = {
7+
total: 0,
8+
unique: [],
9+
totalUnique: 0
10+
}
11+
12+
t.deepEqual(actual, expected)
13+
})
14+
15+
test('It recognizes a simple/single text-shadow correctly', t => {
16+
const fixture = [
17+
'1px 1px 2px black',
18+
'#fc0 1px 0 10px',
19+
'5px 5px #558abb',
20+
'white 2px 5px',
21+
'5px 10px',
22+
'red 0 -2px',
23+
'1px 1px 2px black, 0 0 1em blue, 0 0 0.2em blue'
24+
]
25+
const actual = analyze(
26+
fixture.map(textShadow => ({property: 'text-shadow', value: textShadow}))
27+
)
28+
const expected = {
29+
total: 7,
30+
unique: [
31+
{value: '#fc0 1px 0 10px', count: 1},
32+
{value: '1px 1px 2px black', count: 1},
33+
{value: '1px 1px 2px black, 0 0 1em blue, 0 0 0.2em blue', count: 1},
34+
{value: '5px 5px #558abb', count: 1},
35+
{value: '5px 10px', count: 1},
36+
{value: 'red 0 -2px', count: 1},
37+
{value: 'white 2px 5px', count: 1}
38+
],
39+
totalUnique: 7
40+
}
41+
42+
t.deepEqual(actual, expected)
43+
})
44+
45+
test('It recognizes an advanced text-shadow with multiple shadows', t => {
46+
const actual = analyze([
47+
{
48+
property: 'text-shadow',
49+
value: '1px 1px 2px black, 0 0 1em blue, 0 0 0.2em blue'
50+
}
51+
])
52+
const expected = {
53+
total: 1,
54+
unique: [
55+
{
56+
value: '1px 1px 2px black, 0 0 1em blue, 0 0 0.2em blue',
57+
count: 1
58+
}
59+
],
60+
totalUnique: 1
61+
}
62+
63+
t.deepEqual(actual, expected)
64+
})
65+
66+
test('It ignores CSS keywords', t => {
67+
const expected = {
68+
total: 0,
69+
totalUnique: 0,
70+
unique: []
71+
}
72+
const actual = analyze([
73+
{
74+
property: 'text-shadow',
75+
value: 'none'
76+
},
77+
{
78+
property: 'text-shadow',
79+
value: 'inherit'
80+
},
81+
{
82+
property: 'text-shadow',
83+
value: 'initial'
84+
},
85+
{
86+
property: 'text-shadow',
87+
value: 'unset'
88+
}
89+
])
90+
91+
t.deepEqual(actual, expected)
92+
})

0 commit comments

Comments
 (0)