1   /* Copyright 2002-2025 CS GROUP
2    * Licensed to CS GROUP (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.data;
18  
19  import org.junit.jupiter.api.Assertions;
20  import org.junit.jupiter.api.Test;
21  
22  import java.io.BufferedReader;
23  import java.io.File;
24  import java.io.IOException;
25  import java.io.InputStream;
26  import java.io.InputStreamReader;
27  import java.io.Reader;
28  import java.net.URISyntaxException;
29  import java.net.URL;
30  import java.nio.charset.StandardCharsets;
31  import java.nio.file.Paths;
32  
33  public class DataSourceTest {
34  
35      @Test
36      public void testNullStream() throws IOException {
37          DataSource ds = new DataSource("non-existent", () -> (InputStream) null);
38          Assertions.assertEquals("non-existent", ds.getName());
39          Assertions.assertNull(ds.getOpener().openStreamOnce());
40          Assertions.assertNull(ds.getOpener().openReaderOnce());
41      }
42  
43      @Test
44      public void testNullReader() throws IOException {
45          DataSource ds = new DataSource("non-existent", () -> (Reader) null);
46          Assertions.assertEquals("non-existent", ds.getName());
47          Assertions.assertNull(ds.getOpener().openStreamOnce());
48          Assertions.assertNull(ds.getOpener().openReaderOnce());
49      }
50  
51      @Test
52      public void testFileName() throws IOException, URISyntaxException {
53          URL url = DirectoryCrawlerTest.class.getClassLoader().getResource("regular-data/UTC-TAI.history");
54          DataSource ds = new DataSource(Paths.get(url.toURI()).toString());
55          Assertions.assertTrue(ds.getName().endsWith("UTC-TAI.history"));
56          Assertions.assertTrue(ds.getOpener().rawDataIsBinary());
57          try (InputStream       is  = ds.getOpener().openStreamOnce();
58               InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
59               BufferedReader    br  = new BufferedReader(isr)) {
60              checkHistory(br);
61          }
62      }
63  
64      @Test
65      public void testFile() throws IOException, URISyntaxException {
66          URL url = DirectoryCrawlerTest.class.getClassLoader().getResource("regular-data/UTC-TAI.history");
67          DataSource ds = new DataSource(new File(url.toURI().getPath()));
68          Assertions.assertTrue(ds.getName().endsWith("UTC-TAI.history"));
69          Assertions.assertTrue(ds.getOpener().rawDataIsBinary());
70          try (InputStream       is  = ds.getOpener().openStreamOnce();
71               InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
72               BufferedReader    br  = new BufferedReader(isr)) {
73              checkHistory(br);
74          }
75      }
76  
77      @Test
78      public void testUri() throws IOException, URISyntaxException {
79          URL url = DirectoryCrawlerTest.class.getClassLoader().getResource("regular-data/UTC-TAI.history");
80          DataSource ds = new DataSource(url.toURI());
81          Assertions.assertTrue(ds.getName().endsWith("UTC-TAI.history"));
82          Assertions.assertTrue(ds.getOpener().rawDataIsBinary());
83          try (InputStream       is  = ds.getOpener().openStreamOnce();
84               InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
85               BufferedReader    br  = new BufferedReader(isr)) {
86              checkHistory(br);
87          }
88      }
89  
90      @Test
91      public void testDirectInputStream() throws IOException {
92          DataSource ds = new DataSource("UTC-TAI.history",
93                                         () -> DataSourceTest.class.
94                                               getClassLoader().
95                                               getResourceAsStream("regular-data/UTC-TAI.history"));
96          Assertions.assertEquals("UTC-TAI.history", ds.getName());
97          Assertions.assertTrue(ds.getOpener().rawDataIsBinary());
98          try (InputStream       is  = ds.getOpener().openStreamOnce();
99               InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
100              BufferedReader    br  = new BufferedReader(isr)) {
101             checkHistory(br);
102         }
103     }
104 
105     @Test
106     public void testInputStreamToReader() throws IOException {
107         DataSource ds = new DataSource("UTC-TAI.history",
108                                        () -> DataSourceTest.class.
109                                              getClassLoader().
110                                              getResourceAsStream("regular-data/UTC-TAI.history"));
111         Assertions.assertEquals("UTC-TAI.history", ds.getName());
112         Assertions.assertTrue(ds.getOpener().rawDataIsBinary());
113         try (Reader         r  = ds.getOpener().openReaderOnce();
114              BufferedReader br = new BufferedReader(r)) {
115             checkHistory(br);
116         }
117     }
118 
119     @Test
120     public void testDirectReader() throws IOException {
121         DataSource ds = new DataSource("UTC-TAI.history",
122                                        () -> new InputStreamReader(DataSourceTest.class.
123                                                                    getClassLoader().
124                                                                    getResourceAsStream("regular-data/UTC-TAI.history"),
125                                                                    StandardCharsets.UTF_8));
126         Assertions.assertEquals("UTC-TAI.history", ds.getName());
127         Assertions.assertFalse(ds.getOpener().rawDataIsBinary());
128         try (Reader         r  = ds.getOpener().openReaderOnce();
129              BufferedReader br = new BufferedReader(r)) {
130             checkHistory(br);
131         }
132     }
133 
134     @Test
135     public void testReaderToInputStream() throws IOException {
136         DataSource ds = new DataSource("UTC-TAI.history",
137                                        () -> new InputStreamReader(DataSourceTest.class.
138                                                                    getClassLoader().
139                                                                    getResourceAsStream("regular-data/UTC-TAI.history"),
140                                                                    StandardCharsets.UTF_8));
141         Assertions.assertEquals("UTC-TAI.history", ds.getName());
142         Assertions.assertFalse(ds.getOpener().rawDataIsBinary());
143         try (InputStream       is  = ds.getOpener().openStreamOnce();
144              InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
145              BufferedReader    br  = new BufferedReader(isr)) {
146             checkHistory(br);
147         }
148     }
149 
150     private void checkHistory(final BufferedReader br) throws IOException {
151         Assertions.assertEquals("", br.readLine());
152         Assertions.assertEquals(" ---------------", br.readLine());
153         Assertions.assertEquals(" UTC-TAI.history", br.readLine());
154         Assertions.assertEquals(" ---------------", br.readLine());
155         Assertions.assertEquals(" RELATIONSHIP BETWEEN TAI AND UTC", br.readLine());
156         for (int lineNumber = 6; lineNumber < 48; ++lineNumber) {
157             br.readLine();
158         }
159         Assertions.assertEquals(" 2015  Jul   1 - 2017  Jan   1    36s", br.readLine());
160         Assertions.assertEquals(" 2017  Jan   1 -                  37s", br.readLine());
161         Assertions.assertEquals(" ----------------------------------------------------------------------", br.readLine());
162         Assertions.assertNull(br.readLine());
163     }
164 
165 }