aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_shellcomp.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_shellcomp.py')
-rwxr-xr-xlib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_shellcomp.py623
1 files changed, 0 insertions, 623 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_shellcomp.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_shellcomp.py
deleted file mode 100755
index 7f9cc833..00000000
--- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_shellcomp.py
+++ /dev/null
@@ -1,623 +0,0 @@
-# Copyright (c) Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-"""
-Test cases for twisted.python._shellcomp
-"""
-
-import sys
-from cStringIO import StringIO
-
-from twisted.trial import unittest
-from twisted.python import _shellcomp, usage, reflect
-from twisted.python.usage import Completions, Completer, CompleteFiles
-from twisted.python.usage import CompleteList
-
-
-
-class ZshScriptTestMeta(type):
- """
- Metaclass of ZshScriptTestMixin.
- """
- def __new__(cls, name, bases, attrs):
- def makeTest(cmdName, optionsFQPN):
- def runTest(self):
- return test_genZshFunction(self, cmdName, optionsFQPN)
- return runTest
-
- # add test_ methods to the class for each script
- # we are testing.
- if 'generateFor' in attrs:
- for cmdName, optionsFQPN in attrs['generateFor']:
- test = makeTest(cmdName, optionsFQPN)
- attrs['test_genZshFunction_' + cmdName] = test
-
- return type.__new__(cls, name, bases, attrs)
-
-
-
-class ZshScriptTestMixin(object):
- """
- Integration test helper to show that C{usage.Options} classes can have zsh
- completion functions generated for them without raising errors.
-
- In your subclasses set a class variable like so:
-
- # | cmd name | Fully Qualified Python Name of Options class |
- #
- generateFor = [('conch', 'twisted.conch.scripts.conch.ClientOptions'),
- ('twistd', 'twisted.scripts.twistd.ServerOptions'),
- ]
-
- Each package that contains Twisted scripts should contain one TestCase
- subclass which also inherits from this mixin, and contains a C{generateFor}
- list appropriate for the scripts in that package.
- """
- __metaclass__ = ZshScriptTestMeta
-
-
-
-def test_genZshFunction(self, cmdName, optionsFQPN):
- """
- Generate completion functions for given twisted command - no errors
- should be raised
-
- @type cmdName: C{str}
- @param cmdName: The name of the command-line utility e.g. 'twistd'
-
- @type optionsFQPN: C{str}
- @param optionsFQPN: The Fully Qualified Python Name of the C{Options}
- class to be tested.
- """
- outputFile = StringIO()
- self.patch(usage.Options, '_shellCompFile', outputFile)
-
- # some scripts won't import or instantiate because of missing
- # dependencies (PyCrypto, etc) so we have to skip them.
- try:
- o = reflect.namedAny(optionsFQPN)()
- except Exception, e:
- raise unittest.SkipTest("Couldn't import or instantiate "
- "Options class: %s" % (e,))
-
- try:
- o.parseOptions(["", "--_shell-completion", "zsh:2"])
- except ImportError, e:
- # this can happen for commands which don't have all
- # the necessary dependencies installed. skip test.
- # skip
- raise unittest.SkipTest("ImportError calling parseOptions(): %s", (e,))
- except SystemExit:
- pass # expected
- else:
- self.fail('SystemExit not raised')
- outputFile.seek(0)
- # test that we got some output
- self.assertEqual(1, len(outputFile.read(1)))
- outputFile.seek(0)
- outputFile.truncate()
-
- # now, if it has sub commands, we have to test those too
- if hasattr(o, 'subCommands'):
- for (cmd, short, parser, doc) in o.subCommands:
- try:
- o.parseOptions([cmd, "", "--_shell-completion",
- "zsh:3"])
- except ImportError, e:
- # this can happen for commands which don't have all
- # the necessary dependencies installed. skip test.
- raise unittest.SkipTest("ImportError calling parseOptions() "
- "on subcommand: %s", (e,))
- except SystemExit:
- pass # expected
- else:
- self.fail('SystemExit not raised')
-
- outputFile.seek(0)
- # test that we got some output
- self.assertEqual(1, len(outputFile.read(1)))
- outputFile.seek(0)
- outputFile.truncate()
-
- # flushed because we don't want DeprecationWarnings to be printed when
- # running these test cases.
- self.flushWarnings()
-
-
-
-class ZshTestCase(unittest.TestCase):
- """
- Tests for zsh completion code
- """
- def test_accumulateMetadata(self):
- """
- Are `compData' attributes you can place on Options classes
- picked up correctly?
- """
- opts = FighterAceExtendedOptions()
- ag = _shellcomp.ZshArgumentsGenerator(opts, 'ace', 'dummy_value')
-
- descriptions = FighterAceOptions.compData.descriptions.copy()
- descriptions.update(FighterAceExtendedOptions.compData.descriptions)
-
- self.assertEqual(ag.descriptions, descriptions)
- self.assertEqual(ag.multiUse,
- set(FighterAceOptions.compData.multiUse))
- self.assertEqual(ag.mutuallyExclusive,
- FighterAceOptions.compData.mutuallyExclusive)
-
- optActions = FighterAceOptions.compData.optActions.copy()
- optActions.update(FighterAceExtendedOptions.compData.optActions)
- self.assertEqual(ag.optActions, optActions)
-
- self.assertEqual(ag.extraActions,
- FighterAceOptions.compData.extraActions)
-
-
- def test_mutuallyExclusiveCornerCase(self):
- """
- Exercise a corner-case of ZshArgumentsGenerator.makeExcludesDict()
- where the long option name already exists in the `excludes` dict being
- built.
- """
- class OddFighterAceOptions(FighterAceExtendedOptions):
- # since "fokker", etc, are already defined as mutually-
- # exclusive on the super-class, defining them again here forces
- # the corner-case to be exercised.
- optFlags = [['anatra', None,
- 'Select the Anatra DS as your dogfighter aircraft']]
- compData = Completions(
- mutuallyExclusive=[['anatra', 'fokker', 'albatros',
- 'spad', 'bristol']])
-
- opts = OddFighterAceOptions()
- ag = _shellcomp.ZshArgumentsGenerator(opts, 'ace', 'dummy_value')
-
- expected = {
- 'albatros': set(['anatra', 'b', 'bristol', 'f',
- 'fokker', 's', 'spad']),
- 'anatra': set(['a', 'albatros', 'b', 'bristol',
- 'f', 'fokker', 's', 'spad']),
- 'bristol': set(['a', 'albatros', 'anatra', 'f',
- 'fokker', 's', 'spad']),
- 'fokker': set(['a', 'albatros', 'anatra', 'b',
- 'bristol', 's', 'spad']),
- 'spad': set(['a', 'albatros', 'anatra', 'b',
- 'bristol', 'f', 'fokker'])}
-
- self.assertEqual(ag.excludes, expected)
-
-
- def test_accumulateAdditionalOptions(self):
- """
- We pick up options that are only defined by having an
- appropriately named method on your Options class,
- e.g. def opt_foo(self, foo)
- """
- opts = FighterAceExtendedOptions()
- ag = _shellcomp.ZshArgumentsGenerator(opts, 'ace', 'dummy_value')
-
- self.assertIn('nocrash', ag.flagNameToDefinition)
- self.assertIn('nocrash', ag.allOptionsNameToDefinition)
-
- self.assertIn('difficulty', ag.paramNameToDefinition)
- self.assertIn('difficulty', ag.allOptionsNameToDefinition)
-
-
- def test_verifyZshNames(self):
- """
- Using a parameter/flag name that doesn't exist
- will raise an error
- """
- class TmpOptions(FighterAceExtendedOptions):
- # Note typo of detail
- compData = Completions(optActions={'detaill' : None})
-
- self.assertRaises(ValueError, _shellcomp.ZshArgumentsGenerator,
- TmpOptions(), 'ace', 'dummy_value')
-
- class TmpOptions2(FighterAceExtendedOptions):
- # Note that 'foo' and 'bar' are not real option
- # names defined in this class
- compData = Completions(
- mutuallyExclusive=[("foo", "bar")])
-
- self.assertRaises(ValueError, _shellcomp.ZshArgumentsGenerator,
- TmpOptions2(), 'ace', 'dummy_value')
-
-
- def test_zshCode(self):
- """
- Generate a completion function, and test the textual output
- against a known correct output
- """
- outputFile = StringIO()
- self.patch(usage.Options, '_shellCompFile', outputFile)
- self.patch(sys, 'argv', ["silly", "", "--_shell-completion", "zsh:2"])
- opts = SimpleProgOptions()
- self.assertRaises(SystemExit, opts.parseOptions)
- self.assertEqual(testOutput1, outputFile.getvalue())
-
-
- def test_zshCodeWithSubs(self):
- """
- Generate a completion function with subcommands,
- and test the textual output against a known correct output
- """
- outputFile = StringIO()
- self.patch(usage.Options, '_shellCompFile', outputFile)
- self.patch(sys, 'argv', ["silly2", "", "--_shell-completion", "zsh:2"])
- opts = SimpleProgWithSubcommands()
- self.assertRaises(SystemExit, opts.parseOptions)
- self.assertEqual(testOutput2, outputFile.getvalue())
-
-
- def test_incompleteCommandLine(self):
- """
- Completion still happens even if a command-line is given
- that would normally throw UsageError.
- """
- outputFile = StringIO()
- self.patch(usage.Options, '_shellCompFile', outputFile)
- opts = FighterAceOptions()
-
- self.assertRaises(SystemExit, opts.parseOptions,
- ["--fokker", "server", "--unknown-option",
- "--unknown-option2",
- "--_shell-completion", "zsh:5"])
- outputFile.seek(0)
- # test that we got some output
- self.assertEqual(1, len(outputFile.read(1)))
-
-
- def test_incompleteCommandLine_case2(self):
- """
- Completion still happens even if a command-line is given
- that would normally throw UsageError.
-
- The existance of --unknown-option prior to the subcommand
- will break subcommand detection... but we complete anyway
- """
- outputFile = StringIO()
- self.patch(usage.Options, '_shellCompFile', outputFile)
- opts = FighterAceOptions()
-
- self.assertRaises(SystemExit, opts.parseOptions,
- ["--fokker", "--unknown-option", "server",
- "--list-server", "--_shell-completion", "zsh:5"])
- outputFile.seek(0)
- # test that we got some output
- self.assertEqual(1, len(outputFile.read(1)))
-
- outputFile.seek(0)
- outputFile.truncate()
-
-
- def test_incompleteCommandLine_case3(self):
- """
- Completion still happens even if a command-line is given
- that would normally throw UsageError.
-
- Break subcommand detection in a different way by providing
- an invalid subcommand name.
- """
- outputFile = StringIO()
- self.patch(usage.Options, '_shellCompFile', outputFile)
- opts = FighterAceOptions()
-
- self.assertRaises(SystemExit, opts.parseOptions,
- ["--fokker", "unknown-subcommand",
- "--list-server", "--_shell-completion", "zsh:4"])
- outputFile.seek(0)
- # test that we got some output
- self.assertEqual(1, len(outputFile.read(1)))
-
-
- def test_skipSubcommandList(self):
- """
- Ensure the optimization which skips building the subcommand list
- under certain conditions isn't broken.
- """
- outputFile = StringIO()
- self.patch(usage.Options, '_shellCompFile', outputFile)
- opts = FighterAceOptions()
-
- self.assertRaises(SystemExit, opts.parseOptions,
- ["--alba", "--_shell-completion", "zsh:2"])
- outputFile.seek(0)
- # test that we got some output
- self.assertEqual(1, len(outputFile.read(1)))
-
-
- def test_poorlyDescribedOptMethod(self):
- """
- Test corner case fetching an option description from a method docstring
- """
- opts = FighterAceOptions()
- argGen = _shellcomp.ZshArgumentsGenerator(opts, 'ace', None)
-
- descr = argGen.getDescription('silly')
-
- # docstring for opt_silly is useless so it should just use the
- # option name as the description
- self.assertEqual(descr, 'silly')
-
-
- def test_brokenActions(self):
- """
- A C{Completer} with repeat=True may only be used as the
- last item in the extraActions list.
- """
- class BrokenActions(usage.Options):
- compData = usage.Completions(
- extraActions=[usage.Completer(repeat=True),
- usage.Completer()]
- )
-
- outputFile = StringIO()
- opts = BrokenActions()
- self.patch(opts, '_shellCompFile', outputFile)
- self.assertRaises(ValueError, opts.parseOptions,
- ["", "--_shell-completion", "zsh:2"])
-
-
- def test_optMethodsDontOverride(self):
- """
- opt_* methods on Options classes should not override the
- data provided in optFlags or optParameters.
- """
- class Options(usage.Options):
- optFlags = [['flag', 'f', 'A flag']]
- optParameters = [['param', 'p', None, 'A param']]
-
- def opt_flag(self):
- """ junk description """
-
- def opt_param(self, param):
- """ junk description """
-
- opts = Options()
- argGen = _shellcomp.ZshArgumentsGenerator(opts, 'ace', None)
-
- self.assertEqual(argGen.getDescription('flag'), 'A flag')
- self.assertEqual(argGen.getDescription('param'), 'A param')
-
-
-
-class EscapeTestCase(unittest.TestCase):
- def test_escape(self):
- """
- Verify _shellcomp.escape() function
- """
- esc = _shellcomp.escape
-
- test = "$"
- self.assertEqual(esc(test), "'$'")
-
- test = 'A--\'$"\\`--B'
- self.assertEqual(esc(test), '"A--\'\\$\\"\\\\\\`--B"')
-
-
-
-class CompleterNotImplementedTestCase(unittest.TestCase):
- """
- Test that using an unknown shell constant with SubcommandAction
- raises NotImplementedError
-
- The other Completer() subclasses are tested in test_usage.py
- """
- def test_unknownShell(self):
- """
- Using an unknown shellType should raise NotImplementedError
- """
- action = _shellcomp.SubcommandAction()
-
- self.assertRaises(NotImplementedError, action._shellCode,
- None, "bad_shell_type")
-
-
-
-class FighterAceServerOptions(usage.Options):
- """
- Options for FighterAce 'server' subcommand
- """
- optFlags = [['list-server', None,
- 'List this server with the online FighterAce network']]
- optParameters = [['packets-per-second', None,
- 'Number of update packets to send per second', '20']]
-
-
-
-class FighterAceOptions(usage.Options):
- """
- Command-line options for an imaginary `Fighter Ace` game
- """
- optFlags = [['fokker', 'f',
- 'Select the Fokker Dr.I as your dogfighter aircraft'],
- ['albatros', 'a',
- 'Select the Albatros D-III as your dogfighter aircraft'],
- ['spad', 's',
- 'Select the SPAD S.VII as your dogfighter aircraft'],
- ['bristol', 'b',
- 'Select the Bristol Scout as your dogfighter aircraft'],
- ['physics', 'p',
- 'Enable secret Twisted physics engine'],
- ['jam', 'j',
- 'Enable a small chance that your machine guns will jam!'],
- ['verbose', 'v',
- 'Verbose logging (may be specified more than once)'],
- ]
-
- optParameters = [['pilot-name', None, "What's your name, Ace?",
- 'Manfred von Richthofen'],
- ['detail', 'd',
- 'Select the level of rendering detail (1-5)', '3'],
- ]
-
- subCommands = [['server', None, FighterAceServerOptions,
- 'Start FighterAce game-server.'],
- ]
-
- compData = Completions(
- descriptions={'physics' : 'Twisted-Physics',
- 'detail' : 'Rendering detail level'},
- multiUse=['verbose'],
- mutuallyExclusive=[['fokker', 'albatros', 'spad',
- 'bristol']],
- optActions={'detail' : CompleteList(['1' '2' '3'
- '4' '5'])},
- extraActions=[CompleteFiles(descr='saved game file to load')]
- )
-
- def opt_silly(self):
- # A silly option which nobody can explain
- """ """
-
-
-
-class FighterAceExtendedOptions(FighterAceOptions):
- """
- Extend the options and zsh metadata provided by FighterAceOptions.
- _shellcomp must accumulate options and metadata from all classes in the
- hiearchy so this is important to test.
- """
- optFlags = [['no-stalls', None,
- 'Turn off the ability to stall your aircraft']]
- optParameters = [['reality-level', None,
- 'Select the level of physics reality (1-5)', '5']]
-
- compData = Completions(
- descriptions={'no-stalls' : 'Can\'t stall your plane'},
- optActions={'reality-level' :
- Completer(descr='Physics reality level')}
- )
-
- def opt_nocrash(self):
- """
- Select that you can't crash your plane
- """
-
-
- def opt_difficulty(self, difficulty):
- """
- How tough are you? (1-10)
- """
-
-
-
-def _accuracyAction():
- # add tick marks just to exercise quoting
- return CompleteList(['1', '2', '3'], descr='Accuracy\'`?')
-
-
-
-class SimpleProgOptions(usage.Options):
- """
- Command-line options for a `Silly` imaginary program
- """
- optFlags = [['color', 'c', 'Turn on color output'],
- ['gray', 'g', 'Turn on gray-scale output'],
- ['verbose', 'v',
- 'Verbose logging (may be specified more than once)'],
- ]
-
- optParameters = [['optimization', None, '5',
- 'Select the level of optimization (1-5)'],
- ['accuracy', 'a', '3',
- 'Select the level of accuracy (1-3)'],
- ]
-
-
- compData = Completions(
- descriptions={'color' : 'Color on',
- 'optimization' : 'Optimization level'},
- multiUse=['verbose'],
- mutuallyExclusive=[['color', 'gray']],
- optActions={'optimization' : CompleteList(['1', '2', '3', '4', '5'],
- descr='Optimization?'),
- 'accuracy' : _accuracyAction},
- extraActions=[CompleteFiles(descr='output file')]
- )
-
- def opt_X(self):
- """
- usage.Options does not recognize single-letter opt_ methods
- """
-
-
-
-class SimpleProgSub1(usage.Options):
- optFlags = [['sub-opt', 's', 'Sub Opt One']]
-
-
-
-class SimpleProgSub2(usage.Options):
- optFlags = [['sub-opt', 's', 'Sub Opt Two']]
-
-
-
-class SimpleProgWithSubcommands(SimpleProgOptions):
- optFlags = [['some-option'],
- ['other-option', 'o']]
-
- optParameters = [['some-param'],
- ['other-param', 'p'],
- ['another-param', 'P', 'Yet Another Param']]
-
- subCommands = [ ['sub1', None, SimpleProgSub1, 'Sub Command 1'],
- ['sub2', None, SimpleProgSub2, 'Sub Command 2']]
-
-
-
-testOutput1 = """#compdef silly
-
-_arguments -s -A "-*" \\
-':output file (*):_files -g "*"' \\
-"(--accuracy)-a[Select the level of accuracy (1-3)]:Accuracy'\`?:(1 2 3)" \\
-"(-a)--accuracy=[Select the level of accuracy (1-3)]:Accuracy'\`?:(1 2 3)" \\
-'(--color --gray -g)-c[Color on]' \\
-'(--gray -c -g)--color[Color on]' \\
-'(--color --gray -c)-g[Turn on gray-scale output]' \\
-'(--color -c -g)--gray[Turn on gray-scale output]' \\
-'--help[Display this help and exit.]' \\
-'--optimization=[Optimization level]:Optimization?:(1 2 3 4 5)' \\
-'*-v[Verbose logging (may be specified more than once)]' \\
-'*--verbose[Verbose logging (may be specified more than once)]' \\
-'--version[Display Twisted version and exit.]' \\
-&& return 0
-"""
-
-# with sub-commands
-testOutput2 = """#compdef silly2
-
-_arguments -s -A "-*" \\
-'*::subcmd:->subcmd' \\
-':output file (*):_files -g "*"' \\
-"(--accuracy)-a[Select the level of accuracy (1-3)]:Accuracy'\`?:(1 2 3)" \\
-"(-a)--accuracy=[Select the level of accuracy (1-3)]:Accuracy'\`?:(1 2 3)" \\
-'(--another-param)-P[another-param]:another-param:_files' \\
-'(-P)--another-param=[another-param]:another-param:_files' \\
-'(--color --gray -g)-c[Color on]' \\
-'(--gray -c -g)--color[Color on]' \\
-'(--color --gray -c)-g[Turn on gray-scale output]' \\
-'(--color -c -g)--gray[Turn on gray-scale output]' \\
-'--help[Display this help and exit.]' \\
-'--optimization=[Optimization level]:Optimization?:(1 2 3 4 5)' \\
-'(--other-option)-o[other-option]' \\
-'(-o)--other-option[other-option]' \\
-'(--other-param)-p[other-param]:other-param:_files' \\
-'(-p)--other-param=[other-param]:other-param:_files' \\
-'--some-option[some-option]' \\
-'--some-param=[some-param]:some-param:_files' \\
-'*-v[Verbose logging (may be specified more than once)]' \\
-'*--verbose[Verbose logging (may be specified more than once)]' \\
-'--version[Display Twisted version and exit.]' \\
-&& return 0
-local _zsh_subcmds_array
-_zsh_subcmds_array=(
-"sub1:Sub Command 1"
-"sub2:Sub Command 2"
-)
-
-_describe "sub-command" _zsh_subcmds_array
-"""