/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.backend.java.dynamic;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
import abs.backend.java.JavaBackendTest;
import abs.backend.java.codegeneration.JavaCode;
import abs.backend.java.codegeneration.JavaCodeGenerationException;
import abs.backend.java.lib.runtime.ABSDynamicRuntime;
import abs.backend.java.lib.runtime.ABSRuntime;
import abs.frontend.ast.Model;
import abs.frontend.parser.Main;
public class JavaBackendDynamicTest extends JavaBackendTest {
public JavaBackendDynamicTest() {
super();
absArgs.add("-dynamic");
}
@Override
protected ABSRuntime makeAbsRuntime() {
return new ABSDynamicRuntime();
}
@Override
protected JavaCode getJavaCode(String absCode, Config... config) throws Exception {
Model model = null;
String code = null;
code = absCode;
/* TODO: why not parse the ABSTest way -- sooner or later a flag will fall over... [stolz]*/
model = Main.parseString(code, isSet(Config.WITH_STD_LIB, config));
if (model.hasErrors()) {
fail(model.getErrors().getFirstError().getHelpMessage());
} else {
// Omit type checking for now as it can hinder dynamic program evolution
// TODO infer types...
// SemanticConditionList el = model.typeCheck();
// if (el.containsErrors()) {
// fail(el.get(0).getMsg());
// }
}
if (model.hasErrors()) {
fail(model.getErrors().getFirstError().getHelpMessage());
return null;
}
return getJavaCodeDynamic(model);
}
static JavaCode getJavaCodeDynamic(Model model) throws IOException, JavaCodeGenerationException {
JavaCode code = new JavaCode();
model.generateJavaCodeDynamic(code, true);
return code;
}
protected String readAbsFile(String fileName) throws FileNotFoundException {
final Scanner s;
String buffer = (s = new Scanner(new File(fileName))).useDelimiter("\\Z").next();
s.close();
return buffer;
}
}