138 lines
4.9 KiB
Python
138 lines
4.9 KiB
Python
# action_state_test.py
|
||
|
||
import unittest
|
||
|
||
from anb_python_components.classes.action_state import ActionState, ActionStateMessage, MessageType
|
||
|
||
class ActionStateTest(unittest.TestCase):
|
||
def test_init (self):
|
||
state = ActionState[bool](False)
|
||
self.assertIsInstance(state, ActionState)
|
||
self.assertFalse(state.value)
|
||
state.value = True
|
||
self.assertTrue(state.value)
|
||
|
||
def test_add_message (self):
|
||
message = ActionStateMessage(MessageType.INFO, "Test message")
|
||
|
||
state = ActionState[bool](False)
|
||
state.add_message(message)
|
||
|
||
self.assertEqual(1, state.count())
|
||
|
||
@staticmethod
|
||
def get_test_state (no_warning: bool = False, no_error: bool = False, state_value: bool = False) -> ActionState[
|
||
bool]:
|
||
"""
|
||
Генерирует тестовое состояние.
|
||
:param no_warning: Без предупреждений.
|
||
:param no_error: Без ошибок.
|
||
:param state_value: Значение состояния.
|
||
:return: Тестовое состояние.
|
||
"""
|
||
state = ActionState[bool](False)
|
||
|
||
state.add_info("Тестовое сообщение1")
|
||
if not no_error:
|
||
state.add_error("Тестовое сообщение2")
|
||
state.add_info("Тестовое сообщение3")
|
||
state.add_info("Тестовое сообщение4")
|
||
if not no_warning:
|
||
state.add_warning("Тестовое сообщение5")
|
||
state.add_info("Тестовое сообщение6")
|
||
state.add_info("Тестовое сообщение7")
|
||
state.add_info("Тестовое сообщение8")
|
||
if not no_warning:
|
||
state.add_warning("Тестовое сообщение9")
|
||
if not no_error:
|
||
state.add_error("Тестовое сообщение10")
|
||
|
||
state.value = state_value
|
||
|
||
return state
|
||
|
||
def test_add_state (self):
|
||
state1 = ActionStateTest.get_test_state(True, True, True)
|
||
|
||
state2 = ActionStateTest.get_test_state(state_value = False)
|
||
|
||
state1.add_state(state2)
|
||
|
||
self.assertEqual(16, state1.count())
|
||
|
||
def test_get_messages (self):
|
||
state = ActionStateTest.get_test_state()
|
||
|
||
state_messages = state.get_messages()
|
||
|
||
self.assertEqual(10, len(state_messages))
|
||
|
||
count_errors = 0
|
||
|
||
for message in state_messages:
|
||
if message.message_type == MessageType.ERROR:
|
||
count_errors += 1
|
||
|
||
self.assertEqual(2, count_errors)
|
||
|
||
def test_get_string_messages (self):
|
||
state = ActionStateTest.get_test_state()
|
||
|
||
state_message_string = state.get_string_messages(ActionState.get_string_error_only())
|
||
|
||
need_string = "Тестовое сообщение2\nТестовое сообщение10"
|
||
|
||
self.assertEqual(state_message_string, need_string)
|
||
|
||
def test_has_infos (self):
|
||
state = ActionStateTest.get_test_state()
|
||
|
||
self.assertTrue(state.has_infos())
|
||
|
||
def test_has_warnings (self):
|
||
state = ActionStateTest.get_test_state()
|
||
|
||
self.assertTrue(state.has_warnings())
|
||
|
||
def test_has_errors (self):
|
||
state = ActionStateTest.get_test_state()
|
||
|
||
self.assertTrue(state.has_errors())
|
||
|
||
def test_is_success (self):
|
||
state_fail = ActionStateTest.get_test_state()
|
||
state_success = ActionStateTest.get_test_state(no_warning = True, no_error = True)
|
||
state_success_no_warning = ActionStateTest.get_test_state(no_error = True)
|
||
|
||
self.assertTrue(state_success.is_success())
|
||
self.assertTrue(state_success_no_warning.is_success(True))
|
||
self.assertFalse(state_fail.is_success())
|
||
|
||
def test_clear (self):
|
||
state = ActionStateTest.get_test_state()
|
||
|
||
state.clear(lambda message: message.message_type == MessageType.WARNING)
|
||
|
||
self.assertEqual(8, len(state.get_messages()))
|
||
|
||
state.clear()
|
||
|
||
self.assertEqual(0, len(state.get_messages()))
|
||
|
||
def test_count (self):
|
||
state = ActionStateTest.get_test_state()
|
||
|
||
count_all = state.count()
|
||
count_warnings = state.count(lambda message: message.message_type == MessageType.WARNING)
|
||
count_errors = state.count(lambda message: message.message_type == MessageType.ERROR)
|
||
count_errors_and_warnings = state.count(
|
||
lambda message: message.message_type == MessageType.WARNING or message.message_type == MessageType.ERROR
|
||
)
|
||
|
||
self.assertEqual(10, count_all)
|
||
self.assertEqual(2, count_errors)
|
||
self.assertEqual(2, count_warnings)
|
||
self.assertEqual(4, count_errors_and_warnings)
|
||
|
||
if __name__ == '__main__':
|
||
unittest.main() |