| var test = require('tape') |
| var acorn = require('../') |
| var walk = require('../walk') |
| var baseAcorn = require('acorn') |
| |
| test('parses object spread syntax', function (t) { |
| var ast = acorn.parse('var a = { ...b }') |
| t.equal(ast.body[0].declarations[0].init.type, 'ObjectExpression') |
| t.equal(ast.body[0].declarations[0].init.properties[0].type, 'SpreadElement') |
| |
| ast = acorn.parse('function a ({ ...b }) {}') |
| t.equal(ast.body[0].params[0].type, 'ObjectPattern') |
| t.equal(ast.body[0].params[0].properties[0].type, 'RestElement') |
| |
| t.end() |
| }) |
| |
| test('does not change main acorn module', function (t) { |
| t.throws(function () { |
| baseAcorn.parse('var a = { ...b }') |
| }) |
| t.end() |
| }) |
| |
| test('tokenizes object spread syntax', function (t) { |
| var tokenizer = acorn.tokenizer('var a = { ...b }') |
| |
| t.doesNotThrow(function (t) { |
| while (tokenizer.getToken().type !== acorn.tokTypes.eof) {} |
| }) |
| t.end() |
| }) |
| |
| test('allows hashbangs by default', function (t) { |
| t.doesNotThrow(function () { |
| acorn.parse('#!/usr/bin/env node\nconsole.log("ok")') |
| }) |
| t.end() |
| }) |
| |
| test('allows top level return by default', function (t) { |
| t.doesNotThrow(function () { |
| acorn.parse('console.log("ok"); return; console.log("not ok")') |
| }) |
| t.end() |
| }) |
| |
| test('supports async generators', function (t) { |
| t.doesNotThrow(function () { |
| acorn.parse('async function* a () { await x; yield 1 }') |
| }) |
| t.end() |
| }) |
| |
| test('supports async iteration', function (t) { |
| t.doesNotThrow(function () { |
| acorn.parse('async function l (y) { for await (const x of y) {} }') |
| }) |
| t.end() |
| }) |
| |
| test('supports optional catch', function (t) { |
| t.doesNotThrow(function () { |
| acorn.parse('try { throw null } catch {}') |
| }) |
| t.end() |
| }) |
| |
| test.skip('supports bigint', function (t) { |
| t.doesNotThrow(function () { |
| acorn.parse('50n ** 50n') |
| }) |
| t.end() |
| }) |
| |
| test('supports import.meta with sourceType: module', function (t) { |
| t.doesNotThrow(function () { |
| acorn.parse('console.log(import.meta.url)', { sourceType: 'module' }) |
| }) |
| t.end() |
| }) |
| |
| test('supports dynamic import() with sourceType: module', function (t) { |
| t.doesNotThrow(function () { |
| acorn.parse('import("./whatever.mjs")', { sourceType: 'module' }) |
| }) |
| t.end() |
| }) |
| |
| test('walk supports plugin syntax', function (t) { |
| var ast = acorn.parse( |
| 'async function* a() { try { await import(xyz); } catch { for await (x of null) {} } yield import.meta.url }', |
| { sourceType: 'module' } |
| ) |
| t.plan(2) |
| walk.simple(ast, { |
| Import: function () { |
| t.pass('import()') |
| }, |
| MetaProperty: function () { |
| t.pass('import.meta') |
| } |
| }) |
| t.end() |
| }) |