mirror of
https://github.com/thangisme/notes.git
synced 2025-11-23 13:12:25 -05:00
Initial commit
This commit is contained in:
112
node_modules/doiuse/test/detect-feature-use.js
generated
vendored
Normal file
112
node_modules/doiuse/test/detect-feature-use.js
generated
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
var fs = require('fs')
|
||||
var path = require('path')
|
||||
var test = require('tape')
|
||||
var postcss = require('postcss')
|
||||
var Detector = require('../lib/detect-feature-use')
|
||||
|
||||
/*
|
||||
* Parse the feature-key: count lines in the leading comment of
|
||||
* each test case fixture.
|
||||
*/
|
||||
var parseTestCase = function (cssString) {
|
||||
var meta = /\s*\/\*(\s*only)?\s*expect:\s*([a-zA-Z0-9\-:\s\n]*)/
|
||||
var matches = cssString.match(meta)
|
||||
if (!matches) { return }
|
||||
|
||||
var features = {}
|
||||
matches[2].split('\n')
|
||||
.filter(function (s) {
|
||||
return s.trim().length > 0
|
||||
})
|
||||
.forEach(function (s) {
|
||||
var line = s.replace(/\s*/, '').split(':')
|
||||
var feat = line[0]
|
||||
var count = +line[1]
|
||||
features[feat] = count
|
||||
})
|
||||
|
||||
if (Object.keys(features).length > 0) {
|
||||
return {
|
||||
only: !!matches[1],
|
||||
expected: features
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* make a spy callback.
|
||||
*
|
||||
* spy functions save results from calls on `spyFn.results`.
|
||||
*/
|
||||
var spy = function () {
|
||||
var results = []
|
||||
var fn = function (param) {
|
||||
var feature = param.feature
|
||||
var usage = param.usage
|
||||
var obj = {
|
||||
feature: feature,
|
||||
location: usage.source.start,
|
||||
selector: usage.selector,
|
||||
property: usage.property,
|
||||
value: usage.value
|
||||
}
|
||||
|
||||
if (results[feature]) {
|
||||
results[feature]
|
||||
} else {
|
||||
results[feature] = []
|
||||
}
|
||||
|
||||
return results[feature].push(obj)
|
||||
}
|
||||
fn.results = results
|
||||
return fn
|
||||
}
|
||||
|
||||
var runTest = function (tc, cssString, expected, only) {
|
||||
var features = Object.keys(expected).sort()
|
||||
var testFn = only ? test.only.bind(test) : test
|
||||
|
||||
testFn('detecting CSS features (' + tc.replace('.css', '') + ')', function (t) {
|
||||
var detector = new Detector(features)
|
||||
var cb = spy()
|
||||
detector.process(postcss.parse(cssString), cb)
|
||||
|
||||
var res = Object.keys(cb.results).sort()
|
||||
for (var feature in expected) {
|
||||
if (expected[feature] === 0) {
|
||||
t.notOk(cb.results[feature])
|
||||
} else {
|
||||
t.deepEqual(res, features)
|
||||
t.equal(cb.results[feature].length, expected[feature], 'count of ' + feature)
|
||||
}
|
||||
}
|
||||
|
||||
t.end()
|
||||
})
|
||||
}
|
||||
|
||||
var caseFiles = fs.readdirSync(path.join(__dirname, '/cases'))
|
||||
.filter(function (tc) { return /\.css$/.test(tc) })
|
||||
|
||||
var cases = []
|
||||
for (var i = 0; i < caseFiles.length; ++i) {
|
||||
var tc = caseFiles[i]
|
||||
|
||||
var cssString = fs.readFileSync(path.join(__dirname, 'cases', tc)).toString()
|
||||
var parsed = parseTestCase(cssString)
|
||||
if (parsed) {
|
||||
var testCase = {
|
||||
name: tc,
|
||||
expected: parsed.expected,
|
||||
cssString: cssString
|
||||
}
|
||||
cases.push(testCase)
|
||||
}
|
||||
}
|
||||
|
||||
cases.forEach(function (testCase) {
|
||||
runTest(testCase.name, testCase.cssString, testCase.expected, cases.length === 1)
|
||||
})
|
||||
Reference in New Issue
Block a user