]> git.basschouten.com Git - openhab-addons.git/blob
7e983d52b660dc6ad3845332ed2d3cc08acd0d1f
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.sonos.internal;
14
15 import static org.junit.jupiter.api.Assertions.*;
16
17 import java.io.IOException;
18 import java.io.InputStream;
19 import java.nio.charset.StandardCharsets;
20
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.junit.jupiter.api.Test;
23 import org.openhab.binding.sonos.internal.handler.SonosMediaInformation;
24
25 /**
26  * Test for class SonosMediaInformation
27  *
28  * @author Laurent Garnier - Initial contribution
29  */
30 @NonNullByDefault
31 public class SonosMediaInformationTest {
32
33     private static final SonosMetaData METADATA_STREAM_CONTENT = new SonosMetaData("yyy", "yyy", "yyy", "Morning Live",
34             "yyy", "yyy", "yyy", "yyy", "yyy", "yyy");
35     private static final SonosMetaData METADATA_EMPTY_STREAM_CONTENT = new SonosMetaData("yyy", "yyy", "yyy", "", "yyy",
36             "yyy", "yyy", "yyy", "yyy", "yyy");
37
38     private static final SonosMetaData METADATA_RADIOAPP_1 = new SonosMetaData("yyy", "yyy", "yyy",
39             "TYPE=SNG|TITLE Green Day - Time Of Your Life (Good Riddance)|ARTIST |ALBUM ", "yyy", "yyy", "yyy", "yyy",
40             "yyy", "yyy");
41     private static final SonosMetaData METADATA_RADIOAPP_2 = new SonosMetaData("yyy", "yyy", "yyy",
42             "TYPE=SNG|TITLE Time Of Your Life (Good Riddance)|ARTIST Green Day|ALBUM Nimrod", "yyy", "yyy", "yyy",
43             "yyy", "yyy", "yyy");
44     private static final SonosMetaData METADATA_RADIOAPP_ADVERTISEMENT = new SonosMetaData("yyy", "yyy", "yyy",
45             "TYPE=SNG|TITLE Advertisement_Stop|ARTIST |ALBUM ", "yyy", "yyy", "yyy", "yyy", "yyy", "yyy");
46
47     private static final SonosMetaData METADATA_ARTIST_ALBUM_TITLE = new SonosMetaData("xxx", "xxx", "xxx", "xxx",
48             "xxx", "Time Of Your Life (Good Riddance)", "xxx", "xxx", "Nimrod", "Green Day");
49     private static final SonosMetaData METADATA_EMPTY_CREATOR_ARTIST = new SonosMetaData("xxx", "xxx", "xxx", "xxx",
50             "xxx", "Time Of Your Life (Good Riddance)", "xxx", "", "Nimrod", "");
51     private static final SonosMetaData METADATA_EMPTY_ALBUM = new SonosMetaData("xxx", "xxx", "xxx", "xxx", "xxx",
52             "Time Of Your Life (Good Riddance)", "xxx", "Green Day", "", "");
53     private static final SonosMetaData METADATA_EMPTY_TITLE = new SonosMetaData("xxx", "xxx", "xxx", "xxx", "xxx", "",
54             "xxx", "xxx", "Nimrod", "Green Day");
55     private static final SonosMetaData METADATA_ONLY_TITLE = new SonosMetaData("", "", "", "", "",
56             "Time Of Your Life (Good Riddance)", "", "", "", "");
57     private static final SonosMetaData METADATA_EMPTY = new SonosMetaData("", "", "", "", "", "", "", "", "", "");
58
59     @Test
60     public void parseTuneInMediaInfoWithStreamContent() {
61         SonosMediaInformation result = SonosMediaInformation.parseTuneInMediaInfo(null, "Radio One",
62                 METADATA_STREAM_CONTENT);
63         assertNull(result.getArtist());
64         assertNull(result.getAlbum());
65         assertEquals("Radio One", result.getTitle());
66         assertEquals("Radio One - Morning Live", result.getCombinedInfo());
67         assertEquals(true, result.needsUpdate());
68     }
69
70     @Test
71     public void parseTuneInMediaInfoWithoutStreamContent() {
72         SonosMediaInformation result = SonosMediaInformation.parseTuneInMediaInfo(null, "Radio One",
73                 METADATA_EMPTY_STREAM_CONTENT);
74         assertNull(result.getArtist());
75         assertNull(result.getAlbum());
76         assertEquals("Radio One", result.getTitle());
77         assertEquals("Radio One", result.getCombinedInfo());
78         assertEquals(true, result.needsUpdate());
79     }
80
81     @Test
82     public void parseTuneInMediaInfoWithoutTitle() {
83         SonosMediaInformation result = SonosMediaInformation.parseTuneInMediaInfo(null, "", METADATA_STREAM_CONTENT);
84         assertNull(result.getArtist());
85         assertNull(result.getAlbum());
86         assertNull(result.getTitle());
87         assertNull(result.getCombinedInfo());
88         assertEquals(false, result.needsUpdate());
89     }
90
91     @Test
92     public void parseTuneInMediaInfoWithNullParams() {
93         SonosMediaInformation result = SonosMediaInformation.parseTuneInMediaInfo(null, null, null);
94         assertNull(result.getArtist());
95         assertNull(result.getAlbum());
96         assertNull(result.getTitle());
97         assertNull(result.getCombinedInfo());
98         assertEquals(false, result.needsUpdate());
99     }
100
101     @Test
102     public void parseTuneInMediaInfoWithOPMLRequest() throws IOException {
103         InputStream resourceStream = getClass().getResourceAsStream("/OPML.xml");
104         assertNotNull(resourceStream);
105         final String opmlResult = new String(resourceStream.readAllBytes(), StandardCharsets.UTF_8);
106         SonosMediaInformation result = SonosMediaInformation.parseTuneInMediaInfo(opmlResult, "Radio One",
107                 METADATA_STREAM_CONTENT);
108         assertNull(result.getArtist());
109         assertNull(result.getAlbum());
110         assertEquals("RTL2 105.9", result.getTitle());
111         assertEquals("RTL2 105.9 - Le Son Pop-Rock - Paris, France", result.getCombinedInfo());
112         assertEquals(true, result.needsUpdate());
113     }
114
115     @Test
116     public void parseRadioAppMediaInfoWithSongTitle() {
117         SonosMediaInformation result = SonosMediaInformation.parseRadioAppMediaInfo("Radio Two", METADATA_RADIOAPP_1);
118         assertEquals("Green Day", result.getArtist());
119         assertEquals("", result.getAlbum());
120         assertEquals("Time Of Your Life (Good Riddance)", result.getTitle());
121         assertEquals("Radio Two - Green Day - Time Of Your Life (Good Riddance)", result.getCombinedInfo());
122         assertEquals(true, result.needsUpdate());
123     }
124
125     @Test
126     public void parseRadioAppMediaInfoWithSongTitleArtistAlbum() {
127         SonosMediaInformation result = SonosMediaInformation.parseRadioAppMediaInfo("Radio Two", METADATA_RADIOAPP_2);
128         assertEquals("Green Day", result.getArtist());
129         assertEquals("Nimrod", result.getAlbum());
130         assertEquals("Time Of Your Life (Good Riddance)", result.getTitle());
131         assertEquals("Radio Two - Green Day - Nimrod - Time Of Your Life (Good Riddance)", result.getCombinedInfo());
132         assertEquals(true, result.needsUpdate());
133     }
134
135     @Test
136     public void parseRadioAppMediaInfoWithdvertisement() {
137         SonosMediaInformation result = SonosMediaInformation.parseRadioAppMediaInfo("Radio Two",
138                 METADATA_RADIOAPP_ADVERTISEMENT);
139         assertEquals("", result.getArtist());
140         assertEquals("", result.getAlbum());
141         assertEquals("Radio Two", result.getTitle());
142         assertEquals("Radio Two", result.getCombinedInfo());
143         assertEquals(true, result.needsUpdate());
144     }
145
146     @Test
147     public void parseRadioAppMediaInfoWithoutStreamContent() {
148         SonosMediaInformation result = SonosMediaInformation.parseRadioAppMediaInfo("Radio Two",
149                 METADATA_EMPTY_STREAM_CONTENT);
150         assertNull(result.getArtist());
151         assertNull(result.getAlbum());
152         assertEquals("Radio Two", result.getTitle());
153         assertEquals("Radio Two", result.getCombinedInfo());
154         assertEquals(true, result.needsUpdate());
155     }
156
157     @Test
158     public void parseRadioAppMediaInfoWithoutTitle() {
159         SonosMediaInformation result = SonosMediaInformation.parseRadioAppMediaInfo("", METADATA_RADIOAPP_1);
160         assertNull(result.getArtist());
161         assertNull(result.getAlbum());
162         assertNull(result.getTitle());
163         assertNull(result.getCombinedInfo());
164         assertEquals(false, result.needsUpdate());
165     }
166
167     @Test
168     public void parseRadioAppMediaInfoWithNullParams() {
169         SonosMediaInformation result = SonosMediaInformation.parseRadioAppMediaInfo(null, null);
170         assertNull(result.getArtist());
171         assertNull(result.getAlbum());
172         assertNull(result.getTitle());
173         assertNull(result.getCombinedInfo());
174         assertEquals(false, result.needsUpdate());
175     }
176
177     @Test
178     public void parseTrack() {
179         SonosMediaInformation result = SonosMediaInformation.parseTrack(METADATA_ARTIST_ALBUM_TITLE);
180         assertEquals("Green Day", result.getArtist());
181         assertEquals("Nimrod", result.getAlbum());
182         assertEquals("Time Of Your Life (Good Riddance)", result.getTitle());
183         assertEquals("Green Day - Nimrod - Time Of Your Life (Good Riddance)", result.getCombinedInfo());
184         assertEquals(true, result.needsUpdate());
185     }
186
187     @Test
188     public void parseTrackWithoutArtist() {
189         SonosMediaInformation result = SonosMediaInformation.parseTrack(METADATA_EMPTY_CREATOR_ARTIST);
190         assertEquals("", result.getArtist());
191         assertEquals("Nimrod", result.getAlbum());
192         assertEquals("Time Of Your Life (Good Riddance)", result.getTitle());
193         assertEquals("Nimrod - Time Of Your Life (Good Riddance)", result.getCombinedInfo());
194         assertEquals(true, result.needsUpdate());
195     }
196
197     @Test
198     public void parseTrackWithoutAlbum() {
199         SonosMediaInformation result = SonosMediaInformation.parseTrack(METADATA_EMPTY_ALBUM);
200         assertEquals("Green Day", result.getArtist());
201         assertEquals("", result.getAlbum());
202         assertEquals("Time Of Your Life (Good Riddance)", result.getTitle());
203         assertEquals("Green Day - Time Of Your Life (Good Riddance)", result.getCombinedInfo());
204         assertEquals(true, result.needsUpdate());
205     }
206
207     @Test
208     public void parseTrackWithoutTitle() {
209         SonosMediaInformation result = SonosMediaInformation.parseTrack(METADATA_EMPTY_TITLE);
210         assertEquals("Green Day", result.getArtist());
211         assertEquals("Nimrod", result.getAlbum());
212         assertEquals("", result.getTitle());
213         assertEquals("Green Day - Nimrod", result.getCombinedInfo());
214         assertEquals(true, result.needsUpdate());
215     }
216
217     @Test
218     public void parseTrackWithOnlyTitle() {
219         SonosMediaInformation result = SonosMediaInformation.parseTrack(METADATA_ONLY_TITLE);
220         assertEquals("", result.getArtist());
221         assertEquals("", result.getAlbum());
222         assertEquals("Time Of Your Life (Good Riddance)", result.getTitle());
223         assertEquals("Time Of Your Life (Good Riddance)", result.getCombinedInfo());
224         assertEquals(true, result.needsUpdate());
225     }
226
227     @Test
228     public void parseTrackWithEmptyMetaData() {
229         SonosMediaInformation result = SonosMediaInformation.parseTrack(METADATA_EMPTY);
230         assertEquals("", result.getArtist());
231         assertEquals("", result.getAlbum());
232         assertEquals("", result.getTitle());
233         assertEquals("", result.getCombinedInfo());
234         assertEquals(true, result.needsUpdate());
235     }
236
237     @Test
238     public void parseTrackWithNullParam() {
239         SonosMediaInformation result = SonosMediaInformation.parseTrack(null);
240         assertNull(result.getArtist());
241         assertNull(result.getAlbum());
242         assertNull(result.getTitle());
243         assertNull(result.getCombinedInfo());
244         assertEquals(false, result.needsUpdate());
245     }
246
247     @Test
248     public void parseTrackTitle() {
249         SonosMediaInformation result = SonosMediaInformation.parseTrackTitle(METADATA_ARTIST_ALBUM_TITLE);
250         assertNull(result.getArtist());
251         assertNull(result.getAlbum());
252         assertEquals("Time Of Your Life (Good Riddance)", result.getTitle());
253         assertEquals("Time Of Your Life (Good Riddance)", result.getCombinedInfo());
254         assertEquals(true, result.needsUpdate());
255     }
256
257     @Test
258     public void parseTrackTitleWithNullParam() {
259         SonosMediaInformation result = SonosMediaInformation.parseTrackTitle(null);
260         assertNull(result.getArtist());
261         assertNull(result.getAlbum());
262         assertNull(result.getTitle());
263         assertNull(result.getCombinedInfo());
264         assertEquals(false, result.needsUpdate());
265     }
266 }