import * as Expressions from './../js/ast/expressions/';
import * as Commands from './../js/ast/commands/';
import { Operators } from './../js/ast/operators';
import {Types} from './../js/typeSystem/types';
import {
    IVProgParser
} from './../js/ast/ivprogParser';
import { LanguageService } from '../js/services/languageService';

describe('Variable declaration inside a function', () => {

    let input = `programa {

      funcao inicio() {
        inteiro a
        a = a + 1
      }
    }`;
    const lexer = LanguageService.getCurrentLexer();

    const ast = {
      global: [ ],
      functions: [
        new Commands.Function(null,Types.VOID,[],
        new Commands.CommandBlock([
          new Commands.Declaration('a',Types.INTEGER,null,false)],[
            new Commands.Assign('a',
              new Expressions.InfixApp(Operators.ADD, new Expressions.VariableLiteral('a'), new Expressions.IntLiteral(1)))]))
      ]
    }

    it(`must be inside the variables list`, () => {
        const as = new IVProgParser(input, lexer);
        const fun = as.parseTree();
        expect(fun).not.toEqual(ast);
    });
});