@@ -307,4 +307,53 @@ describe("Parser", function() {
307307 } ) ;
308308 } ) ;
309309 } ) ;
310+
311+ describe ( "async/await support" , function ( ) {
312+ describe ( "should accept" , function ( ) {
313+ var cases = {
314+ "async function" : "async function x() {}" ,
315+ "async arrow function" : "async () => {}" ,
316+ "await expression" : "async function x(y) { await y }"
317+ } ;
318+ var parser = new Parser ( ) ;
319+ Object . keys ( cases ) . forEach ( function ( name ) {
320+ var expr = cases [ name ] ;
321+ it ( name , function ( ) {
322+ var actual = parser . parse ( expr ) ;
323+ should . strictEqual ( typeof actual , "object" ) ;
324+ } ) ;
325+ } ) ;
326+ } ) ;
327+ describe ( "should parse await" , function ( ) {
328+ var cases = {
329+ "require" : [
330+ "async function x() { await require('y'); }" , {
331+ param : "y"
332+ }
333+ ] ,
334+ "System.import" : [
335+ "async function x() { var y = await System.import('z'); }" , {
336+ param : "z"
337+ }
338+ ]
339+ } ;
340+
341+ var parser = new Parser ( ) ;
342+ parser . plugin ( "call require" , function ( expr ) {
343+ var param = this . evaluateExpression ( expr . arguments [ 0 ] ) ;
344+ this . state . param = param . string ;
345+ } ) ;
346+ parser . plugin ( "call System.import" , function ( expr ) {
347+ var param = this . evaluateExpression ( expr . arguments [ 0 ] ) ;
348+ this . state . param = param . string ;
349+ } ) ;
350+
351+ Object . keys ( cases ) . forEach ( function ( name ) {
352+ it ( name , function ( ) {
353+ var actual = parser . parse ( cases [ name ] [ 0 ] ) ;
354+ actual . should . be . eql ( cases [ name ] [ 1 ] ) ;
355+ } ) ;
356+ } ) ;
357+ } ) ;
358+ } )
310359} ) ;
0 commit comments