def test_dtype(self): prop = Property(name="prop") # Test assignment of all supported dtypes. for curr_type in DType: prop.dtype = curr_type self.assertEqual(prop.dtype, curr_type) # Test assignment of dtype alias. prop.dtype = "bool" self.assertEqual(prop.dtype, "bool") prop.dtype = "str" self.assertEqual(prop.dtype, "str") # Test assignment of tuple. prop.dtype = "2-tuple" self.assertEqual(prop.dtype, "2-tuple") # Test set None prop.dtype = None self.assertIsNone(prop.dtype) # Test assignment fails. with self.assertRaises(AttributeError): prop.dtype = 1 with self.assertRaises(AttributeError): prop.dtype = "crash and burn" with self.assertRaises(AttributeError): prop.dtype = "x-tuple" # Test not setting None when a property contains values. prop.values = [1, 2, 3] self.assertIsNotNone(prop.dtype) prop.dtype = None self.assertIsNotNone(prop.dtype)
def test_value(self): p = Property("property", 100) self.assertEqual(p.values[0], 100) self.assertIsInstance(p.values, list) p.values = None self.assertEqual(len(p), 0) p.values = [1, 2, 3] p.values = "" self.assertEqual(len(p), 0) p.values = [1, 2, 3] p.values = [] self.assertEqual(len(p), 0) p.values = [1, 2, 3] p.values = () self.assertEqual(len(p), 0) p.values.append(5) self.assertEqual(len(p.values), 0) p2 = Property("test", {"name": "Marie", "name": "Johanna"}) self.assertEqual(len(p2), 1) # Test tuple dtype value. t = Property(name="Location", value='(39.12; 67.19)', dtype='2-tuple') tuple_value = t.values[0] # As the formed tuple is a list of list self.assertEqual(tuple_value[0], '39.12') self.assertEqual(tuple_value[1], '67.19') # Test invalid tuple length with self.assertRaises(ValueError): _ = Property(name="Public-Key", value='(5689; 1254; 687)', dtype='2-tuple')
def test_value(self): prop = Property("property", 100) self.assertEqual(prop.values[0], 100) self.assertIsInstance(prop.values, list) prop.values = None self.assertEqual(len(prop), 0) prop.values = [1, 2, 3] prop.values = "" self.assertEqual(len(prop), 0) prop.values = [1, 2, 3] prop.values = [] self.assertEqual(len(prop), 0) prop.values = [1, 2, 3] prop.values = () self.assertEqual(len(prop), 0) prop.values.append(5) self.assertEqual(len(prop.values), 0) prop2 = Property("test", {"name": "Marie"}) self.assertEqual(len(prop2), 1) # Test tuple dtype value. prop_tuple = Property(name="Location", value='(39.12; 67.19)', dtype='2-tuple') tuple_value = prop_tuple.values[0] # As the formed tuple is a list of list self.assertEqual(tuple_value[0], '39.12') self.assertEqual(tuple_value[1], '67.19') # Test invalid tuple length with self.assertRaises(ValueError): _ = Property(name="Public-Key", value='(5689; 1254; 687)', dtype='2-tuple') prop3 = Property('myprop', value=0, dtype=DType.int) self.assertEqual(prop3.value, [0]) self.assertEqual(prop3.values, [0]) prop4 = Property('myprop', value=0, dtype=DType.boolean) self.assertEqual(prop4.value, [False]) self.assertEqual(prop4.values, [False]) prop5 = Property('myprop', value=0) self.assertEqual(prop5.value, [0]) self.assertEqual(prop5.values, [0]) with self.assertRaises(ValueError): Property(name="dateprop", dtype=DType.date, value=['20190707']) with self.assertRaises(ValueError): Property(name="timeprop", dtype=DType.time, value=['11.11.11']) with self.assertRaises(ValueError): Property(name="datetimeprop", dtype=DType.datetime, value=['20190707']) with self.assertRaises(ValueError): Property(name="intprop", dtype=DType.int, value=[2, "Hello!", 4]) prop6 = Property('myprop', values=["(8; 9; 10)", "(11; 12; 13)"], dtype="3-tuple") self.assertEqual(len(prop6.values), 2) prop7 = Property('myprop', values=[["0", "1", "2"], [3, 4, 5]], dtype="3-tuple") self.assertEqual(len(prop7.values), 2) prop8 = Property('myprop', values=["(8; 9; 10)", ["0", "1", "2"], [3, 4, 5]], dtype="3-tuple") self.assertEqual(len(prop8.values), 3)
def test_value_extend(self): prop = Property(name="extend") # Test extend w/o Property value or dtype. val = [1, 2, 3] prop.extend(val) self.assertEqual(prop.dtype, DType.int) self.assertEqual(prop.values, val) # Extend with single value. prop.extend(4) self.assertEqual(prop.values, [1, 2, 3, 4]) # Extend with list value. prop.extend([5, 6]) self.assertEqual(prop.values, [1, 2, 3, 4, 5, 6]) # Test extend w/o Property value prop = Property(name="extend", dtype="float") prop.extend([1.0, 2.0, 3.0]) self.assertEqual(prop.values, [1.0, 2.0, 3.0]) # Test extend with Property value prop = Property(name="extend", value=10) prop.extend([20, 30, '40']) self.assertEqual(prop.values, [10, 20, 30, 40]) # Test extend fail with mismatching dtype with self.assertRaises(ValueError): prop.extend(['5', 6, 7]) with self.assertRaises(ValueError): prop.extend([5, 6, 'a']) # Test extend via Property prop = Property(name="extend", value=["a", "b"]) ext_prop = Property(name="value extend", value="c") prop.extend(ext_prop) self.assertEqual(prop.values, ["a", "b", "c"]) ext_prop.values = ["d", "e"] prop.extend(ext_prop) self.assertEqual(prop.values, ["a", "b", "c", "d", "e"]) ext_prop = Property(name="value extend", value=[1, 2, 3]) with self.assertRaises(ValueError): prop.extend(ext_prop) self.assertEqual(prop.values, ["a", "b", "c", "d", "e"]) # Test extend via Property unit check prop = Property(name="extend", value=[1, 2], unit="mV") ext_prop = Property(name="extend", value=[3, 4], unit="mV") prop.extend(ext_prop) self.assertEqual(prop.values, [1, 2, 3, 4]) ext_prop.unit = "kV" with self.assertRaises(ValueError): prop.extend(ext_prop) self.assertEqual(prop.values, [1, 2, 3, 4]) ext_prop.unit = "" with self.assertRaises(ValueError): prop.extend(ext_prop) self.assertEqual(prop.values, [1, 2, 3, 4]) # Test strict flag prop = Property(name="extend", value=[1, 2], dtype="int") with self.assertRaises(ValueError): prop.extend([3.14, True, "5.927"]) self.assertEqual(prop.values, [1, 2]) prop.extend([3.14, True, "5.927"], strict=False) self.assertEqual(prop.values, [1, 2, 3, 1, 5]) # Make sure non-convertible values still raise an error with self.assertRaises(ValueError): prop.extend([6, "some text"]) prop1 = Property(name="prop", value=["A Abraham", "B Barnes", "C Clark"], dtype=DType.person) prop1.extend("D Dickins") self.assertEqual(len(prop1), 4) self.assertRaises(ValueError, prop1.extend, 1) self.assertRaises(ValueError, prop1.extend, 1.3) self.assertRaises(ValueError, prop1.extend, True) prop2 = Property(name="prop", value=["https://en.wikipedia.org/wiki/Earth"], dtype=DType.url) prop2.extend("https://en.wikipedia.org/wiki/Mars") self.assertEqual(len(prop2), 2) self.assertRaises(ValueError, prop2.extend, 1) self.assertRaises(ValueError, prop2.extend, 1.3) self.assertRaises(ValueError, prop2.extend, True) prop3 = Property(name="prop", value=["Earth is No. 3."], dtype=DType.text) prop3.extend("Mars is No. 4.") self.assertEqual(len(prop3), 2) self.assertRaises(ValueError, prop3.extend, 1) self.assertRaises(ValueError, prop3.extend, 1.3) self.assertRaises(ValueError, prop3.extend, True) prop4 = Property(name="tuple-test", dtype="3-tuple", values="(1; 2; 3)") prop4.extend(["(7; 8; 9)", "(10; 11; 12)"]) self.assertEqual(len(prop4), 3) self.assertRaises(ValueError, prop4.extend, "(10; 11)") prop4.extend([[2, 3, 4], [5, 6, 7]]) self.assertEqual(len(prop4), 5) self.assertRaises(ValueError, prop4.extend, [[10, 11]]) prop4 = Property(name="prop4", dtype="date", values=['2011-12-01', '2011-12-02']) with self.assertRaises(ValueError): prop4.extend('2011-12-03', strict=True) self.assertEqual(prop4.values, [datetime.date(2011, 12, 1), datetime.date(2011, 12, 2)]) prop4.extend('2011-12-03', strict=False) self.assertEqual(prop4.values, [datetime.date(2011, 12, 1), datetime.date(2011, 12, 2), datetime.date(2011, 12, 3)]) prop4.extend([datetime.date(2011, 12, 4)], strict=True) self.assertEqual(prop4.values, [datetime.date(2011, 12, 1), datetime.date(2011, 12, 2), datetime.date(2011, 12, 3), datetime.date(2011, 12, 4)]) prop4.extend([datetime.date(2011, 12, 5), datetime.date(2011, 12, 6)], strict=True) self.assertEqual(prop4.values, [datetime.date(2011, 12, 1), datetime.date(2011, 12, 2), datetime.date(2011, 12, 3), datetime.date(2011, 12, 4), datetime.date(2011, 12, 5), datetime.date(2011, 12, 6)]) with self.assertRaises(ValueError): prop4.extend(['2011-12-03', 'abc'], strict=False) prop5 = Property(name="prop5", dtype="time", values=['12:00:01', '12:00:02']) with self.assertRaises(ValueError): prop5.extend('12:00:03', strict=True) self.assertEqual(prop5.values, [datetime.time(12, 0, 1), datetime.time(12, 0, 2)]) prop5.extend('12:00:03', strict=False) self.assertEqual(prop5.values, [datetime.time(12, 0, 1), datetime.time(12, 0, 2), datetime.time(12, 0, 3)]) prop5.extend([datetime.time(12, 0, 4)], strict=True) self.assertEqual(prop5.values, [datetime.time(12, 0, 1), datetime.time(12, 0, 2), datetime.time(12, 0, 3), datetime.time(12, 0, 4)]) prop5.extend([datetime.time(12, 0, 5), datetime.time(12, 0, 6)], strict=True) self.assertEqual(prop5.values, [datetime.time(12, 0, 1), datetime.time(12, 0, 2), datetime.time(12, 0, 3), datetime.time(12, 0, 4), datetime.time(12, 0, 5), datetime.time(12, 0, 6)]) with self.assertRaises(ValueError): prop4.extend(['12:00:07', 'abc'], strict=False) prop6 = Property(name="prop6", dtype="datetime", values=['2011-12-01 12:00:01', '2011-12-01 12:00:02']) with self.assertRaises(ValueError): prop6.extend('2011-12-01 12:00:03', strict=True) self.assertEqual(prop6.values, [datetime.datetime(2011, 12, 1, 12, 0, 1), datetime.datetime(2011, 12, 1, 12, 0, 2)]) prop6.extend('2011-12-01 12:00:03', strict=False) self.assertEqual(prop6.values, [datetime.datetime(2011, 12, 1, 12, 0, 1), datetime.datetime(2011, 12, 1, 12, 0, 2), datetime.datetime(2011, 12, 1, 12, 0, 3)]) prop6.extend([datetime.datetime(2011, 12, 1, 12, 0, 4)], strict=True) self.assertEqual(prop6.values, [datetime.datetime(2011, 12, 1, 12, 0, 1), datetime.datetime(2011, 12, 1, 12, 0, 2), datetime.datetime(2011, 12, 1, 12, 0, 3), datetime.datetime(2011, 12, 1, 12, 0, 4)]) prop6.extend([datetime.datetime(2011, 12, 1, 12, 0, 5), datetime.datetime(2011, 12, 1, 12, 0, 6)], strict=True) self.assertEqual(prop6.values, [datetime.datetime(2011, 12, 1, 12, 0, 1), datetime.datetime(2011, 12, 1, 12, 0, 2), datetime.datetime(2011, 12, 1, 12, 0, 3), datetime.datetime(2011, 12, 1, 12, 0, 4), datetime.datetime(2011, 12, 1, 12, 0, 5), datetime.datetime(2011, 12, 1, 12, 0, 6)]) with self.assertRaises(ValueError): prop4.extend(['2011-12-03 12:00:07', 'abc'], strict=False)
def test_value_append(self): # Test append w/o Property value or dtype prop = Property(name="append") prop.append(1) self.assertEqual(prop.dtype, DType.int) self.assertEqual(prop.values, [1]) # Test append with Property dtype. prop = Property(name="append", dtype="int") prop.append(3) self.assertEqual(prop.values, [3]) # Test append with Property value prop = Property(name="append", value=[1, 2]) prop.append(3) self.assertEqual(prop.values, [1, 2, 3]) # Test append with Property list value prop = Property(name="append", value=[1, 2]) prop.append([3]) self.assertEqual(prop.values, [1, 2, 3]) # Test append of empty values, make sure 0 and False are properly handled prop = Property(name="append") prop.append(None) prop.append("") prop.append([]) prop.append({}) self.assertEqual(prop.values, []) prop.append(0) self.assertEqual(prop.values, [0]) prop.values = None prop.dtype = None prop.append(False) self.assertEqual(prop.values, [False]) prop = Property(name="append", value=[1, 2]) prop.append(None) prop.append("") prop.append([]) prop.append({}) self.assertEqual(prop.values, [1, 2]) prop.append(0) self.assertEqual(prop.values, [1, 2, 0]) # Test fail append with multiple values prop = Property(name="append", value=[1, 2, 3]) with self.assertRaises(ValueError): prop.append([4, 5]) self.assertEqual(prop.values, [1, 2, 3]) # Test fail append with mismatching dtype prop = Property(name="append", value=[1, 2], dtype="int") with self.assertRaises(ValueError): prop.append([3.14]) with self.assertRaises(ValueError): prop.append([True]) with self.assertRaises(ValueError): prop.append(["5.927"]) self.assertEqual(prop.values, [1, 2]) # Test strict flag prop.append(3.14, strict=False) prop.append(True, strict=False) prop.append("5.927", strict=False) self.assertEqual(prop.values, [1, 2, 3, 1, 5]) # Make sure non-convertible values still raise an error with self.assertRaises(ValueError): prop.append("invalid") self.assertEqual(prop.values, [1, 2, 3, 1, 5]) prop5 = Property("test", value="a string") prop5.append("Freude") self.assertEqual(len(prop5), 2) self.assertRaises(ValueError, prop5.append, "[a, b, c]") prop6 = Property(name="prop", value=["A Abraham", "B Barnes", "C Clark"], dtype=DType.person) prop6.append("D Dickins") self.assertEqual(len(prop6), 4) self.assertRaises(ValueError, prop6.append, 1) self.assertRaises(ValueError, prop6.append, 1.3) self.assertRaises(ValueError, prop6.append, True) prop7 = Property(name="prop", value=["https://en.wikipedia.org/wiki/Earth"], dtype=DType.url) prop7.append("https://en.wikipedia.org/wiki/Mars") self.assertEqual(len(prop7), 2) self.assertRaises(ValueError, prop7.append, 1) self.assertRaises(ValueError, prop7.append, 1.3) self.assertRaises(ValueError, prop7.append, True) prop8 = Property(name="prop", value=["Earth is No. 3."], dtype=DType.text) prop8.append("Mars is No. 4.") self.assertEqual(len(prop8), 2) self.assertRaises(ValueError, prop8.append, 1) self.assertRaises(ValueError, prop8.append, 1.3) self.assertRaises(ValueError, prop8.append, True) prop9 = Property(name="tuple-test", dtype="3-tuple", values="(1; 2; 3)") prop9.append("(7; 8; 9)") self.assertEqual(len(prop9), 2) self.assertRaises(ValueError, prop9.append, "(10; 11)") prop9.append([[2, 3, 4]]) self.assertEqual(len(prop9), 3) self.assertRaises(ValueError, prop9.append, [[10, 11]]) prop10 = Property(name="prop10", dtype="date", values=['2011-12-01', '2011-12-02']) with self.assertRaises(ValueError): prop10.append('2011-12-03', strict=True) self.assertEqual(prop10.values, [datetime.date(2011, 12, 1), datetime.date(2011, 12, 2)]) prop10.append('2011-12-03', strict=False) self.assertEqual(prop10.values, [datetime.date(2011, 12, 1), datetime.date(2011, 12, 2), datetime.date(2011, 12, 3)]) prop10.append([datetime.date(2011, 12, 4)], strict=True) self.assertEqual(prop10.values, [datetime.date(2011, 12, 1), datetime.date(2011, 12, 2), datetime.date(2011, 12, 3), datetime.date(2011, 12, 4)]) prop11 = Property(name="prop11", dtype="time", values=['12:00:01', '12:00:02']) with self.assertRaises(ValueError): prop11.append('12:00:03', strict=True) self.assertEqual(prop11.values, [datetime.time(12, 0, 1), datetime.time(12, 0, 2)]) prop11.append('12:00:03', strict=False) self.assertEqual(prop11.values, [datetime.time(12, 0, 1), datetime.time(12, 0, 2), datetime.time(12, 0, 3)]) prop11.append([datetime.time(12, 0, 4)], strict=True) self.assertEqual(prop11.values, [datetime.time(12, 0, 1), datetime.time(12, 0, 2), datetime.time(12, 0, 3), datetime.time(12, 0, 4)]) prop12 = Property(name="prop12", dtype="datetime", values=['2011-12-01 12:00:01', '2011-12-01 12:00:02']) with self.assertRaises(ValueError): prop12.append('2011-12-01 12:00:03', strict=True) self.assertEqual(prop12.values, [datetime.datetime(2011, 12, 1, 12, 0, 1), datetime.datetime(2011, 12, 1, 12, 0, 2)]) prop12.append('2011-12-01 12:00:03', strict=False) self.assertEqual(prop12.values, [datetime.datetime(2011, 12, 1, 12, 0, 1), datetime.datetime(2011, 12, 1, 12, 0, 2), datetime.datetime(2011, 12, 1, 12, 0, 3)]) prop12.append([datetime.datetime(2011, 12, 1, 12, 0, 4)], strict=True) self.assertEqual(prop12.values, [datetime.datetime(2011, 12, 1, 12, 0, 1), datetime.datetime(2011, 12, 1, 12, 0, 2), datetime.datetime(2011, 12, 1, 12, 0, 3), datetime.datetime(2011, 12, 1, 12, 0, 4)])
def test_value_extend(self): prop = Property(name="extend") # Test extend w/o Property value or dtype. val = [1, 2, 3] prop.extend(val) self.assertEqual(prop.dtype, DType.int) self.assertEqual(prop.values, val) # Extend with single value. prop.extend(4) self.assertEqual(prop.values, [1, 2, 3, 4]) # Extend with list value. prop.extend([5, 6]) self.assertEqual(prop.values, [1, 2, 3, 4, 5, 6]) # Test extend w/o Property value prop = Property(name="extend", dtype="float") prop.extend([1.0, 2.0, 3.0]) self.assertEqual(prop.values, [1.0, 2.0, 3.0]) # Test extend with Property value prop = Property(name="extend", value=10) prop.extend([20, 30, '40']) self.assertEqual(prop.values, [10, 20, 30, 40]) # Test extend fail with mismatching dtype with self.assertRaises(ValueError): prop.extend(['5', 6, 7]) with self.assertRaises(ValueError): prop.extend([5, 6, 'a']) # Test extend via Property prop = Property(name="extend", value=["a", "b"]) ext_prop = Property(name="value extend", value="c") prop.extend(ext_prop) self.assertEqual(prop.values, ["a", "b", "c"]) ext_prop.values = ["d", "e"] prop.extend(ext_prop) self.assertEqual(prop.values, ["a", "b", "c", "d", "e"]) ext_prop = Property(name="value extend", value=[1, 2 ,3]) with self.assertRaises(ValueError): prop.extend(ext_prop) self.assertEqual(prop.values, ["a", "b", "c", "d", "e"]) # Test extend via Property unit check prop = Property(name="extend", value=[1, 2], unit="mV") ext_prop = Property(name="extend", value=[3, 4], unit="mV") prop.extend(ext_prop) self.assertEqual(prop.values, [1, 2, 3, 4]) ext_prop.unit = "kV" with self.assertRaises(ValueError): prop.extend(ext_prop) self.assertEqual(prop.values, [1, 2, 3, 4]) ext_prop.unit = "" with self.assertRaises(ValueError): prop.extend(ext_prop) self.assertEqual(prop.values, [1, 2, 3, 4]) # Test strict flag prop = Property(name="extend", value=[1, 2], dtype="int") with self.assertRaises(ValueError): prop.extend([3.14, True, "5.927"]) self.assertEqual(prop.values, [1, 2]) prop.extend([3.14, True, "5.927"], strict=False) self.assertEqual(prop.values, [1, 2, 3, 1, 5]) # Make sure non-convertible values still raise an error with self.assertRaises(ValueError): prop.extend([6, "some text"])
def test_value_append(self): # Test append w/o Property value or dtype prop = Property(name="append") prop.append(1) self.assertEqual(prop.dtype, DType.int) self.assertEqual(prop.values, [1]) # Test append with Property dtype. prop = Property(name="append", dtype="int") prop.append(3) self.assertEqual(prop.values, [3]) # Test append with Property value prop = Property(name="append", value=[1, 2]) prop.append(3) self.assertEqual(prop.values, [1, 2, 3]) # Test append with Property list value prop = Property(name="append", value=[1, 2]) prop.append([3]) self.assertEqual(prop.values, [1, 2, 3]) # Test append of empty values, make sure 0 and False are properly handled prop = Property(name="append") prop.append(None) prop.append("") prop.append([]) prop.append({}) self.assertEqual(prop.values, []) prop.append(0) self.assertEqual(prop.values, [0]) prop.values = None prop.dtype = None prop.append(False) self.assertEqual(prop.values, [False]) prop = Property(name="append", value=[1, 2]) prop.append(None) prop.append("") prop.append([]) prop.append({}) self.assertEqual(prop.values, [1, 2]) prop.append(0) self.assertEqual(prop.values, [1, 2, 0]) # Test fail append with multiple values prop = Property(name="append", value=[1, 2, 3]) with self.assertRaises(ValueError): prop.append([4, 5]) self.assertEqual(prop.values, [1, 2, 3]) # Test fail append with mismatching dtype prop = Property(name="append", value=[1, 2], dtype="int") with self.assertRaises(ValueError): prop.append([3.14]) with self.assertRaises(ValueError): prop.append([True]) with self.assertRaises(ValueError): prop.append(["5.927"]) self.assertEqual(prop.values, [1, 2]) # Test strict flag prop.append(3.14, strict=False) prop.append(True, strict=False) prop.append("5.927", strict=False) self.assertEqual(prop.values, [1, 2, 3, 1, 5]) # Make sure non-convertible values still raise an error with self.assertRaises(ValueError): prop.append("invalid") self.assertEqual(prop.values, [1, 2, 3, 1, 5]) p5 = Property("test", value="a string") p5.append("Freude") self.assertEqual(len(p5), 2) self.assertRaises(ValueError, p5.append, "[a, b, c]")
def test_value_extend(self): prop = Property(name="extend") # Test extend w/o Property value or dtype. val = [1, 2, 3] prop.extend(val) self.assertEqual(prop.dtype, DType.int) self.assertEqual(prop.values, val) # Extend with single value. prop.extend(4) self.assertEqual(prop.values, [1, 2, 3, 4]) # Extend with list value. prop.extend([5, 6]) self.assertEqual(prop.values, [1, 2, 3, 4, 5, 6]) # Test extend w/o Property value prop = Property(name="extend", dtype="float") prop.extend([1.0, 2.0, 3.0]) self.assertEqual(prop.values, [1.0, 2.0, 3.0]) # Test extend with Property value prop = Property(name="extend", value=10) prop.extend([20, 30, '40']) self.assertEqual(prop.values, [10, 20, 30, 40]) # Test extend fail with mismatching dtype with self.assertRaises(ValueError): prop.extend(['5', 6, 7]) with self.assertRaises(ValueError): prop.extend([5, 6, 'a']) # Test extend via Property prop = Property(name="extend", value=["a", "b"]) ext_prop = Property(name="value extend", value="c") prop.extend(ext_prop) self.assertEqual(prop.values, ["a", "b", "c"]) ext_prop.values = ["d", "e"] prop.extend(ext_prop) self.assertEqual(prop.values, ["a", "b", "c", "d", "e"]) ext_prop = Property(name="value extend", value=[1, 2, 3]) with self.assertRaises(ValueError): prop.extend(ext_prop) self.assertEqual(prop.values, ["a", "b", "c", "d", "e"]) # Test extend via Property unit check prop = Property(name="extend", value=[1, 2], unit="mV") ext_prop = Property(name="extend", value=[3, 4], unit="mV") prop.extend(ext_prop) self.assertEqual(prop.values, [1, 2, 3, 4]) ext_prop.unit = "kV" with self.assertRaises(ValueError): prop.extend(ext_prop) self.assertEqual(prop.values, [1, 2, 3, 4]) ext_prop.unit = "" with self.assertRaises(ValueError): prop.extend(ext_prop) self.assertEqual(prop.values, [1, 2, 3, 4]) # Test strict flag prop = Property(name="extend", value=[1, 2], dtype="int") with self.assertRaises(ValueError): prop.extend([3.14, True, "5.927"]) self.assertEqual(prop.values, [1, 2]) prop.extend([3.14, True, "5.927"], strict=False) self.assertEqual(prop.values, [1, 2, 3, 1, 5]) # Make sure non-convertible values still raise an error with self.assertRaises(ValueError): prop.extend([6, "some text"]) p1 = Property(name="prop", value=["A Abraham", "B Barnes", "C Clark"], dtype=DType.person) p1.extend("D Dickins") self.assertEqual(len(p1), 4) self.assertRaises(ValueError, p1.extend, 1) self.assertRaises(ValueError, p1.extend, 1.3) self.assertRaises(ValueError, p1.extend, True) p2 = Property(name="prop", value=["https://en.wikipedia.org/wiki/Earth"], dtype=DType.url) p2.extend("https://en.wikipedia.org/wiki/Mars") self.assertEqual(len(p2), 2) self.assertRaises(ValueError, p2.append, 1) self.assertRaises(ValueError, p2.append, 1.3) self.assertRaises(ValueError, p2.append, True) p3 = Property(name="prop", value=["Earth is No. 3."], dtype=DType.text) p3.extend("Mars is No. 4.") self.assertEqual(len(p3), 2) self.assertRaises(ValueError, p3.append, 1) self.assertRaises(ValueError, p3.append, 1.3) self.assertRaises(ValueError, p3.append, True)
def test_value_append(self): # Test append w/o Property value or dtype prop = Property(name="append") prop.append(1) self.assertEqual(prop.dtype, DType.int) self.assertEqual(prop.values, [1]) # Test append with Property dtype. prop = Property(name="append", dtype="int") prop.append(3) self.assertEqual(prop.values, [3]) # Test append with Property value prop = Property(name="append", value=[1, 2]) prop.append(3) self.assertEqual(prop.values, [1, 2, 3]) # Test append with Property list value prop = Property(name="append", value=[1, 2]) prop.append([3]) self.assertEqual(prop.values, [1, 2, 3]) # Test append of empty values, make sure 0 and False are properly handled prop = Property(name="append") prop.append(None) prop.append("") prop.append([]) prop.append({}) self.assertEqual(prop.values, []) prop.append(0) self.assertEqual(prop.values, [0]) prop.values = None prop.dtype = None prop.append(False) self.assertEqual(prop.values, [False]) prop = Property(name="append", value=[1, 2]) prop.append(None) prop.append("") prop.append([]) prop.append({}) self.assertEqual(prop.values, [1, 2]) prop.append(0) self.assertEqual(prop.values, [1, 2, 0]) # Test fail append with multiple values prop = Property(name="append", value=[1, 2, 3]) with self.assertRaises(ValueError): prop.append([4, 5]) self.assertEqual(prop.values, [1, 2, 3]) # Test fail append with mismatching dtype prop = Property(name="append", value=[1, 2], dtype="int") with self.assertRaises(ValueError): prop.append([3.14]) with self.assertRaises(ValueError): prop.append([True]) with self.assertRaises(ValueError): prop.append(["5.927"]) self.assertEqual(prop.values, [1, 2]) # Test strict flag prop.append(3.14, strict=False) prop.append(True, strict=False) prop.append("5.927", strict=False) self.assertEqual(prop.values, [1, 2, 3, 1, 5]) # Make sure non-convertible values still raise an error with self.assertRaises(ValueError): prop.append("invalid") self.assertEqual(prop.values, [1, 2, 3, 1, 5]) p5 = Property("test", value="a string") p5.append("Freude") self.assertEqual(len(p5), 2) self.assertRaises(ValueError, p5.append, "[a, b, c]") p6 = Property(name="prop", value=["A Abraham", "B Barnes", "C Clark"], dtype=DType.person) p6.append("D Dickins") self.assertEqual(len(p6), 4) self.assertRaises(ValueError, p6.append, 1) self.assertRaises(ValueError, p6.append, 1.3) self.assertRaises(ValueError, p6.append, True) p7 = Property(name="prop", value=["https://en.wikipedia.org/wiki/Earth"], dtype=DType.url) p7.append("https://en.wikipedia.org/wiki/Mars") self.assertEqual(len(p7), 2) self.assertRaises(ValueError, p7.append, 1) self.assertRaises(ValueError, p7.append, 1.3) self.assertRaises(ValueError, p7.append, True) p8 = Property(name="prop", value=["Earth is No. 3."], dtype=DType.text) p8.append("Mars is No. 4.") self.assertEqual(len(p8), 2) self.assertRaises(ValueError, p8.append, 1) self.assertRaises(ValueError, p8.append, 1.3) self.assertRaises(ValueError, p8.append, True)