import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.junit.Test;
import de.fuberlin.Main;
/**
* Not a real unit test at the moment,
* but useful for quickly testing parameters to main()
*/
public class MainTest {
static String readFile(String file) throws FileNotFoundException {
BufferedReader reader = new BufferedReader(new FileReader(file));
String content = "";
String line;
try {
while ((line = reader.readLine()) != null) {
content += line + '\n';
}
} catch (IOException e) {
e.printStackTrace();
return "";
}
return content;
}
// Helper
static String createEmptyFile() {
File file;
try {
file = File.createTempFile("test", ".tmp");
} catch (IOException e) {
System.err.println("Failed to create temporary file: " + e);
return "";
}
return file.getAbsolutePath();
}
// Helper
static String createFile(String content) {
File file = null;
try {
file = File.createTempFile("test", ".ll");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(content);
writer.close();
} catch (IOException e) {
System.err.println("Failed to create temporary file: " + e);
return "";
}
assert(file != null);
return file.getAbsolutePath();
}
@Test
public void testAllProjecta() throws Exception {
final String inputFile = createFile("def int main() { return 0; }");
final String outputFile = createEmptyFile();
String[] args = {"-f", inputFile, "-o", outputFile};
Main.main(args);
// check output file
String output = readFile(outputFile);
System.out.println(outputFile);
assertFalse(output.isEmpty());
System.out.println(output);
}
@Test
public void testLlvmToMachineCode() throws Exception {
final String inputFile = createFile(
"declare i32 @puts(i8*) nounwind\n" +
"declare i32 @printf(i8*, ...) nounwind\n" +
"define i32 @main() nounwind {\n" +
"ret i32 0;\n" +
"<label>:1\n" +
"}\n"
);
final String outputFile = createEmptyFile();
String[] args = {"-llvm", inputFile, "-o", outputFile};
Main.main(args);
// check output file
String output = readFile(outputFile);
System.out.println(outputFile);
assertFalse(output.isEmpty());
System.out.println(output);
}
}