import pytest from sls_detector.detector_property import DetectorProperty class Holder: """ This class does nothing except hold values for testing of the DetectorProperty class """ def __init__(self, N): self.values = [i for i in range(N)] def get(self, i): return self.values[i] def set(self, i,v): self.values[i] = v def nmod(self): return len(self.values) @pytest.fixture def p(): h = Holder(5) return DetectorProperty(h.get, h.set, h.nmod, 'prop') def test_initialization(): def getf(i): return 5 def setf(): return def nmod(): return 3 name = 'a property' p = DetectorProperty(getf, setf, nmod, name) assert p.get == getf assert p.set == setf assert p.get_nmod == nmod assert p.__name__ == name def test_get_single_value(p): assert p[2] == 2 def test_get_all_values(p): assert p[:] == [0, 1, 2, 3, 4] def test_get_values_by_iterable(p): vals = p[1,3] assert vals == [1,3] def test_set_single_value(p): p[2] = 7 assert p[:] == [0,1,7,3,4] def test_set_all(p): p[:] = 10 assert p[:] == [10,10,10,10,10] def test_set_all_by_list(p): p[:] = [7,8,9,10,11] assert p[:] == [7,8,9,10,11] def test_set_all_bool(p): p[:] = True assert p[:] == [True]*5 def test_set_by_iter(p): keys = [2,4] vals = [18,23] p[keys] = vals assert p[:] == [0,1,18,3,23] def test_set_by_iter_single_val(p): keys = [2,4] val = 9 p[keys] = val assert p[:] == [0,1,9,3,9] def test_print_values(p): assert repr(p) == 'prop: [0, 1, 2, 3, 4]'