@@ -105,288 +105,3 @@ impl VisitMut for CheckDupPropTransformVisitor<'_> {
105105 call_expr. visit_mut_children_with ( self )
106106 }
107107}
108-
109- #[ cfg( test) ]
110- mod tests {
111- // Recommended strategy to test plugin's transform is verify
112- // the Visitor's behavior, instead of trying to run `process_transform` with mocks
113- // unless explicitly required to do so.
114-
115- use std:: sync:: { Arc , Mutex } ;
116-
117- use super :: * ;
118- use swc_core:: ecma:: ast:: { EsVersion , Program } ;
119- use swc_core:: {
120- common:: {
121- errors:: { DiagnosticBuilder , Emitter , Handler , HandlerFlags } ,
122- sync:: Lrc ,
123- FileName , SourceMap ,
124- } ,
125- ecma:: visit:: VisitMutWith ,
126- } ;
127- use swc_ecma_parser:: { lexer:: Lexer , Parser , StringInput , Syntax } ;
128-
129- struct TestEmitter {
130- diagnostics : Arc < Mutex < Vec < String > > > ,
131- }
132-
133- impl Emitter for TestEmitter {
134- fn emit ( & mut self , diagnostic : & DiagnosticBuilder ) {
135- let mut diags = self . diagnostics . lock ( ) . unwrap ( ) ;
136- diags. push ( diagnostic. message ( ) ) ;
137- }
138- }
139-
140- #[ test]
141- fn test_errors_for_duplicates_first_level ( ) {
142- let cm: Lrc < SourceMap > = Default :: default ( ) ;
143- let diagnostics = Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) ;
144- let emitter = Box :: new ( TestEmitter {
145- diagnostics : diagnostics. clone ( ) ,
146- } ) ;
147- let handler = Handler :: with_emitter_and_flags (
148- emitter,
149- HandlerFlags {
150- can_emit_warnings : true ,
151- ..Default :: default ( )
152- } ,
153- ) ;
154-
155- let js_code = r#"
156- cube(`cube1`, {
157- sql: `SELECT * FROM table`,
158-
159- dimensions: {
160- id: {
161- sql: `id`,
162- type: `number`,
163- primary_key: true,
164- },
165- created_at: {
166- sql: `created_at`,
167- type: `time`,
168- },
169- dim1Number: {
170- sql: `dim1Number`,
171- type: `number`,
172- },
173- dim2Number: {
174- sql: `dim2Number`,
175- type: `number`,
176- },
177- },
178-
179- dimensions: {
180- dim2Number: {
181- sql: `dim2Number`,
182- type: `number`,
183- },
184- },
185-
186- measures: {
187- count: {
188- type: `count`,
189- sql: `id`,
190- },
191- measureDim1: {
192- sql: `dim1Number`,
193- type:
194- `max`,
195- },
196- measureDim2: {
197- sql: `dim1Number`,
198- type: `min`,
199- },
200- },
201- });
202- "# ;
203-
204- let fm = cm. new_source_file (
205- Arc :: new ( FileName :: Custom ( "input.js" . into ( ) ) ) ,
206- js_code. into ( ) ,
207- ) ;
208- let lexer = Lexer :: new (
209- Syntax :: Es ( Default :: default ( ) ) ,
210- EsVersion :: Es2020 ,
211- StringInput :: from ( & * fm) ,
212- None ,
213- ) ;
214- let mut parser = Parser :: new_from ( lexer) ;
215- let mut program: Program = parser. parse_program ( ) . expect ( "Failed to parse the JS code" ) ;
216-
217- let mut visitor = CheckDupPropTransformVisitor :: new ( None , & handler) ;
218- program. visit_mut_with ( & mut visitor) ;
219-
220- let diags = diagnostics. lock ( ) . unwrap ( ) ;
221- let msgs: Vec < _ > = diags
222- . iter ( )
223- . filter ( |msg| msg. contains ( "Duplicate property" ) )
224- . collect ( ) ;
225- assert ! ( msgs. len( ) == 1 , "Should emit errors" , ) ;
226- }
227-
228- #[ test]
229- fn test_errors_for_duplicates_deep_level ( ) {
230- let cm: Lrc < SourceMap > = Default :: default ( ) ;
231- let diagnostics = Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) ;
232- let emitter = Box :: new ( TestEmitter {
233- diagnostics : diagnostics. clone ( ) ,
234- } ) ;
235- let handler = Handler :: with_emitter_and_flags (
236- emitter,
237- HandlerFlags {
238- can_emit_warnings : true ,
239- ..Default :: default ( )
240- } ,
241- ) ;
242-
243- let js_code = r#"
244- cube(`cube1`, {
245- sql: `SELECT * FROM table`,
246-
247- dimensions: {
248- id: {
249- sql: `id`,
250- type: `number`,
251- primary_key: true,
252- },
253- created_at: {
254- sql: `created_at`,
255- type: `time`,
256- },
257- dim1Number: {
258- sql: `dim1Number`,
259- type: `number`,
260- },
261- dim1Number: {
262- sql: `dim2Number`,
263- type: `number`,
264- },
265- },
266-
267- dimensions: {
268- dim2Number: {
269- sql: `dim2Number`,
270- type: `number`,
271- },
272- },
273-
274- measures: {
275- count: {
276- type: `count`,
277- sql: `id`,
278- },
279- measureDim1: {
280- sql: `dim1Number`,
281- type:
282- `max`,
283- },
284- measureDim1: {
285- sql: `dim1Number`,
286- type: `min`,
287- },
288- },
289- });
290- "# ;
291-
292- let fm = cm. new_source_file (
293- Arc :: new ( FileName :: Custom ( "input.js" . into ( ) ) ) ,
294- js_code. into ( ) ,
295- ) ;
296- let lexer = Lexer :: new (
297- Syntax :: Es ( Default :: default ( ) ) ,
298- EsVersion :: Es2020 ,
299- StringInput :: from ( & * fm) ,
300- None ,
301- ) ;
302- let mut parser = Parser :: new_from ( lexer) ;
303- let mut program: Program = parser. parse_program ( ) . expect ( "Failed to parse the JS code" ) ;
304-
305- let mut visitor = CheckDupPropTransformVisitor :: new ( None , & handler) ;
306- program. visit_mut_with ( & mut visitor) ;
307-
308- let diags = diagnostics. lock ( ) . unwrap ( ) ;
309- let msgs: Vec < _ > = diags
310- . iter ( )
311- . filter ( |msg| msg. contains ( "Duplicate property" ) )
312- . collect ( ) ;
313- assert ! ( msgs. len( ) == 3 , "Should emit errors" , ) ;
314- }
315-
316- #[ test]
317- fn test_no_errors ( ) {
318- let cm: Lrc < SourceMap > = Default :: default ( ) ;
319- let diagnostics = Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) ;
320- let emitter = Box :: new ( TestEmitter {
321- diagnostics : diagnostics. clone ( ) ,
322- } ) ;
323- let handler = Handler :: with_emitter_and_flags (
324- emitter,
325- HandlerFlags {
326- can_emit_warnings : true ,
327- ..Default :: default ( )
328- } ,
329- ) ;
330-
331- let js_code = r#"
332- cube(`cube1`, {
333- sql: `SELECT * FROM table`,
334-
335- dimensions: {
336- id: {
337- sql: `id`,
338- type: `number`,
339- primary_key: true,
340- },
341- created_at: {
342- sql: `created_at`,
343- type: `time`,
344- },
345- dim1Number: {
346- sql: `dim1Number`,
347- type: `number`,
348- },
349- dim2Number: {
350- sql: `dim2Number`,
351- type: `number`,
352- },
353- },
354-
355- measures: {
356- count: {
357- type: `count`,
358- sql: `id`,
359- },
360- measureDim1: {
361- sql: `dim1Number`,
362- type:
363- `max`,
364- },
365- measureDim2: {
366- sql: `dim1Number`,
367- type: `min`,
368- },
369- },
370- });
371- "# ;
372-
373- let fm = cm. new_source_file (
374- Arc :: new ( FileName :: Custom ( "input.js" . into ( ) ) ) ,
375- js_code. into ( ) ,
376- ) ;
377- let lexer = Lexer :: new (
378- Syntax :: Es ( Default :: default ( ) ) ,
379- EsVersion :: Es2020 ,
380- StringInput :: from ( & * fm) ,
381- None ,
382- ) ;
383- let mut parser = Parser :: new_from ( lexer) ;
384- let mut program: Program = parser. parse_program ( ) . expect ( "Failed to parse the JS code" ) ;
385-
386- let mut visitor = CheckDupPropTransformVisitor :: new ( None , & handler) ;
387- program. visit_mut_with ( & mut visitor) ;
388-
389- let diags = diagnostics. lock ( ) . unwrap ( ) ;
390- assert ! ( diags. is_empty( ) , "Should not emit errors" , ) ;
391- }
392- }
0 commit comments