def METHOD_NAME(self):
    def check_split(name, xfirst, xrest):
        first, r = name._formatter_field_name_split()
        rest = list(r)
        #print repr(first), repr(rest)
        self.assertEqual(first, xfirst)
        self.assertListEqual(rest, xrest)
        # Types ought to match the original if not numeric
        self.assertIsInstance(first, (type(name), int, long))
        for is_attr, i in rest :
            if is_attr :
                self.assertIsInstance(i, type(name))
            else :
                self.assertIsInstance(i, (int, long))
    # Verify str._formatter_field_name_split()
    check_split('a', 'a', [])
    check_split('2', 2, [])
    check_split('.b', '', [(True, 'b')])
    check_split('a.b[2]', 'a', [(True, 'b'), (False, 2)])
    check_split('a.b[2].c[7]', 'a', [(True, 'b'), (False, 2), (True, 'c'), (False, 7)])
    check_split('.b[2].c[7]', '', [(True, 'b'), (False, 2), (True, 'c'), (False, 7)])
    check_split('[3].b[2].c[7]', '',
                [(False, 3), (True, 'b'), (False, 2), (True, 'c'), (False, 7)])
    # Verify unicode._formatter_field_name_split()
    check_split(u'a', 'a', [])
    check_split(u'2', 2, [])
    check_split(u'.b', '', [(True, 'b')])
    check_split(u'a.b[2]', 'a', [(True, 'b'), (False, 2)])
    check_split(u'a.b[2].c[7]', 'a', [(True, 'b'), (False, 2), (True, 'c'), (False, 7)])
    check_split(u'.b[2].c[7]', '', [(True, 'b'), (False, 2), (True, 'c'), (False, 7)])
    check_split(u'[3].b[2].c[7]', '',
                [(False, 3), (True, 'b'), (False, 2), (True, 'c'), (False, 7)])