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.yamahareceiver.internal.protocol.xml;
15 import static org.junit.jupiter.api.Assertions.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.jupiter.api.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;
39 private @Mock PresetInfoStateListener presetInfoStateListener;
40 private @Captor ArgumentCaptor<PresetInfoState> presetInfoStateArg;
42 private void given(String model, String input, Consumer<ModelContext> setup) throws Exception {
43 ctx.prepareForModel(model);
45 DeviceInformationXML deviceInformation = new DeviceInformationXML(con, deviceInformationState);
46 deviceInformation.update();
50 subject = new InputWithPresetControlXML(input, con, presetInfoStateListener, deviceInformationState);
54 public void given_RX_S601D_and_NET_RADIO_when_preset1_then_sendsProperCommand() throws Exception {
55 given(RX_S601D, INPUT_NET_RADIO, ctx -> {
57 "<NET_RADIO><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></NET_RADIO>",
58 "NET_RADIO_Play_Control_Preset_Preset_Sel_Item.xml");
60 "<NET_RADIO><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></NET_RADIO>",
61 "NET_RADIO_Play_Control_Preset_Preset_Sel.xml");
65 subject.selectItemByPresetNumber(1);
68 verify(presetInfoStateListener).presetInfoUpdated(presetInfoStateArg.capture());
69 PresetInfoState state = presetInfoStateArg.getValue();
72 eq("<NET_RADIO><Play_Control><Preset><Preset_Sel>1</Preset_Sel></Preset></Play_Control></NET_RADIO>"));
73 assertEquals("1 : NET RADIO Chilli ZET PL", state.presetChannelNames.get(0).getName());
74 assertEquals(1, state.presetChannelNames.get(0).getValue());
75 assertEquals("2 : NET RADIO Polskie Radio 24", state.presetChannelNames.get(1).getName());
76 assertEquals(2, state.presetChannelNames.get(1).getValue());
80 public void given_RX_V3900_and_NET_RADIO_when_preset1_then_sendsProperCommand() throws Exception {
81 given(RX_V3900, INPUT_NET_RADIO, ctx -> {
83 "<NET_USB><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></NET_USB>",
84 "NET_USB_Play_Control_Preset_Preset_Sel_Item.xml");
86 "<NET_USB><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></NET_USB>",
87 "NET_USB_Play_Control_Preset_Preset_Sel.xml");
91 subject.selectItemByPresetNumber(1);
95 eq("<NET_USB><Play_Control><Preset><Preset_Sel>1</Preset_Sel></Preset></Play_Control></NET_USB>"));
99 public void given_RX_V3900_and_TUNER_when_preset1_then_sendsProperCommand() throws Exception {
100 given(RX_V3900, INPUT_TUNER, ctx -> {
102 "<Tuner><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></Tuner>",
103 "Tuner_Play_Control_Preset_Preset_Sel_Item.xml");
105 "<Tuner><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></Tuner>",
106 "Tuner_Play_Control_Preset_Preset_Sel.xml");
110 subject.selectItemByPresetNumber(101);
111 subject.selectItemByPresetNumber(212);
115 .send(eq("<Tuner><Play_Control><Preset><Preset_Sel>A1</Preset_Sel></Preset></Play_Control></Tuner>"));
117 .send(eq("<Tuner><Play_Control><Preset><Preset_Sel>B12</Preset_Sel></Preset></Play_Control></Tuner>"));
121 public void given_RX_V3900_and_TUNER_when_update_then_populatesStateCorrectly() throws Exception {
122 given(RX_V3900, INPUT_TUNER, ctx -> {
124 "<Tuner><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></Tuner>",
125 "Tuner_Play_Control_Preset_Preset_Sel_Item.xml");
127 "<Tuner><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></Tuner>",
128 "Tuner_Play_Control_Preset_Preset_Sel.xml");
135 verify(presetInfoStateListener).presetInfoUpdated(presetInfoStateArg.capture());
136 PresetInfoState state = presetInfoStateArg.getValue();
139 assertEquals(101, state.presetChannel);
141 assertEquals(16, state.presetChannelNames.size());
142 assertEquals("A1", state.presetChannelNames.get(0).getName());
143 assertEquals(101, state.presetChannelNames.get(0).getValue());
144 assertEquals("A2", state.presetChannelNames.get(1).getName());
145 assertEquals(102, state.presetChannelNames.get(1).getValue());