package org.simantics.scl.compiler.tests;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
+import java.io.StringWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import org.simantics.scl.compiler.errors.Failure;
import org.simantics.scl.compiler.module.ImportDeclaration;
import org.simantics.scl.compiler.module.Module;
+import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
import org.simantics.scl.compiler.module.repository.ModuleRepository;
import org.simantics.scl.compiler.module.repository.UpdateListener;
import org.simantics.scl.compiler.source.ModuleSource;
import org.simantics.scl.compiler.source.StringModuleSource;
-import org.simantics.scl.compiler.source.repository.CompositeModuleSourceRepository;
import org.simantics.scl.compiler.source.repository.MapModuleSourceRepository;
-import org.simantics.scl.compiler.source.repository.SourceRepositories;
import org.simantics.scl.compiler.top.ValueNotFound;
+import org.simantics.scl.runtime.SCLContext;
+import org.simantics.scl.runtime.reporting.SCLReportingHandler;
+import org.simantics.scl.runtime.reporting.WriterSCLReportingHandler;
public class TestBase {
moduleSources[i] = new StringModuleSource(
moduleNames[i], getClass().getClassLoader(), moduleTexts[i]) {
@Override
- protected ImportDeclaration[] getBuiltinImports(UpdateListener listener) {
+ public ImportDeclaration[] getBuiltinImports(UpdateListener listener) {
return ImportDeclaration.ONLY_BUILTINS;
}
};
- ModuleRepository testEnvironment = new ModuleRepository(
+ ModuleRepository testRepository = new ModuleRepository(
PRELUDE_MODULE_REPOSITORY,
new MapModuleSourceRepository(moduleSources));
+ testRepository.setAdvisor(moduleName -> ModuleCompilationOptions.SILENT);
int lastId = moduleNames.length-1;
- Failable<Module> result = testEnvironment.getModule(moduleNames[lastId]);
+ Failable<Module> result = testRepository.getModule(moduleNames[lastId]);
if(!result.didSucceed())
return ((Failure)result).toString(moduleTexts[lastId]);
else {
- Object main = testEnvironment.getRuntimeModule(moduleNames[lastId]).getResult().getValue("main");
- return String.valueOf(main);
+ SCLContext context = SCLContext.getCurrent();
+ StringWriter writer = new StringWriter();
+ Object oldReportingHandler = context.put(SCLReportingHandler.REPORTING_HANDLER, new WriterSCLReportingHandler(writer));
+ try {
+ Object main = testRepository.getRuntimeModule(moduleNames[lastId]).getResult().getValue("main");
+ writer.write(String.valueOf(main));
+ return writer.toString();
+ } finally {
+ context.put(SCLReportingHandler.REPORTING_HANDLER, oldReportingHandler);
+ }
}
}
private String[] readTestParts(String testPath) throws IOException {
InputStream stream = getClass().getResourceAsStream(testPath);
+ if(stream == null)
+ throw new FileNotFoundException(testPath);
try {
byte[] buffer = new byte[1024];
int pos = 0;