3 # Interactive shell for using QA test suite
8 from optparse import OptionParser
9 from traceback import print_exc
11 from qa.QAAPI import QAAPI
12 from qa.Test import Test
14 sys.path.append(os.path.dirname(os.path.realpath(sys.argv[0])))
16 parser = OptionParser(add_help_option = False)
17 parser.add_option("-f", "--config", help = "configuration file")
18 parser.add_option("-l", "--log", help="enable logging")
19 parser.add_option("-v", "--verbose", help="be verbose")
20 parser.add_option("--help", action = "help", help = "show this help message and exit")
21 (options, args) = parser.parse_args()
23 # XX Load callable tests
25 qaapi = QAAPI(globals(),
26 config = options.config,
27 logging = options.log,
28 verbose = options.verbose)
33 except Exception, err:
36 # If called by a script
37 if len(sys.argv) > 1 and os.path.exists(sys.argv[1]):
38 # Pop us off the argument stack
45 # Readline and tab completion support
50 print 'Type "help" for more information.'
51 # Load command history
52 history_path = os.path.join(os.environ["HOME"], ".qa_history")
54 file(history_path, 'a').close()
55 readline.read_history_file(history_path)
56 atexit.register(readline.write_history_file, history_path)
60 # Enable tab completion
61 readline.parse_and_bind("tab: complete")
73 line = raw_input(prompt + sep)
75 except KeyboardInterrupt:
80 # Build up multi-line command
83 # Blank line or first line does not end in :
84 if line == "" or (command == line and line[-1] != ':'):
93 elif command in ["q", "quit", "exit"]:
98 # Try evaluating as an expression and printing the result
99 result = eval(command)
100 if result is not None:
103 # Fall back to executing as a statement
105 except Exception, err: