]> git.basschouten.com Git - openhab-addons.git/blob
836a84e213ae2cf111189da5851bc150975e0d5e
[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.knx.internal.i18n;
14
15 import static org.junit.jupiter.api.Assertions.*;
16
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.junit.jupiter.api.Test;
19
20 import tuwien.auto.calimero.KNXException;
21 import tuwien.auto.calimero.link.KNXLinkClosedException;
22
23 /**
24  *
25  * @author Holger Friedrich - initial contribution
26  *
27  */
28 @NonNullByDefault
29 class KNXTranslationProviderTest {
30     static final String UNKNOWN = "unknown text";
31     static final String UNKNOWN_PATTERN = "unknown text {0}";
32     static final String UNKNOWN_FIVE = "unknown text 5";
33     static final String UNKNOWN_NULL = "unknown text null";
34     static final String KNX_BINDING_KEY = "binding.knx.name";
35     static final String KNX_BINDING_VALUE = "KNX Binding";
36     static final String CONN_TYPE_PATTERN_KEY = "error.knx-unknown-ip-connection-type";
37     static final String CONN_TYPE_PATTERN_VALUE = "Unknown IP connection type: {0}.";
38     static final String CONN_TYPE_FIVE_VALUE = "Unknown IP connection type: 5.";
39     static final String CONN_TYPE_NULL_VALUE = "Unknown IP connection type: null.";
40
41     @Test
42     void testGetBeforeInit() {
43         // initial state, should not crash and preferably return original strings (w. pattern substitution)
44         assertEquals(UNKNOWN, KNXTranslationProvider.I18N.get(UNKNOWN));
45         assertEquals(UNKNOWN, KNXTranslationProvider.I18N.get(UNKNOWN, 5));
46         assertEquals(UNKNOWN_NULL, KNXTranslationProvider.I18N.get(UNKNOWN_PATTERN, null, null));
47         assertEquals(UNKNOWN_FIVE, KNXTranslationProvider.I18N.get(UNKNOWN_PATTERN, 5));
48         // KNXTranslationProvider.I18N.get(..., null) would cause a compiler warning,
49         // but using a null object of a defined type, it is possible to invoke with null value
50         String s = null;
51         assertEquals(UNKNOWN, KNXTranslationProvider.I18N.get(UNKNOWN, s));
52         assertEquals(UNKNOWN_NULL, KNXTranslationProvider.I18N.get(UNKNOWN_PATTERN, s));
53     }
54
55     @Test
56     void testSetProvider() {
57         // initial state, should not crash
58         KNXTranslationProvider.I18N.setProvider(null, null);
59         assertNotNull(KNXTranslationProvider.I18N.get(UNKNOWN));
60
61         // use mockup classes with known dictionary
62         KNXTranslationProvider.I18N.setProvider(new MockedLocaleProvider(), new MockedTranslationProvider());
63         assertEquals(KNX_BINDING_VALUE, KNXTranslationProvider.I18N.get(KNX_BINDING_KEY));
64         assertEquals(CONN_TYPE_FIVE_VALUE, KNXTranslationProvider.I18N.get(CONN_TYPE_PATTERN_KEY, 5));
65         assertEquals(UNKNOWN, KNXTranslationProvider.I18N.get(UNKNOWN));
66         assertEquals(UNKNOWN, KNXTranslationProvider.I18N.get(UNKNOWN, 5));
67         assertEquals(UNKNOWN_NULL, KNXTranslationProvider.I18N.get(UNKNOWN_PATTERN, null, null));
68         assertEquals(UNKNOWN_FIVE, KNXTranslationProvider.I18N.get(UNKNOWN_PATTERN, 5));
69         // KNXTranslationProvider.I18N.get(..., null) would cause a compiler warning,
70         // but using a null object of a defined type, it is possible to invoke with null value
71         String s = null;
72         assertEquals(UNKNOWN, KNXTranslationProvider.I18N.get(UNKNOWN, s));
73         assertEquals(UNKNOWN_NULL, KNXTranslationProvider.I18N.get(UNKNOWN_PATTERN, s));
74
75         assertEquals(CONN_TYPE_NULL_VALUE, KNXTranslationProvider.I18N.get(CONN_TYPE_PATTERN_KEY, s));
76         assertEquals(CONN_TYPE_PATTERN_VALUE, KNXTranslationProvider.I18N.get(CONN_TYPE_PATTERN_KEY));
77
78         // no locale, should work as fallback to default locale
79         KNXTranslationProvider.I18N.setProvider(null, new MockedTranslationProvider());
80         assertEquals(KNXTranslationProvider.I18N.get(KNX_BINDING_KEY), KNX_BINDING_VALUE);
81
82         // no translations, should return initial string
83         KNXTranslationProvider.I18N.setProvider(new MockedLocaleProvider(), null);
84         assertEquals(KNX_BINDING_KEY, KNXTranslationProvider.I18N.get(KNX_BINDING_KEY));
85
86         // initial state, dictionary should be gone
87         KNXTranslationProvider.I18N.setProvider(null, null);
88         assertEquals(KNX_BINDING_KEY, KNXTranslationProvider.I18N.get(KNX_BINDING_KEY));
89     }
90
91     @Test
92     void testGetLocalizedException() {
93         // initial state, should not crash
94         KNXTranslationProvider.I18N.setProvider(null, null);
95
96         final Exception e = new KNXException("error 1");
97         final Exception se = new KNXLinkClosedException("connection closed", e);
98         assertNotNull(KNXTranslationProvider.I18N.getLocalizedException(e));
99         assertNotNull(KNXTranslationProvider.I18N.getLocalizedException(se));
100         assertEquals("KNXException, error 1", KNXTranslationProvider.I18N.getLocalizedException(e));
101
102         // use mockup classes with known dictionary
103         KNXTranslationProvider.I18N.setProvider(new MockedLocaleProvider(), new MockedTranslationProvider());
104         // exception which is not part off the dictionary
105         assertEquals("KNXLinkClosedException, connection closed",
106                 KNXTranslationProvider.I18N.getLocalizedException(se));
107         // exception which can be translated
108         assertEquals("Translated KNX Exception (KNXException, error 1)",
109                 KNXTranslationProvider.I18N.getLocalizedException(e));
110     }
111 }