diff --git a/homeassistant/test.py b/homeassistant/test.py index fbd09e71ba5..ab2b4716917 100644 --- a/homeassistant/test.py +++ b/homeassistant/test.py @@ -17,6 +17,8 @@ from datetime import datetime import requests import homeassistant as ha +import homeassistant.loader as loader +import homeassistant.util as util import homeassistant.remote as remote import homeassistant.components.http as http @@ -365,6 +367,95 @@ class TestServiceRegistry(unittest.TestCase): self.services.has_service("test_domain", "test_service")) +class TestLoader(unittest.TestCase): + """ Test the loader module. """ + def setUp(self): # pylint: disable=invalid-name + self.hass = ha.HomeAssistant() + loader.prepare(self.hass) + + def test_get_component(self): + """ Test if get_component works. """ + self.assertEqual(http, loader.get_component('http')) + + +class TestUtil(unittest.TestCase): + """ Tests util methods. """ + def test_sanitize_filename(self): + """ Test sanitize_filename. """ + self.assertEqual("test", util.sanitize_filename("test")) + self.assertEqual("test", util.sanitize_filename("/test")) + self.assertEqual("test", util.sanitize_filename("..test")) + self.assertEqual("test", util.sanitize_filename("\\test")) + self.assertEqual("test", util.sanitize_filename("\\../test")) + + def test_sanitize_path(self): + """ Test sanitize_path. """ + self.assertEqual("test/path", util.sanitize_path("test/path")) + self.assertEqual("test/path", util.sanitize_path("~test/path")) + self.assertEqual("//test/path", + util.sanitize_path("~/../test/path")) + + def test_slugify(self): + """ Test slugify. """ + self.assertEqual("Test", util.slugify("T-!@#$!#@$!$est")) + self.assertEqual("Test_More", util.slugify("Test More")) + self.assertEqual("Test_More", util.slugify("Test_(More)")) + + def test_datetime_to_str(self): + """ Test datetime_to_str. """ + self.assertEqual("12:00:00 09-07-1986", + util.datetime_to_str(datetime(1986, 7, 9, 12, 0, 0))) + + def test_str_to_datetime(self): + """ Test str_to_datetime. """ + self.assertEqual(datetime(1986, 7, 9, 12, 0, 0), + util.str_to_datetime("12:00:00 09-07-1986")) + + def test_split_entity_id(self): + """ Test split_entity_id. """ + self.assertEqual(['domain', 'object_id'], + util.split_entity_id('domain.object_id')) + + def test_repr_helper(self): + """ Test repr_helper. """ + self.assertEqual("A", util.repr_helper("A")) + self.assertEqual("5", util.repr_helper(5)) + self.assertEqual("True", util.repr_helper(True)) + self.assertEqual("test=1, more=2", + util.repr_helper({"test": 1, "more": 2})) + self.assertEqual("12:00:00 09-07-1986", + util.repr_helper(datetime(1986, 7, 9, 12, 0, 0))) + + # pylint: disable=invalid-name + def test_color_RGB_to_xy(self): + """ Test color_RGB_to_xy. """ + self.assertEqual((0, 0), util.color_RGB_to_xy(0, 0, 0)) + self.assertEqual((0.3127159072215825, 0.3290014805066623), + util.color_RGB_to_xy(255, 255, 255)) + + self.assertEqual((0.15001662234042554, 0.060006648936170214), + util.color_RGB_to_xy(0, 0, 255)) + + self.assertEqual((0.3, 0.6), util.color_RGB_to_xy(0, 255, 0)) + + self.assertEqual((0.6400744994567747, 0.3299705106316933), + util.color_RGB_to_xy(255, 0, 0)) + + def test_convert(self): + """ Test convert. """ + self.assertEqual(5, util.convert("5", int)) + self.assertEqual(5.0, util.convert("5", float)) + self.assertEqual(True, util.convert("True", bool)) + self.assertEqual(1, util.convert("NOT A NUMBER", int, 1)) + self.assertEqual(1, util.convert(None, int, 1)) + + def test_ensure_unique_string(self): + """ Test ensure_unique_string. """ + self.assertEqual( + "Beer_3", + util.ensure_unique_string("Beer", ["Beer", "Beer_2"])) + + class TestHTTP(unittest.TestCase): """ Test the HTTP debug interface and API. """ @@ -588,6 +679,14 @@ class TestRemoteMethods(unittest.TestCase): cls.api = remote.API("127.0.0.1", API_PASSWORD) + def test_validate_api(self): + """ Test Python API validate_api. """ + self.assertEqual(remote.APIStatus.OK, remote.validate_api(self.api)) + + self.assertEqual(remote.APIStatus.INVALID_PASSWORD, + remote.validate_api( + remote.API("127.0.0.1", API_PASSWORD + "A"))) + def test_get_event_listeners(self): """ Test Python API get_event_listeners. """ local_data = self.hass.bus.listeners @@ -677,6 +776,12 @@ class TestRemoteClasses(unittest.TestCase): cls.hass = ensure_homeassistant_started() cls.slave = ensure_slave_started() + def test_home_assistant_init(self): + """ Test HomeAssistant init. """ + self.assertRaises( + ha.HomeAssistantError, remote.HomeAssistant, + remote.API('127.0.0.1', API_PASSWORD + 'A', 8124)) + def test_statemachine_init(self): """ Tests if remote.StateMachine copies all states on init. """ self.assertEqual(len(self.hass.states.all()), diff --git a/homeassistant/util.py b/homeassistant/util.py index 37299348b90..5f70e76947a 100644 --- a/homeassistant/util.py +++ b/homeassistant/util.py @@ -24,13 +24,13 @@ def sanitize_filename(filename): def sanitize_path(path): - """ Sanitizes a path by removing .. / and \\. """ + """ Sanitizes a path by removing ~ and .. """ return RE_SANITIZE_PATH.sub("", path) def slugify(text): """ Slugifies a given text. """ - text = text.strip().replace(" ", "_") + text = text.replace(" ", "_") return RE_SLUGIFY.sub("", text) @@ -76,6 +76,9 @@ def repr_helper(inp): # pylint: disable=invalid-name def color_RGB_to_xy(R, G, B): """ Convert from RGB color to XY color. """ + if R + G + B == 0: + return 0, 0 + var_R = (R / 255.) var_G = (G / 255.) var_B = (B / 255.) @@ -124,7 +127,7 @@ def ensure_unique_string(preferred_string, current_strings): tries = 1 - while preferred_string in current_strings: + while string in current_strings: tries += 1 string = "{}_{}".format(preferred_string, tries)