]> git.basschouten.com Git - openhab-addons.git/blob
65857dd5a0a7a0b1b575529b87852c4098a7e182
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2024 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 import java.util.List;
21
22 import org.eclipse.jdt.annotation.NonNullByDefault;
23 import org.junit.jupiter.api.Test;
24
25 /**
26  *
27  * @author Laurent Garnier - Initial contribution
28  */
29 @NonNullByDefault
30 public class SonosXMLParserTest {
31
32     @Test
33     public void buildThingTypeIdFromModelWithoutSpace() {
34         assertEquals("Move", SonosXMLParser.buildThingTypeIdFromModelName("Sonos Move"));
35     }
36
37     @Test
38     public void buildThingTypeIdFromModelWithSpace() {
39         assertEquals("RoamSL", SonosXMLParser.buildThingTypeIdFromModelName("Sonos Roam SL"));
40     }
41
42     @Test
43     public void buildThingTypeIdFromModelWithColon() {
44         assertEquals("PLAY5", SonosXMLParser.buildThingTypeIdFromModelName("Sonos PLAY:5"));
45     }
46
47     @Test
48     public void buildThingTypeIdFromSymfoniskModel() {
49         assertEquals("SYMFONISK", SonosXMLParser.buildThingTypeIdFromModelName("SYMFONISK Table lamp"));
50         assertEquals("SYMFONISK", SonosXMLParser.buildThingTypeIdFromModelName("Symfonisk Table lamp"));
51         assertEquals("SYMFONISK", SonosXMLParser.buildThingTypeIdFromModelName("Sonos Symfonisk"));
52     }
53
54     @Test
55     public void buildThingTypeIdFromZP80Model() {
56         assertEquals("CONNECT", SonosXMLParser.buildThingTypeIdFromModelName("Sonos ZP80"));
57     }
58
59     @Test
60     public void buildThingTypeIdFromZP100Model() {
61         assertEquals("CONNECTAMP", SonosXMLParser.buildThingTypeIdFromModelName("Sonos ZP100"));
62     }
63
64     @Test
65     public void buildThingTypeIdFromModelWithAdditionalTextInParenthesis() {
66         assertEquals("OneSL", SonosXMLParser.buildThingTypeIdFromModelName("Sonos One SL (OpenHome)"));
67     }
68
69     @Test
70     public void getRadioTimeFromXML() throws IOException {
71         InputStream resourceStream = getClass().getResourceAsStream("/OPML.xml");
72         assertNotNull(resourceStream);
73         final String opmlResult = new String(resourceStream.readAllBytes(), StandardCharsets.UTF_8);
74         List<String> result = SonosXMLParser.getRadioTimeFromXML(opmlResult);
75         assertEquals(3, result.size());
76         if (result.size() == 3) {
77             assertEquals("RTL2 105.9", result.get(0));
78             assertEquals("Le Son Pop-Rock", result.get(1));
79             assertEquals("Paris, France", result.get(2));
80         }
81     }
82
83     @Test
84     public void getMetaDataFromXML() throws IOException {
85         InputStream resourceStream = getClass().getResourceAsStream("/MetaData.xml");
86         assertNotNull(resourceStream);
87         final String xml = new String(resourceStream.readAllBytes(), StandardCharsets.UTF_8);
88         SonosMetaData sonosMetaData = SonosXMLParser.getMetaDataFromXML(xml);
89         assertEquals("-1", sonosMetaData.getId());
90         assertEquals("-1", sonosMetaData.getParentId());
91         assertEquals("Turn Down for What - Single", sonosMetaData.getAlbum());
92         assertEquals("DJ Snake & Lil Jon", sonosMetaData.getCreator());
93         assertEquals("Turn Down for What", sonosMetaData.getTitle());
94         assertEquals("object.item.audioItem.musicTrack", sonosMetaData.getUpnpClass());
95         assertEquals("x-sonosapi-hls-static:librarytrack%3ai.eoD8VQ5SZOB8QX7?sid=204&flags=8232&sn=9",
96                 sonosMetaData.getResource());
97         assertEquals(
98                 "/getaa?s=1&u=x-sonosapi-hls-static%3alibrarytrack%253ai.eoD8VQ5SZOB8QX7%3fsid%3d204%26flags%3d8232%26sn%3d9",
99                 sonosMetaData.getAlbumArtUri());
100     }
101
102     @Test
103     public void compileMetadataString() {
104         SonosEntry sonosEntry = new SonosEntry("1", "Can't Buy Me Love", "0", "A Hard Day's Night", "", "",
105                 "object.item.audioItem.musicTrack", "");
106         String expected = """
107                 <DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" \
108                 xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" \
109                 xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" \
110                 xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/">\
111                 <item id="1" parentID="0" restricted="true">\
112                 <dc:title>Can&apos;t Buy Me Love</dc:title>\
113                 <upnp:class>object.item.audioItem.musicTrack</upnp:class>\
114                 <desc id="cdudn" nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">RINCON_AssociatedZPUDN</desc>\
115                 </item>\
116                 </DIDL-Lite>\
117                 """;
118         String actual = SonosXMLParser.compileMetadataString(sonosEntry);
119         assertEquals(expected, actual);
120     }
121 }