package org.visage.tools.api;
import org.visage.api.VisagecTask;
import com.sun.tools.mjavac.util.JavacFileManager;
import org.visage.tools.api.VisagecTool;
import javax.tools.Diagnostic;
import javax.tools.DiagnosticListener;
import javax.tools.JavaFileObject;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author David Kaspar
*/
public class GenerateTest {
private static final String SEP = File.pathSeparator;
private static final String DIR = File.separator;
private int nerrors;
@Test
public void testGeneratePhase() throws Exception {
String visageLibs = "dist/lib/shared";
String inputDir = "src/share/classes/visage/lang";
String outputDir = getTmpDir().getPath();
nerrors = 0;
VisagecTool tool = VisagecTool.create ();
JavacFileManager manager = tool.getStandardFileManager (null, null, Charset.defaultCharset ());
ArrayList<JavaFileObject> filesToCompile = new ArrayList<JavaFileObject> ();
for (String file : new File (inputDir).list ())
if (file.endsWith (".visage"))
filesToCompile.add (manager.getFileForInput (inputDir + DIR + file));
VisagecTask task = tool.getTask (null, null, new DiagnosticListener<JavaFileObject>() {
public void report (Diagnostic<? extends JavaFileObject> diagnostic) {
System.out.println ("diagnostic = " + diagnostic);
nerrors++;
}
}, Arrays.asList ("-target", "1.5", "-d", outputDir, "-cp",
visageLibs + DIR + "visagec.jar" + SEP + visageLibs + DIR + "visagert.jar" + SEP + visageLibs + DIR + "Scenario.jar" + SEP + inputDir
), filesToCompile);
Iterable parseUnits = task.parse();
assertTrue(parseUnits.iterator().hasNext());
assertEquals(0, nerrors);
Iterable analyzeUnits = task.analyze();
assertTrue(analyzeUnits.iterator().hasNext());
assertEquals(0, nerrors);
Iterable generatedFiles = task.generate ();
assertTrue(generatedFiles.iterator().hasNext());
assertEquals(0, nerrors);
}
private static File getTmpDir() {
try {
File f = File.createTempFile("dummy", "file");
f.deleteOnExit();
File tmpdir = f.getParentFile();
if (tmpdir != null)
return tmpdir;
} catch (IOException ex) {
}
File f = new File("test-output");
f.mkdir();
return f;
}
}