]> git.basschouten.com Git - openhab-addons.git/blob
8f60c567e78e48e430d744956968c0d808660cdf
[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.homematic.internal.converter;
14
15 import static org.hamcrest.CoreMatchers.is;
16 import static org.hamcrest.MatcherAssert.assertThat;
17 import static org.junit.jupiter.api.Assertions.assertThrows;
18
19 import org.junit.jupiter.api.Test;
20 import org.openhab.binding.homematic.internal.converter.type.DecimalTypeConverter;
21 import org.openhab.binding.homematic.internal.converter.type.QuantityTypeConverter;
22 import org.openhab.core.library.types.DecimalType;
23 import org.openhab.core.library.types.QuantityType;
24
25 /**
26  * Tests for
27  * {@link org.openhab.binding.homematic.internal.converter.type.AbstractTypeConverter#convertToBinding(org.openhab.core.types.Type, HmDatapoint)}.
28  *
29  * @author Michael Reitler - Initial Contribution
30  *
31  */
32 public class ConvertToBindingTest extends BaseConverterTest {
33
34     @Test
35     public void testDecimalTypeConverter() throws ConverterException {
36         Object convertedValue;
37         TypeConverter<?> dTypeConverter = new DecimalTypeConverter();
38
39         // the binding is backwards compatible, so clients may still use DecimalType, even if a unit is used
40         floatDp.setUnit("°C");
41
42         convertedValue = dTypeConverter.convertToBinding(new DecimalType(99.9), floatDp);
43         assertThat(convertedValue, is(99.9));
44
45         convertedValue = dTypeConverter.convertToBinding(new DecimalType(99.9999999999999999999999999999999), floatDp);
46         assertThat(convertedValue, is(100.0));
47
48         convertedValue = dTypeConverter.convertToBinding(new DecimalType(99.0), integerDp);
49         assertThat(convertedValue, is(99));
50
51         convertedValue = dTypeConverter.convertToBinding(new DecimalType(99.9), integerDp);
52         assertThat(convertedValue, is(99));
53     }
54
55     @Test
56     public void testQuantityTypeConverter() throws ConverterException {
57         Object convertedValue;
58         TypeConverter<?> qTypeConverter = new QuantityTypeConverter();
59         floatQuantityDp.setUnit("°C");
60
61         convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("99.9 °C"), floatQuantityDp);
62         assertThat(convertedValue, is(99.9));
63
64         floatQuantityDp.setUnit("°C"); // at some points datapoints come with such unit instead of °C
65
66         convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("451 °F"), floatQuantityDp);
67         assertThat(convertedValue, is(232.777778));
68
69         floatQuantityDp.setUnit("km/h");
70
71         convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("70.07 m/s"), floatQuantityDp);
72         assertThat(convertedValue, is(252.252));
73
74         integerQuantityDp.setUnit("%");
75
76         convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("99.0 %"), integerQuantityDp);
77         assertThat(convertedValue, is(99));
78
79         convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("99.9 %"), integerQuantityDp);
80         assertThat(convertedValue, is(99));
81
82         convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("1"), integerQuantityDp);
83         assertThat(convertedValue, is(100));
84
85         floatQuantityDp.setUnit("100%"); // not really a unit, but it occurs in homematic datapoints
86
87         convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("99.0 %"), floatQuantityDp);
88         assertThat(convertedValue, is(0.99));
89
90         convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("99.9 %"), floatQuantityDp);
91         assertThat(convertedValue, is(0.999));
92
93         convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("1"), floatQuantityDp);
94         assertThat(convertedValue, is(1.0));
95
96         integerQuantityDp.setUnit("Lux");
97
98         convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("42 lx"), integerQuantityDp);
99         assertThat(convertedValue, is(42));
100     }
101
102     @Test
103     public void testQuantityTypeConverterFailsToConvertDecimalType() {
104         QuantityTypeConverter converter = new QuantityTypeConverter();
105         assertThrows(ConverterException.class, () -> converter.convertToBinding(new DecimalType(99.9), floatDp));
106     }
107
108     @Test
109     public void testDecimalTypeConverterFailsToConvertQuantityType() {
110         DecimalTypeConverter converter = new DecimalTypeConverter();
111         assertThrows(ConverterException.class, () -> converter.convertToBinding(new QuantityType<>("99.9 %"), floatDp));
112     }
113 }