def test_EbiParser(self): """EbiParser: """ f = curry(EbiParser, strict=False) first_valid = fake_records_valid[:-5] #test valid self.assertEqual(len(list(f(fake_records_valid))), 2)
def test_pairs_to_dict(self): """pairs_to_dict should return the expected dict""" test_dict = {'a': 1, 'b': 2, 'b': 3,} sorted_items = [('a', 1), ('b', 2), ('b', 3),] add_one = lambda x: x + 1 double = lambda x: x*2 set_zero = lambda x: 0 handlers ={ 'a': add_one, 'b': double,} #test default all self.assertEqual(pairs_to_dict(sorted_items), {'a': 1, 'b': 3}) #test 'overwrite_value' self.assertEqual(pairs_to_dict(sorted_items, 'overwrite_value'), {'a': 1, 'b': 3}) #test no_duplicated_key, raise self.assertRaises(ValueError, pairs_to_dict, sorted_items, 'no_duplicated_key') #test always_multi_value self.assertEqual(pairs_to_dict(sorted_items, 'always_multi_value'), {'a': [1], 'b': [2, 3]}) #test allow multi_value self.assertEqual(pairs_to_dict(sorted_items, 'allow_multi_value'), {'a': 1, 'b': [2, 3]}) #test raise error when key not found in all_keys f = curry(pairs_to_dict, all_keys=['a','c']) self.assertRaises(ValueError, f, sorted_items) #test handlers sorted_items.append(('c', 4)) self.assertEqual(pairs_to_dict(sorted_items, handlers=handlers, default_handler=set_zero), {'a': 2, 'b': 6, 'c': 0}) #test raise error when no valid handlers were found f = curry(pairs_to_dict, handlers=handlers) self.assertRaises(ValueError, f, sorted_items) #test sanity test_dict = dict(sorted_items) self.assertEqual(pairs_to_dict(list(test_dict.items())), test_dict)
def test_pairs_to_dict(self): """pairs_to_dict should return the expected dict""" test_dict = {'a': 1, 'b': 2, 'b': 3,} sorted_items = [('a', 1), ('b', 2), ('b', 3),] add_one = lambda x: x + 1 double = lambda x: x*2 set_zero = lambda x: 0 handlers ={ 'a': add_one, 'b': double,} #test default all self.assertEqual(pairs_to_dict(sorted_items), {'a': 1, 'b': 3}) #test 'overwrite_value' self.assertEqual(pairs_to_dict(sorted_items, 'overwrite_value'), {'a': 1, 'b': 3}) #test no_duplicated_key, raise self.assertRaises(ValueError, pairs_to_dict, sorted_items, 'no_duplicated_key') #test always_multi_value self.assertEqual(pairs_to_dict(sorted_items, 'always_multi_value'), {'a': [1], 'b': [2, 3]}) #test allow multi_value self.assertEqual(pairs_to_dict(sorted_items, 'allow_multi_value'), {'a': 1, 'b': [2, 3]}) #test raise error when key not found in all_keys f = curry(pairs_to_dict, all_keys=['a','c']) self.assertRaises(ValueError, f, sorted_items) #test handlers sorted_items.append(('c', 4)) self.assertEqual(pairs_to_dict(sorted_items, handlers=handlers, default_handler=set_zero), {'a': 2, 'b': 6, 'c': 0}) #test raise error when no valid handlers were found f = curry(pairs_to_dict, handlers=handlers) self.assertRaises(ValueError, f, sorted_items) #test sanity test_dict = dict(sorted_items) self.assertEqual(pairs_to_dict(test_dict.items()), test_dict)
def test_MinimalEbiParser_valid(self): """MinimalEbiParser: integrity of output """ f = curry(MinimalEbiParser, strict=False) #test valid result: sequence, number of records, keys of a header valid_result = list(f(fake_records_valid)) self.assertEqual(len(valid_result), 2) sequence, header = valid_result[0] self.assertEqual(sequence, 'aaccppgghhh') #the first fake record use only the required labels, the header is #deleted of '', which was assigned to sequence self.assertEqual( list(sorted(header.keys())), list(sorted(required_labels))[1:]) #[1:] to exclude the '' #test selected_labels selected_labels = ['ID', 'DE'] select_result = list( f(fake_records_valid, selected_labels=selected_labels)) self.assertEqual(list(sorted(select_result[0][1].keys())), list(sorted(selected_labels))) #test bad record - unknown linecode or wrong line format self.assertRaises( ValueError, list, f(fake_records_valid + ['ID id.', 'RR not valid.', '//'])) self.assertRaises( ValueError, list, f(fake_records_valid + ['ID id.', ' RN bad format.', '//'])) self.assertRaises( ValueError, list, f(fake_records_valid + ['ID id.', 'RN bad format.', '//'])) #test bad record - not end with '//' self.assertRaises( RecordError, list, f(fake_records_valid + ['ID not end with //', ' seq'])) #test strict: lacking required linecodes #?? How to test the error message? warn message? #the first record, [:-5], is valid even when strict=True. the_first_valid = list(f(fake_records_valid[:-5], strict=True))[0] #[1] get the header_dict self.assertEqual(len(the_first_valid[1]), 9) self.assertRaises(RecordError, list, f(fake_records_valid, strict=True))
def test_MinimalEbiParser_valid(self): """MinimalEbiParser: integrity of output """ f = curry(MinimalEbiParser, strict=False) #test valid result: sequence, number of records, keys of a header valid_result = list(f(fake_records_valid)) self.assertEqual(len(valid_result), 2) sequence, header = valid_result[0] self.assertEqual(sequence, 'aaccppgghhh') #the first fake record use only the required labels, the header is #deleted of '', which was assigned to sequence self.assertEqual(list(sorted(header.keys())), list(sorted(required_labels))[1:]) #[1:] to exclude the '' #test selected_labels selected_labels = ['ID', 'DE'] select_result = list(f(fake_records_valid, selected_labels=selected_labels)) self.assertEqual(list(sorted(select_result[0][1].keys())), list(sorted(selected_labels))) #test bad record - unknown linecode or wrong line format self.assertRaises(ValueError, list, f(fake_records_valid + ['ID id.', 'RR not valid.','//'])) self.assertRaises(ValueError, list, f(fake_records_valid + ['ID id.', ' RN bad format.','//'])) self.assertRaises(ValueError, list, f(fake_records_valid + ['ID id.', 'RN bad format.','//'])) #test bad record - not end with '//' self.assertRaises(RecordError, list, f(fake_records_valid + ['ID not end with //', ' seq'])) #test strict: lacking required linecodes #?? How to test the error message? warn message? #the first record, [:-5], is valid even when strict=True. the_first_valid = list(f(fake_records_valid[:-5], strict=True))[0] #[1] get the header_dict self.assertEqual(len(the_first_valid[1]),9) self.assertRaises(RecordError, list, f(fake_records_valid, strict=True))