Added more tests

This commit is contained in:
Erik C. Thauvin 2023-08-20 13:35:52 -07:00
parent 5cf167e7bf
commit 65fb61daf4
3 changed files with 91 additions and 8 deletions

View file

@ -34,7 +34,6 @@ package net.thauvin.erik.semver;
import com.github.mustachejava.DefaultMustacheFactory; import com.github.mustachejava.DefaultMustacheFactory;
import com.github.mustachejava.Mustache; import com.github.mustachejava.Mustache;
import com.github.mustachejava.MustacheFactory;
import com.github.mustachejava.MustacheNotFoundException; import com.github.mustachejava.MustacheNotFoundException;
import javax.annotation.processing.*; import javax.annotation.processing.*;
@ -79,6 +78,11 @@ public class VersionProcessor extends AbstractProcessor {
return template; return template;
} }
private Mustache compileTemplate(final File dir, final String template) {
final var mf = new DefaultMustacheFactory(dir);
return mf.compile(template);
}
private void error(final String s) { private void error(final String s) {
log(Diagnostic.Kind.ERROR, s); log(Diagnostic.Kind.ERROR, s);
} }
@ -232,9 +236,8 @@ public class VersionProcessor extends AbstractProcessor {
private void writeTemplate(final String type, final VersionInfo versionInfo, final String template) private void writeTemplate(final String type, final VersionInfo versionInfo, final String template)
throws IOException { throws IOException {
final File dir = getLocalFile(""); final var dir = getLocalFile("");
final MustacheFactory mf = new DefaultMustacheFactory(dir); final var mustache = compileTemplate(dir, template);
final Mustache mustache = mf.compile(template);
final String templateName = switch (mustache.getName()) { final String templateName = switch (mustache.getName()) {
case Constants.DEFAULT_JAVA_TEMPLATE -> "default (Java)"; case Constants.DEFAULT_JAVA_TEMPLATE -> "default (Java)";
@ -243,7 +246,7 @@ public class VersionProcessor extends AbstractProcessor {
}; };
note("Loaded template: " + templateName); note("Loaded template: " + templateName);
final String fileName = versionInfo.getClassName() + '.' + type; final var fileName = versionInfo.getClassName() + '.' + type;
if (Constants.KOTLIN_TYPE.equalsIgnoreCase(type)) { if (Constants.KOTLIN_TYPE.equalsIgnoreCase(type)) {
final String kaptGenDir = processingEnv.getOptions().get(Constants.KAPT_KOTLIN_GENERATED_OPTION_NAME); final String kaptGenDir = processingEnv.getOptions().get(Constants.KAPT_KOTLIN_GENERATED_OPTION_NAME);
if (kaptGenDir == null) { if (kaptGenDir == null) {

View file

@ -32,13 +32,17 @@
package net.thauvin.erik.semver; package net.thauvin.erik.semver;
import com.github.mustachejava.Mustache;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Properties; import java.util.Properties;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.*;
/** /**
* The <code>VersionProcessorTest</code> class. * The <code>VersionProcessorTest</code> class.
@ -49,7 +53,63 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
*/ */
class VersionProcessorTest { class VersionProcessorTest {
private final VersionProcessor processor = new VersionProcessor(); private final VersionProcessor processor = new VersionProcessor();
private final Version version = new VersionTest(); private final VersionTest version = new VersionTest();
@SuppressWarnings("PMD.AvoidAccessibilityAlteration")
@Test
void testCompileTemplate()
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, IOException {
final var method = processor.getClass().getDeclaredMethod("compileTemplate", File.class, String.class);
method.setAccessible(true);
final var mustache = (Mustache) method.invoke(processor, new File("src/main/resources"),
Constants.DEFAULT_JAVA_TEMPLATE);
assertEquals(Constants.DEFAULT_JAVA_TEMPLATE, mustache.getName(), Constants.DEFAULT_JAVA_TEMPLATE);
try (var writer = new StringWriter()) {
mustache.execute(writer, version).flush();
assertEquals(String.format("""
/*
* This file is automatically generated.
* Do not modify! -- ALL CHANGES WILL BE ERASED!
*/
package %s;
import java.util.Date;
/**
* Provides semantic version information.
*
* @author <a href="https://github.com/ethauvin/semver">Semantic Version Annotation Processor</a>
*/
public final class MyTest {
public static final String PROJECT = "%s";
public static final Date BUILDDATE = new Date(L);
public static final int MAJOR = %d;
public static final int MINOR = %d;
public static final int PATCH = %d;
public static final String PRERELEASE = "%s";
public static final String PRERELEASE_PREFIX = "%s";
public static final String BUILDMETA = "%s";
public static final String BUILDMETA_PREFIX = "%s";
public static final String SEPARATOR = "%s";
public static final String VERSION = "";
/**
* Disables the default constructor.
*/
private MyTest() {
throw new UnsupportedOperationException("Illegal constructor call.");
}
}
""", version.packageName(), version.project(), version.major(), version.minor(), version.patch(),
version.preRelease(), version.preReleasePrefix(), version.buildMeta(),
version.buildMetaPrefix(), version.separator()),
writer.toString());
}
}
@SuppressWarnings("PMD.AvoidAccessibilityAlteration") @SuppressWarnings("PMD.AvoidAccessibilityAlteration")
@Test @Test
@ -62,6 +122,20 @@ class VersionProcessorTest {
assertEquals("James Bond", versionInfo.getProject(), "getProject(James Bond)"); assertEquals("James Bond", versionInfo.getProject(), "getProject(James Bond)");
} }
@SuppressWarnings("PMD.AvoidAccessibilityAlteration")
@Test
void testGetTemplate() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
final Method method = processor.getClass().getDeclaredMethod("getTemplate", boolean.class, Version.class);
method.setAccessible(true);
assertEquals(version.template(), method.invoke(processor, true, version), version.template);
version.setTemplate(Constants.DEFAULT_JAVA_TEMPLATE);
assertEquals(Constants.DEFAULT_TEMPLATE_NAME, method.invoke(processor, true, version),
"default");
assertEquals(Constants.DEFAULT_KOTLIN_TEMPLATE, method.invoke(processor, false, version),
"kotlin");
}
@SuppressWarnings("PMD.AvoidAccessibilityAlteration") @SuppressWarnings("PMD.AvoidAccessibilityAlteration")
@Test @Test
void testParseIntProperty() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { void testParseIntProperty() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {

View file

@ -43,6 +43,8 @@ import java.lang.annotation.Annotation;
*/ */
@SuppressWarnings({"ClassExplicitlyAnnotation", "SameReturnValue", "java:S2187", "PMD.TestClassWithoutTestCases"}) @SuppressWarnings({"ClassExplicitlyAnnotation", "SameReturnValue", "java:S2187", "PMD.TestClassWithoutTestCases"})
class VersionTest implements Version { class VersionTest implements Version {
String template = "myversion.mustache";
@Override @Override
public Class<? extends Annotation> annotationType() { public Class<? extends Annotation> annotationType() {
return null; return null;
@ -160,11 +162,15 @@ class VersionTest implements Version {
@Override @Override
public String template() { public String template() {
return "myversion.mustache"; return template;
} }
@Override @Override
public String type() { public String type() {
return "kt"; return "kt";
} }
public void setTemplate(final String template) {
this.template = template;
}
} }