#!/usr/bin/env python3 """Tests fuer die Helligkeitsregelung (verallgemeinert aus DoDimmen_V). python3 -m unittest -v test_brightness Grenzen: Mitten (300, 2500, 3500) mit Hysterese (30, 150, 150) -> hoch bei 330 / 2650 / 3650, runter bei 270 / 2350 / 3350. """ import unittest import brightness from brightness import BrightnessController class TestStufen(unittest.TestCase): def setUp(self): self.c = BrightnessController() def test_erststart_schaltet_von_0_hoch(self): self.assertEqual(self.c._next_level(329, None), 0) self.assertEqual(self.c._next_level(330, None), 1) self.assertEqual(self.c._next_level(2649, None), 1) self.assertEqual(self.c._next_level(2650, None), 2) self.assertEqual(self.c._next_level(3649, None), 2) self.assertEqual(self.c._next_level(3650, None), 3) # 100 % erreichbar def test_hysterese_von_stufe_1(self): self.assertEqual(self.c._next_level(270, 1), 1) self.assertEqual(self.c._next_level(269, 1), 0) self.assertEqual(self.c._next_level(2649, 1), 1) self.assertEqual(self.c._next_level(2650, 1), 2) def test_hysterese_von_stufe_2(self): self.assertEqual(self.c._next_level(2350, 2), 2) self.assertEqual(self.c._next_level(2349, 2), 1) self.assertEqual(self.c._next_level(3649, 2), 2) self.assertEqual(self.c._next_level(3650, 2), 3) def test_hysterese_von_stufe_3(self): self.assertEqual(self.c._next_level(3350, 3), 3) self.assertEqual(self.c._next_level(3349, 3), 2) def test_prozente(self): self.assertEqual(brightness.PERCENTS, (5, 15, 50, 100)) class TestUpdate(unittest.TestCase): def test_erste_aenderung_meldet_changed(self): c = BrightnessController() self.assertEqual(c.update(100), (0, 5, True)) def test_gleicher_wert_keine_aenderung(self): c = BrightnessController() c.update(100) level, percent, changed = c.update(100) self.assertFalse(changed) self.assertEqual(percent, 5) def test_dunkel_zu_hell_erreicht_100(self): c = BrightnessController() c.update(100) level = percent = None for _ in range(brightness.AVERAGE_WINDOW + 2): level, percent, _ = c.update(4000) self.assertEqual(level, 3) self.assertEqual(percent, 100) def test_gleitender_mittelwert_fenster(self): c = BrightnessController() for _ in range(20): c.update(1000) self.assertLessEqual(len(c._buf), brightness.AVERAGE_WINDOW) if __name__ == "__main__": unittest.main(verbosity=2)