redeyed-smoke.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. 'use strict';
  2. /*jshint asi: true*/
  3. // applying redeyed to a bunch of files of contained libraries as a smoke test
  4. var test = require('tap').test
  5. , path = require('path')
  6. , fs = require('fs')
  7. , readdirp = require('readdirp')
  8. , redeyed = require('..')
  9. , esprima = require('esprima')
  10. , node_modules = path.join(__dirname, '..', 'node_modules')
  11. , tapdir = path.join(node_modules, 'tap')
  12. , esprimadir = path.join(node_modules, 'esprima')
  13. test('tap', function (t) {
  14. var invalidTapFiles = [
  15. , 'slide/lib/async-map-ordered.js'
  16. ]
  17. function shouldProcess (path) {
  18. var include = true
  19. invalidTapFiles.every(function (entry) {
  20. return include = (path.indexOf(entry) < 0)
  21. });
  22. return include
  23. }
  24. function containsVarKeyword(code) {
  25. code = code.replace(/^#!([^\r\n]+)/, function(match, captured) { return "//" + captured; });
  26. return esprima.tokenize(code).some(function (t) {
  27. return t.type === 'Keyword' && t.value === 'var'
  28. })
  29. }
  30. readdirp({ root: tapdir, fileFilter: '*.js' })
  31. .on('data', function (entry) {
  32. var code = fs.readFileSync(entry.fullPath, 'utf-8')
  33. if (!shouldProcess(entry.fullPath) || !containsVarKeyword(code)) return
  34. var resultAst = redeyed(code, { Keyword: { 'var': '+:-' } }, { buildAst: true }).code
  35. , resultTokenize = redeyed(code, { Keyword: { 'var': '+:-' } }, { buildAst: false }).code
  36. t.assert(~resultAst.indexOf('+var-') || !(~resultAst.indexOf('var ')), 'redeyed ' + entry.path)
  37. t.assert(~resultTokenize.indexOf('+var-') || !(~resultTokenize.indexOf('var ')), 'redeyed ' + entry.path)
  38. })
  39. .on('end', t.end.bind(t))
  40. })
  41. test('esprima', function (t) {
  42. readdirp({ root: esprimadir, fileFilter: '*.js' })
  43. .on('data', function (entry) {
  44. var code = fs.readFileSync(entry.fullPath, 'utf-8')
  45. , resultAst = redeyed(code, { Keyword: { 'var': '+:-' } }, { buildAst: true }).code
  46. , resultTokenize = redeyed(code, { Keyword: { 'var': '+:-' } }, { buildAst: false }).code
  47. t.assert(~resultAst.indexOf('+var-') || !(~resultAst.indexOf('var ')), 'redeyed ' + entry.path)
  48. t.assert(~resultTokenize.indexOf('+var-') || !(~resultTokenize.indexOf('var ')), 'redeyed ' + entry.path)
  49. })
  50. .on('end', t.end.bind(t))
  51. })
  52. test('redeyed', function (t) {
  53. readdirp({ root: path.join(__dirname, '..'), fileFilter: '*.js', directoryFilter: ['!.git', '!node_modules' ] })
  54. .on('data', function (entry) {
  55. var code = fs.readFileSync(entry.fullPath, 'utf-8')
  56. , result = redeyed(code, { Keyword: { 'var': '+:-' } }).code
  57. t.assert(~result.indexOf('+var-') || !(~result.indexOf('var ')), 'redeyed ' + entry.path)
  58. })
  59. .on('end', t.end.bind(t))
  60. })