2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
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
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.homematic.internal.converter;
15 import static org.hamcrest.CoreMatchers.is;
16 import static org.hamcrest.MatcherAssert.assertThat;
17 import static org.junit.jupiter.api.Assertions.assertThrows;
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;
27 * {@link org.openhab.binding.homematic.internal.converter.type.AbstractTypeConverter#convertToBinding(org.openhab.core.types.Type, HmDatapoint)}.
29 * @author Michael Reitler - Initial Contribution
32 public class ConvertToBindingTest extends BaseConverterTest {
35 public void testDecimalTypeConverter() throws ConverterException {
36 Object convertedValue;
37 TypeConverter<?> dTypeConverter = new DecimalTypeConverter();
39 // the binding is backwards compatible, so clients may still use DecimalType, even if a unit is used
40 floatDp.setUnit("°C");
42 convertedValue = dTypeConverter.convertToBinding(new DecimalType(99.9), floatDp);
43 assertThat(convertedValue, is(99.9));
45 convertedValue = dTypeConverter.convertToBinding(new DecimalType(99.9999999999999999999999999999999), floatDp);
46 assertThat(convertedValue, is(100.0));
48 convertedValue = dTypeConverter.convertToBinding(new DecimalType(99.0), integerDp);
49 assertThat(convertedValue, is(99));
51 convertedValue = dTypeConverter.convertToBinding(new DecimalType(99.9), integerDp);
52 assertThat(convertedValue, is(99));
56 public void testQuantityTypeConverter() throws ConverterException {
57 Object convertedValue;
58 TypeConverter<?> qTypeConverter = new QuantityTypeConverter();
59 floatQuantityDp.setUnit("°C");
61 convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("99.9 °C"), floatQuantityDp);
62 assertThat(convertedValue, is(99.9));
64 floatQuantityDp.setUnit("°C"); // at some points datapoints come with such unit instead of °C
66 convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("451 °F"), floatQuantityDp);
67 assertThat(convertedValue, is(232.777778));
69 floatQuantityDp.setUnit("km/h");
71 convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("70.07 m/s"), floatQuantityDp);
72 assertThat(convertedValue, is(252.252));
74 integerQuantityDp.setUnit("%");
76 convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("99.0 %"), integerQuantityDp);
77 assertThat(convertedValue, is(99));
79 convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("99.9 %"), integerQuantityDp);
80 assertThat(convertedValue, is(99));
82 convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("1"), integerQuantityDp);
83 assertThat(convertedValue, is(100));
85 floatQuantityDp.setUnit("100%"); // not really a unit, but it occurs in homematic datapoints
87 convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("99.0 %"), floatQuantityDp);
88 assertThat(convertedValue, is(0.99));
90 convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("99.9 %"), floatQuantityDp);
91 assertThat(convertedValue, is(0.999));
93 convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("1"), floatQuantityDp);
94 assertThat(convertedValue, is(1.0));
96 integerQuantityDp.setUnit("Lux");
98 convertedValue = qTypeConverter.convertToBinding(new QuantityType<>("42 lx"), integerQuantityDp);
99 assertThat(convertedValue, is(42));
103 public void testQuantityTypeConverterFailsToConvertDecimalType() {
104 QuantityTypeConverter converter = new QuantityTypeConverter();
105 assertThrows(ConverterException.class, () -> converter.convertToBinding(new DecimalType(99.9), floatDp));
109 public void testDecimalTypeConverterFailsToConvertQuantityType() {
110 DecimalTypeConverter converter = new DecimalTypeConverter();
111 assertThrows(ConverterException.class, () -> converter.convertToBinding(new QuantityType<>("99.9 %"), floatDp));