package ch.unibe.scg.cc.javaFrontend;
import static org.hamcrest.Matchers.arrayWithSize;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.startsWith;
import static org.junit.Assert.assertThat;
import org.junit.Before;
import org.junit.Test;
import ch.unibe.scg.cc.ReplacerNormalizer;
import ch.unibe.scg.cc.regex.Replace;
//@formatter:off
@SuppressWarnings("javadoc")
public class JavaType1ReplacerFactoryTest {
private Replace[] replacers;
@Before
public void setUp() {
replacers = new JavaType1ReplacerFactory().get();
}
@Test
public void checkWhiteSpaces() {
assertThat(replacers.length, greaterThan(2));
final Replace whiteSpaceA = replacers[0];
final Replace whiteSpaceB = replacers[1];
assertThat(whiteSpaceB.allReplaced(whiteSpaceA.allReplaced(sampleClass())),
startsWith("package fish.stink;\n" +
"import java.util.*;\n" +
"import static System.out;\n" +
"public class Rod {\n"));
}
@Test
public void checkVisibility() {
final StringBuilder sb = new StringBuilder("\nprotected static void doIt() {\n");
replacers[5].replaceAll(sb);
assertThat(sb.toString(), is("\nstatic void doIt() {\n"));
}
@Test
public void checkAll() {
final StringBuilder sb = new StringBuilder(sampleClass());
assertThat(replacers, is(arrayWithSize(9)));
final ReplacerNormalizer n = new ReplacerNormalizer(replacers);
n.normalize(sb);
assertThat(
sb.toString(),
is("package fish.stink;\n" +
"import java.util.*;\n" +
"import static System.out;\n" +
"class Rod {\nstatic void main(String[] args) {\n" +
"out.println(\"Hiya, wassup?\");\n" +
"Rod.doIt(new int[] { });\n" +
"}\nstatic void doIt() {\n" +
"if(System.timeInMillis() > 10000)\n" +
"out.println(1337);\nmain(null);\n" +
"}\n}\n" +
""));
}
@Test
public void checkAllOnMethod() {
final StringBuilder sb = new StringBuilder(sampleMethod());
assertThat(replacers, is(arrayWithSize(9)));
final ReplacerNormalizer n = new ReplacerNormalizer(replacers);
n.normalize(sb);
assertThat(sb.toString(), is("static int log10Floor(int x) {" + "\n"
+ "int y = MAX_LOG_10_FOR_LEADING_ZEROS[Integer.numberOfLeadingZeros(x)];" + "\n"
+ "int sgn = (x - POWERS_OF_10[y]) >>> (Integer.SIZE - 1);" + "\n" + "return y - sgn;" + "\n" + "}"));
}
String sampleClass() {
return "package fish.stink;\n"
+ "import java.util.*;\n"
+ "import static System.out;\n\n"
+ "public class Rod {\n"
+ "\tpublic static void main(String[] args) {\n"
+ "\t\tout.println(\"Hiya, wassup?\");\n"
+ "\t\tfish.stink.Rod.doIt(new int[] { 1, 2 ,3 });\n"
+ " }\n" + "\t\t\tprotected static void doIt() {\n"
+ "\t\tif(System.timeInMillis() > 10000)\n"
+ "\t\t\tout.println(1337);\n"
+ "\t\tmain(null);\n"
+ "\t}\n"
+ "}\n";
}
String sampleMethod() {
return "\tstatic int log10Floor(int x) {" + "\n"
+ "\t\tint y = MAX_LOG_10_FOR_LEADING_ZEROS[Integer.numberOfLeadingZeros(x)];" + "\n"
+ "\t\tint sgn = (x - POWERS_OF_10[y]) >>> (Integer.SIZE - 1);"
+ "\n"
+ "\t\treturn y - sgn;"
+ "\n"
+ "\t}";
}
}