コード例 #1
0
    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)
コード例 #2
0
ファイル: test_property.py プロジェクト: G-Node/python-odml
    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)
コード例 #3
0
    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')
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)])
コード例 #7
0
    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"])
コード例 #8
0
    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]")
コード例 #9
0
    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)
コード例 #10
0
    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)