/*
 * ast.cpp
 *
 *  Created on: Jun 11, 2015
 *      Author: pgess
 */

#include "gtest/gtest.h"
#include "passmanager.h"
#include "Parser.h"

using namespace std;
using namespace xreate;

TEST(AST, Containers1){
	FILE* input = fopen("scripts/testspass/Containers_Implementation_LinkedList1.xreate","r");
	Scanner scanner(input);
    Parser parser(&scanner);
    parser.Parse();

    const AST& ast = parser.root;

	fclose(input);
}

TEST(AST, CFAData) {
	PassManager* man = PassManager::prepareForCode
				("interface(cfa){\n"
				"    operator map :: annotation1.\n"
				"}");

	auto answer = man->root->__interfacesData.equal_range(CFA);
	EXPECT_EQ(1, std::distance(answer.first, answer.second));

	Expression&& scheme = move(answer.first->second);

	EXPECT_EQ(Operator::MAP, scheme.op);
	EXPECT_EQ("annotation1", scheme.getOperands().at(0).getValueString());
}


