@@ -7,6 +7,7 @@ const espree = require('espree');
7
7
const ast = require ( '../../lib/util/ast' ) ;
8
8
9
9
const traverseReturns = ast . traverseReturns ;
10
+ const isFunctionLike = ast . isFunctionLike ;
10
11
11
12
const DEFAULT_CONFIG = {
12
13
ecmaVersion : 6 ,
@@ -101,4 +102,76 @@ describe('ast', () => {
101
102
} ) ;
102
103
} ) ;
103
104
} ) ;
105
+
106
+ describe ( 'isFunctionLike()' , ( ) => {
107
+ it ( 'FunctionDeclaration should return true' , ( ) => {
108
+ const node1 = parseCode ( `
109
+ function foo(bar) {
110
+ const asdf = () => 'zxcv';
111
+ return asdf;
112
+ }
113
+ ` ) ;
114
+ assert . strictEqual ( isFunctionLike ( node1 ) , true ) ;
115
+
116
+ const node2 = parseCode ( `
117
+ function foo({bar}) {
118
+ const asdf = () => 'zxcv';
119
+ console.log(bar);
120
+ return '5'
121
+ }
122
+ ` ) ;
123
+ assert . strictEqual ( isFunctionLike ( node2 ) , true ) ;
124
+ } ) ;
125
+
126
+ it ( 'FunctionExpression should return true' , ( ) => {
127
+ const node1 = parseCode ( `
128
+ const foo = function(bar) {
129
+ return () => 'zxcv';
130
+ }
131
+ ` ) . declarations [ 0 ] . init ;
132
+ assert . strictEqual ( isFunctionLike ( node1 ) , true ) ;
133
+
134
+ const node2 = parseCode ( `
135
+ const foo = function ({bar}) {
136
+ return '5';
137
+ }
138
+ ` ) . declarations [ 0 ] . init ;
139
+ assert . strictEqual ( isFunctionLike ( node2 ) , true ) ;
140
+ } ) ;
141
+
142
+ it ( 'ArrowFunctionExpression should return true' , ( ) => {
143
+ const node1 = parseCode ( `
144
+ (bar) => {
145
+ return () => 'zxcv';
146
+ }
147
+ ` ) . expression ;
148
+ assert . strictEqual ( isFunctionLike ( node1 ) , true ) ;
149
+
150
+ const node2 = parseCode ( `
151
+ ({bar}) => '5';
152
+ ` ) . expression ;
153
+ assert . strictEqual ( isFunctionLike ( node2 ) , true ) ;
154
+
155
+ const node3 = parseCode ( `
156
+ bar => '5';
157
+ ` ) . expression ;
158
+ assert . strictEqual ( isFunctionLike ( node3 ) , true ) ;
159
+ } ) ;
160
+
161
+ it ( 'Non-functions should return false' , ( ) => {
162
+ const node1 = parseCode ( `
163
+ class bar {
164
+ a() {
165
+ return 'a';
166
+ }
167
+ }
168
+ ` ) ;
169
+ assert . strictEqual ( isFunctionLike ( node1 ) , false ) ;
170
+
171
+ const node2 = parseCode ( `
172
+ const a = 5;
173
+ ` ) ;
174
+ assert . strictEqual ( isFunctionLike ( node2 ) , false ) ;
175
+ } ) ;
176
+ } ) ;
104
177
} ) ;
0 commit comments