better way to check if a dir exists
[pyelftools.git] / test / utils.py
1 #-------------------------------------------------------------------------------
2 # test/utils.py
3 #
4 # Some common utils for tests
5 #
6 # Eli Bendersky (eliben@gmail.com)
7 # This code is in the public domain
8 #-------------------------------------------------------------------------------
9 import os, sys, subprocess, tempfile
10
11 # This module should not import elftools before setup_syspath() is called!
12 # See the Hacking Guide in the documentation for more details.
13
14 def setup_syspath():
15 """ Setup sys.path so that tests pick up local pyelftools before the
16 installed one when run from development directory.
17 """
18 if sys.path[0] != '.':
19 sys.path.insert(0, '.')
20
21
22 def run_exe(exe_path, args):
23 """ Runs the given executable as a subprocess, given the
24 list of arguments. Captures its return code (rc) and stdout and
25 returns a pair: rc, stdout_str
26 """
27 popen_cmd = [exe_path] + args
28 if os.path.splitext(exe_path)[1] == '.py':
29 popen_cmd.insert(0, sys.executable)
30 proc = subprocess.Popen(popen_cmd, stdout=subprocess.PIPE)
31 proc_stdout = proc.communicate()[0]
32 from elftools.common.py3compat import bytes2str
33 return proc.returncode, bytes2str(proc_stdout)
34
35
36 def is_in_rootdir():
37 """ Check whether the current dir is the root dir of pyelftools
38 """
39 return os.path.isdir('test') and os.path.isdir('elftools')
40
41
42 def dump_output_to_temp_files(testlog, *args):
43 """ Dumps the output strings given in 'args' to temp files: one for each
44 arg.
45 """
46 for i, s in enumerate(args):
47 fd, path = tempfile.mkstemp(
48 prefix='out' + str(i + 1) + '_',
49 suffix='.stdout')
50 file = os.fdopen(fd, 'w')
51 file.write(s)
52 file.close()
53 testlog.info('@@ Output #%s dumped to file: %s' % (i + 1, path))
54