package cgeo.geocaching.utils;
import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.models.Waypoint;
import android.annotation.SuppressLint;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import junit.framework.TestCase;
import static org.assertj.core.api.Java6Assertions.assertThat;
public class FormatterTest extends TestCase {
/**
* The pattern we get from {@link Formatter#getShortDateFormat()} should be the one used by {@link Formatter#formatShortDate(long)}.
*/
public static void testShortDateFormat() {
final long currentTimeMillis = System.currentTimeMillis();
final String formattedDate = Formatter.formatShortDate(currentTimeMillis);
final String pattern = Formatter.getShortDateFormat();
assertThat(new SimpleDateFormat(pattern, Locale.getDefault()).format(currentTimeMillis)).isEqualTo(formattedDate);
}
public static void testParkingWaypoint() {
assertFormatting(new Waypoint("you can park here", WaypointType.PARKING, false), WaypointType.PARKING.getL10n());
}
public static void testOriginalWaypoint() {
assertFormatting(new Waypoint("an original", WaypointType.ORIGINAL, false), WaypointType.ORIGINAL.getL10n());
}
public static void testOwnWaypoint() {
final Waypoint own = new Waypoint("my own", WaypointType.OWN, true);
own.setPrefix(Waypoint.PREFIX_OWN);
assertFormatting(own, CgeoApplication.getInstance().getString(R.string.waypoint_custom));
}
private static void assertFormatting(final Waypoint waypoint, final String expected) {
assertThat(Formatter.formatWaypointInfo(waypoint)).isEqualTo(expected);
}
@SuppressLint("SdCardPath")
public static void testTruncateCommonSubdir() {
final List<CharSequence> dirs = new ArrayList<>();
dirs.add("/sdcard/Android/data/cgeo.geocaching/files");
dirs.add("/storage/emulated/0/Android/data/cgeo.geocaching/files");
dirs.add("/storage/extSdCard/Android/data/cgeo.geocaching/files");
dirs.add("/mnt/sdcard/Android/data/cgeo.geocaching/files");
dirs.add("/storage/sdcard1/Android/data/cgeo.geocaching/files");
final List<CharSequence> truncated = Formatter.truncateCommonSubdir(dirs);
assertThat(truncated.get(0)).isEqualTo("/sdcard/\u2026");
assertThat(truncated.get(1)).isEqualTo("/storage/emulated/0/\u2026");
assertThat(truncated.get(2)).isEqualTo("/storage/extSdCard/\u2026");
assertThat(truncated.get(3)).isEqualTo("/mnt/sdcard/\u2026");
assertThat(truncated.get(4)).isEqualTo("/storage/sdcard1/\u2026");
}
@SuppressLint("SdCardPath")
public static void testTruncateDuplicate() {
final List<CharSequence> dirs = new ArrayList<>();
dirs.add("/data/data/cgeo.geocaching/files");
dirs.add("/data/data/cgeo.geocaching/files");
final List<CharSequence> truncated = Formatter.truncateCommonSubdir(dirs);
assertThat(truncated.get(0)).isEqualTo("/\u2026");
}
public static void testTruncateNothingInCommon() {
final List<CharSequence> dirs = new ArrayList<>();
dirs.add("/one/directory/files");
dirs.add("/some/other/directory");
final List<CharSequence> truncated = Formatter.truncateCommonSubdir(dirs);
assertThat(truncated.get(0)).isEqualTo("/one/directory/files");
assertThat(truncated.get(1)).isEqualTo("/some/other/directory");
}
@SuppressLint("SdCardPath")
public static void testTruncateCommonSubdirSingleEntry() {
final List<CharSequence> dirs = new ArrayList<>();
dirs.add("/data/data/cgeo.geocaching/files");
final List<CharSequence> truncated = Formatter.truncateCommonSubdir(dirs);
assertThat(truncated.get(0)).isEqualTo("/data/data/cgeo.geocaching/files");
}
}