Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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))
Пример #6
0
    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))