class TestFileSequenceCheckerSplitPattern(unittest.TestCase):
    ''' test cases for the split pattern '''
    
    def setUp(self):
        self.fsc1 = FileSequenceChecker()
        self.fsc2 = FileSequenceChecker(10, 20, True)
        self.spat1 = ur'^(?P<filename>\w+?)(?P<seqnum>)(?!\W+)$'
        self.spat2 = ur'^.*?(?P<seqnum>.*?)(?P<filename>\w+?).*?$'
        self.spat1template = ur"%(filename)s%(seqnum)s"
        self.spat2template = ur"%(seqnum)s%(filename)s"
        self.badspat1 = ur'.*$'
        self.badspat2 = r''
        self.filenames = [
            u'1 Name20.png',
            u'01 Name20.png',
            u'01-Name20.png',
            u'01Name20.png',
            u'01Name-20.png',
            u'01Name-20',
            u'01Name',
            u'Name20.01.png',
            u'Name20.01.part01',
            u'Name20.01.001',
            u'Name.01.001',
            u'Name.01001',
            u'-Name.01001',
            u'-Name.01001.png',
            u'-Name001.png',
            u'-N0name001-png'
        ]
        
    def testSetsplitpatternWithNormalInput(self): #IGNORE:C0103
        ''' test changing the split pattern after creation with non-bogus input '''
        self.fsc1.setsplitpattern(self.spat1, self.spat1template)
        self.assertEquals(self.fsc1._splitpat, self.spat1)
        self.fsc2.setsplitpattern(self.spat2, self.spat2template)
        self.assertEqual(self.fsc2._splitpat, self.spat2)
        
    def testReset(self):
        ''' test passing None to setsplitpat in order to reset its to the default state'''
        fsc = FileSequenceChecker()
        fsc.setsplitpattern(self.spat1, self.spat1template)
        fsc.setsplitpattern(None)
        self.assertEqual(fsc.SPLITPAT, fsc._splitpat, 'fsc.splitpat should be reset to FileSequenceChecker.SPLITPAT when fsc.setsplitpattern is called with None as arg')
        
    def testSetsplitpatternWithWrongInput(self): #IGNORE:C0103
        ''' test changing the split pattern after creation with non-bogus but wrong input '''
        self.assertRaises(ValueError, self.fsc1.setsplitpattern, self.badspat1, self.spat1template)
        self.assertRaises(ValueError, self.fsc1.setsplitpattern, self.badspat2, self.spat2template)
        self.assertRaises(ValueError, self.fsc1.setsplitpattern, self.badspat1)
        
    def testDefaultSplitPatternMatches(self):
        ''' test that the default split patterns actually match what they should '''
        for name in self.filenames:
            _fsc = FileSequenceChecker()
            result = _fsc.splitfilename(name)
            self.assertIsNotNone(result)
 def testReset(self):
     ''' test passing None to setsplitpat in order to reset its to the default state'''
     fsc = FileSequenceChecker()
     fsc.setsplitpattern(self.spat1, self.spat1template)
     fsc.setsplitpattern(None)
     self.assertEqual(fsc.SPLITPAT, fsc._splitpat, 'fsc.splitpat should be reset to FileSequenceChecker.SPLITPAT when fsc.setsplitpattern is called with None as arg')