1+ /*
2+ Copyright (C) 2012-2013 Yusuke Suzuki <utatane.tea@gmail.com>
3+
4+ Redistribution and use in source and binary forms, with or without
5+ modification, are permitted provided that the following conditions are met:
6+
7+ * Redistributions of source code must retain the above copyright
8+ notice, this list of conditions and the following disclaimer.
9+ * Redistributions in binary form must reproduce the above copyright
10+ notice, this list of conditions and the following disclaimer in the
11+ documentation and/or other materials provided with the distribution.
12+
13+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16+ ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
17+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
20+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23+ */
24+
25+ 'use strict' ;
26+
27+ var fs = require ( 'fs' ) ,
28+ acorn = require ( 'acorn' ) ,
29+ escodegen = require ( './loader' ) ,
30+ chai = require ( 'chai' ) ,
31+ chaiExclude = require ( 'chai-exclude' ) ,
32+ expect = chai . expect ;
33+
34+ chai . use ( chaiExclude ) ;
35+
36+ function test ( code , expected ) {
37+ var tree , actual , actualTree , options ;
38+
39+ options = {
40+ ranges : false ,
41+ locations : false ,
42+ ecmaVersion : 11
43+ } ;
44+
45+ tree = acorn . parse ( code , options ) ;
46+
47+ // for UNIX text comment
48+ actual = escodegen . generate ( tree ) ;
49+ actualTree = acorn . parse ( actual , options ) ;
50+
51+ expect ( actual ) . to . be . equal ( expected ) ;
52+ expect ( tree ) . excludingEvery ( [ 'start' , 'end' ] ) . to . deep . equal ( actualTree ) ;
53+ }
54+
55+ function testMin ( code , expected ) {
56+ var tree , actual , actualTree , options ;
57+
58+ options = {
59+ ranges : false ,
60+ locations : false ,
61+ ecmaVersion : 11
62+ } ;
63+
64+ tree = acorn . parse ( code , options ) ;
65+
66+ // for UNIX text comment
67+ actual = escodegen . generate ( tree , {
68+ format : escodegen . FORMAT_MINIFY ,
69+ raw : false
70+ } ) . replace ( / [ \n \r ] $ / , '' ) + '\n' ;
71+ actualTree = acorn . parse ( actual , options ) ;
72+
73+ expect ( actual ) . to . be . equal ( expected ) ;
74+ expect ( tree ) . excludingEvery ( [ 'start' , 'end' ] ) . to . deep . equal ( actualTree ) ;
75+ }
76+
77+ describe ( 'compare acorn es2020 test' , function ( ) {
78+ fs . readdirSync ( __dirname + '/compare-acorn-es2020' ) . sort ( ) . forEach ( function ( file ) {
79+ var code , expected , exp , min ;
80+ if ( / \. j s $ / . test ( file ) && ! / e x p e c t e d \. j s $ / . test ( file ) && ! / e x p e c t e d \. m i n \. j s $ / . test ( file ) ) {
81+ it ( file , function ( ) {
82+ exp = file . replace ( / \. j s $ / , '.expected.js' ) ;
83+ min = file . replace ( / \. j s $ / , '.expected.min.js' ) ;
84+ code = fs . readFileSync ( __dirname + '/compare-acorn-es2020/' + file , 'utf-8' ) ;
85+ expected = fs . readFileSync ( __dirname + '/compare-acorn-es2020/' + exp , 'utf-8' ) ;
86+ test ( code , expected ) ;
87+ if ( fs . existsSync ( __dirname + '/compare-acorn-es2020/' + min ) ) {
88+ expected = fs . readFileSync ( __dirname + '/compare-acorn-es2020/' + min , 'utf-8' ) ;
89+ testMin ( code , expected ) ;
90+ }
91+ } ) ;
92+ }
93+ } ) ;
94+ } ) ;
95+ /* vim: set sw=4 ts=4 et tw=80 : */
0 commit comments