Skip to content

Commit b77133c

Browse files
authored
add box-shadow analysis (#93)
closes #87
1 parent 0596e84 commit b77133c

File tree

6 files changed

+112
-3
lines changed

6 files changed

+112
-3
lines changed

readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ analyze('foo{}')
110110
// 'stylesheets.size': 5,
111111
// 'stylesheets.browserhacks.total': 0,
112112
// 'stylesheets.browserhacks.totalUnique': 0,
113+
// 'values.boxshadows.total': 0,
114+
// 'values.boxshadows.unique': [],
115+
// 'values.boxshadows.totalUnique': 0,
113116
// 'values.browserhacks.total': 0,
114117
// 'values.browserhacks.unique': [],
115118
// 'values.browserhacks.totalUnique': 0,

src/analyzer/values/box-shadows.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const uniquer = require('../../utils/uniquer')
2+
3+
module.exports = declarations => {
4+
const all = declarations
5+
.filter(({property}) => property === 'box-shadow')
6+
.map(declaration => declaration.value)
7+
8+
const {unique, totalUnique} = uniquer(all)
9+
10+
return {
11+
total: all.length,
12+
unique,
13+
totalUnique
14+
}
15+
}

src/analyzer/values/index.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
module.exports = declarations => {
2-
const all = declarations
3-
.map(declaration => declaration.value)
2+
const all = declarations.map(declaration => declaration.value)
43

54
const prefixed = require('./prefixed.js')(all)
65
const fontsizes = require('./font-sizes.js')(declarations)
76
const fontfamilies = require('./font-families.js')(declarations)
87
const colors = require('./colors.js')(declarations)
98
const browserhacks = require('./browserhacks.js')(declarations)
9+
const boxshadows = require('./box-shadows.js')(declarations)
1010

1111
return {
1212
total: all.length,
1313
prefixed,
1414
fontsizes,
1515
fontfamilies,
1616
colors,
17-
browserhacks
17+
browserhacks,
18+
boxshadows
1819
}
1920
}

test/analyzer/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ test('Returns the correct analysis object structure', async t => {
9090
'stylesheets.size': 5,
9191
'stylesheets.browserhacks.total': 0,
9292
'stylesheets.browserhacks.totalUnique': 0,
93+
'values.boxshadows.total': 0,
94+
'values.boxshadows.unique': [],
95+
'values.boxshadows.totalUnique': 0,
9396
'values.browserhacks.total': 0,
9497
'values.browserhacks.unique': [],
9598
'values.browserhacks.totalUnique': 0,
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
const test = require('ava')
2+
const analyze = require('../../../src/analyzer/values/box-shadows.js')
3+
4+
// Source: https://developer.mozilla.org/en-US/docs/Learn/CSS/Styling_boxes/Advanced_box_effects
5+
const SIMPLE_BOX_SHADOW = '1px 1px 1px black'
6+
const MULTIPLE_BOX_SHADOWS =
7+
'1px 1px 1px black,inset 2px 3px 5px rgba(0,0,0,0.3),inset -2px -3px 5px rgba(255,255,255,0.5)'
8+
const INSET_BOX_SHADOW = 'inset -2px -3px 5px rgba(255,255,255,0.5)'
9+
10+
test('It responds with the correct structure', t => {
11+
const actual = analyze([])
12+
const expected = {
13+
total: 0,
14+
unique: [],
15+
totalUnique: 0
16+
}
17+
18+
t.deepEqual(actual, expected)
19+
})
20+
21+
test('It recognizes a simple/single box-shadow correctly', t => {
22+
const actual = analyze([
23+
{
24+
property: 'box-shadow',
25+
value: SIMPLE_BOX_SHADOW
26+
}
27+
])
28+
const expected = {
29+
total: 1,
30+
unique: [
31+
{
32+
value: SIMPLE_BOX_SHADOW,
33+
count: 1
34+
}
35+
],
36+
totalUnique: 1
37+
}
38+
39+
t.deepEqual(actual, expected)
40+
})
41+
42+
test('It recognizes box-shadow that uses inset', t => {
43+
const expected = {
44+
total: 1,
45+
totalUnique: 1,
46+
unique: [
47+
{
48+
value: INSET_BOX_SHADOW,
49+
count: 1
50+
}
51+
]
52+
}
53+
const actual = analyze([
54+
{
55+
property: 'box-shadow',
56+
value: INSET_BOX_SHADOW
57+
}
58+
])
59+
60+
t.deepEqual(actual, expected)
61+
})
62+
63+
test('It recognizes an advanced box-shadow with multiple shadows', t => {
64+
const expected = {
65+
total: 1,
66+
unique: [
67+
{
68+
value: MULTIPLE_BOX_SHADOWS,
69+
count: 1
70+
}
71+
],
72+
totalUnique: 1
73+
}
74+
const actual = analyze([
75+
{
76+
property: 'box-shadow',
77+
value: MULTIPLE_BOX_SHADOWS
78+
}
79+
])
80+
81+
t.deepEqual(actual, expected)
82+
})

test/analyzer/values/output.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,5 +412,10 @@
412412
}
413413
],
414414
"totalUnique": 1
415+
},
416+
"boxshadows": {
417+
"total": 0,
418+
"unique": [],
419+
"totalUnique": 0
415420
}
416421
}

0 commit comments

Comments
 (0)