Skip to content

Commit ca22d82

Browse files
authored
Merge pull request #163 from raynigon/master
Handle parsing for localised value formats
2 parents 603c818 + 7e464c3 commit ca22d82

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

jpx/src/main/java/io/jenetics/jpx/GPX.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1490,6 +1490,7 @@ public void write(final GPX gpx, final Result result)
14901490
try (output) {
14911491
final var format = NumberFormat.getNumberInstance(ENGLISH);
14921492
format.setMaximumFractionDigits(_maximumFractionDigits);
1493+
format.setGroupingUsed(false);
14931494
final Function<Number, String> formatter = value ->
14941495
value != null ? format.format(value) : null;
14951496

jpx/src/main/java/io/jenetics/jpx/Length.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package io.jenetics.jpx;
2121

2222
import static java.lang.String.format;
23+
import static java.util.Locale.ENGLISH;
2324
import static java.util.Objects.requireNonNull;
2425

2526
import java.io.DataInput;
@@ -29,6 +30,8 @@
2930
import java.io.ObjectInputStream;
3031
import java.io.Serial;
3132
import java.io.Serializable;
33+
import java.text.NumberFormat;
34+
import java.text.ParseException;
3235

3336
/**
3437
* Extent of something along its greatest dimension or the extent of space
@@ -220,11 +223,17 @@ public static Length of(final double length, final Unit unit) {
220223
}
221224

222225
static Length parse(final String value) {
223-
final String length = Strings.trim(value);
226+
final Double length = parseDouble(value);
227+
return Length.of(length, Unit.METER);
228+
}
224229

225-
return length != null
226-
? Length.of(Double.parseDouble(length), Unit.METER)
227-
: null;
230+
private static Double parseDouble(final String value) {
231+
NumberFormat formatter = NumberFormat.getNumberInstance(ENGLISH);
232+
try {
233+
return formatter.parse(Strings.trim(value)).doubleValue();
234+
} catch (ParseException e) {
235+
throw new NumberFormatException("Unable to parse " + value);
236+
}
228237
}
229238

230239
/* *************************************************************************

jpx/src/test/java/io/jenetics/jpx/GPXTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import static java.util.Arrays.asList;
2424
import static org.assertj.core.api.Assertions.assertThat;
2525
import static io.jenetics.jpx.ListsTest.revert;
26+
import static org.assertj.core.api.Assertions.assertThatNoException;
2627

2728
import nl.jqno.equalsverifier.EqualsVerifier;
2829

@@ -154,6 +155,19 @@ public void readFromDocument() throws Exception {
154155
assertThat(gpx2).isEqualTo(gpx);
155156
}
156157

158+
@Test
159+
public void writeThenReadDocument() {
160+
GPX gpx = GPX.builder()
161+
.addWayPoint(wp ->
162+
wp.ele(1234.5).build(1.2, 3.4)
163+
)
164+
.build();
165+
String gpxString = GPX.Writer.DEFAULT.toString(gpx);
166+
assertThatNoException().isThrownBy(() -> {
167+
GPX.Reader.DEFAULT.fromString(gpxString);
168+
});
169+
}
170+
157171
//@Test
158172
public void print() throws IOException {
159173
final GPX gpx = nextGPX(new Random(6123)).toBuilder()

0 commit comments

Comments
 (0)