package cgeo.geocaching.log; import static org.assertj.core.api.Java6Assertions.assertThat; import cgeo.geocaching.log.LogTemplateProvider.LogContext; import cgeo.geocaching.models.Geocache; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.settings.TestSettings; import java.util.Calendar; import junit.framework.TestCase; public class LogTemplateProviderTest extends TestCase { public static void testApplyTemplatesNone() { final String noTemplates = " no templates "; final String signature = LogTemplateProvider.applyTemplates(noTemplates, new LogContext(null, null, true)); assertThat(signature).isEqualTo(noTemplates); } public static void testApplyTemplates() { // This test can occasionally fail if the current year changes right after the next line. final String currentYear = Integer.toString(Calendar.YEAR); final String signature = LogTemplateProvider.applyTemplates("[DATE]", new LogContext(null, null, true)); assertThat(signature).contains(currentYear); } /** * signature itself can contain templates, therefore nested applying is necessary */ public static void testApplySignature() { final String oldSignature = Settings.getSignature(); try { TestSettings.setSignature("[DATE]"); final String currentDate = LogTemplateProvider.applyTemplates(Settings.getSignature(), new LogContext(null, null, true)); final String signatureTemplate = "Signature [SIGNATURE]"; final String signature = LogTemplateProvider.applyTemplates(signatureTemplate, new LogContext(null, null, true)); assertThat(signature).isEqualTo("Signature " + currentDate); final String currentYear = Integer.toString(Calendar.YEAR); assertThat(signature).contains(currentYear); } finally { TestSettings.setSignature(oldSignature); } } /** * signature must not contain itself as template */ public static void testApplyInvalidSignature() { final String oldSignature = Settings.getSignature(); try { final String signatureTemplate = "[SIGNATURE]"; TestSettings.setSignature(signatureTemplate); final String signature = LogTemplateProvider.applyTemplates(signatureTemplate, new LogContext(null, null, true)); assertThat(signature).isEqualTo("invalid signature template"); } finally { TestSettings.setSignature(oldSignature); } } public static void testNoNumberIncrement() { final Geocache cache = new Geocache(); cache.setGeocode("GC45GGA"); final LogContext context = new LogContext(cache, new LogEntry.Builder().build()); final String template = "[NUMBER]"; final String withIncrement = LogTemplateProvider.applyTemplates(template, context); final String withoutIncrement = LogTemplateProvider.applyTemplatesNoIncrement(template, context); // both strings represent integers with an offset of one. assertThat(Integer.parseInt(withIncrement) - Integer.parseInt(withoutIncrement)).isEqualTo(1); } }