From 6d883052f794f6927f316ad35676db959efb8037 Mon Sep 17 00:00:00 2001
From: Maxime Journot <maxime.journot@c-s.fr>
Date: Thu, 19 Aug 2021 15:28:22 +0200
Subject: [PATCH] Fixed DataSourceTest.testFileName for Windows users.

Also added a constructor DataSource(URI) and a corresponding test.

Fixes #829
---
 src/main/java/org/orekit/data/DataSource.java    |  9 +++++++++
 .../java/org/orekit/data/DataSourceTest.java     | 16 +++++++++++++++-
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/orekit/data/DataSource.java b/src/main/java/org/orekit/data/DataSource.java
index e998708900..a5a8f3c878 100644
--- a/src/main/java/org/orekit/data/DataSource.java
+++ b/src/main/java/org/orekit/data/DataSource.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.net.URI;
 import java.nio.ByteBuffer;
 import java.nio.CharBuffer;
 import java.nio.charset.StandardCharsets;
@@ -105,6 +106,14 @@ public class DataSource {
         this(file.getName(), () -> new FileInputStream(file));
     }
 
+    /** Build an instance from URI only.
+     * @param uri URI of the file
+     * @since 11.0
+     */
+    public DataSource(final URI uri) {
+        this(Paths.get(uri).toFile());
+    }
+
     /** Get the name of the data.
      * @return name of the data
      */
diff --git a/src/test/java/org/orekit/data/DataSourceTest.java b/src/test/java/org/orekit/data/DataSourceTest.java
index f2b0979d9e..681bb8a589 100644
--- a/src/test/java/org/orekit/data/DataSourceTest.java
+++ b/src/test/java/org/orekit/data/DataSourceTest.java
@@ -26,6 +26,7 @@ import java.io.Reader;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Paths;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -51,7 +52,7 @@ public class DataSourceTest {
     @Test
     public void testFileName() throws IOException, URISyntaxException {
         URL url = DirectoryCrawlerTest.class.getClassLoader().getResource("regular-data/UTC-TAI.history");
-        DataSource ds = new DataSource(url.toURI().getPath());
+        DataSource ds = new DataSource(Paths.get(url.toURI()).toString());
         Assert.assertTrue(ds.getName().endsWith("UTC-TAI.history"));
         Assert.assertTrue(ds.getOpener().rawDataIsBinary());
         try (InputStream       is  = ds.getOpener().openStreamOnce();
@@ -73,6 +74,19 @@ public class DataSourceTest {
             checkHistory(br);
         }
     }
+    
+    @Test
+    public void testUri() throws IOException, URISyntaxException {
+        URL url = DirectoryCrawlerTest.class.getClassLoader().getResource("regular-data/UTC-TAI.history");
+        DataSource ds = new DataSource(url.toURI());
+        Assert.assertTrue(ds.getName().endsWith("UTC-TAI.history"));
+        Assert.assertTrue(ds.getOpener().rawDataIsBinary());
+        try (InputStream       is  = ds.getOpener().openStreamOnce();
+             InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
+             BufferedReader    br  = new BufferedReader(isr)) {
+            checkHistory(br);
+        }
+    }
 
     @Test
     public void testDirectInputStream() throws IOException {
-- 
GitLab