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()