2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
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
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.sonos.internal;
15 import static org.junit.jupiter.api.Assertions.*;
17 import java.io.IOException;
18 import java.io.InputStream;
19 import java.nio.charset.StandardCharsets;
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.junit.jupiter.api.Test;
23 import org.openhab.binding.sonos.internal.handler.SonosMediaInformation;
26 * Test for class SonosMediaInformation
28 * @author Laurent Garnier - Initial contribution
31 public class SonosMediaInformationTest {
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");
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",
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",
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");
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("", "", "", "", "", "", "", "", "", "");
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());