parser_test.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from itertools import groupby
  2. import unittest
  3. import sys
  4. sys.path.append("..")
  5. from src.protocol import LumiaxClient
  6. class TestParser(unittest.TestCase):
  7. def setUp(self):
  8. self.parser = LumiaxClient()
  9. def test_includes_names(self):
  10. names = [
  11. "equipment_id",
  12. "run_days",
  13. "solar_panel_is_charging",
  14. "solar_panel_is_night",
  15. "solar_panel_charge_state",
  16. "load_is_enabled",
  17. "load_state",
  18. "battery_empty_times",
  19. "battery_full_times",
  20. "battery_percentage",
  21. "battery_voltage",
  22. "battery_current",
  23. "battery_power",
  24. "load_voltage",
  25. "load_current",
  26. "load_power",
  27. "solar_panel_voltage",
  28. "solar_panel_current",
  29. "solar_panel_power",
  30. "solar_panel_daily_energy",
  31. "solar_panel_total_energy",
  32. "load_daily_energy",
  33. "load_total_energy",
  34. ]
  35. for name in names:
  36. self.assertIn(name, [v.name for v in self.parser.variables], f"variable {name} doesn't exist anymore")
  37. def test_excludes_names(self):
  38. bad_names = [
  39. "battery_full_level",
  40. "battery_state_1",
  41. "battery_state_2",
  42. "solar_panel_state",
  43. "temperature_1",
  44. "temperature_2",
  45. ]
  46. for name in bad_names:
  47. self.assertNotIn(name, [v.name for v in self.parser.variables], f"variable {name} still exists")
  48. def test_multiplier_func_exclusion(self):
  49. for variable in self.parser.variables:
  50. if variable.multiplier:
  51. self.assertIsNone(variable.func)
  52. def test_func_32_bit_exclusion(self):
  53. for variable in self.parser.variables:
  54. if variable.is_32_bit:
  55. self.assertIsNone(variable.func)
  56. def test_common_lengths(self):
  57. for key, group in groupby(self.parser.variables, lambda x: x.address):
  58. is_32_bit = next(group).is_32_bit
  59. for variable in group:
  60. self.assertEqual(variable.is_32_bit, is_32_bit)
  61. if __name__ == "__main__":
  62. unittest.main()