/** * Copyright (c) 2010-2016 by the respective copyright holders. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.openhab.binding.samsungac.communicator; import static org.junit.Assert.*; import java.util.Map; import org.junit.Test; import org.openhab.binding.samsungac.internal.CommandEnum; import org.openhab.binding.samsungac.internal.ResponseParser; import org.xml.sax.SAXException; /** * @author Stein Tore Tøsse * @since 1.6.0 */ public class ResponseParserTest { @Test public void shouldHandleInvalidAccount() { String response = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Update Type=\"InvalidateAccount\"/>"; assertTrue(ResponseParser.isNotLoggedInResponse(response)); } @Test public void shouldFindFirstLine() { String response = "DRC-1.00"; assertTrue(ResponseParser.isFirstLine(response)); } @Test public void shoudleReturnTrueIfReadyForTokenResponse() { String response = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Response Type=\"GetToken\" Status=\"Ready\"/>"; assertTrue(ResponseParser.isReadyForTokenResponse(response)); } @Test public void shoudleReturnTrueIfDeviceControl() { String response = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Response Type=\"DeviceControl\"/>"; assertTrue(ResponseParser.isDeviceControl(response)); } @Test public void shoudleReturnTrueIfResponseIsDeviceState() { String response = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Response Type=\"DeviceState\" Status=\"Okay\"/>"; assertTrue(ResponseParser.isDeviceState(response)); } @Test public void shouldReturnFalseIfNotStatusResponse() { String response = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Response Type=\"DeviceState\" Status=\"Okay\" DUID=\"7825AD1243BA\" CommandID=\"cmd3227\"/>"; assertFalse(ResponseParser.isDeviceState(response)); } @Test public void shouldCheckIfItIsCorrectResponseCommand() { String response = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Response Type=\"DeviceControl\" Status=\"Okay\" DUID=\"7825AD1243BA\" CommandID=\"cmd4946\"/>"; assertTrue(ResponseParser.isCorrectCommandResponse(response, "cmd4946")); } @Test public void shouldParseXMLStatusResponseCorrectly() throws SAXException { String response = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Response Type=\"DeviceState\" Status=\"Okay\"><DeviceState><Device DUID=\"7825AD1243BA\" GroupID=\"AC\" ModelID=\"AC\" ><Attr ID=\"AC_FUN_ENABLE\" Type=\"RW\" Value=\"Enable\"/><Attr ID=\"AC_FUN_POWER\" Type=\"RW\" Value=\"On\"/><Attr ID=\"AC_FUN_SUPPORTED\" Type=\"R\" Value=\"0\"/><Attr ID=\"AC_FUN_OPMODE\" Type=\"RW\" Value=\"Heat\"/><Attr ID=\"AC_FUN_TEMPSET\" Type=\"RW\" Value=\"20\"/><Attr ID=\"AC_FUN_COMODE\" Type=\"RW\" Value=\"Off\"/><Attr ID=\"AC_FUN_ERROR\" Type=\"RW\" Value=\"45010D00\"/><Attr ID=\"AC_FUN_TEMPNOW\" Type=\"R\" Value=\"21\"/><Attr ID=\"AC_FUN_SLEEP\" Type=\"RW\" Value=\"0\"/><Attr ID=\"AC_FUN_WINDLEVEL\" Type=\"RW\" Value=\"Auto\"/><Attr ID=\"AC_FUN_DIRECTION\" Type=\"RW\" Value=\"Fixed\"/><Attr ID=\"AC_ADD_AUTOCLEAN\" Type=\"RW\" Value=\"Off\"/><Attr ID=\"AC_ADD_APMODE_END\" Type=\"W\" Value=\"0\"/><Attr ID=\"AC_ADD_STARTWPS\" Type=\"RW\" Value=\"Direct\"/><Attr ID=\"AC_ADD_SPI\" Type=\"RW\" Value=\"Off\"/><Attr ID=\"AC_SG_WIFI\" Type=\"W\" Value=\"Connected\"/><Attr ID=\"AC_SG_INTERNET\" Type=\"W\" Value=\"Connected\"/><Attr ID=\"AC_ADD2_VERSION\" Type=\"RW\" Value=\"0\"/><Attr ID=\"AC_SG_MACHIGH\" Type=\"W\" Value=\"0\"/><Attr ID=\"AC_SG_MACMID\" Type=\"W\" Value=\"0\"/><Attr ID=\"AC_SG_MACLOW\" Type=\"W\" Value=\"0\"/><Attr ID=\"AC_SG_VENDER01\" Type=\"W\" Value=\"0\"/><Attr ID=\"AC_SG_VENDER02\" Type=\"W\" Value=\"0\"/><Attr ID=\"AC_SG_VENDER03\" Type=\"W\" Value=\"0\"/></Device></DeviceState></Response>"; Map<CommandEnum, String> result = ResponseParser.parseStatusResponse(response); assertEquals("On", result.get(CommandEnum.AC_FUN_POWER)); assertEquals("21", result.get(CommandEnum.AC_FUN_TEMPNOW)); assertEquals("20", result.get(CommandEnum.AC_FUN_TEMPSET)); assertEquals("45010D00", result.get(CommandEnum.AC_FUN_ERROR)); } @Test public void shouldReturnTrueWhenTokenResponseIsSent() { String response = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Update Type=\"GetToken\" Status=\"Completed\" Token=\"33965903-4482-M849-N716-373832354144\"/>"; assertTrue(ResponseParser.isResponseWithToken(response)); } @Test public void shouldParseTokenFromResponse() { String response = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Update Type=\"GetToken\" Status=\"Completed\" Token=\"33965903-4482-M849-N716-373832354144\"/>"; assertEquals("33965903-4482-M849-N716-373832354144", ResponseParser.parseTokenFromResponse(response)); } }