@@ -2,6 +2,8 @@ var fs = require('fs');
22var safe = require ( 'safe-regex' ) ;
33var assert = require ( 'assert' ) ;
44var requirejs = require ( 'requirejs' ) ;
5+ var parseJS = require ( '@babel/parser' ) . parse ;
6+ var traverse = require ( '@babel/traverse' ) . default ;
57var UAParser = require ( './../src/ua-parser' ) ;
68var browsers = require ( './browser-test.json' ) ;
79var cpus = require ( './cpu-test.json' ) ;
@@ -137,12 +139,19 @@ describe('Testing regexes', function () {
137139
138140 var regexes ;
139141
140- // todo: use AST-based instead of grep
141- before ( 'Read main js file' , function ( done ) {
142- fs . readFile ( 'src/ua-parser.js' , 'utf8' , function ( err , data ) {
143- regexes = data . match ( / ( \/ .+ \/ [ i g ] + ) (? = [ , \s \n ] ) / g) ;
144- done ( ) ;
142+ before ( 'Read main js file' , function ( ) {
143+ var code = fs . readFileSync ( 'src/ua-parser.js' , 'utf8' ) . toString ( ) ;
144+ var ast = parseJS ( code , { sourceType : "script" } ) ;
145+ regexes = [ ] ;
146+ traverse ( ast , {
147+ RegExpLiteral : ( path ) => {
148+ regexes . push ( path . node . pattern ) ;
149+ }
145150 } ) ;
151+
152+ if ( regexes . length === 0 ) {
153+ throw new Error ( "Regexes cannot be empty!" ) ;
154+ }
146155 } ) ;
147156
148157 describe ( 'Begin testing' , function ( ) {
@@ -156,4 +165,4 @@ describe('Testing regexes', function () {
156165 } ) ;
157166 } ) ;
158167 } ) ;
159- } )
168+ } ) ;
0 commit comments