package cgeo.geocaching.log;
import static org.assertj.core.api.Java6Assertions.assertThat;
import cgeo.CGeoTestCase;
import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
import cgeo.geocaching.models.Image;
import cgeo.geocaching.settings.Settings;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* LogEntry unit tests
*/
public class LogEntryTest extends CGeoTestCase {
public static void testLogEntry() {
final LogEntry logEntry = new LogEntry.Builder().setDate(100).setLogType(LogType.FOUND_IT).setLog("LOGENTRY").build();
assertThat(logEntry.date).isEqualTo(100);
assertThat(logEntry.getType()).isEqualTo(LogType.FOUND_IT);
assertThat(logEntry.log).isEqualTo("LOGENTRY");
}
public static void testEquals() {
final LogEntry logEntry1 = new LogEntry.Builder().setDate(100).setLogType(LogType.FOUND_IT).setLog("LOGENTRY1").build();
final LogEntry logEntry2 = new LogEntry.Builder().setDate(200).setLogType(LogType.DISCOVERED_IT).setLog("LOGENTRY2").build();
assertThat(logEntry1).isEqualTo(logEntry1);
assertThat(logEntry2).isEqualTo(logEntry2);
assertThat(logEntry1).isNotEqualTo(logEntry2);
}
public static void testGetAddLogImage() {
final Image mockedImage1 = Image.NONE;
final LogEntry logEntry1 = new LogEntry.Builder()
.addLogImage(mockedImage1)
.build();
assertThat(logEntry1.getLogImages()).hasSize(0);
final Image mockedImage2 = new Image.Builder().setTitle("").build();
final LogEntry logEntry2 = new LogEntry.Builder()
.setDate(100).setLogType(LogType.FOUND_IT)
.setLog("LOGENTRY")
.addLogImage(mockedImage2)
.build();
assertThat(logEntry2.getLogImages()).hasSize(1);
assertThat(logEntry2.getLogImages().get(0)).isEqualTo(mockedImage2);
}
public static void testGetImageTitles() {
final String defaultTitle = "• " + CgeoApplication.getInstance().getString(R.string.cache_log_image_default_title);
LogEntry logEntry = new LogEntry.Builder().setDate(100).setLogType(LogType.FOUND_IT).setLog("LOGENTRY").build();
assertThat(logEntry.getLogImages()).hasSize(0);
assertThat(logEntry.getImageTitles()).isEqualTo(defaultTitle);
final Image mockedImage1 = new Image.Builder().setTitle("").build();
logEntry = logEntry.buildUpon().addLogImage(mockedImage1).build();
assertThat(logEntry.getLogImages()).hasSize(1);
assertThat(logEntry.getImageTitles()).isEqualTo(defaultTitle);
final Image mockedImage2 = new Image.Builder().setTitle("TITLE 1").build();
logEntry = logEntry.buildUpon().addLogImage(mockedImage2).build();
final Image mockedImage3 = new Image.Builder().setTitle("TITLE 2").build();
logEntry = logEntry.buildUpon().addLogImage(mockedImage3).build();
assertThat(logEntry.getLogImages()).hasSize(3);
final String titlesWanted = "• TITLE 1\n• TITLE 2";
assertThat(logEntry.getImageTitles()).isEqualTo(titlesWanted);
}
public static void testGetDisplayText() {
final Boolean oldValue = Settings.getPlainLogs();
final LogEntry logEntry1 = new LogEntry.Builder().setDate(100).setLogType(LogType.FOUND_IT).setLog("LOGENTRY").build();
final LogEntry logEntry2 = new LogEntry.Builder().setDate(100).setLogType(LogType.FOUND_IT).setLog("<font color=\"red\">LOGENTRY</font>").build();
final LogEntry logEntry3 = new LogEntry.Builder().setDate(100).setLogType(LogType.FOUND_IT).setLog("<FONT COLOR=\"red\">LOGENTRY</FONT>").build();
final LogEntry logEntry4 = new LogEntry.Builder().setDate(100).setLogType(LogType.FOUND_IT).setLog("<FoNt COlOr=\"red\">LOGENTRY</fOnT>").build();
Settings.setPlainLogs(false);
assertThat(logEntry1.getDisplayText()).isEqualTo("LOGENTRY");
assertThat(logEntry2.getDisplayText()).isEqualTo("<font color=\"red\">LOGENTRY</font>");
assertThat(logEntry3.getDisplayText()).isEqualTo("<FONT COLOR=\"red\">LOGENTRY</FONT>");
assertThat(logEntry4.getDisplayText()).isEqualTo("<FoNt COlOr=\"red\">LOGENTRY</fOnT>");
Settings.setPlainLogs(true);
assertThat(logEntry1.getDisplayText()).isEqualTo("LOGENTRY");
assertThat(logEntry2.getDisplayText()).isEqualTo("LOGENTRY");
assertThat(logEntry3.getDisplayText()).isEqualTo("LOGENTRY");
assertThat(logEntry4.getDisplayText()).isEqualTo("LOGENTRY");
Settings.setPlainLogs(oldValue);
}
public static void testIsOwn() {
final LogEntry logEntry1 = new LogEntry.Builder().setAuthor("userthatisnotthedefaultuser").setDate(100).setLogType(LogType.FOUND_IT).setLog("LOGENTRY").build();
final LogEntry logEntry2 = new LogEntry.Builder().setAuthor(Settings.getUserName()).setDate(100).setLogType(LogType.FOUND_IT).setLog("LOGENTRY").build();
final LogEntry logEntry3 = new LogEntry.Builder().setDate(100).setLogType(LogType.FOUND_IT).setLog("LOGENTRY").build();
assertThat(logEntry1.isOwn()).isFalse();
assertThat(logEntry2.isOwn()).isTrue();
assertThat(logEntry3.isOwn()).isTrue();
}
public static void testComparator() {
final LogEntry logEntry1 = new LogEntry.Builder().setDate(100).setLogType(LogType.FOUND_IT).setLog("logEntry1 is older than logEntry2").build();
final LogEntry logEntry2 = new LogEntry.Builder().setDate(200).setLogType(LogType.FOUND_IT).setLog("logEntry2 is more recent than logEntry1").build();
final List<LogEntry> logList = new ArrayList<>(2);
logList.add(logEntry1);
logList.add(logEntry2);
Collections.sort(logList, LogEntry.DESCENDING_DATE_COMPARATOR);
assertThat(logList).containsExactly(logEntry2, logEntry1);
}
}