コード例 #1
0
ファイル: textfsm_test.py プロジェクト: dirkakrid/textfsm-2
    def testSpacesAroundAction(self):
        for line in ('  ^Hello World -> Boo', '  ^Hello World ->  Boo',
                     '  ^Hello World ->   Boo'):
            self.failUnlessEqual(str(textfsm.TextFSMRule(line)),
                                 '  ^Hello World -> Boo')

        # A '->' without a leading space is considered part of the matching line.
        self.failUnlessEqual(
            '  A simple line-> Boo -> Next',
            str(textfsm.TextFSMRule('  A simple line-> Boo -> Next')))
コード例 #2
0
ファイル: textfsm_test.py プロジェクト: dirkakrid/textfsm-2
    def testFSMRule(self):

        # Basic line, no action
        line = '  ^A beer called ${beer}'
        r = textfsm.TextFSMRule(line)
        self.failUnlessEqual(r.match, '^A beer called ${beer}')
        self.failUnlessEqual(r.line_op, '')
        self.failUnlessEqual(r.new_state, '')
        self.failUnlessEqual(r.record_op, '')
        # Multiple matches
        line = '  ^A $hi called ${beer}'
        r = textfsm.TextFSMRule(line)
        self.failUnlessEqual(r.match, '^A $hi called ${beer}')
        self.failUnlessEqual(r.line_op, '')
        self.failUnlessEqual(r.new_state, '')
        self.failUnlessEqual(r.record_op, '')

        # Line with action.
        line = '  ^A beer called ${beer} -> Next'
        r = textfsm.TextFSMRule(line)
        self.failUnlessEqual(r.match, '^A beer called ${beer}')
        self.failUnlessEqual(r.line_op, 'Next')
        self.failUnlessEqual(r.new_state, '')
        self.failUnlessEqual(r.record_op, '')
        # Line with record.
        line = '  ^A beer called ${beer} -> Continue.Record'
        r = textfsm.TextFSMRule(line)
        self.failUnlessEqual(r.match, '^A beer called ${beer}')
        self.failUnlessEqual(r.line_op, 'Continue')
        self.failUnlessEqual(r.new_state, '')
        self.failUnlessEqual(r.record_op, 'Record')
        # Line with new state.
        line = '  ^A beer called ${beer} -> Next.NoRecord End'
        r = textfsm.TextFSMRule(line)
        self.failUnlessEqual(r.match, '^A beer called ${beer}')
        self.failUnlessEqual(r.line_op, 'Next')
        self.failUnlessEqual(r.new_state, 'End')
        self.failUnlessEqual(r.record_op, 'NoRecord')

        # Bad syntax tests.
        self.failUnlessRaises(textfsm.TextFSMTemplateError,
                              textfsm.TextFSMRule,
                              '  ^A beer called ${beer} -> Next Next Next')
        self.failUnlessRaises(textfsm.TextFSMTemplateError,
                              textfsm.TextFSMRule,
                              '  ^A beer called ${beer} -> Boo.hoo')
        self.failUnlessRaises(
            textfsm.TextFSMTemplateError, textfsm.TextFSMRule,
            '  ^A beer called ${beer} -> Continue.Record $Hi')
コード例 #3
0
 def testFSMRule(self):
     # Basic line, no action
     line = '  ^A beer called ${beer}Δ'
     r = textfsm.TextFSMRule(line)
     self.assertEqual(r.match, '^A beer called ${beer}Δ')
     self.assertEqual(r.line_op, '')
     self.assertEqual(r.new_state, '')
     self.assertEqual(r.record_op, '')
コード例 #4
0
  def testInvalidStates(self):

    # 'Continue' should not accept a destination.
    self.assertRaises(textfsm.TextFSMTemplateError, textfsm.TextFSMRule,
                      '^.* -> Continue Start')

    # 'Error' accepts a text string but "next' state does not.
    self.assertEqual(str(textfsm.TextFSMRule('  ^ -> Error "hi there"')),
                     '  ^ -> Error "hi there"')
    self.assertRaises(textfsm.TextFSMTemplateError, textfsm.TextFSMRule,
                      '^.* -> Next "Hello World"')
コード例 #5
0
ファイル: textfsm_test.py プロジェクト: dirkakrid/textfsm-2
    def testImplicitDefaultRules(self):

        for line in ('  ^A beer called ${beer} -> Record End',
                     '  ^A beer called ${beer} -> End',
                     '  ^A beer called ${beer} -> Next.NoRecord End',
                     '  ^A beer called ${beer} -> Clear End',
                     '  ^A beer called ${beer} -> Error "Hello World"'):
            r = textfsm.TextFSMRule(line)
            self.failUnlessEqual(str(r), line)

        for line in ('  ^A beer called ${beer} -> Next "Hello World"',
                     '  ^A beer called ${beer} -> Record.Next',
                     '  ^A beer called ${beer} -> Continue End',
                     '  ^A beer called ${beer} -> Beer End'):
            self.failUnlessRaises(textfsm.TextFSMTemplateError,
                                  textfsm.TextFSMRule, line)
コード例 #6
0
ファイル: textfsm_test.py プロジェクト: dirkakrid/textfsm-2
    def testValidateFSM(self):

        # No Values.
        f = cStringIO.StringIO('\nNotStart\n')
        self.failUnlessRaises(textfsm.TextFSMTemplateError, textfsm.TextFSM, f)

        # No states.
        f = cStringIO.StringIO('Value unused (.)\n\n')
        self.failUnlessRaises(textfsm.TextFSMTemplateError, textfsm.TextFSM, f)

        # No 'Start' state.
        f = cStringIO.StringIO('Value unused (.)\n\nNotStart\n')
        self.failUnlessRaises(textfsm.TextFSMTemplateError, textfsm.TextFSM, f)

        # Has 'Start' state with valid destination
        f = cStringIO.StringIO('Value unused (.)\n\nStart\n')
        t = textfsm.TextFSM(f)
        t.states['Start'] = []
        t.states['Start'].append(textfsm.TextFSMRule('^.* -> Start'))
        t._ValidateFSM()

        # Invalid destination.
        t.states['Start'].append(textfsm.TextFSMRule('^.* -> bogus'))
        self.failUnlessRaises(textfsm.TextFSMTemplateError, t._ValidateFSM)

        # Now valid again.
        t.states['bogus'] = []
        t.states['bogus'].append(textfsm.TextFSMRule('^.* -> Start'))
        t._ValidateFSM()

        # Valid destination with options.
        t.states['bogus'] = []
        t.states['bogus'].append(
            textfsm.TextFSMRule('^.* -> Next.Record Start'))
        t._ValidateFSM()

        # Error with and without messages string.
        t.states['bogus'] = []
        t.states['bogus'].append(textfsm.TextFSMRule('^.* -> Error'))
        t._ValidateFSM()
        t.states['bogus'].append(textfsm.TextFSMRule('^.* -> Error "Boo hoo"'))
        t._ValidateFSM()