74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
# Copyright (c) Twisted Matrix Laboratories.
|
|
# See LICENSE for details.
|
|
|
|
"""
|
|
Test that twisted scripts can be invoked as modules.
|
|
"""
|
|
|
|
from __future__ import division, absolute_import
|
|
|
|
import sys
|
|
|
|
from twisted.application.twist._options import TwistOptions
|
|
from twisted.scripts import trial
|
|
from twisted.internet import defer, reactor
|
|
from twisted.python.compat import NativeStringIO as StringIO
|
|
from twisted.test.test_process import Accumulator
|
|
from twisted.trial.unittest import TestCase
|
|
|
|
|
|
class MainTests(TestCase):
|
|
"""Test that twisted scripts can be invoked as modules."""
|
|
def test_twisted(self):
|
|
"""Invoking python -m twisted should execute twist."""
|
|
cmd = sys.executable
|
|
p = Accumulator()
|
|
d = p.endedDeferred = defer.Deferred()
|
|
reactor.spawnProcess(p, cmd, [cmd, '-m', 'twisted', '--help'], env=None)
|
|
p.transport.closeStdin()
|
|
|
|
# Fix up our sys args to match the command we issued
|
|
from twisted import __main__
|
|
self.patch(sys, 'argv', [__main__.__file__, '--help'])
|
|
|
|
def processEnded(ign):
|
|
f = p.outF
|
|
output = f.getvalue().replace(b'\r\n', b'\n')
|
|
|
|
options = TwistOptions()
|
|
message = '{}\n'.format(options).encode('utf-8')
|
|
self.assertEqual(output, message)
|
|
return d.addCallback(processEnded)
|
|
|
|
def test_trial(self):
|
|
"""Invoking python -m twisted.trial should execute trial."""
|
|
cmd = sys.executable
|
|
p = Accumulator()
|
|
d = p.endedDeferred = defer.Deferred()
|
|
reactor.spawnProcess(p, cmd, [cmd, '-m', 'twisted.trial', '--help'], env=None)
|
|
p.transport.closeStdin()
|
|
|
|
# Fix up our sys args to match the command we issued
|
|
from twisted.trial import __main__
|
|
self.patch(sys, 'argv', [__main__.__file__, '--help'])
|
|
|
|
def processEnded(ign):
|
|
f = p.outF
|
|
output = f.getvalue().replace(b'\r\n', b'\n')
|
|
|
|
options = trial.Options()
|
|
message = '{}\n'.format(options).encode('utf-8')
|
|
self.assertEqual(output, message)
|
|
return d.addCallback(processEnded)
|
|
|
|
def test_twisted_import(self):
|
|
"""Importing twisted.__main__ does not execute twist."""
|
|
output = StringIO()
|
|
monkey = self.patch(sys, 'stdout', output)
|
|
|
|
import twisted.__main__
|
|
self.assertTrue(twisted.__main__) # Appease pyflakes
|
|
|
|
monkey.restore()
|
|
self.assertEqual(output.getvalue(), "")
|