149 lines
3.9 KiB
TypeScript
149 lines
3.9 KiB
TypeScript
|
import {bodyNodes} from 'src/flux/helpers'
|
||
|
import suggestions from 'test/flux/semantic_graph/suggestions'
|
||
|
import Variables from 'test/flux/ast/variables'
|
||
|
import {Expression, StringLiteral} from 'test/flux/ast/variable'
|
||
|
import From from 'test/flux/ast/from'
|
||
|
|
||
|
const id = expect.any(String)
|
||
|
|
||
|
describe('Flux.helpers', () => {
|
||
|
describe('bodyNodes', () => {
|
||
|
describe('bodyNodes for Expressions assigned to a variable', () => {
|
||
|
it('can parse an Expression assigned to a Variable', () => {
|
||
|
const actual = bodyNodes(Expression, suggestions)
|
||
|
const expected = [
|
||
|
{
|
||
|
declarations: [
|
||
|
{
|
||
|
funcs: [
|
||
|
{
|
||
|
args: [{key: 'db', type: 'string', value: 'telegraf'}],
|
||
|
id,
|
||
|
name: 'from',
|
||
|
source: 'from(db: "telegraf")',
|
||
|
},
|
||
|
],
|
||
|
id,
|
||
|
name: 'tele',
|
||
|
source: 'tele = from(db: "telegraf")',
|
||
|
type: 'CallExpression',
|
||
|
},
|
||
|
],
|
||
|
id,
|
||
|
source: 'tele = from(db: "telegraf")',
|
||
|
type: 'VariableDeclaration',
|
||
|
},
|
||
|
]
|
||
|
|
||
|
expect(actual).toEqual(expected)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('bodyNodes for a Literal assigned to a Variable', () => {
|
||
|
it('can parse an Expression assigned to a Variable', () => {
|
||
|
const actual = bodyNodes(StringLiteral, suggestions)
|
||
|
const expected = [
|
||
|
{
|
||
|
id,
|
||
|
source: 'bux = "im a var"',
|
||
|
type: 'VariableDeclaration',
|
||
|
declarations: [
|
||
|
{
|
||
|
id,
|
||
|
name: 'bux',
|
||
|
type: 'StringLiteral',
|
||
|
value: 'im a var',
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
]
|
||
|
|
||
|
expect(actual).toEqual(expected)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('bodyNodes for an Expression', () => {
|
||
|
it('can parse an Expression into bodyNodes', () => {
|
||
|
const actual = bodyNodes(From, suggestions)
|
||
|
|
||
|
const expected = [
|
||
|
{
|
||
|
declarations: [],
|
||
|
funcs: [
|
||
|
{
|
||
|
args: [{key: 'db', type: 'string', value: 'telegraf'}],
|
||
|
id,
|
||
|
name: 'from',
|
||
|
source: 'from(db: "telegraf")',
|
||
|
},
|
||
|
],
|
||
|
id,
|
||
|
source: 'from(db: "telegraf")',
|
||
|
type: 'CallExpression',
|
||
|
},
|
||
|
]
|
||
|
|
||
|
expect(actual).toEqual(expected)
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('multiple bodyNodes', () => {
|
||
|
it('can parse variables and expressions together', () => {
|
||
|
const actual = bodyNodes(Variables, suggestions)
|
||
|
const expected = [
|
||
|
{
|
||
|
declarations: [
|
||
|
{
|
||
|
id,
|
||
|
name: 'bux',
|
||
|
type: 'StringLiteral',
|
||
|
value: 'ASDFASDFASDF',
|
||
|
},
|
||
|
],
|
||
|
id,
|
||
|
source: 'bux = "ASDFASDFASDF"',
|
||
|
type: 'VariableDeclaration',
|
||
|
},
|
||
|
{
|
||
|
declarations: [
|
||
|
{
|
||
|
funcs: [
|
||
|
{
|
||
|
args: [{key: 'db', type: 'string', value: 'foo'}],
|
||
|
id,
|
||
|
name: 'from',
|
||
|
source: 'from(db: "foo")',
|
||
|
},
|
||
|
],
|
||
|
id,
|
||
|
name: 'foo',
|
||
|
source: 'foo = from(db: "foo")',
|
||
|
type: 'CallExpression',
|
||
|
},
|
||
|
],
|
||
|
id,
|
||
|
source: 'foo = from(db: "foo")',
|
||
|
type: 'VariableDeclaration',
|
||
|
},
|
||
|
{
|
||
|
declarations: [],
|
||
|
funcs: [
|
||
|
{
|
||
|
args: [{key: 'db', type: 'string', value: 'bux'}],
|
||
|
id,
|
||
|
name: 'from',
|
||
|
source: 'from(db: bux)',
|
||
|
},
|
||
|
],
|
||
|
id,
|
||
|
source: 'from(db: bux)',
|
||
|
type: 'CallExpression',
|
||
|
},
|
||
|
]
|
||
|
|
||
|
expect(actual).toEqual(expected)
|
||
|
})
|
||
|
})
|
||
|
})
|