1 #-------------------------------------------------------------------------------
4 # Some common utils for tests
6 # Eli Bendersky (eliben@gmail.com)
7 # This code is in the public domain
8 #-------------------------------------------------------------------------------
9 import os
, sys
, subprocess
, tempfile
11 # This module should not import elftools before setup_syspath() is called!
12 # See the Hacking Guide in the documentation for more details.
15 """ Setup sys.path so that tests pick up local pyelftools before the
16 installed one when run from development directory.
18 if sys
.path
[0] != '.':
19 sys
.path
.insert(0, '.')
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
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
)
37 """ Check whether the current dir is the root dir of pyelftools
39 return os
.path
.isdir('test') and os
.path
.isdir('elftools')
42 def dump_output_to_temp_files(testlog
, *args
):
43 """ Dumps the output strings given in 'args' to temp files: one for each
46 for i
, s
in enumerate(args
):
47 fd
, path
= tempfile
.mkstemp(
48 prefix
='out' + str(i
+ 1) + '_',
50 file = os
.fdopen(fd
, 'w')
53 testlog
.info('@@ Output #%s dumped to file: %s' % (i
+ 1, path
))