118 lines
3.8 KiB
Python
118 lines
3.8 KiB
Python
import unittest
|
|
import dro
|
|
|
|
class Observer:
|
|
def __init__(self):
|
|
self.reset()
|
|
self.nbr_of_calls = 0
|
|
self.has_been_called = False
|
|
|
|
def update(self, updated = None):
|
|
self.nbr_of_calls += 1
|
|
self.has_been_called = True
|
|
self.updated = updated
|
|
|
|
def reset(self):
|
|
self.nbr_of_calls = 0
|
|
self.has_been_called = False
|
|
|
|
class TestModel(unittest.TestCase):
|
|
#def check_pos(self, actual, expected):
|
|
# self.assertTrue(int(self.model.get_position_as_string('x')) == 1)
|
|
|
|
def setUp(self):
|
|
self.model = dro.Model()
|
|
|
|
def test_init(self):
|
|
self.assertEqual(self.model.get_position('x'), 0)
|
|
self.assertEqual(self.model.get_position('z'), 0)
|
|
self.assertEqual(self.model.get_effective_position('x'), 0)
|
|
self.assertEqual(self.model.get_effective_position('z'), 0)
|
|
|
|
def test_wrong_axis(self):
|
|
o = Observer()
|
|
self.model.attatch(o)
|
|
self.model.set_position('apa', 1)
|
|
|
|
self.assertFalse(o.has_been_called)
|
|
|
|
def test_set_pos(self):
|
|
o = Observer()
|
|
self.model.attatch(o)
|
|
|
|
self.model.set_position('x', 1)
|
|
self.assertTrue(o.updated == dro.Updated.POS_X)
|
|
self.model.set_position('z', -11)
|
|
self.assertTrue(o.updated == dro.Updated.POS_Z)
|
|
|
|
self.assertEqual(o.nbr_of_calls, 2)
|
|
self.assertEqual(int(self.model.get_effective_position('x')), 1)
|
|
self.assertEqual(int(self.model.get_effective_position('z')), -11)
|
|
|
|
def test_set_offset(self):
|
|
o = Observer()
|
|
self.model.attatch(o)
|
|
|
|
self.model.set_offset('x', -1)
|
|
self.assertTrue(o.updated == dro.Updated.POS_X)
|
|
self.model.set_offset('z', 12.0)
|
|
self.assertTrue(o.updated == dro.Updated.POS_Z)
|
|
|
|
self.assertEqual(o.nbr_of_calls, 2)
|
|
self.assertEqual(int(self.model.get_effective_position('x')), -1)
|
|
self.assertEqual(int(self.model.get_effective_position('z')), 12.0)
|
|
|
|
def test_toogle_x_mode(self):
|
|
o = Observer()
|
|
self.model.attatch(o)
|
|
|
|
self.model.set_position('x', -11.49)
|
|
self.model.set_offset('x', 0.49)
|
|
|
|
self.model.set_toggle_x_mode()
|
|
self.assertEqual(self.model.get_position('x'), -11.49)
|
|
self.assertEqual(self.model.get_effective_position('x'), -22)
|
|
self.assertTrue(o.updated == dro.Updated.X_MODE)
|
|
|
|
def test_toogle_x_mode_z_unchanged(self):
|
|
o = Observer()
|
|
self.model.attatch(o)
|
|
|
|
self.model.set_position('z', 11.49)
|
|
self.model.set_offset('z', -0.49)
|
|
|
|
self.model.set_toggle_x_mode()
|
|
self.assertEqual(self.model.get_position('z'), 11.49)
|
|
self.assertEqual(self.model.get_effective_position('z'), 11.0)
|
|
self.assertTrue(o.updated == dro.Updated.X_MODE)
|
|
|
|
def test_set_position_no_notify_if_unchanged(self):
|
|
o = Observer()
|
|
self.model.attatch(o)
|
|
|
|
self.model.set_position('x', 10)
|
|
self.assertEqual(o.nbr_of_calls, 1)
|
|
|
|
self.model.set_position('x', 10)
|
|
self.assertEqual(o.nbr_of_calls, 1) # No change, no notify
|
|
|
|
self.model.set_position('x', 20)
|
|
self.assertEqual(o.nbr_of_calls, 2) # Changed, should notify
|
|
|
|
def test_set_position_no_notify_if_small_change(self):
|
|
o = Observer()
|
|
self.model.attatch(o)
|
|
|
|
self.model.set_position('x', 10)
|
|
self.assertEqual(o.nbr_of_calls, 1)
|
|
|
|
self.model.set_position('x', 10+0.003)
|
|
self.assertEqual(o.nbr_of_calls, 1) # No change, no notify
|
|
|
|
def test_steps_to_position(self):
|
|
self.model.set_scale('x', 2.5/200) # 200 steps per unit
|
|
pos = self.model.steps_to_position('x', 500)
|
|
self.assertEqual(pos, 6.25) # 200 * 1.5 = 300 steps
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main() |