def test_write_only_parameter(self): parameter = Parameter('foo', fset=empty_setter) self.assertTrue(parameter.is_writable()) self.assertFalse(parameter.is_readable()) parameter.set(1).result() with self.assertRaises(ReadAccessError) as ctx: parameter.get().result() self.assertEqual("parameter `foo' cannot be read", str(ctx.exception))
def test_soft_limit(self): parameter = Parameter('foo', fset=empty_setter, unit=q.mm, lower=2 * q.mm, upper=4 * q.mm) parameter.set(2.3 * q.mm).wait() parameter.set(2 * q.mm).wait() parameter.set(4 * q.mm).wait() self.assertRaises(SoftLimitError, parameter.set(4.2 * q.mm).wait)
def test_read_only_parameter(self): def getter(): return 0 parameter = Parameter('foo', fget=getter) self.assertTrue(parameter.is_readable()) self.assertFalse(parameter.is_writable()) self.assertEqual(parameter.get().result(), 0) with self.assertRaises(WriteAccessError) as ctx: parameter.set(None).result() self.assertEqual("parameter `foo' cannot be written", str(ctx.exception))
def test_hard_limit(self): def setter(value): pass class Limited(object): in_limit = False def __call__(self): return self.in_limit in_limit = Limited() parameter = Parameter('foo', fset=setter, in_hard_limit=in_limit) parameter.set(0).result() parameter.set(0.5).result() parameter.set(1).result() with self.assertRaises(HardLimitError): in_limit.in_limit = True parameter.set(1.5).result()
def test_invalid_unit(self): parameter = Parameter('foo', fset=empty_setter, unit=q.mm) parameter.set(2 * q.mm).result() self.assertRaises(UnitError, parameter.set(2 * q.s).result)