]> git.basschouten.com Git - openhab-addons.git/blob
d0943f381df748b7a192ccdc012ad9f042328bd7
[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.vdr.internal;
14
15 import static org.junit.jupiter.api.Assertions.assertEquals;
16 import static org.junit.jupiter.api.Assertions.assertThrows;
17
18 import java.text.ParseException;
19 import java.time.ZonedDateTime;
20 import java.time.format.DateTimeFormatter;
21
22 import org.eclipse.jdt.annotation.NonNullByDefault;
23 import org.junit.jupiter.api.Test;
24 import org.openhab.binding.vdr.internal.svdrp.SVDRPEpgEvent;
25 import org.openhab.binding.vdr.internal.svdrp.SVDRPException;
26 import org.openhab.binding.vdr.internal.svdrp.SVDRPParseResponseException;
27
28 /**
29  * Specific unit tests to check if {@link SVDRPEpgEvent} parses SVDRP responses correctly
30  *
31  * @author Matthias Klocke - Initial contribution
32  *
33  */
34 @NonNullByDefault
35 public class SVDRPEpgEventTest {
36     private final String epgResponseComplete = """
37             C S19.2E-1-1201-28326 WDR HD Bielefeld
38             E 9886 1610391600 900 4E F
39             T Tagesschau
40             S Aktuelle Nachrichten aus der Welt
41             D Themen u.a.:|* Corona-Pandemie in Deutschland: Verschärfter Lockdown bundesweit in Kraft|* Entmachtung des US-Präsidenten: Demokraten planen Schritte gegen Trump|* Wintereinbruch in Bosnien-Herzegowina: Dramatische Lage der Flüchtlinge an der Grenze zu Kroatien
42             G 20 80
43             X 2 03 deu stereo
44             X 2 03 deu ohne Audiodeskription
45             X 3 01 deu Teletext-Untertitel
46             X 3 20 deu mit DVB-Untertitel
47             X 5 0B deu HD-Video
48             V 1610391600
49             e
50             c
51             End of EPG data\
52             """;
53     private final String epgMissingSubtitle = """
54             C S19.2E-1-1201-28326 WDR HD Bielefeld
55             E 9886 1610391600 900 4E F
56             T Tagesschau
57             D Themen u.a.:|* Corona-Pandemie in Deutschland: Verschärfter Lockdown bundesweit in Kraft|* Entmachtung des US-Präsidenten: Demokraten planen Schritte gegen Trump|* Wintereinbruch in Bosnien-Herzegowina: Dramatische Lage der Flüchtlinge an der Grenze zu Kroatien
58             G 20 80
59             X 2 03 deu stereo
60             X 2 03 deu ohne Audiodeskription
61             X 3 01 deu Teletext-Untertitel
62             X 3 20 deu mit DVB-Untertitel
63             X 5 0B deu HD-Video
64             V 1610391600
65             e
66             c
67             End of EPG data\
68             """;
69     private final String epgParseError = "E 9999999999999999999999999";
70     private final String epgCorruptDate = """
71             C S19.2E-1-1201-28326 WDR HD Bielefeld
72             E 9886 2a10391600 900 4E F
73             T Tagesschau
74             D Themen u.a.:|* Corona-Pandemie in Deutschland: Verschärfter Lockdown bundesweit in Kraft|* Entmachtung des US-Präsidenten: Demokraten planen Schritte gegen Trump|* Wintereinbruch in Bosnien-Herzegowina: Dramatische Lage der Flüchtlinge an der Grenze zu Kroatien
75             G 20 80
76             X 2 03 deu stereo
77             X 2 03 deu ohne Audiodeskription
78             X 3 01 deu Teletext-Untertitel
79             X 3 20 deu mit DVB-Untertitel
80             X 5 0B deu HD-Video
81             V 1610391600
82             e
83             c
84             End of EPG data\
85             """;
86
87     private final String epgMissingEnd = """
88             C S19.2E-1-1201-28326 WDR HD Bielefeld
89             E 9886 1610391600 900 4E F
90             T Tagesschau
91             D Themen u.a.:|* Corona-Pandemie in Deutschland: Verschärfter Lockdown bundesweit in Kraft|* Entmachtung des US-Präsidenten: Demokraten planen Schritte gegen Trump|* Wintereinbruch in Bosnien-Herzegowina: Dramatische Lage der Flüchtlinge an der Grenze zu Kroatien
92             G 20 80
93             X 2 03 deu stereo
94             X 2 03 deu ohne Audiodeskription
95             X 3 01 deu Teletext-Untertitel
96             X 3 20 deu mit DVB-Untertitel
97             X 5 0B deu HD-Video
98             V 1610391600
99             e
100             c
101             """;
102
103     @Test
104     public void testParseEpgEventComplete() throws SVDRPException, ParseException {
105         SVDRPEpgEvent event = SVDRPEpgEvent.parse(epgResponseComplete);
106         assertEquals("Tagesschau", event.getTitle());
107         assertEquals("Aktuelle Nachrichten aus der Welt", event.getSubtitle());
108         assertEquals(15, event.getDuration());
109         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
110         assertEquals(ZonedDateTime.parse("2021-01-11 19:00:00 UTC", dtf).toInstant(), event.getBegin());
111         assertEquals(ZonedDateTime.parse("2021-01-11 19:15:00 UTC", dtf).toInstant(), event.getEnd());
112     }
113
114     @Test
115     public void testParseEpgEventMissingSubtitle() throws SVDRPException {
116         SVDRPEpgEvent event = SVDRPEpgEvent.parse(epgMissingSubtitle);
117         assertEquals("Tagesschau", event.getTitle());
118         assertEquals("", event.getSubtitle());
119     }
120
121     @Test
122     public void testParseEpgEventCorruptDate() {
123         assertThrows(SVDRPParseResponseException.class, () -> {
124             SVDRPEpgEvent.parse(epgCorruptDate);
125         });
126     }
127
128     @Test
129     public void testParseEpgEventMissingEnd() throws SVDRPException, ParseException {
130         SVDRPEpgEvent event = SVDRPEpgEvent.parse(epgMissingEnd);
131         assertEquals("Tagesschau", event.getTitle());
132         assertEquals("", event.getSubtitle());
133         assertEquals(15, event.getDuration());
134         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
135         assertEquals(ZonedDateTime.parse("2021-01-11 19:00:00 UTC", dtf).toInstant(), event.getBegin());
136         assertEquals(ZonedDateTime.parse("2021-01-11 19:15:00 UTC", dtf).toInstant(), event.getEnd());
137     }
138
139     @Test
140     public void testParseExceptionVolumeData() {
141         assertThrows(SVDRPParseResponseException.class, () -> {
142             SVDRPEpgEvent.parse(epgParseError);
143         });
144     }
145 }