1   /* Copyright 2002-2022 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  
20  import java.io.BufferedReader;
21  import java.io.File;
22  import java.io.IOException;
23  import java.io.InputStream;
24  import java.io.InputStreamReader;
25  import java.io.Reader;
26  import java.net.URISyntaxException;
27  import java.net.URL;
28  import java.nio.charset.StandardCharsets;
29  import java.nio.file.Paths;
30  
31  import org.junit.Assert;
32  import org.junit.Test;
33  
34  public class DataSourceTest {
35  
36      @Test
37      public void testNullStream() throws IOException {
38          DataSource ds = new DataSource("non-existent", () -> (InputStream) null);
39          Assert.assertEquals("non-existent", ds.getName());
40          Assert.assertNull(ds.getOpener().openStreamOnce());
41          Assert.assertNull(ds.getOpener().openReaderOnce());
42      }
43  
44      @Test
45      public void testNullReader() throws IOException {
46          DataSource ds = new DataSource("non-existent", () -> (Reader) null);
47          Assert.assertEquals("non-existent", ds.getName());
48          Assert.assertNull(ds.getOpener().openStreamOnce());
49          Assert.assertNull(ds.getOpener().openReaderOnce());
50      }
51  
52      @Test
53      public void testFileName() throws IOException, URISyntaxException {
54          URL url = DirectoryCrawlerTest.class.getClassLoader().getResource("regular-data/UTC-TAI.history");
55          DataSource ds = new DataSource(Paths.get(url.toURI()).toString());
56          Assert.assertTrue(ds.getName().endsWith("UTC-TAI.history"));
57          Assert.assertTrue(ds.getOpener().rawDataIsBinary());
58          try (InputStream       is  = ds.getOpener().openStreamOnce();
59               InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
60               BufferedReader    br  = new BufferedReader(isr)) {
61              checkHistory(br);
62          }
63      }
64  
65      @Test
66      public void testFile() throws IOException, URISyntaxException {
67          URL url = DirectoryCrawlerTest.class.getClassLoader().getResource("regular-data/UTC-TAI.history");
68          DataSource ds = new DataSource(new File(url.toURI().getPath()));
69          Assert.assertTrue(ds.getName().endsWith("UTC-TAI.history"));
70          Assert.assertTrue(ds.getOpener().rawDataIsBinary());
71          try (InputStream       is  = ds.getOpener().openStreamOnce();
72               InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
73               BufferedReader    br  = new BufferedReader(isr)) {
74              checkHistory(br);
75          }
76      }
77      
78      @Test
79      public void testUri() throws IOException, URISyntaxException {
80          URL url = DirectoryCrawlerTest.class.getClassLoader().getResource("regular-data/UTC-TAI.history");
81          DataSource ds = new DataSource(url.toURI());
82          Assert.assertTrue(ds.getName().endsWith("UTC-TAI.history"));
83          Assert.assertTrue(ds.getOpener().rawDataIsBinary());
84          try (InputStream       is  = ds.getOpener().openStreamOnce();
85               InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
86               BufferedReader    br  = new BufferedReader(isr)) {
87              checkHistory(br);
88          }
89      }
90  
91      @Test
92      public void testDirectInputStream() throws IOException {
93          DataSource ds = new DataSource("UTC-TAI.history",
94                                         () -> DataSourceTest.class.
95                                               getClassLoader().
96                                               getResourceAsStream("regular-data/UTC-TAI.history"));
97          Assert.assertEquals("UTC-TAI.history", ds.getName());
98          Assert.assertTrue(ds.getOpener().rawDataIsBinary());
99          try (InputStream       is  = ds.getOpener().openStreamOnce();
100              InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
101              BufferedReader    br  = new BufferedReader(isr)) {
102             checkHistory(br);
103         }
104     }
105 
106     @Test
107     public void testInputStreamToReader() throws IOException {
108         DataSource ds = new DataSource("UTC-TAI.history",
109                                        () -> DataSourceTest.class.
110                                              getClassLoader().
111                                              getResourceAsStream("regular-data/UTC-TAI.history"));
112         Assert.assertEquals("UTC-TAI.history", ds.getName());
113         Assert.assertTrue(ds.getOpener().rawDataIsBinary());
114         try (Reader         r  = ds.getOpener().openReaderOnce();
115              BufferedReader br = new BufferedReader(r)) {
116             checkHistory(br);
117         }
118     }
119 
120     @Test
121     public void testDirectReader() throws IOException {
122         DataSource ds = new DataSource("UTC-TAI.history",
123                                        () -> new InputStreamReader(DataSourceTest.class.
124                                                                    getClassLoader().
125                                                                    getResourceAsStream("regular-data/UTC-TAI.history"),
126                                                                    StandardCharsets.UTF_8));
127         Assert.assertEquals("UTC-TAI.history", ds.getName());
128         Assert.assertFalse(ds.getOpener().rawDataIsBinary());
129         try (Reader         r  = ds.getOpener().openReaderOnce();
130              BufferedReader br = new BufferedReader(r)) {
131             checkHistory(br);
132         }
133     }
134 
135     @Test
136     public void testReaderToInputStream() throws IOException {
137         DataSource ds = new DataSource("UTC-TAI.history",
138                                        () -> new InputStreamReader(DataSourceTest.class.
139                                                                    getClassLoader().
140                                                                    getResourceAsStream("regular-data/UTC-TAI.history"),
141                                                                    StandardCharsets.UTF_8));
142         Assert.assertEquals("UTC-TAI.history", ds.getName());
143         Assert.assertFalse(ds.getOpener().rawDataIsBinary());
144         try (InputStream       is  = ds.getOpener().openStreamOnce();
145              InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
146              BufferedReader    br  = new BufferedReader(isr)) {
147             checkHistory(br);
148         }
149     }
150 
151     private void checkHistory(final BufferedReader br) throws IOException {
152         Assert.assertEquals("", br.readLine());
153         Assert.assertEquals(" ---------------", br.readLine());
154         Assert.assertEquals(" UTC-TAI.history", br.readLine());
155         Assert.assertEquals(" ---------------", br.readLine());
156         Assert.assertEquals(" RELATIONSHIP BETWEEN TAI AND UTC", br.readLine());
157         for (int lineNumber = 6; lineNumber < 47; ++lineNumber) {
158             br.readLine();
159         }
160         Assert.assertEquals(" 2012  Jul   1 - 2015  Jul   1    35s", br.readLine());
161         Assert.assertEquals(" 2015  Jul   1 -                  36s", br.readLine());
162         Assert.assertEquals(" ----------------------------------------------------------------------", br.readLine());
163         Assert.assertNull(br.readLine());
164     }
165 
166 }