2 * Copyright (c) 2010-2020 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.yamahareceiver.internal.protocol.xml;
15 import static org.junit.Assert.assertEquals;
16 import static org.mockito.ArgumentMatchers.eq;
17 import static org.mockito.Mockito.verify;
18 import static org.openhab.binding.yamahareceiver.internal.TestModels.*;
19 import static org.openhab.binding.yamahareceiver.internal.YamahaReceiverBindingConstants.Inputs.*;
21 import java.util.function.Consumer;
23 import org.junit.Test;
24 import org.mockito.ArgumentCaptor;
25 import org.mockito.Captor;
26 import org.mockito.Mock;
27 import org.openhab.binding.yamahareceiver.internal.state.PresetInfoState;
28 import org.openhab.binding.yamahareceiver.internal.state.PresetInfoStateListener;
31 * Unit test for {@link InputWithPresetControlXML}.
33 * @author Tomasz Maruszak - Initial contribution
35 public class InputWithPresetControlXMLTest extends AbstractZoneControlXMLTest {
37 private InputWithPresetControlXML subject;
40 private PresetInfoStateListener presetInfoStateListener;
43 private ArgumentCaptor<PresetInfoState> presetInfoStateArg;
45 private void given(String model, String input, Consumer<ModelContext> setup) throws Exception {
46 ctx.prepareForModel(model);
48 DeviceInformationXML deviceInformation = new DeviceInformationXML(con, deviceInformationState);
49 deviceInformation.update();
53 subject = new InputWithPresetControlXML(input, con, presetInfoStateListener, deviceInformationState);
57 public void given_RX_S601D_and_NET_RADIO_when_preset1_then_sendsProperCommand() throws Exception {
58 given(RX_S601D, INPUT_NET_RADIO, ctx -> {
60 "<NET_RADIO><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></NET_RADIO>",
61 "NET_RADIO_Play_Control_Preset_Preset_Sel_Item.xml");
63 "<NET_RADIO><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></NET_RADIO>",
64 "NET_RADIO_Play_Control_Preset_Preset_Sel.xml");
68 subject.selectItemByPresetNumber(1);
71 verify(presetInfoStateListener).presetInfoUpdated(presetInfoStateArg.capture());
72 PresetInfoState state = presetInfoStateArg.getValue();
75 eq("<NET_RADIO><Play_Control><Preset><Preset_Sel>1</Preset_Sel></Preset></Play_Control></NET_RADIO>"));
76 assertEquals("1 : NET RADIO Chilli ZET PL", state.presetChannelNames.get(0).getName());
77 assertEquals(1, state.presetChannelNames.get(0).getValue());
78 assertEquals("2 : NET RADIO Polskie Radio 24", state.presetChannelNames.get(1).getName());
79 assertEquals(2, state.presetChannelNames.get(1).getValue());
83 public void given_RX_V3900_and_NET_RADIO_when_preset1_then_sendsProperCommand() throws Exception {
84 given(RX_V3900, INPUT_NET_RADIO, ctx -> {
86 "<NET_USB><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></NET_USB>",
87 "NET_USB_Play_Control_Preset_Preset_Sel_Item.xml");
89 "<NET_USB><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></NET_USB>",
90 "NET_USB_Play_Control_Preset_Preset_Sel.xml");
94 subject.selectItemByPresetNumber(1);
98 eq("<NET_USB><Play_Control><Preset><Preset_Sel>1</Preset_Sel></Preset></Play_Control></NET_USB>"));
102 public void given_RX_V3900_and_TUNER_when_preset1_then_sendsProperCommand() throws Exception {
103 given(RX_V3900, INPUT_TUNER, ctx -> {
105 "<Tuner><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></Tuner>",
106 "Tuner_Play_Control_Preset_Preset_Sel_Item.xml");
108 "<Tuner><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></Tuner>",
109 "Tuner_Play_Control_Preset_Preset_Sel.xml");
113 subject.selectItemByPresetNumber(101);
114 subject.selectItemByPresetNumber(212);
118 .send(eq("<Tuner><Play_Control><Preset><Preset_Sel>A1</Preset_Sel></Preset></Play_Control></Tuner>"));
120 .send(eq("<Tuner><Play_Control><Preset><Preset_Sel>B12</Preset_Sel></Preset></Play_Control></Tuner>"));
124 public void given_RX_V3900_and_TUNER_when_update_then_populatesStateCorrectly() throws Exception {
125 given(RX_V3900, INPUT_TUNER, ctx -> {
127 "<Tuner><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></Tuner>",
128 "Tuner_Play_Control_Preset_Preset_Sel_Item.xml");
130 "<Tuner><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></Tuner>",
131 "Tuner_Play_Control_Preset_Preset_Sel.xml");
138 verify(presetInfoStateListener).presetInfoUpdated(presetInfoStateArg.capture());
139 PresetInfoState state = presetInfoStateArg.getValue();
142 assertEquals(101, state.presetChannel);
144 assertEquals(16, state.presetChannelNames.size());
145 assertEquals("A1", state.presetChannelNames.get(0).getName());
146 assertEquals(101, state.presetChannelNames.get(0).getValue());
147 assertEquals("A2", state.presetChannelNames.get(1).getName());
148 assertEquals(102, state.presetChannelNames.get(1).getValue());