[hdpowerview] Added support for rear blackout panel (#12098)
* [hdpowerview] refactor enum constant names * [hdpowerview] add support for blackout shades * [hdpowerview] unit tests for capabilities 8 & 9 * [hdpowerview] delete no longer valid comment * [hdpowerview] blackout shade position is never UNDEF * [hdpowerview] updated read me * [hdpowerview] refactor unit tests into two classes Signed-off-by: Andrew Fiddian-Green <software@whitebear.ch>
This commit is contained in:
committed by
GitHub
parent
8b32095681
commit
8a2d507b21
@@ -57,8 +57,6 @@ public class HDPowerViewJUnitTests {
|
||||
private static final Pattern VALID_IP_V4_ADDRESS = Pattern
|
||||
.compile("\\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\.|$)){4}\\b");
|
||||
|
||||
private final ShadeCapabilitiesDatabase db = new ShadeCapabilitiesDatabase();
|
||||
|
||||
/*
|
||||
* load a test JSON string from a file.
|
||||
*/
|
||||
@@ -190,16 +188,17 @@ public class HDPowerViewJUnitTests {
|
||||
assertNotNull(capabilitiesValue);
|
||||
|
||||
if (positions != null && capabilitiesValue != null) {
|
||||
Capabilities capabilities = db.getCapabilities(capabilitiesValue.intValue());
|
||||
Capabilities capabilities = new ShadeCapabilitiesDatabase()
|
||||
.getCapabilities(capabilitiesValue.intValue());
|
||||
|
||||
State pos = positions.getState(capabilities, PRIMARY_ZERO_IS_CLOSED);
|
||||
State pos = positions.getState(capabilities, PRIMARY_POSITION);
|
||||
assertEquals(PercentType.class, pos.getClass());
|
||||
|
||||
int position = ((PercentType) pos).intValue();
|
||||
position = position + ((position <= 10) ? 5 : -5);
|
||||
|
||||
ShadePosition targetPosition = new ShadePosition().setPosition(capabilities,
|
||||
PRIMARY_ZERO_IS_CLOSED, position);
|
||||
ShadePosition targetPosition = new ShadePosition().setPosition(capabilities, PRIMARY_POSITION,
|
||||
position);
|
||||
assertNotNull(targetPosition);
|
||||
|
||||
if (allowShadeMovementCommands) {
|
||||
@@ -209,8 +208,8 @@ public class HDPowerViewJUnitTests {
|
||||
ShadePosition actualPosition = newData.positions;
|
||||
assertNotNull(actualPosition);
|
||||
if (actualPosition != null) {
|
||||
assertEquals(targetPosition.getState(capabilities, PRIMARY_ZERO_IS_CLOSED),
|
||||
actualPosition.getState(capabilities, PRIMARY_ZERO_IS_CLOSED));
|
||||
assertEquals(targetPosition.getState(capabilities, PRIMARY_POSITION),
|
||||
actualPosition.getState(capabilities, PRIMARY_POSITION));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -250,73 +249,6 @@ public class HDPowerViewJUnitTests {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parsing of ShadePosition (shade fully up).
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testShadePositionParsingFullyUp() {
|
||||
Capabilities capabilities = db.getCapabilities(0);
|
||||
ShadePosition test = new ShadePosition().setPosition(capabilities, PRIMARY_ZERO_IS_CLOSED, 0);
|
||||
assertNotNull(test);
|
||||
State pos = test.getState(capabilities, PRIMARY_ZERO_IS_CLOSED);
|
||||
assertEquals(PercentType.class, pos.getClass());
|
||||
assertEquals(0, ((PercentType) pos).intValue());
|
||||
pos = test.getState(capabilities, VANE_TILT_COORDS);
|
||||
assertTrue(UnDefType.UNDEF.equals(pos));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parsing of ShadePosition (shade fully down (method 1)).
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testShadePositionParsingShadeFullyDown1() {
|
||||
Capabilities capabilities = db.getCapabilities(0);
|
||||
ShadePosition test = new ShadePosition().setPosition(capabilities, PRIMARY_ZERO_IS_CLOSED, 100);
|
||||
assertNotNull(test);
|
||||
State pos = test.getState(capabilities, PRIMARY_ZERO_IS_CLOSED);
|
||||
assertEquals(PercentType.class, pos.getClass());
|
||||
assertEquals(100, ((PercentType) pos).intValue());
|
||||
pos = test.getState(capabilities, VANE_TILT_COORDS);
|
||||
assertEquals(PercentType.class, pos.getClass());
|
||||
assertEquals(0, ((PercentType) pos).intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parsing of ShadePosition (shade fully down (method 2)).
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testShadePositionParsingShadeFullyDown2() {
|
||||
Capabilities capabilities = db.getCapabilities(0);
|
||||
ShadePosition test = new ShadePosition().setPosition(capabilities, VANE_TILT_COORDS, 0);
|
||||
assertNotNull(test);
|
||||
State pos = test.getState(capabilities, PRIMARY_ZERO_IS_CLOSED);
|
||||
assertEquals(PercentType.class, pos.getClass());
|
||||
assertEquals(100, ((PercentType) pos).intValue());
|
||||
pos = test.getState(capabilities, VANE_TILT_COORDS);
|
||||
assertEquals(PercentType.class, pos.getClass());
|
||||
assertEquals(0, ((PercentType) pos).intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parsing of ShadePosition (shade fully down (method 2) and vane fully open).
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testShadePositionParsingShadeFullyDownVaneOpen() {
|
||||
Capabilities capabilities = db.getCapabilities(0);
|
||||
ShadePosition test = new ShadePosition().setPosition(capabilities, VANE_TILT_COORDS, 100);
|
||||
assertNotNull(test);
|
||||
State pos = test.getState(capabilities, PRIMARY_ZERO_IS_CLOSED);
|
||||
assertEquals(PercentType.class, pos.getClass());
|
||||
assertEquals(100, ((PercentType) pos).intValue());
|
||||
pos = test.getState(capabilities, VANE_TILT_COORDS);
|
||||
assertEquals(PercentType.class, pos.getClass());
|
||||
assertEquals(100, ((PercentType) pos).intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test generic JSON shades response.
|
||||
*/
|
||||
@@ -409,18 +341,18 @@ public class HDPowerViewJUnitTests {
|
||||
assertNotNull(capabilitiesValue);
|
||||
if (capabilitiesValue != null) {
|
||||
assertEquals(7, capabilitiesValue.intValue());
|
||||
|
||||
ShadeCapabilitiesDatabase db = new ShadeCapabilitiesDatabase();
|
||||
Capabilities capabilities = db.getCapabilities(capabilitiesValue);
|
||||
|
||||
State pos = shadePos.getState(capabilities, PRIMARY_ZERO_IS_CLOSED);
|
||||
State pos = shadePos.getState(capabilities, PRIMARY_POSITION);
|
||||
assertEquals(PercentType.class, pos.getClass());
|
||||
assertEquals(59, ((PercentType) pos).intValue());
|
||||
|
||||
pos = shadePos.getState(capabilities, SECONDARY_ZERO_IS_OPEN);
|
||||
pos = shadePos.getState(capabilities, SECONDARY_POSITION);
|
||||
assertEquals(PercentType.class, pos.getClass());
|
||||
assertEquals(35, ((PercentType) pos).intValue());
|
||||
|
||||
pos = shadePos.getState(capabilities, VANE_TILT_COORDS);
|
||||
pos = shadePos.getState(capabilities, VANE_TILT_POSITION);
|
||||
assertEquals(UnDefType.class, pos.getClass());
|
||||
|
||||
assertEquals(3, shadeData.batteryStatus);
|
||||
@@ -442,18 +374,18 @@ public class HDPowerViewJUnitTests {
|
||||
assertNotNull(shadePosition);
|
||||
if (shadePosition != null) {
|
||||
// ==== position2 ====
|
||||
State position2Old = shadePosition.getState(capabilities, SECONDARY_ZERO_IS_OPEN);
|
||||
shadePosition.setPosition(capabilities, PRIMARY_ZERO_IS_CLOSED, 99);
|
||||
State position2New = shadePosition.getState(capabilities, SECONDARY_ZERO_IS_OPEN);
|
||||
State position2Old = shadePosition.getState(capabilities, SECONDARY_POSITION);
|
||||
shadePosition.setPosition(capabilities, PRIMARY_POSITION, 99);
|
||||
State position2New = shadePosition.getState(capabilities, SECONDARY_POSITION);
|
||||
assertEquals(PercentType.class, position2Old.getClass());
|
||||
assertEquals(PercentType.class, position2New.getClass());
|
||||
assertEquals(((PercentType) position2Old).intValue(),
|
||||
((PercentType) position2New).intValue());
|
||||
|
||||
// ==== position2 ====
|
||||
State position1Old = shadePosition.getState(capabilities, PRIMARY_ZERO_IS_CLOSED);
|
||||
shadePosition.setPosition(capabilities, SECONDARY_ZERO_IS_OPEN, 99);
|
||||
State position1New = shadePosition.getState(capabilities, PRIMARY_ZERO_IS_CLOSED);
|
||||
State position1Old = shadePosition.getState(capabilities, PRIMARY_POSITION);
|
||||
shadePosition.setPosition(capabilities, SECONDARY_POSITION, 99);
|
||||
State position1New = shadePosition.getState(capabilities, PRIMARY_POSITION);
|
||||
assertEquals(PercentType.class, position1Old.getClass());
|
||||
assertEquals(PercentType.class, position1New.getClass());
|
||||
assertEquals(((PercentType) position1Old).intValue(),
|
||||
@@ -464,80 +396,4 @@ public class HDPowerViewJUnitTests {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* General tests of the database of known types.
|
||||
*/
|
||||
@Test
|
||||
public void testKnownTypesDatabase() {
|
||||
assertTrue(db.isTypeInDatabase(4));
|
||||
assertTrue(db.isCapabilitiesInDatabase(0));
|
||||
|
||||
assertTrue(db.getCapabilities(6).isPrimaryStateInverted());
|
||||
assertTrue(db.getCapabilities(7).supportsSecondary());
|
||||
|
||||
assertEquals(db.getType(4).getCapabilities(), 0);
|
||||
assertEquals(db.getType(-1).getCapabilities(), -1);
|
||||
|
||||
assertFalse(db.isTypeInDatabase(99));
|
||||
assertFalse(db.isCapabilitiesInDatabase(99));
|
||||
|
||||
assertFalse(db.getCapabilities(0).isPrimaryStateInverted());
|
||||
assertFalse(db.getCapabilities(-1).isPrimaryStateInverted());
|
||||
assertFalse(db.getCapabilities(99).isPrimaryStateInverted());
|
||||
|
||||
assertFalse(db.getCapabilities(0).supportsSecondary());
|
||||
assertFalse(db.getCapabilities(-1).supportsSecondary());
|
||||
assertFalse(db.getCapabilities(99).supportsSecondary());
|
||||
}
|
||||
|
||||
/**
|
||||
* On dual rail shades, it should not be possible to drive the upper rail below the lower rail, or vice-versa. So
|
||||
* the binding code applies constraints on setting such positions. This test checks that the constraint code is
|
||||
* working.
|
||||
*/
|
||||
@Test
|
||||
public void testDualRailConstraints() {
|
||||
ShadePosition shade = new ShadePosition();
|
||||
Capabilities caps = db.getCapabilities(7);
|
||||
|
||||
// ==== OK !! primary at bottom, secondary at top ====
|
||||
shade.setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 100).setPosition(caps, SECONDARY_ZERO_IS_OPEN, 0);
|
||||
assertEquals(PercentType.HUNDRED, shade.getState(caps, PRIMARY_ZERO_IS_CLOSED));
|
||||
assertEquals(PercentType.ZERO, shade.getState(caps, SECONDARY_ZERO_IS_OPEN));
|
||||
|
||||
// ==== OK !! primary at middle, secondary at top ====
|
||||
shade.setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 50).setPosition(caps, SECONDARY_ZERO_IS_OPEN, 0);
|
||||
assertEquals(new PercentType(50), shade.getState(caps, PRIMARY_ZERO_IS_CLOSED));
|
||||
assertEquals(PercentType.ZERO, shade.getState(caps, SECONDARY_ZERO_IS_OPEN));
|
||||
|
||||
// ==== OK !! primary at middle, secondary at middle ====
|
||||
shade.setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 50).setPosition(caps, SECONDARY_ZERO_IS_OPEN, 50);
|
||||
assertEquals(new PercentType(50), shade.getState(caps, PRIMARY_ZERO_IS_CLOSED));
|
||||
assertEquals(new PercentType(50), shade.getState(caps, SECONDARY_ZERO_IS_OPEN));
|
||||
|
||||
// ==== IMPOSSIBLE !! secondary at middle, primary above => test the constraining code ====
|
||||
shade.setPosition(caps, SECONDARY_ZERO_IS_OPEN, 0).setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 100);
|
||||
shade.setPosition(caps, SECONDARY_ZERO_IS_OPEN, 40).setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 25);
|
||||
assertEquals(new PercentType(40), shade.getState(caps, SECONDARY_ZERO_IS_OPEN));
|
||||
assertEquals(new PercentType(40), shade.getState(caps, PRIMARY_ZERO_IS_CLOSED));
|
||||
|
||||
// ==== OK !! secondary at middle, primary below ====
|
||||
shade.setPosition(caps, SECONDARY_ZERO_IS_OPEN, 0).setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 100);
|
||||
shade.setPosition(caps, SECONDARY_ZERO_IS_OPEN, 50).setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 75);
|
||||
assertEquals(new PercentType(50), shade.getState(caps, SECONDARY_ZERO_IS_OPEN));
|
||||
assertEquals(new PercentType(75), shade.getState(caps, PRIMARY_ZERO_IS_CLOSED));
|
||||
|
||||
// ==== IMPOSSIBLE !! primary at middle, secondary below => test the constraining code ====
|
||||
shade.setPosition(caps, SECONDARY_ZERO_IS_OPEN, 0).setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 100);
|
||||
shade.setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 60).setPosition(caps, SECONDARY_ZERO_IS_OPEN, 75);
|
||||
assertEquals(new PercentType(60), shade.getState(caps, PRIMARY_ZERO_IS_CLOSED));
|
||||
assertEquals(new PercentType(60), shade.getState(caps, SECONDARY_ZERO_IS_OPEN));
|
||||
|
||||
// ==== OK !! primary at middle, secondary above ====
|
||||
shade.setPosition(caps, SECONDARY_ZERO_IS_OPEN, 0).setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 100);
|
||||
shade.setPosition(caps, PRIMARY_ZERO_IS_CLOSED, 60).setPosition(caps, SECONDARY_ZERO_IS_OPEN, 25);
|
||||
assertEquals(new PercentType(60), shade.getState(caps, PRIMARY_ZERO_IS_CLOSED));
|
||||
assertEquals(new PercentType(25), shade.getState(caps, SECONDARY_ZERO_IS_OPEN));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,292 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2022 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.hdpowerview;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.openhab.binding.hdpowerview.internal.api.CoordinateSystem.*;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.openhab.binding.hdpowerview.internal.api.ShadePosition;
|
||||
import org.openhab.binding.hdpowerview.internal.database.ShadeCapabilitiesDatabase;
|
||||
import org.openhab.binding.hdpowerview.internal.database.ShadeCapabilitiesDatabase.Capabilities;
|
||||
import org.openhab.core.library.types.PercentType;
|
||||
import org.openhab.core.types.State;
|
||||
import org.openhab.core.types.UnDefType;
|
||||
|
||||
/**
|
||||
* Unit tests for Shade Position setting and getting.
|
||||
*
|
||||
* @author Andrew Fiddian-Green - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class ShadePositionTest {
|
||||
|
||||
private final ShadeCapabilitiesDatabase db = new ShadeCapabilitiesDatabase();
|
||||
|
||||
/**
|
||||
* General tests of the database of known types.
|
||||
*/
|
||||
@Test
|
||||
public void testKnownTypesDatabase() {
|
||||
assertTrue(db.isTypeInDatabase(4));
|
||||
assertTrue(db.isCapabilitiesInDatabase(0));
|
||||
|
||||
assertTrue(db.getCapabilities(0).supportsPrimary());
|
||||
assertTrue(db.getCapabilities(0).supportsTiltOnClosed());
|
||||
assertTrue(db.getCapabilities(1).supportsTiltAnywhere());
|
||||
assertTrue(db.getCapabilities(2).supportsTilt180());
|
||||
assertTrue(db.getCapabilities(3).supportsTiltOnClosed());
|
||||
assertTrue(db.getCapabilities(4).supportsTilt180());
|
||||
assertTrue(db.getCapabilities(5).supportsTilt180());
|
||||
assertFalse(db.getCapabilities(5).supportsPrimary());
|
||||
assertTrue(db.getCapabilities(6).isPrimaryStateInverted());
|
||||
assertTrue(db.getCapabilities(7).supportsSecondary());
|
||||
assertTrue(db.getCapabilities(8).supportsBlackoutShade());
|
||||
assertTrue(db.getCapabilities(9).supportsBlackoutShade());
|
||||
|
||||
assertEquals(db.getType(4).getCapabilities(), 0);
|
||||
assertEquals(db.getType(-1).getCapabilities(), -1);
|
||||
|
||||
assertFalse(db.isTypeInDatabase(99));
|
||||
assertFalse(db.isCapabilitiesInDatabase(99));
|
||||
|
||||
assertFalse(db.getCapabilities(0).isPrimaryStateInverted());
|
||||
assertFalse(db.getCapabilities(-1).isPrimaryStateInverted());
|
||||
assertFalse(db.getCapabilities(99).isPrimaryStateInverted());
|
||||
|
||||
assertFalse(db.getCapabilities(0).supportsSecondary());
|
||||
assertFalse(db.getCapabilities(-1).supportsSecondary());
|
||||
assertFalse(db.getCapabilities(99).supportsSecondary());
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method; test if shade position is a PercentType and that its value is correct.
|
||||
*
|
||||
* @param position the shade position
|
||||
* @param value the test value to compare with
|
||||
*/
|
||||
private void assertShadePosition(State position, int value) {
|
||||
assertEquals(PercentType.class, position.getClass());
|
||||
assertEquals(value, ((PercentType) position).intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parsing of ShadePosition (shade fully up).
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testShadePositionParsingFullyUp() {
|
||||
Capabilities capabilities = db.getCapabilities(0);
|
||||
ShadePosition test = new ShadePosition().setPosition(capabilities, PRIMARY_POSITION, 0);
|
||||
assertNotNull(test);
|
||||
State pos = test.getState(capabilities, PRIMARY_POSITION);
|
||||
assertShadePosition(pos, 0);
|
||||
pos = test.getState(capabilities, VANE_TILT_POSITION);
|
||||
assertTrue(UnDefType.UNDEF.equals(pos));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parsing of ShadePosition (shade fully down (method 1)).
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testShadePositionParsingShadeFullyDown1() {
|
||||
Capabilities capabilities = db.getCapabilities(0);
|
||||
ShadePosition test = new ShadePosition().setPosition(capabilities, PRIMARY_POSITION, 100);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, VANE_TILT_POSITION), 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parsing of ShadePosition (shade fully down (method 2)).
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testShadePositionParsingShadeFullyDown2() {
|
||||
Capabilities capabilities = db.getCapabilities(0);
|
||||
ShadePosition test = new ShadePosition().setPosition(capabilities, VANE_TILT_POSITION, 0);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, VANE_TILT_POSITION), 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parsing of ShadePosition (shade fully down (method 2) and vane fully open).
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testShadePositionParsingShadeFullyDownVaneOpen() {
|
||||
Capabilities capabilities = db.getCapabilities(0);
|
||||
ShadePosition test = new ShadePosition().setPosition(capabilities, VANE_TILT_POSITION, 100);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, VANE_TILT_POSITION), 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* On dual rail shades, it should not be possible to drive the upper rail below the lower rail, or vice-versa. So
|
||||
* the binding code applies constraints on setting such positions. This test checks that the constraint code is
|
||||
* working.
|
||||
*/
|
||||
@Test
|
||||
public void testDualRailConstraints() {
|
||||
Capabilities capabilities = db.getCapabilities(7);
|
||||
ShadePosition test = new ShadePosition();
|
||||
|
||||
// ==== OK !! primary at bottom, secondary at top ====
|
||||
test.setPosition(capabilities, PRIMARY_POSITION, 100).setPosition(capabilities, SECONDARY_POSITION, 0);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 0);
|
||||
|
||||
// ==== OK !! primary at middle, secondary at top ====
|
||||
test.setPosition(capabilities, PRIMARY_POSITION, 50).setPosition(capabilities, SECONDARY_POSITION, 0);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 50);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 0);
|
||||
|
||||
// ==== OK !! primary at middle, secondary at middle ====
|
||||
test.setPosition(capabilities, PRIMARY_POSITION, 50).setPosition(capabilities, SECONDARY_POSITION, 50);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 50);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 50);
|
||||
|
||||
// ==== IMPOSSIBLE !! secondary at middle, primary above => test the constraining code ====
|
||||
test.setPosition(capabilities, SECONDARY_POSITION, 0).setPosition(capabilities, PRIMARY_POSITION, 100);
|
||||
test.setPosition(capabilities, SECONDARY_POSITION, 40).setPosition(capabilities, PRIMARY_POSITION, 25);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 40);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 40);
|
||||
|
||||
// ==== OK !! secondary at middle, primary below ====
|
||||
test.setPosition(capabilities, SECONDARY_POSITION, 0).setPosition(capabilities, PRIMARY_POSITION, 100);
|
||||
test.setPosition(capabilities, SECONDARY_POSITION, 50).setPosition(capabilities, PRIMARY_POSITION, 75);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 75);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 50);
|
||||
|
||||
// ==== IMPOSSIBLE !! primary at middle, secondary below => test the constraining code ====
|
||||
test.setPosition(capabilities, SECONDARY_POSITION, 0).setPosition(capabilities, PRIMARY_POSITION, 100);
|
||||
test.setPosition(capabilities, PRIMARY_POSITION, 60).setPosition(capabilities, SECONDARY_POSITION, 75);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 60);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 60);
|
||||
|
||||
// ==== OK !! primary at middle, secondary above ====
|
||||
test.setPosition(capabilities, SECONDARY_POSITION, 0).setPosition(capabilities, PRIMARY_POSITION, 100);
|
||||
test.setPosition(capabilities, PRIMARY_POSITION, 60).setPosition(capabilities, SECONDARY_POSITION, 25);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 60);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 25);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parsing of DuoLite shades having a secondary blackout shade.
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testDuoliteShadePositionParsing() {
|
||||
// blackout shades have capabilities 8
|
||||
Capabilities capabilities = db.getCapabilities(8);
|
||||
ShadePosition test;
|
||||
|
||||
// both shades up
|
||||
test = new ShadePosition().setPosition(capabilities, PRIMARY_POSITION, 0);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 0);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 0);
|
||||
|
||||
// front shade 50% down
|
||||
test = new ShadePosition().setPosition(capabilities, PRIMARY_POSITION, 50);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 50);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 0);
|
||||
|
||||
// front shade 100% down, back shade 0% down
|
||||
test = new ShadePosition().setPosition(capabilities, PRIMARY_POSITION, 100);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 0);
|
||||
|
||||
// front shade 100% down, back shade 0% down (ALTERNATE)
|
||||
test = new ShadePosition().setPosition(capabilities, SECONDARY_POSITION, 0);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 0);
|
||||
|
||||
// front shade 100% down, back shade 50% down
|
||||
test = new ShadePosition().setPosition(capabilities, SECONDARY_POSITION, 50);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 50);
|
||||
|
||||
// front shade 100% down, back shade 100% down
|
||||
test = new ShadePosition().setPosition(capabilities, SECONDARY_POSITION, 100);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parsing of DuoLite shades having both a secondary blackout shade, and tilt anywhere functionality.
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testDuoliteTiltShadePositionParsing() {
|
||||
// blackout shades with tilt have capabilities 9
|
||||
Capabilities capabilities = db.getCapabilities(9);
|
||||
ShadePosition test;
|
||||
|
||||
// both shades up, tilt 0%
|
||||
test = new ShadePosition().setPosition(capabilities, PRIMARY_POSITION, 0).setPosition(capabilities,
|
||||
VANE_TILT_POSITION, 0);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 0);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 0);
|
||||
|
||||
// front shade 50% down, tilt 30%
|
||||
test = new ShadePosition().setPosition(capabilities, PRIMARY_POSITION, 50).setPosition(capabilities,
|
||||
VANE_TILT_POSITION, 30);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 50);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 0);
|
||||
assertShadePosition(test.getState(capabilities, VANE_TILT_POSITION), 30);
|
||||
|
||||
// front shade 100% down, back shade 0% down, tilt 30%
|
||||
test = new ShadePosition().setPosition(capabilities, PRIMARY_POSITION, 100).setPosition(capabilities,
|
||||
VANE_TILT_POSITION, 30);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 0);
|
||||
assertShadePosition(test.getState(capabilities, VANE_TILT_POSITION), 30);
|
||||
|
||||
// front shade 100% down, back shade 0% down, tilt 30% (ALTERNATE)
|
||||
test = new ShadePosition().setPosition(capabilities, SECONDARY_POSITION, 0).setPosition(capabilities,
|
||||
VANE_TILT_POSITION, 30);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 0);
|
||||
assertShadePosition(test.getState(capabilities, VANE_TILT_POSITION), 30);
|
||||
|
||||
// front shade 100% down, back shade 50% down, tilt 30%
|
||||
test = new ShadePosition().setPosition(capabilities, SECONDARY_POSITION, 50).setPosition(capabilities,
|
||||
VANE_TILT_POSITION, 30);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 50);
|
||||
assertShadePosition(test.getState(capabilities, VANE_TILT_POSITION), 30);
|
||||
|
||||
// front shade 100% down, back shade 100% down, tilt 70%
|
||||
test = new ShadePosition().setPosition(capabilities, SECONDARY_POSITION, 100).setPosition(capabilities,
|
||||
VANE_TILT_POSITION, 70);
|
||||
assertNotNull(test);
|
||||
assertShadePosition(test.getState(capabilities, PRIMARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, SECONDARY_POSITION), 100);
|
||||
assertShadePosition(test.getState(capabilities, VANE_TILT_POSITION), 70);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user