use of org.eclipse.smarthome.core.items.events.GroupItemStateChangedEvent in project smarthome by eclipse.
the class GroupItemTest method assertThatGroupItemChangesRespectGroupFunctionORwithUNDEF.
@Test
public void assertThatGroupItemChangesRespectGroupFunctionORwithUNDEF() throws InterruptedException {
events.clear();
GroupItem groupItem = new GroupItem("root", new SwitchItem("mySwitch"), new ArithmeticGroupFunction.Or(OnOffType.ON, OnOffType.OFF));
groupItem.setItemStateConverter(itemStateConverter);
SwitchItem sw1 = new SwitchItem("switch1");
SwitchItem sw2 = new SwitchItem("switch2");
groupItem.addMember(sw1);
groupItem.addMember(sw2);
groupItem.setEventPublisher(publisher);
// State changes -> one change event is fired
sw1.setState(OnOffType.ON);
waitForAssert(() -> assertThat(events.size(), is(1)));
List<Event> changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
assertThat(changes.size(), is(1));
GroupItemStateChangedEvent change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
assertTrue(change.getOldItemState().equals(UnDefType.NULL));
assertTrue(change.getItemState().equals(OnOffType.ON));
events.clear();
sw2.setState(OnOffType.ON);
sw2.setState(UnDefType.UNDEF);
// wait to see that the event doesn't fire
Thread.sleep(WAIT_EVENT_TO_BE_HANDLED);
assertThat(events.size(), is(0));
assertTrue(groupItem.getState().equals(OnOffType.ON));
}
use of org.eclipse.smarthome.core.items.events.GroupItemStateChangedEvent in project smarthome by eclipse.
the class GroupItemTest method assertThatGroupItemChangesRespectGroupFunctionOR.
@Test
public void assertThatGroupItemChangesRespectGroupFunctionOR() {
events.clear();
GroupItem groupItem = new GroupItem("root", new SwitchItem("mySwitch"), new ArithmeticGroupFunction.Or(OnOffType.ON, OnOffType.OFF));
groupItem.setItemStateConverter(itemStateConverter);
SwitchItem sw1 = new SwitchItem("switch1");
SwitchItem sw2 = new SwitchItem("switch2");
groupItem.addMember(sw1);
groupItem.addMember(sw2);
groupItem.setEventPublisher(publisher);
// State changes -> one change event is fired
sw1.setState(OnOffType.ON);
waitForAssert(() -> assertThat(events.size(), is(1)));
List<Event> changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
assertThat(changes.size(), is(1));
GroupItemStateChangedEvent change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
assertTrue(change.getOldItemState().equals(UnDefType.NULL));
assertTrue(change.getItemState().equals(OnOffType.ON));
assertTrue(groupItem.getState().equals(OnOffType.ON));
}
use of org.eclipse.smarthome.core.items.events.GroupItemStateChangedEvent in project smarthome by eclipse.
the class GroupItemTest method assertThatGroupItemChangesRespectGroupFunctionAND.
@Test
public void assertThatGroupItemChangesRespectGroupFunctionAND() {
events.clear();
GroupItem groupItem = new GroupItem("root", new SwitchItem("mySwitch"), new ArithmeticGroupFunction.And(OnOffType.ON, OnOffType.OFF));
groupItem.setItemStateConverter(itemStateConverter);
SwitchItem sw1 = new SwitchItem("switch1");
SwitchItem sw2 = new SwitchItem("switch2");
groupItem.addMember(sw1);
groupItem.addMember(sw2);
groupItem.setEventPublisher(publisher);
// State changes -> one change event is fired
sw1.setState(OnOffType.ON);
waitForAssert(() -> assertThat(events.size(), is(1)));
List<Event> changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
assertThat(changes.size(), is(1));
GroupItemStateChangedEvent change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
// we expect that the group should now have status "OFF"
assertTrue(change.getOldItemState().equals(UnDefType.NULL));
assertTrue(change.getItemState().equals(OnOffType.OFF));
events.clear();
// State changes -> one change event is fired
sw2.setState(OnOffType.ON);
waitForAssert(() -> assertThat(events.size(), is(1)));
changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
assertThat(changes.size(), is(1));
change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
// we expect that the group should now have status "ON"
assertTrue(change.getOldItemState().equals(OnOffType.OFF));
assertTrue(change.getItemState().equals(OnOffType.ON));
assertTrue(groupItem.getState().equals(OnOffType.ON));
}
use of org.eclipse.smarthome.core.items.events.GroupItemStateChangedEvent in project smarthome by eclipse.
the class GroupItemTest method assertThatGroupItemwithDimmeritemAcceptsGetsPercentTypeStateIfMembersHavePercentTypeStates.
@Test
public void assertThatGroupItemwithDimmeritemAcceptsGetsPercentTypeStateIfMembersHavePercentTypeStates() {
events.clear();
GroupItem groupItem = new GroupItem("root", new DimmerItem("myDimmer"), new ArithmeticGroupFunction.Avg());
groupItem.setItemStateConverter(itemStateConverter);
DimmerItem member1 = new DimmerItem("dimmer1");
groupItem.addMember(member1);
DimmerItem member2 = new DimmerItem("dimmer2");
groupItem.addMember(member2);
groupItem.setEventPublisher(publisher);
member1.setState(new PercentType(50));
waitForAssert(() -> assertThat(events.size(), is(1)));
List<Event> changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
GroupItemStateChangedEvent change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
State newEventState = change.getItemState();
assertTrue(newEventState instanceof PercentType);
assertThat(((PercentType) newEventState).intValue(), is(50));
State newGroupState = groupItem.getState();
assertTrue(newGroupState instanceof PercentType);
assertThat(((PercentType) newGroupState).intValue(), is(50));
events.clear();
member2.setState(new PercentType(10));
waitForAssert(() -> assertThat(events.size(), is(1)));
changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
assertThat(changes.size(), is(1));
change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
newEventState = change.getItemState();
assertTrue(newEventState instanceof PercentType);
assertThat(((PercentType) newEventState).intValue(), is(30));
newGroupState = groupItem.getState();
assertTrue(newGroupState instanceof PercentType);
assertThat(((PercentType) newGroupState).intValue(), is(30));
}
use of org.eclipse.smarthome.core.items.events.GroupItemStateChangedEvent in project smarthome by eclipse.
the class GroupItemTest method assertThatGroupItemPostsEventsForChangesCorrectly.
@Test
public void assertThatGroupItemPostsEventsForChangesCorrectly() {
// from ItemEventFactory.GROUPITEM_STATE_CHANGED_EVENT_TOPIC
String GROUPITEM_STATE_CHANGED_EVENT_TOPIC = "smarthome/items/{itemName}/{memberName}/statechanged";
events.clear();
GroupItem groupItem = new GroupItem("root", new SwitchItem("mySwitch"), new GroupFunction.Equality());
groupItem.setItemStateConverter(itemStateConverter);
SwitchItem member = new SwitchItem("member1");
groupItem.addMember(member);
groupItem.setEventPublisher(publisher);
State oldGroupState = groupItem.getState();
// State changes -> one change event is fired
member.setState(OnOffType.ON);
waitForAssert(() -> assertThat(events.size(), is(1)));
List<Event> changes = events.stream().filter(it -> it instanceof GroupItemStateChangedEvent).collect(Collectors.toList());
assertThat(changes.size(), is(1));
GroupItemStateChangedEvent change = (GroupItemStateChangedEvent) changes.get(0);
assertTrue(change.getItemName().equals(groupItem.getName()));
assertTrue(change.getMemberName().equals(member.getName()));
assertTrue(change.getTopic().equals(GROUPITEM_STATE_CHANGED_EVENT_TOPIC.replace("{memberName}", member.getName()).replace("{itemName}", groupItem.getName())));
assertTrue(change.getItemState().equals(groupItem.getState()));
assertTrue(change.getOldItemState().equals(oldGroupState));
events.clear();
// State doesn't change -> no events are fired
member.setState(member.getState());
assertThat(events.size(), is(0));
}
Aggregations