/**
* 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.systeminfo.internal;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.openhab.core.items.GenericItem;
import org.openhab.core.items.Item;
import org.openhab.core.library.items.NumberItem;
import org.openhab.core.library.types.StringType;
import org.openhab.core.types.Command;
import org.openhab.core.types.State;
import org.openhab.model.item.binding.BindingConfigParseException;
import junit.framework.Assert;
/**
* @author Chris Carman
* @since 1.7.0
*/
public class SysteminfoGenericBindingProviderTest {
private SysteminfoGenericBindingProvider provider;
private Item testItem;
private String simpleConfig;
@Before
public void init() {
provider = new SysteminfoGenericBindingProvider();
testItem = new StringTestItem();
simpleConfig = "DirFiles:60000:.";
}
@Test
public void testGetBindingType() {
Assert.assertEquals("systeminfo", provider.getBindingType());
}
@Test(expected = BindingConfigParseException.class)
public void testValidateItemType_nullItem() throws BindingConfigParseException {
Item s = null;
provider.validateItemType(s, "?");
}
@Test(expected = BindingConfigParseException.class)
public void testValidateItemType_nullConfig() throws BindingConfigParseException {
String s = null;
provider.validateItemType(testItem, s);
}
@Test(expected = BindingConfigParseException.class)
public void testValidateItemType_itemNotNumOrStr() throws BindingConfigParseException {
Item newItem = new DummyItem();
provider.validateItemType(newItem, "?");
}
@Test(expected = BindingConfigParseException.class)
public void testValidateItemType_emptyConfig() throws BindingConfigParseException {
provider.validateItemType(testItem, "");
}
@Test(expected = BindingConfigParseException.class)
public void testProcessBindingConfig_nullContext() throws BindingConfigParseException {
provider.processBindingConfiguration(null, testItem, simpleConfig);
}
@Test(expected = BindingConfigParseException.class)
public void testProcessBindingConfig_nullItem() throws BindingConfigParseException {
provider.processBindingConfiguration("systeminfo", null, simpleConfig);
}
@Test(expected = BindingConfigParseException.class)
public void testProcessBindingConfig_nullConfig() throws BindingConfigParseException {
provider.processBindingConfiguration("systeminfo", testItem, null);
}
@Test(expected = BindingConfigParseException.class)
public void testProcessBindingConfig_emptyConfig() throws BindingConfigParseException {
provider.processBindingConfiguration("systeminfo", testItem, "");
}
/*
* "DirFiles" tests
*/
@Test
/* Verify a simple file count configuration: "DirFiles:60000:." */
public void testProcessBindingConfig_FileCount01() throws BindingConfigParseException {
NumberItem testItem = new NumberItem("DirFiles01");
String simpleConfig = "DirFiles:60000:.";
provider.processBindingConfiguration("systeminfo", testItem, simpleConfig);
Assert.assertNull(provider.getCommandType(null));
Assert.assertNull(provider.getCommandType(""));
Assert.assertEquals("DirFiles", provider.getCommandType("DirFiles01").toString());
Assert.assertNull(provider.getItemType(null));
Assert.assertNull(provider.getItemType(""));
Assert.assertNull(provider.getItemType("DirFiles01"));
Assert.assertEquals(0, provider.getRefreshInterval(null));
Assert.assertEquals(0, provider.getRefreshInterval(""));
Assert.assertEquals(60000, provider.getRefreshInterval("DirFiles01"));
Assert.assertNull(provider.getTarget(null));
Assert.assertNull(provider.getTarget(""));
Assert.assertEquals(".", provider.getTarget("DirFiles01"));
}
@Test
/* Verify a relative path file count configuration (*nix): "DirFiles:60000:../resources/" */
public void testProcessBindingConfig_FileCount02() throws BindingConfigParseException {
NumberItem testItem = new NumberItem("DirFiles02");
String simpleConfig = "DirFiles:60000:../resources/";
provider.processBindingConfiguration("systeminfo", testItem, simpleConfig);
Assert.assertEquals("DirFiles", provider.getCommandType("DirFiles02").toString());
Assert.assertNull(provider.getItemType("DirFiles02"));
Assert.assertEquals(60000, provider.getRefreshInterval("DirFiles02"));
Assert.assertEquals("../resources/", provider.getTarget("DirFiles02"));
}
@Test
/* Verify a relative path file count configuration (Windows): "DirFiles:60000:..\resources\" */
public void testProcessBindingConfig_FileCount03() throws BindingConfigParseException {
String simpleConfig = "DirFiles:60000:..\\resources\\";
NumberItem testItem = new NumberItem("DirFiles03");
provider.processBindingConfiguration("systeminfo", testItem, simpleConfig);
Assert.assertEquals("DirFiles", provider.getCommandType("DirFiles03").toString());
Assert.assertNull(provider.getItemType("DirFiles03"));
Assert.assertEquals(60000, provider.getRefreshInterval("DirFiles03"));
Assert.assertEquals("..\\resources\\", provider.getTarget("DirFiles03"));
}
/* Verify an absolute path file count configuration (*nix): "DirFiles:60000:/usr/bin/" */
public void testProcessBindingConfig_FileCount04() throws BindingConfigParseException {
String simpleConfig = "DirFiles:60000:/usr/bin/";
NumberItem testItem = new NumberItem("DirFiles04");
provider.processBindingConfiguration("systeminfo", testItem, simpleConfig);
Assert.assertEquals("DirFiles", provider.getCommandType("DirFiles04").toString());
Assert.assertNull(provider.getItemType("DirFiles04"));
Assert.assertEquals(60000, provider.getRefreshInterval("DirFiles04"));
Assert.assertEquals("/usr/bin/", provider.getTarget("DirFiles04"));
}
@Test
/* Verify an absolute path file count configuration (Windows): "DirFiles:60000:c:\windows\" */
public void testProcessBindingConfig_FileCount05() throws BindingConfigParseException {
String simpleConfig = "DirFiles:60000:c:\\temp\\";
NumberItem testItem = new NumberItem("DirFiles05");
provider.processBindingConfiguration("systeminfo", testItem, simpleConfig);
Assert.assertEquals("DirFiles", provider.getCommandType("DirFiles05").toString());
Assert.assertNull(provider.getItemType("DirFiles05"));
Assert.assertEquals(60000, provider.getRefreshInterval("DirFiles05"));
Assert.assertEquals("c:\\temp\\", provider.getTarget("DirFiles05"));
}
/*** END of "DirFiles" tests ***/
/*
* "DirUsage" tests
*/
@Test
/* Verify a simple dir usage configuration: "DirUsage:60000:/temp" */
public void testProcessBindingConfig_FileUsage01() throws BindingConfigParseException {
NumberItem testItem = new NumberItem("DirUsage01");
String simpleConfig = "DirUsage:60000:/temp";
provider.processBindingConfiguration("systeminfo", testItem, simpleConfig);
Assert.assertNull(provider.getCommandType(null));
Assert.assertNull(provider.getCommandType(""));
Assert.assertEquals("DirUsage", provider.getCommandType("DirUsage01").toString());
Assert.assertNull(provider.getItemType(null));
Assert.assertNull(provider.getItemType(""));
Assert.assertNull(provider.getItemType("DirUsage01"));
Assert.assertEquals(0, provider.getRefreshInterval(null));
Assert.assertEquals(0, provider.getRefreshInterval(""));
Assert.assertEquals(60000, provider.getRefreshInterval("DirUsage01"));
Assert.assertNull(provider.getTarget(null));
Assert.assertNull(provider.getTarget(""));
Assert.assertEquals("/temp", provider.getTarget("DirUsage01"));
}
/*** END of "DirUsage" tests ***/
class StringTestItem extends GenericItem {
public StringTestItem() {
super("TEST");
}
public StringTestItem(String name) {
super(name);
}
@Override
public List<Class<? extends State>> getAcceptedDataTypes() {
List<Class<? extends State>> list = new ArrayList<Class<? extends State>>();
list.add(StringType.class);
return list;
}
@Override
public List<Class<? extends Command>> getAcceptedCommandTypes() {
List<Class<? extends Command>> list = new ArrayList<Class<? extends Command>>();
list.add(StringType.class);
return list;
}
@Override
public State getStateAs(Class<? extends State> typeClass) {
return null;
}
};
class DummyItem extends GenericItem {
public DummyItem() {
super("DUMMY!");
}
public DummyItem(String name) {
super(name);
}
@Override
public List<Class<? extends State>> getAcceptedDataTypes() {
List<Class<? extends State>> list = new ArrayList<Class<? extends State>>();
/*
* list.add(OnOffType.class);
* list.add(PercentType.class);
* list.add(UnDefType.class);
*/
return list;
}
@Override
public List<Class<? extends Command>> getAcceptedCommandTypes() {
List<Class<? extends Command>> list = new ArrayList<Class<? extends Command>>();
/*
* list.add(OnOffType.class);
* list.add(IncreaseDecreaseType.class);
* list.add(PercentType.class);
*/
return list;
}
@Override
public State getStateAs(Class<? extends State> typeClass) {
return null;
}
}
}