"""Unit test for google.py"""
__author__ = "Mark Pilgrim (f8dy@diveintomark.org)"
__version__ = "$Revision: 1.4 $"
__date__ = "$Date: 2004/02/06 21:00:53 $"
__copyright__ = "Copyright (c) 2002 Mark Pilgrim"
__license__ = "Python"
import google
import unittest
import sys, os
import GoogleSOAPFacade
from StringIO import StringIO
class BaseClass(unittest.TestCase):
q = "python unit testing"
url = "http://www.python.org/"
phrase = "ptyhon"
searchparams = {"func":"doGoogleSearch"}
luckyparams = {}
luckyparams.update(searchparams)
luckyparams.update({"feelingLucky":1})
metaparams = {}
metaparams.update(searchparams)
metaparams.update({"showMeta":1})
reverseparams = {}
reverseparams.update(searchparams)
reverseparams.update({"reverseOrder":1})
cacheparams = {"func":"doGetCachedPage"}
spellingparams = {"func":"doSpellingSuggestion"}
envkey = "GOOGLE_LICENSE_KEY"
badkey = "a"
class Redirector(BaseClass):
def setUp(self):
self.savestdout = sys.stdout
self.output = StringIO()
sys.stdout = self.output
def tearDown(self):
sys.stdout = self.savestdout
class CommandLineTest(Redirector):
def lastOutput(self):
self.output.seek(0)
rc = self.output.read()
self.output.seek(0)
return rc
def testVersion(self):
"""-v should print version"""
google.main(["-v"])
commandLineAnswer = self.lastOutput()
google._version()
self.assertEqual(commandLineAnswer, self.lastOutput())
def testVersionLong(self):
"""--version should print version"""
google.main(["--version"])
commandLineAnswer = self.lastOutput()
google._version()
self.assertEqual(commandLineAnswer, self.lastOutput())
def testHelp(self):
"""-h should print usage"""
google.main(["-h"])
commandLineAnswer = self.lastOutput()
google._usage()
self.assertEqual(commandLineAnswer, self.lastOutput())
def testHelpLong(self):
"""--help should print usage"""
google.main(["--help"])
commandLineAnswer = self.lastOutput()
google._usage()
self.assertEqual(commandLineAnswer, self.lastOutput())
def testSearch(self):
"""-s should search"""
google.main(["-s %s" % self.q])
commandLineAnswer = self.lastOutput()
google._output(google.doGoogleSearch(self.q), self.searchparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testSearchLong(self):
"""--search should search"""
google.main(["--search", self.q])
commandLineAnswer = self.lastOutput()
google._output(google.doGoogleSearch(self.q), self.searchparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testSearchDefault(self):
"""no options + search phrase should search"""
google.main([self.q])
commandLineAnswer = self.lastOutput()
google._output(google.doGoogleSearch(self.q), self.searchparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testNoOptions(self):
"""no options at all should print usage"""
google.main([])
commandLineAnswer = self.lastOutput()
google._usage()
self.assertEqual(commandLineAnswer, self.lastOutput())
def testCache(self):
"""-c should retrieve cache"""
google.main(["-c", self.url])
commandLineAnswer = self.lastOutput()
google._output(google.doGetCachedPage(self.url), self.cacheparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testCacheLong(self):
"""--cache should retrieve cache"""
google.main(["--cache", self.url])
commandLineAnswer = self.lastOutput()
google._output(google.doGetCachedPage(self.url), self.cacheparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testSpelling(self):
"""-p should check spelling"""
google.main(["-p", self.phrase])
commandLineAnswer = self.lastOutput()
google._output(google.doSpellingSuggestion(self.phrase), self.spellingparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testSpellingLong(self):
"""--spelling should check spelling"""
google.main(["--spelling", self.phrase])
commandLineAnswer = self.lastOutput()
google._output(google.doSpellingSuggestion(self.phrase), self.spellingparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testLucky(self):
"""-l should return only first result"""
google.main(["-l", "-s", self.q])
commandLineAnswer = self.lastOutput()
google._output(google.doGoogleSearch(self.q), self.luckyparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testLucky1(self):
"""-1 should return only first result"""
google.main(["-1", "-s", self.q])
commandLineAnswer = self.lastOutput()
google._output(google.doGoogleSearch(self.q), self.luckyparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testLuckyLong(self):
"""--lucky should return only first result"""
google.main(["--lucky", "-s", self.q])
commandLineAnswer = self.lastOutput()
google._output(google.doGoogleSearch(self.q), self.luckyparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testMeta(self):
"""-m should return meta information"""
google.main(["-m", "-s", self.q])
commandLineAnswer = self.lastOutput()
commandLineAnswer = commandLineAnswer[:commandLineAnswer.index('searchTime')]
google._output(google.doGoogleSearch(self.q), self.metaparams)
realAnswer = self.lastOutput()
realAnswer = realAnswer[:realAnswer.index('searchTime')]
self.assertEqual(commandLineAnswer, realAnswer)
def testMetaLong(self):
"""--meta should return meta information"""
google.main(["--meta", "-s", self.q])
commandLineAnswer = self.lastOutput()
commandLineAnswer = commandLineAnswer[:commandLineAnswer.index('searchTime')]
google._output(google.doGoogleSearch(self.q), self.metaparams)
realAnswer = self.lastOutput()
realAnswer = realAnswer[:realAnswer.index('searchTime')]
self.assertEqual(commandLineAnswer, realAnswer)
def testReverse(self):
"""-r should reverse results"""
google.main(["-r", "-s", self.q])
commandLineAnswer = self.lastOutput()
google._output(google.doGoogleSearch(self.q), self.reverseparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
def testReverseLong(self):
"""--reverse should reverse results"""
google.main(["--reverse", "-s", self.q])
commandLineAnswer = self.lastOutput()
google._output(google.doGoogleSearch(self.q), self.reverseparams)
self.assertEqual(commandLineAnswer, self.lastOutput())
class LicenseKeyTest(Redirector):
licensefile = "googlekey.txt"
licensebackup = "googlekey.txt.bak"
def safeRename(self, dirname, old, new):
if dirname:
old = os.path.join(dirname, old)
new = os.path.join(dirname, new)
try:
os.rename(old, new)
except OSError:
pass
def safeDelete(self, dirname, filename):
if dirname:
filename = os.path.join(dirname, filename)
try:
os.remove(filename)
except OSError:
pass
def createfile(self, dirname, filename, content):
if dirname:
filename = os.path.join(dirname, filename)
fsock = open(filename, "w")
fsock.write(content)
fsock.close()
def rememberKeys(self):
self.moduleLicenseKey = google.LICENSE_KEY
self.envLicenseKey = os.environ.get(self.envkey, None)
self.safeRename(os.environ["HOME"], self.licensefile, self.licensebackup)
self.safeRename("", self.licensefile, self.licensebackup)
self.safeRename(google._getScriptDir(), self.licensefile, self.licensebackup)
def restoreKeys(self):
google.LICENSE_KEY = self.moduleLicenseKey
if self.envLicenseKey:
os.environ[self.envkey] = self.envLicenseKey
self.safeDelete(os.environ["HOME"], self.licensefile)
self.safeRename(os.environ["HOME"], self.licensebackup, self.licensefile)
self.safeDelete("", self.licensefile)
self.safeRename("", self.licensebackup, self.licensefile)
self.safeDelete(google._getScriptDir(), self.licensefile)
self.safeRename(google._getScriptDir(), self.licensebackup, self.licensefile)
def clearKeys(self):
google.setLicense(None)
if os.environ.get(self.envkey):
del os.environ[self.envkey]
def setUp(self):
Redirector.setUp(self)
self.rememberKeys()
self.clearKeys()
def tearDown(self):
Redirector.tearDown(self)
self.clearKeys()
self.restoreKeys()
def testNoKey(self):
"""having no license key should raise google.NoLicenseKey"""
self.assertRaises(google.NoLicenseKey, google.doGoogleSearch, q=self.q)
def testPassInvalidKey(self):
"""passing invalid license key should fail with faultType"""
self.assertRaises(GoogleSOAPFacade.faultType, google.doGoogleSearch, q=self.q, license_key=self.badkey)
def testSetInvalidKey(self):
"""setting invalid module-level license key should fail with faultType"""
google.setLicense(self.badkey)
self.assertRaises(GoogleSOAPFacade.faultType, google.doGoogleSearch, q=self.q)
def testEnvInvalidKey(self):
"""invalid environment variable license key should fail with faultType"""
os.environ[self.envkey] = self.badkey
self.assertRaises(GoogleSOAPFacade.faultType, google.doGoogleSearch, q=self.q)
def testHomeDirKey(self):
"""invalid license key in home directory should fail with faultType"""
self.createfile(os.environ["HOME"], self.licensefile, self.badkey)
self.assertRaises(GoogleSOAPFacade.faultType, google.doGoogleSearch, q=self.q)
def testCurDirKey(self):
"""invalid license key in current directory should fail with faultType"""
self.createfile("", self.licensefile, self.badkey)
self.assertRaises(GoogleSOAPFacade.faultType, google.doGoogleSearch, q=self.q)
def testScriptDirKey(self):
"""invalid license key in script directory should fail with faultType"""
self.createfile(google._getScriptDir(), self.licensefile, self.badkey)
self.assertRaises(GoogleSOAPFacade.faultType, google.doGoogleSearch, q=self.q)
if __name__ == "__main__":
unittest.main()
|