#!/usr/bin/python # # Tests the functionality of the eightball plugin. # # To run this test on your own shell, simply run: # # /web/courses/cs3214/spring2015/projects/student-plugins/mzamani1_jamied93/eightball_test.py eshoutput.py # # from the directory in which your "esh" and your "eshoutput.py" is located. # It should also be possible to make a copy of that file anywhere, as long as the # 'eightball.so' file is located within the same directory. # # @author Michael Zamani (mzamani1) # @author Jamie Dalrymple (jamied93) # import sys, imp, atexit, os sys.path.append("/home/courses/cs3214/software/pexpect-dpty/"); import pexpect, shellio, signal, time, os, re, proc_check # Determine the path this file is in thisdir = os.path.dirname(os.path.realpath(__file__)) #Ensure the shell process is terminated def force_shell_termination(shell_process): c.close(force=True) # pulling in the regular expression and other definitions # this should be the eshoutput.py file of the hosting shell, see usage above definitions_scriptname = sys.argv[1] def_module = imp.load_source('', definitions_scriptname) # you can define logfile=open("log.txt", "w") in your eshoutput.py if you want logging! logfile = None if hasattr(def_module, 'logfile'): logfile = def_module.logfile #spawn an instance of the shell, note the -p flags c = pexpect.spawn(def_module.shell, drainpty=True, logfile=logfile, args=['-p', thisdir]) atexit.register(force_shell_termination, shell_process=c) # set timeout for all following 'expect*' calls to 5 seconds c.timeout = 3 ############################################################################# # Now the real test starts! # # ensure that shell prints expected prompt assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt (1)" ################################################################# # Step 1. Compare output out ascii_cat to expected output. # # # A set containing all possible outcomes. expectedoutputs = [re.compile('\nIt is certain.'), re.compile('\nIt is decidedly so.'), re.compile('\nWithout a doubt.'), re.compile('\nYes definitely.'), re.compile('\nYou may rely on it.'), re.compile('\nAs I see it, yes.'), re.compile('\nMost likely.'), re.compile('\nOutlook good.'), re.compile('\nYes.'), re.compile('\nSigns point to yes.'), re.compile('\nReply hazy try again.'), re.compile('\nAsk again later.'), re.compile('\nBetter not tell you now.'), re.compile('\nCannot predict now.'), re.compile('\nConcentrate and ask again.'), re.compile('\nDon\'t count on it.'), re.compile('\nMy reply is no.'), re.compile('\nMy sources say no.'), re.compile('\nOutlook not so good.'), re.compile('\nVery doubtful.')] # Test four outputs of eightball, to ensure no unexpected results. c.sendline("eightball") assert c.expect_list(expectedoutputs) >= 0, "eightball produces incorrect output" c.sendline("eightball") assert c.expect_list(expectedoutputs) >= 0, "eightball produces incorrect output" c.sendline("eightball") assert c.expect_list(expectedoutputs) >= 0, "eightball produces incorrect output" c.sendline("eightball") assert c.expect_list(expectedoutputs) >= 0, "eightball produces incorrect output" shellio.success()