]> git.basschouten.com Git - openhab-addons.git/blob
9d8f66d6eb376e13bd82e5affac58e3278048395
[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 = "C S19.2E-1-1201-28326 WDR HD Bielefeld\n"
37             + "E 9886 1610391600 900 4E F\n" + "T Tagesschau\n" + "S Aktuelle Nachrichten aus der Welt\n"
38             + "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\n"
39             + "G 20 80\n" + "X 2 03 deu stereo\n" + "X 2 03 deu ohne Audiodeskription\n"
40             + "X 3 01 deu Teletext-Untertitel\n" + "X 3 20 deu mit DVB-Untertitel\n" + "X 5 0B deu HD-Video\n"
41             + "V 1610391600\n" + "e\n" + "c\n" + "End of EPG data";
42     private final String epgMissingSubtitle = "C S19.2E-1-1201-28326 WDR HD Bielefeld\n"
43             + "E 9886 1610391600 900 4E F\n" + "T Tagesschau\n"
44             + "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\n"
45             + "G 20 80\n" + "X 2 03 deu stereo\n" + "X 2 03 deu ohne Audiodeskription\n"
46             + "X 3 01 deu Teletext-Untertitel\n" + "X 3 20 deu mit DVB-Untertitel\n" + "X 5 0B deu HD-Video\n"
47             + "V 1610391600\n" + "e\n" + "c\n" + "End of EPG data";
48     private final String epgParseError = "E 9999999999999999999999999";
49     private final String epgCorruptDate = "C S19.2E-1-1201-28326 WDR HD Bielefeld\n" + "E 9886 2a10391600 900 4E F\n"
50             + "T Tagesschau\n"
51             + "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\n"
52             + "G 20 80\n" + "X 2 03 deu stereo\n" + "X 2 03 deu ohne Audiodeskription\n"
53             + "X 3 01 deu Teletext-Untertitel\n" + "X 3 20 deu mit DVB-Untertitel\n" + "X 5 0B deu HD-Video\n"
54             + "V 1610391600\n" + "e\n" + "c\n" + "End of EPG data";
55
56     private final String epgMissingEnd = "C S19.2E-1-1201-28326 WDR HD Bielefeld\n" + "E 9886 1610391600 900 4E F\n"
57             + "T Tagesschau\n"
58             + "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\n"
59             + "G 20 80\n" + "X 2 03 deu stereo\n" + "X 2 03 deu ohne Audiodeskription\n"
60             + "X 3 01 deu Teletext-Untertitel\n" + "X 3 20 deu mit DVB-Untertitel\n" + "X 5 0B deu HD-Video\n"
61             + "V 1610391600\n" + "e\n" + "c\n";
62
63     @Test
64     public void testParseEpgEventComplete() throws SVDRPException, ParseException {
65         SVDRPEpgEvent event = SVDRPEpgEvent.parse(epgResponseComplete);
66         assertEquals("Tagesschau", event.getTitle());
67         assertEquals("Aktuelle Nachrichten aus der Welt", event.getSubtitle());
68         assertEquals(15, event.getDuration());
69         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
70         assertEquals(ZonedDateTime.parse("2021-01-11 19:00:00 UTC", dtf).toInstant(), event.getBegin());
71         assertEquals(ZonedDateTime.parse("2021-01-11 19:15:00 UTC", dtf).toInstant(), event.getEnd());
72     }
73
74     @Test
75     public void testParseEpgEventMissingSubtitle() throws SVDRPException {
76         SVDRPEpgEvent event = SVDRPEpgEvent.parse(epgMissingSubtitle);
77         assertEquals("Tagesschau", event.getTitle());
78         assertEquals("", event.getSubtitle());
79     }
80
81     @Test
82     public void testParseEpgEventCorruptDate() {
83         assertThrows(SVDRPParseResponseException.class, () -> {
84             SVDRPEpgEvent.parse(epgCorruptDate);
85         });
86     }
87
88     @Test
89     public void testParseEpgEventMissingEnd() throws SVDRPException, ParseException {
90         SVDRPEpgEvent event = SVDRPEpgEvent.parse(epgMissingEnd);
91         assertEquals("Tagesschau", event.getTitle());
92         assertEquals("", event.getSubtitle());
93         assertEquals(15, event.getDuration());
94         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
95         assertEquals(ZonedDateTime.parse("2021-01-11 19:00:00 UTC", dtf).toInstant(), event.getBegin());
96         assertEquals(ZonedDateTime.parse("2021-01-11 19:15:00 UTC", dtf).toInstant(), event.getEnd());
97     }
98
99     @Test
100     public void testParseExceptionVolumeData() {
101         assertThrows(SVDRPParseResponseException.class, () -> {
102             SVDRPEpgEvent.parse(epgParseError);
103         });
104     }
105 }