package joist.sourcegen;
import java.io.File;
import java.io.FileReader;
import java.io.StringWriter;
import joist.util.Copy;
import joist.util.Join;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class GDirectoryTest {
private String directory = "./build/GDirectoryTest";
private File foo = new File(this.directory + "/org/exigencecorp/Foo.java");
@Before
public void setUp() {
if (this.foo.exists()) {
this.foo.delete();
}
new File(this.directory).mkdir();
}
@Test
public void testOutput() throws Exception {
Assert.assertFalse(this.foo.exists());
GDirectory bin = new GDirectory(this.directory);
GClass gc = bin.getClass("org.exigencecorp.Foo");
gc.getMethod("foo").setBody("int i = 0;");
bin.output();
Assert.assertEquals(Join.lines(//
"package org.exigencecorp;",
"",
"public class Foo {",
"",
" public void foo() {",
" int i = 0;",
" }",
"",
"}",
""), this.read(this.foo));
}
@Test
public void testMarkTouched() {
GDirectory bin = new GDirectory(this.directory);
bin.getClass("org.exigencecorp.Foo");
bin.output();
Assert.assertEquals(Copy.list(new File(this.directory + "/org/exigencecorp/Foo.java")), bin.getTouched());
Assert.assertEquals(Copy.list(new File(this.directory + "/org/exigencecorp")), bin.getUsedDirectories());
Assert.assertEquals(Copy.list(//
new File(this.directory + "/org"),
new File(this.directory + "/org/exigencecorp")), bin.getAllDirectories());
}
private String read(File file) throws Exception {
StringWriter writer = new StringWriter();
FileReader reader = new FileReader(file);
char[] buffer = new char[1024 * 4];
int n = 0;
while (-1 != (n = reader.read(buffer))) {
writer.write(buffer, 0, n);
}
reader.close();
return writer.toString();
}
}