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