mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-23 11:09:23 +01:00
Moved {zen,pydoc} to the Python plugin and {whois,dns} to the Network plugin.
This commit is contained in:
parent
1c2a090b28
commit
538a262341
@ -54,12 +54,6 @@ import telnetlib
|
|||||||
import threading
|
import threading
|
||||||
import mimetypes
|
import mimetypes
|
||||||
|
|
||||||
# Stupid printing on import...
|
|
||||||
from cStringIO import StringIO
|
|
||||||
sys.stdout = StringIO()
|
|
||||||
import this
|
|
||||||
sys.stdout = sys.__stdout__
|
|
||||||
|
|
||||||
#import conf
|
#import conf
|
||||||
import debug
|
import debug
|
||||||
import utils
|
import utils
|
||||||
@ -466,54 +460,6 @@ class FunCommands(callbacks.Privmsg):
|
|||||||
length = 4
|
length = 4
|
||||||
irc.reply(msg, utils.soundex(s, length))
|
irc.reply(msg, utils.soundex(s, length))
|
||||||
|
|
||||||
modulechars = '%s%s%s' % (string.ascii_letters, string.digits, '_.')
|
|
||||||
def pydoc(self, irc, msg, args):
|
|
||||||
"""<python function>
|
|
||||||
|
|
||||||
Returns the __doc__ string for a given Python function.
|
|
||||||
"""
|
|
||||||
funcname = privmsgs.getArgs(args)
|
|
||||||
if funcname.translate(string.ascii, self.modulechars) != '':
|
|
||||||
irc.error('That\'s not a valid module or function name.')
|
|
||||||
return
|
|
||||||
if '.' in funcname:
|
|
||||||
parts = funcname.split('.')
|
|
||||||
functionName = parts.pop()
|
|
||||||
path = os.path.dirname(os.__file__)
|
|
||||||
for name in parts:
|
|
||||||
try:
|
|
||||||
info = imp.find_module(name, [path])
|
|
||||||
newmodule = imp.load_module(name, *info)
|
|
||||||
path = os.path.dirname(newmodule.__file__)
|
|
||||||
info[0].close()
|
|
||||||
except ImportError:
|
|
||||||
irc.error(msg, 'No such module %s exists.' % module)
|
|
||||||
return
|
|
||||||
if hasattr(newmodule, functionName):
|
|
||||||
f = getattr(newmodule, functionName)
|
|
||||||
if hasattr(f, '__doc__'):
|
|
||||||
s = f.__doc__.replace('\n\n', '. ')
|
|
||||||
s = utils.normalizeWhitespace(s)
|
|
||||||
irc.reply(msg, s)
|
|
||||||
else:
|
|
||||||
irc.error(msg, 'That function has no documentation.')
|
|
||||||
else:
|
|
||||||
irc.error(msg, 'That function doesn\'t exist.')
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
f = __builtins__[funcname]
|
|
||||||
if hasattr(f, '__doc__'):
|
|
||||||
s = f.__doc__.replace('\n\n', '. ')
|
|
||||||
s = utils.normalizeWhitespace(s)
|
|
||||||
irc.reply(msg, s)
|
|
||||||
else:
|
|
||||||
irc.error(msg, 'That function has no documentation.')
|
|
||||||
except SyntaxError:
|
|
||||||
irc.error(msg, 'That\'s not a function!')
|
|
||||||
except KeyError:
|
|
||||||
irc.error(msg, 'That function doesn\'t exist.')
|
|
||||||
|
|
||||||
|
|
||||||
_eightballs = (
|
_eightballs = (
|
||||||
'outlook not so good.',
|
'outlook not so good.',
|
||||||
'my reply is no.',
|
'my reply is no.',
|
||||||
@ -543,79 +489,6 @@ class FunCommands(callbacks.Privmsg):
|
|||||||
irc.reply(msg, random.choice(self._eightballs))
|
irc.reply(msg, random.choice(self._eightballs))
|
||||||
|
|
||||||
|
|
||||||
_these = [str(s) for s in this.s.decode('rot13').splitlines() if s]
|
|
||||||
_these.pop(0)
|
|
||||||
def zen(self, irc, msg, args):
|
|
||||||
"""takes no arguments
|
|
||||||
|
|
||||||
Returns one of the zen of Python statements.
|
|
||||||
"""
|
|
||||||
irc.reply(msg, random.choice(self._these))
|
|
||||||
|
|
||||||
def dns(self, irc, msg, args):
|
|
||||||
"""<host|ip>
|
|
||||||
|
|
||||||
Returns the ip of <host> or the reverse DNS hostname of <ip>.
|
|
||||||
"""
|
|
||||||
host = privmsgs.getArgs(args)
|
|
||||||
if ircutils.isIP(host):
|
|
||||||
hostname = socket.getfqdn(host)
|
|
||||||
if hostname == host:
|
|
||||||
irc.error(msg, 'Host not found.')
|
|
||||||
else:
|
|
||||||
irc.reply(msg, hostname)
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
ip = socket.gethostbyname(host)
|
|
||||||
if ip == '64.94.110.11':
|
|
||||||
irc.reply(msg, 'Host not found.')
|
|
||||||
else:
|
|
||||||
irc.reply(msg, ip)
|
|
||||||
except socket.error:
|
|
||||||
irc.error(msg, 'Host not found.')
|
|
||||||
dns = privmsgs.thread(dns)
|
|
||||||
|
|
||||||
_domains = sets.Set(['com', 'net', 'edu'])
|
|
||||||
def whois(self, irc, msg, args):
|
|
||||||
"""<domain>
|
|
||||||
|
|
||||||
Returns WHOIS information on the registration of <domain>. <domain>
|
|
||||||
must be in tlds .com, .net, or .edu.
|
|
||||||
"""
|
|
||||||
domain = privmsgs.getArgs(args)
|
|
||||||
if '.' not in domain or domain.split('.')[-1] not in self._domains:
|
|
||||||
irc.error(msg, '<domain> must be in .com, .net, or .edu.')
|
|
||||||
return
|
|
||||||
t = telnetlib.Telnet('rs.internic.net', 43)
|
|
||||||
t.write(domain)
|
|
||||||
t.write('\n')
|
|
||||||
s = t.read_all()
|
|
||||||
for line in s.splitlines():
|
|
||||||
line = line.strip()
|
|
||||||
if not line:
|
|
||||||
continue
|
|
||||||
if line.startswith('Registrar'):
|
|
||||||
registrar = line.split()[-1].capitalize()
|
|
||||||
elif line.startswith('Referral'):
|
|
||||||
url = line.split()[-1]
|
|
||||||
elif line.startswith('Updated'):
|
|
||||||
updated = line.split()[-1]
|
|
||||||
elif line.startswith('Creation'):
|
|
||||||
created = line.split()[-1]
|
|
||||||
elif line.startswith('Expiration'):
|
|
||||||
expires = line.split()[-1]
|
|
||||||
elif line.startswith('Status'):
|
|
||||||
status = line.split()[-1].lower()
|
|
||||||
try:
|
|
||||||
s = '%s <%s> is %s; registered %s, updated %s, expires %s.' % \
|
|
||||||
(domain, url, status, created, updated, expires)
|
|
||||||
irc.reply(msg, s)
|
|
||||||
except NameError, e:
|
|
||||||
debug.printf(e)
|
|
||||||
irc.error(msg, 'I couldn\'t find such a domain.')
|
|
||||||
whois = privmsgs.thread(whois)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Class = FunCommands
|
Class = FunCommands
|
||||||
|
|
||||||
|
130
plugins/Network.py
Normal file
130
plugins/Network.py
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
###
|
||||||
|
# Copyright (c) 2002, Jeremiah Fincher
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the author of this software nor the name of
|
||||||
|
# contributors to this software may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written consent.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
###
|
||||||
|
|
||||||
|
"""
|
||||||
|
Various network-related commands.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from baseplugin import *
|
||||||
|
|
||||||
|
import sets
|
||||||
|
import socket
|
||||||
|
import telnetlib
|
||||||
|
|
||||||
|
import debug
|
||||||
|
import utils
|
||||||
|
import ircutils
|
||||||
|
import privmsgs
|
||||||
|
import callbacks
|
||||||
|
|
||||||
|
|
||||||
|
def configure(onStart, afterConnect, advanced):
|
||||||
|
# This will be called by setup.py to configure this module. onStart and
|
||||||
|
# afterConnect are both lists. Append to onStart the commands you would
|
||||||
|
# like to be run when the bot is started; append to afterConnect the
|
||||||
|
# commands you would like to be run when the bot has finished connecting.
|
||||||
|
from questions import expect, anything, something, yn
|
||||||
|
onStart.append('load Network')
|
||||||
|
|
||||||
|
example = utils.wrapLines("""
|
||||||
|
Add an example IRC session using this module here.
|
||||||
|
""")
|
||||||
|
|
||||||
|
class Network(callbacks.Privmsg):
|
||||||
|
threaded = True
|
||||||
|
def dns(self, irc, msg, args):
|
||||||
|
"""<host|ip>
|
||||||
|
|
||||||
|
Returns the ip of <host> or the reverse DNS hostname of <ip>.
|
||||||
|
"""
|
||||||
|
host = privmsgs.getArgs(args)
|
||||||
|
if ircutils.isIP(host):
|
||||||
|
hostname = socket.getfqdn(host)
|
||||||
|
if hostname == host:
|
||||||
|
irc.error(msg, 'Host not found.')
|
||||||
|
else:
|
||||||
|
irc.reply(msg, hostname)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
ip = socket.gethostbyname(host)
|
||||||
|
if ip == '64.94.110.11': # Verisign sucks!
|
||||||
|
irc.reply(msg, 'Host not found.')
|
||||||
|
else:
|
||||||
|
irc.reply(msg, ip)
|
||||||
|
except socket.error:
|
||||||
|
irc.error(msg, 'Host not found.')
|
||||||
|
|
||||||
|
_tlds = sets.Set(['com', 'net', 'edu'])
|
||||||
|
def whois(self, irc, msg, args):
|
||||||
|
"""<domain>
|
||||||
|
|
||||||
|
Returns WHOIS information on the registration of <domain>. <domain>
|
||||||
|
must be in tlds .com, .net, or .edu.
|
||||||
|
"""
|
||||||
|
domain = privmsgs.getArgs(args)
|
||||||
|
if '.' not in domain or domain.split('.')[-1] not in self._tlds:
|
||||||
|
irc.error(msg, '<domain> must be in .com, .net, or .edu.')
|
||||||
|
return
|
||||||
|
elif len(domain.split('.')) != 2:
|
||||||
|
irc.error(msg, '<domain> must be a domain, not a hostname.')
|
||||||
|
return
|
||||||
|
t = telnetlib.Telnet('rs.internic.net', 43)
|
||||||
|
t.write(domain)
|
||||||
|
t.write('\n')
|
||||||
|
s = t.read_all()
|
||||||
|
for line in s.splitlines():
|
||||||
|
line = line.strip()
|
||||||
|
if not line:
|
||||||
|
continue
|
||||||
|
if line.startswith('Registrar'):
|
||||||
|
registrar = line.split()[-1].capitalize()
|
||||||
|
elif line.startswith('Referral'):
|
||||||
|
url = line.split()[-1]
|
||||||
|
elif line.startswith('Updated'):
|
||||||
|
updated = line.split()[-1]
|
||||||
|
elif line.startswith('Creation'):
|
||||||
|
created = line.split()[-1]
|
||||||
|
elif line.startswith('Expiration'):
|
||||||
|
expires = line.split()[-1]
|
||||||
|
elif line.startswith('Status'):
|
||||||
|
status = line.split()[-1].lower()
|
||||||
|
try:
|
||||||
|
s = '%s <%s> is %s; registered %s, updated %s, expires %s.' % \
|
||||||
|
(domain, url, status, created, updated, expires)
|
||||||
|
irc.reply(msg, s)
|
||||||
|
except NameError, e:
|
||||||
|
#debug.printf(e)
|
||||||
|
irc.error(msg, 'I couldn\'t find such a domain.')
|
||||||
|
|
||||||
|
|
||||||
|
Class = Network
|
||||||
|
|
||||||
|
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
126
plugins/Python.py
Normal file
126
plugins/Python.py
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
###
|
||||||
|
# Copyright (c) 2002, Jeremiah Fincher
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the author of this software nor the name of
|
||||||
|
# contributors to this software may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written consent.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
###
|
||||||
|
|
||||||
|
"""
|
||||||
|
Various commands relating to Python (the programming language supybot is
|
||||||
|
written in) somehow.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from baseplugin import *
|
||||||
|
|
||||||
|
import os
|
||||||
|
import imp
|
||||||
|
import random
|
||||||
|
|
||||||
|
# Stupid printing on import...
|
||||||
|
from cStringIO import StringIO
|
||||||
|
sys.stdout = StringIO()
|
||||||
|
import this
|
||||||
|
sys.stdout = sys.__stdout__
|
||||||
|
|
||||||
|
import utils
|
||||||
|
import privmsgs
|
||||||
|
import callbacks
|
||||||
|
|
||||||
|
|
||||||
|
def configure(onStart, afterConnect, advanced):
|
||||||
|
# This will be called by setup.py to configure this module. onStart and
|
||||||
|
# afterConnect are both lists. Append to onStart the commands you would
|
||||||
|
# like to be run when the bot is started; append to afterConnect the
|
||||||
|
# commands you would like to be run when the bot has finished connecting.
|
||||||
|
from questions import expect, anything, something, yn
|
||||||
|
onStart.append('load Python')
|
||||||
|
|
||||||
|
example = utils.wrapLines("""
|
||||||
|
Add an example IRC session using this module here.
|
||||||
|
""")
|
||||||
|
|
||||||
|
class Python(callbacks.Privmsg):
|
||||||
|
modulechars = '%s%s%s' % (string.ascii_letters, string.digits, '_.')
|
||||||
|
def pydoc(self, irc, msg, args):
|
||||||
|
"""<python function>
|
||||||
|
|
||||||
|
Returns the __doc__ string for a given Python function.
|
||||||
|
"""
|
||||||
|
funcname = privmsgs.getArgs(args)
|
||||||
|
if funcname.translate(string.ascii, self.modulechars) != '':
|
||||||
|
irc.error('That\'s not a valid module or function name.')
|
||||||
|
return
|
||||||
|
if '.' in funcname:
|
||||||
|
parts = funcname.split('.')
|
||||||
|
functionName = parts.pop()
|
||||||
|
path = os.path.dirname(os.__file__)
|
||||||
|
for name in parts:
|
||||||
|
try:
|
||||||
|
info = imp.find_module(name, [path])
|
||||||
|
newmodule = imp.load_module(name, *info)
|
||||||
|
path = os.path.dirname(newmodule.__file__)
|
||||||
|
info[0].close()
|
||||||
|
except ImportError:
|
||||||
|
irc.error(msg, 'No such module %s exists.' % module)
|
||||||
|
return
|
||||||
|
if hasattr(newmodule, functionName):
|
||||||
|
f = getattr(newmodule, functionName)
|
||||||
|
if hasattr(f, '__doc__'):
|
||||||
|
s = f.__doc__.replace('\n\n', '. ')
|
||||||
|
s = utils.normalizeWhitespace(s)
|
||||||
|
irc.reply(msg, s)
|
||||||
|
else:
|
||||||
|
irc.error(msg, 'That function has no documentation.')
|
||||||
|
else:
|
||||||
|
irc.error(msg, 'That function doesn\'t exist.')
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
f = __builtins__[funcname]
|
||||||
|
if hasattr(f, '__doc__'):
|
||||||
|
s = f.__doc__.replace('\n\n', '. ')
|
||||||
|
s = utils.normalizeWhitespace(s)
|
||||||
|
irc.reply(msg, s)
|
||||||
|
else:
|
||||||
|
irc.error(msg, 'That function has no documentation.')
|
||||||
|
except SyntaxError:
|
||||||
|
irc.error(msg, 'That\'s not a function!')
|
||||||
|
except KeyError:
|
||||||
|
irc.error(msg, 'That function doesn\'t exist.')
|
||||||
|
|
||||||
|
_these = [str(s) for s in this.s.decode('rot13').splitlines() if s]
|
||||||
|
_these.pop(0) # Initial line (The Zen of Python...)
|
||||||
|
def zen(self, irc, msg, args):
|
||||||
|
"""takes no arguments
|
||||||
|
|
||||||
|
Returns one of the zen of Python statements.
|
||||||
|
"""
|
||||||
|
irc.reply(msg, random.choice(self._these))
|
||||||
|
|
||||||
|
|
||||||
|
Class = Python
|
||||||
|
|
||||||
|
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
@ -51,11 +51,11 @@ class FunCommandsTest(PluginTestCase, PluginDocumentation):
|
|||||||
for s in nicks[:10]: # 10 is probably enough.
|
for s in nicks[:10]: # 10 is probably enough.
|
||||||
self.assertResponse('rot13 [rot13 %s]' % s, s)
|
self.assertResponse('rot13 [rot13 %s]' % s, s)
|
||||||
|
|
||||||
## def testChr(self):
|
def testChr(self):
|
||||||
## for i in range(256):
|
for i in range(256):
|
||||||
## c = chr(i)
|
c = chr(i)
|
||||||
## regexp = r'%s|%s' % (re.escape(c), re.escape(repr(c)))
|
regexp = r'%s|%s' % (re.escape(c), re.escape(repr(c)))
|
||||||
## self.assertRegexp('chr %s' % i, regexp)
|
self.assertRegexp('chr %s' % i, regexp)
|
||||||
|
|
||||||
def testHexlifyUnhexlify(self):
|
def testHexlifyUnhexlify(self):
|
||||||
for s in nicks[:10]: # 10, again, is probably enough.
|
for s in nicks[:10]: # 10, again, is probably enough.
|
||||||
@ -72,28 +72,10 @@ class FunCommandsTest(PluginTestCase, PluginDocumentation):
|
|||||||
def testUrlquoteUrlunquote(self):
|
def testUrlquoteUrlunquote(self):
|
||||||
self.assertResponse('urlunquote [urlquote ~jfincher]', '~jfincher')
|
self.assertResponse('urlunquote [urlquote ~jfincher]', '~jfincher')
|
||||||
|
|
||||||
def testPydoc(self):
|
def testOrd(self):
|
||||||
self.assertNotError('pydoc str')
|
for c in map(chr, range(256)):
|
||||||
self.assertError('pydoc foobar')
|
i = ord(c)
|
||||||
self.assertError('pydoc assert')
|
self.assertResponse('ord %s' % utils.dqrepr(c), str(i))
|
||||||
self.assertNotError('pydoc string.translate')
|
|
||||||
self.assertNotError('pydoc fnmatch.fnmatch')
|
|
||||||
|
|
||||||
## def testOrd(self):
|
|
||||||
## for c in map(chr, range(256)):
|
|
||||||
## i = ord(c)
|
|
||||||
## self.assertResponse('ord %s' % utils.dqrepr(c), str(i))
|
|
||||||
|
|
||||||
def testZen(self):
|
|
||||||
self.assertNotError('zen')
|
|
||||||
|
|
||||||
def testDns(self):
|
|
||||||
self.assertNotError('dns slashdot.org')
|
|
||||||
self.assertResponse('dns alsdkjfaslkdfjaslkdfj.com', 'Host not found.')
|
|
||||||
|
|
||||||
def testWhois(self):
|
|
||||||
self.assertNotError('whois ohio-state.edu')
|
|
||||||
self.assertError('whois slashdot.org')
|
|
||||||
|
|
||||||
|
|
||||||
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
||||||
|
47
test/test_Network.py
Normal file
47
test/test_Network.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
###
|
||||||
|
# Copyright (c) 2002, Jeremiah Fincher
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the author of this software nor the name of
|
||||||
|
# contributors to this software may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written consent.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
###
|
||||||
|
|
||||||
|
from test import *
|
||||||
|
|
||||||
|
class NetworkTestCase(PluginTestCase, PluginDocumentation):
|
||||||
|
plugins = ['Network']
|
||||||
|
def testDns(self):
|
||||||
|
self.assertNotError('dns slashdot.org')
|
||||||
|
self.assertResponse('dns alsdkjfaslkdfjaslkdfj.com', 'Host not found.')
|
||||||
|
|
||||||
|
def testWhois(self):
|
||||||
|
self.assertNotError('whois ohio-state.edu')
|
||||||
|
self.assertError('whois www.ohio-state.edu')
|
||||||
|
self.assertError('whois slashdot.org')
|
||||||
|
|
||||||
|
|
||||||
|
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
||||||
|
|
49
test/test_Python.py
Normal file
49
test/test_Python.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
###
|
||||||
|
# Copyright (c) 2002, Jeremiah Fincher
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the author of this software nor the name of
|
||||||
|
# contributors to this software may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written consent.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
###
|
||||||
|
|
||||||
|
from test import *
|
||||||
|
|
||||||
|
class PythonTestCase(PluginTestCase, PluginDocumentation):
|
||||||
|
plugins = ('Python',)
|
||||||
|
def testPydoc(self):
|
||||||
|
self.assertError('pydoc foobar')
|
||||||
|
self.assertError('pydoc assert')
|
||||||
|
self.assertNotError('pydoc str')
|
||||||
|
self.assertNotError('pydoc string.translate')
|
||||||
|
self.assertNotError('pydoc fnmatch.fnmatch')
|
||||||
|
self.assertNotError('pydoc socket.socket')
|
||||||
|
|
||||||
|
def testZen(self):
|
||||||
|
self.assertNotError('zen')
|
||||||
|
|
||||||
|
|
||||||
|
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user