def test_full_LOC(self): """LOC should behave as expected when initialized with rich data""" data = [ "abc\t def", " 3 \t n", " abc \txyz\n\n", "x\t5", "fgh ", "x\t3 " ] class rec(MappedRecord): Required = {'abc': []} maps = {'abc': list_adder, 'x': int_setter, 'fgh': bool_setter} label_splitter = DelimitedSplitter('\t') constructor = rec strict = True loc_bad = LineOrientedConstructor(data, label_splitter, maps, constructor, strict) self.assertRaises(FieldError, loc_bad) strict = False loc_good = LineOrientedConstructor(data, label_splitter, maps, constructor, strict) result = loc_good() assert isinstance(result, rec) self.assertEqual(result, { 'abc': ['def', 'xyz'], '3': 'n', 'fgh': False, 'x': 3 })
def test_init_empty(self): """LOC empty init should succeed with expected defaults""" l = LineOrientedConstructor() self.assertEqual(l.Lines, []) self.assertEqual(l.LabelSplitter(' ab cd '), ['ab', 'cd']) self.assertEqual(l.FieldMap, {}) self.assertEqual(l.Constructor, MappedRecord) self.assertEqual(l.Strict, False)
def test_empty_LOC(self): """LOC empty should fail if strict, fill fields if not strict""" data = ["abc def", "3 n", "\t abc \txyz\n\n", "fgh "] l = LineOrientedConstructor() result = l() self.assertEqual(result, {}) result = l([]) self.assertEqual(result, {}) result = l([' ', '\n\t ']) self.assertEqual(result, {}) result = l(data) self.assertEqual(result, {'abc': 'xyz', '3': 'n', 'fgh': None})