Merge branch 'tests-idfm' into 'idf-mobilite-net'
Implemented tests for GPS and CSVTools classes See merge request gla-groupe-3/projet!2
This commit is contained in:
commit
c81504b8ec
7 changed files with 261 additions and 8 deletions
|
@ -33,10 +33,10 @@ public final class NetworkFormat {
|
||||||
|
|
||||||
private static final DateTimeFormatter DURATION_FORMATTER = DateTimeFormatter
|
private static final DateTimeFormatter DURATION_FORMATTER = DateTimeFormatter
|
||||||
.ofPattern("HH:mm:ss");
|
.ofPattern("HH:mm:ss");
|
||||||
private static final NumberFormat DURATION_SECONDS_FORMATTER = NumberFormat
|
private static final NumberFormat DURATION_INDIVIDUAL_FORMATTER = NumberFormat
|
||||||
.getIntegerInstance(Locale.ENGLISH);
|
.getIntegerInstance(Locale.ENGLISH);
|
||||||
static {
|
static {
|
||||||
DURATION_SECONDS_FORMATTER.setMinimumIntegerDigits(2);
|
DURATION_INDIVIDUAL_FORMATTER.setMinimumIntegerDigits(2);
|
||||||
}
|
}
|
||||||
private static final Temporal ZERO = LocalTime.parse("00:00:00");
|
private static final Temporal ZERO = LocalTime.parse("00:00:00");
|
||||||
|
|
||||||
|
@ -45,14 +45,22 @@ public final class NetworkFormat {
|
||||||
// Tool class
|
// Tool class
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Convert a {@link java.lang.String} into a {@link java.time.Duration}
|
||||||
|
* @param duration the {@link java.lang.String}
|
||||||
|
* @return the {@link java.time.Duration} object
|
||||||
|
*/
|
||||||
public static Duration parseDuration(String duration) {
|
public static Duration parseDuration(String duration) {
|
||||||
LocalTime time = LocalTime.parse("00:" + duration, DURATION_FORMATTER);
|
LocalTime time = LocalTime.parse("00:" + duration, DURATION_FORMATTER);
|
||||||
return Duration.between(time, ZERO);
|
return Duration.between(time, ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Format a {@link java.time.Duration} into a {@link java.lang.String}
|
||||||
|
* @param duration an object of type {@link java.time.Duration}
|
||||||
|
* @return a String that depicts the duration in format MM:SS
|
||||||
|
*/
|
||||||
public static String formatDuration(Duration duration) {
|
public static String formatDuration(Duration duration) {
|
||||||
return Long.toString(duration.toMinutes()) + ":"
|
return DURATION_INDIVIDUAL_FORMATTER.format(duration.toMinutes()) + ":"
|
||||||
+ DURATION_SECONDS_FORMATTER.format(duration.toSecondsPart());
|
+ DURATION_INDIVIDUAL_FORMATTER.format(duration.toSecondsPart());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get a formatter for the numbers in a GPS coordinate pair
|
/** Get a formatter for the numbers in a GPS coordinate pair
|
||||||
|
|
|
@ -5,6 +5,7 @@ package fr.u_paris.gla.project.io;
|
||||||
|
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.format.ResolverStyle;
|
import java.time.format.ResolverStyle;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -32,11 +33,17 @@ public final class ScheduleFormat {
|
||||||
* @return the sequence of branching
|
* @return the sequence of branching
|
||||||
*/
|
*/
|
||||||
public static List<Integer> getTripSequence(String representation) {
|
public static List<Integer> getTripSequence(String representation) {
|
||||||
// TODO Read a trip sequence from a string
|
|
||||||
|
|
||||||
throw new RuntimeException("Not implemented yet");
|
List<Integer> l = new ArrayList<>();
|
||||||
}
|
for(String s : representation.split(","))
|
||||||
|
l.add(Integer.parseInt(s));
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Create a {@link java.time.format.DateTimeFormatter} object used to format Dates
|
||||||
|
* @return the formatter
|
||||||
|
*/
|
||||||
public static DateTimeFormatter getTimeFormatter() {
|
public static DateTimeFormatter getTimeFormatter() {
|
||||||
return DateTimeFormatter.ofPattern("HH:mm").withResolverStyle(ResolverStyle.LENIENT);
|
return DateTimeFormatter.ofPattern("HH:mm").withResolverStyle(ResolverStyle.LENIENT);
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,11 +52,21 @@ public final class CSVTools {
|
||||||
readCSVFromInputStream(new FileInputStream(file), contentLineConsumer);
|
readCSVFromInputStream(new FileInputStream(file), contentLineConsumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** get a CSV file from a URL, download and parse it, and keep values in memory
|
||||||
|
* @param url the address of the CSV file
|
||||||
|
* @param contentLineConsumer the variable used to store the data
|
||||||
|
* @throws IOException if it's impossible to download the file
|
||||||
|
*/
|
||||||
public static void readCSVFromURL(String url, Consumer<String[]> contentLineConsumer)
|
public static void readCSVFromURL(String url, Consumer<String[]> contentLineConsumer)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
readCSVFromInputStream(new URL(url).openStream(), contentLineConsumer);
|
readCSVFromInputStream(new URL(url).openStream(), contentLineConsumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Save our current CSV variable's data into an actual file
|
||||||
|
* @param filename the saved file's name and path
|
||||||
|
* @param contentLineConsumer our data variable
|
||||||
|
* @throws IOException if we can't write the data into the file
|
||||||
|
*/
|
||||||
public static void writeCSVToFile(String filename,
|
public static void writeCSVToFile(String filename,
|
||||||
Stream<String[]> contentLineConsumer) throws IOException {
|
Stream<String[]> contentLineConsumer) throws IOException {
|
||||||
try (FileWriter writer = new FileWriter(filename, StandardCharsets.UTF_8)) {
|
try (FileWriter writer = new FileWriter(filename, StandardCharsets.UTF_8)) {
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
package fr.u_paris.gla.project.io;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.text.NumberFormat;
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.time.format.DateTimeParseException;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class NetworkFormatTest {
|
||||||
|
|
||||||
|
String t = "00:00";
|
||||||
|
NumberFormat GPS_test = NetworkFormat.getGPSFormatter();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void parseDurationEqual() {
|
||||||
|
|
||||||
|
assertEquals(Duration.ZERO, NetworkFormat.parseDuration(t));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void parseDurationTooBig() {
|
||||||
|
String y = "119:00";
|
||||||
|
assertThrows(DateTimeParseException.class, () -> NetworkFormat.parseDuration(y));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void formatDuration() {
|
||||||
|
assertEquals(t, NetworkFormat.formatDuration(Duration.ZERO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void parseThenFormatDuration(){
|
||||||
|
String t = "00:00";
|
||||||
|
assertEquals(t, NetworkFormat.formatDuration(NetworkFormat.parseDuration(t)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getGPSFormatterPos() {
|
||||||
|
double GPS_pos = 1.456489615649813;
|
||||||
|
assertEquals(String.valueOf(GPS_pos), GPS_test.format(GPS_pos));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getGPSFormatterNeg() {
|
||||||
|
double GPS_neg = -1.456489615649813;
|
||||||
|
assertEquals(String.valueOf(GPS_neg), GPS_test.format(GPS_neg));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
void getGPSFormatterNul() {
|
||||||
|
int GPS_nul = 0;
|
||||||
|
assertEquals(String.valueOf(GPS_nul), GPS_test.format(GPS_nul));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getGPSFormatterBig() {
|
||||||
|
String string_int = "4565156498156489";
|
||||||
|
String string_float = "5675747274674276474267479751262167";
|
||||||
|
BigDecimal GPS_big = new BigDecimal(string_int + "." + string_float);
|
||||||
|
|
||||||
|
|
||||||
|
assertEquals(string_int + "." + string_float.substring(0, NetworkFormat.GPS_PRECISION),
|
||||||
|
GPS_test.format(GPS_big).replace(",", "").replace(" ",""));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package fr.u_paris.gla.project.io;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class ScheduleFormatTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getTripSequence() {
|
||||||
|
String rpz = "4,5,19,21";
|
||||||
|
List<Integer> test = Arrays.asList(4, 5, 19, 21);
|
||||||
|
|
||||||
|
assertEquals(test, ScheduleFormat.getTripSequence(rpz));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getTimeFormatter() {
|
||||||
|
DateTimeFormatter formatter = ScheduleFormat.getTimeFormatter();
|
||||||
|
LocalDateTime date = LocalDateTime.now();
|
||||||
|
String test = date.format(formatter);
|
||||||
|
//format date: YYYY-MM-DDTHH:MM:SS.DECIMAL
|
||||||
|
assertEquals(date.toString().substring(11, 16), test);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
76
src/test/java/fr/u_paris/gla/project/utils/CSVToolsTest.java
Normal file
76
src/test/java/fr/u_paris/gla/project/utils/CSVToolsTest.java
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
package fr.u_paris.gla.project.utils;
|
||||||
|
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class CSVToolsTest {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void readCSVFromURL_invalid() {
|
||||||
|
assertThrows(IOException.class,() -> {
|
||||||
|
Consumer<String[]> test = s -> System.out.println(Arrays.toString(s));
|
||||||
|
CSVTools.readCSVFromURL("https://google.fr",
|
||||||
|
test);
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void readCSVFromURL_valid() {
|
||||||
|
assertDoesNotThrow(() -> {
|
||||||
|
Consumer<String[]> test = s -> System.out.println(Arrays.toString(s));
|
||||||
|
CSVTools.readCSVFromURL("https://people.sc.fsu.edu/~jburkardt/data/csv/addresses.csv",
|
||||||
|
test);
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeCSVToFile() {
|
||||||
|
|
||||||
|
assertDoesNotThrow(() -> {
|
||||||
|
String[] stuff = {"jsqdsqdsqsqffdfgzava", "pfezegrrbeebn", "dfbsduifzegbczi", "sdfsdfcy"};
|
||||||
|
String[][] t = {stuff, stuff};
|
||||||
|
Stream<String[]> test = Arrays.stream(t);
|
||||||
|
CSVTools.writeCSVToFile("test.csv", test);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeCSVToFile_specialName() {
|
||||||
|
|
||||||
|
assertDoesNotThrow(() -> {
|
||||||
|
String[] stuff = {"jsqdsqdsqsqffdfgzava", "pfezegrrbeebn", "dfbsduifzegbczi", "sdfsdfcy"};
|
||||||
|
String[][] t = {stuff, stuff};
|
||||||
|
Stream<String[]> test = Arrays.stream(t);
|
||||||
|
CSVTools.writeCSVToFile("éè'-'_-éè_à.csv", test);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeCSVToFile_invalidName() {
|
||||||
|
|
||||||
|
assertThrows( IOException.class ,() -> {
|
||||||
|
String[] stuff = {"jsqdsqdsqsqffdfgzava", "pfezegrrbeebn", "dfbsduifzegbczi", "sdfsdfcy"};
|
||||||
|
String[][] t = {stuff, stuff};
|
||||||
|
Stream<String[]> test = Arrays.stream(t);
|
||||||
|
CSVTools.writeCSVToFile(".", test);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
39
src/test/java/fr/u_paris/gla/project/utils/GPSTest.java
Normal file
39
src/test/java/fr/u_paris/gla/project/utils/GPSTest.java
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
package fr.u_paris.gla.project.utils;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class GPSTest {
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void distance_SameLat(){
|
||||||
|
assertDoesNotThrow(
|
||||||
|
() -> {
|
||||||
|
GPS.distance(5, 3, 5, 11);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void distance_SameLon(){
|
||||||
|
assertDoesNotThrow(
|
||||||
|
() -> {
|
||||||
|
GPS.distance(5, 3, 7, 3);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void distance_SamePoint() {
|
||||||
|
assertEquals(0.0, GPS.distance(5, 3, 5, 3) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void distance_NegativePoint(){
|
||||||
|
assertNotEquals(0.0, GPS.distance(-5, 7, -13, 4));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Reference in a new issue