summaryrefslogtreecommitdiff
path: root/scripts/test/support.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/test/support.py')
-rw-r--r--scripts/test/support.py280
1 files changed, 140 insertions, 140 deletions
diff --git a/scripts/test/support.py b/scripts/test/support.py
index 90bc531eb..8f48a7af9 100644
--- a/scripts/test/support.py
+++ b/scripts/test/support.py
@@ -21,178 +21,178 @@ import tempfile
def _open_archive(tarfile, tmp_dir):
- with tempfile.TemporaryFile(mode='w+') as f:
- try:
- subprocess.check_call(['tar', '-xvf', tarfile], cwd=tmp_dir, stdout=f)
- except Exception:
- f.seek(0)
- sys.stderr.write(f.read())
- raise
- return os.listdir(tmp_dir)
+ with tempfile.TemporaryFile(mode='w+') as f:
+ try:
+ subprocess.check_call(['tar', '-xvf', tarfile], cwd=tmp_dir, stdout=f)
+ except Exception:
+ f.seek(0)
+ sys.stderr.write(f.read())
+ raise
+ return os.listdir(tmp_dir)
def _files_same(dir1, dir2, basenames):
- diff = filecmp.cmpfiles(dir1, dir2, basenames)
- return 0 == len(diff[1] + diff[2])
+ diff = filecmp.cmpfiles(dir1, dir2, basenames)
+ return 0 == len(diff[1] + diff[2])
def _dirs_same(dir1, dir2, basenames):
- for d in basenames:
- left = os.path.join(dir1, d)
- right = os.path.join(dir2, d)
- if not (os.path.isdir(left) and os.path.isdir(right)):
- return False
- diff = filecmp.dircmp(right, right)
- if 0 != len(diff.left_only + diff.right_only + diff.diff_files +
- diff.common_funny + diff.funny_files):
- return False
- return True
+ for d in basenames:
+ left = os.path.join(dir1, d)
+ right = os.path.join(dir2, d)
+ if not (os.path.isdir(left) and os.path.isdir(right)):
+ return False
+ diff = filecmp.dircmp(right, right)
+ if 0 != len(diff.left_only + diff.right_only + diff.diff_files +
+ diff.common_funny + diff.funny_files):
+ return False
+ return True
def _move_files(dirfrom, dirto, basenames):
- for f in basenames:
- from_file = os.path.join(dirfrom, f)
- to_file = os.path.join(dirto, f)
- if os.path.isfile(to_file):
- os.path.remove(to_file)
- shutil.move(from_file, to_file)
+ for f in basenames:
+ from_file = os.path.join(dirfrom, f)
+ to_file = os.path.join(dirto, f)
+ if os.path.isfile(to_file):
+ os.path.remove(to_file)
+ shutil.move(from_file, to_file)
def _move_dirs(dirfrom, dirto, basenames):
for d in basenames:
- from_dir = os.path.join(dirfrom, d)
- to_dir = os.path.join(dirto, d)
- if os.path.isdir(to_dir):
- shutil.rmtree(to_dir)
- shutil.move(from_dir, to_dir)
+ from_dir = os.path.join(dirfrom, d)
+ to_dir = os.path.join(dirto, d)
+ if os.path.isdir(to_dir):
+ shutil.rmtree(to_dir)
+ shutil.move(from_dir, to_dir)
def untar(tarfile, outdir):
- """Returns True if untar content differs from pre-existing outdir content."""
- tmpdir = tempfile.mkdtemp()
- try:
- untared = _open_archive(tarfile, tmpdir)
- files = [f for f in untared if os.path.isfile(os.path.join(tmpdir, f))]
- dirs = [d for d in untared if os.path.isdir(os.path.join(tmpdir, d))]
- assert len(files) + len(dirs) == len(untared), 'Only files and directories'
- if _files_same(tmpdir, outdir, files) and _dirs_same(tmpdir, outdir, dirs):
- # Nothing new or different in the tarfile.
- return False
- # Some or all of the files / directories are new.
- _move_files(tmpdir, outdir, files)
- _move_dirs(tmpdir, outdir, dirs)
- return True
- finally:
- if os.path.isdir(tmpdir):
- shutil.rmtree(tmpdir)
+ """Returns True if untar content differs from pre-existing outdir content."""
+ tmpdir = tempfile.mkdtemp()
+ try:
+ untared = _open_archive(tarfile, tmpdir)
+ files = [f for f in untared if os.path.isfile(os.path.join(tmpdir, f))]
+ dirs = [d for d in untared if os.path.isdir(os.path.join(tmpdir, d))]
+ assert len(files) + len(dirs) == len(untared), 'Only files and directories'
+ if _files_same(tmpdir, outdir, files) and _dirs_same(tmpdir, outdir, dirs):
+ # Nothing new or different in the tarfile.
+ return False
+ # Some or all of the files / directories are new.
+ _move_files(tmpdir, outdir, files)
+ _move_dirs(tmpdir, outdir, dirs)
+ return True
+ finally:
+ if os.path.isdir(tmpdir):
+ shutil.rmtree(tmpdir)
def split_wast(wastFile):
- # if it's a binary, leave it as is, we can't split it
- wast = None
- if not wastFile.endswith('.wasm'):
- try:
- wast = open(wastFile, 'r').read()
- except Exception:
- pass
-
- if not wast:
- return ((open(wastFile, 'rb').read(), []),)
-
- # .wast files can contain multiple modules, and assertions for each one.
- # this splits out a wast into [(module, assertions), ..]
- # we ignore module invalidity tests here.
- ret = []
-
- def to_end(j):
- depth = 1
- while depth > 0 and j < len(wast):
- if wast[j] == '"':
- while 1:
- j = wast.find('"', j + 1)
- if wast[j - 1] == '\\':
+ # if it's a binary, leave it as is, we can't split it
+ wast = None
+ if not wastFile.endswith('.wasm'):
+ try:
+ wast = open(wastFile, 'r').read()
+ except Exception:
+ pass
+
+ if not wast:
+ return ((open(wastFile, 'rb').read(), []),)
+
+ # .wast files can contain multiple modules, and assertions for each one.
+ # this splits out a wast into [(module, assertions), ..]
+ # we ignore module invalidity tests here.
+ ret = []
+
+ def to_end(j):
+ depth = 1
+ while depth > 0 and j < len(wast):
+ if wast[j] == '"':
+ while 1:
+ j = wast.find('"', j + 1)
+ if wast[j - 1] == '\\':
+ continue
+ break
+ assert j > 0
+ elif wast[j] == '(':
+ depth += 1
+ elif wast[j] == ')':
+ depth -= 1
+ elif wast[j] == ';' and wast[j + 1] == ';':
+ j = wast.find('\n', j)
+ j += 1
+ return j
+
+ i = 0
+ while i >= 0:
+ start = wast.find('(', i)
+ if start >= 0 and wast[start + 1] == ';':
+ # block comment
+ i = wast.find(';)', start + 2)
+ assert i > 0, wast[start:]
+ i += 2
+ continue
+ skip = wast.find(';', i)
+ if skip >= 0 and skip < start and skip + 1 < len(wast):
+ if wast[skip + 1] == ';':
+ i = wast.find('\n', i) + 1
+ continue
+ if start < 0:
+ break
+ i = to_end(start + 1)
+ chunk = wast[start:i]
+ if chunk.startswith('(module'):
+ ret += [(chunk, [])]
+ elif chunk.startswith('(assert_invalid'):
continue
- break
- assert j > 0
- elif wast[j] == '(':
- depth += 1
- elif wast[j] == ')':
- depth -= 1
- elif wast[j] == ';' and wast[j + 1] == ';':
- j = wast.find('\n', j)
- j += 1
- return j
-
- i = 0
- while i >= 0:
- start = wast.find('(', i)
- if start >= 0 and wast[start + 1] == ';':
- # block comment
- i = wast.find(';)', start + 2)
- assert i > 0, wast[start:]
- i += 2
- continue
- skip = wast.find(';', i)
- if skip >= 0 and skip < start and skip + 1 < len(wast):
- if wast[skip + 1] == ';':
- i = wast.find('\n', i) + 1
- continue
- if start < 0:
- break
- i = to_end(start + 1)
- chunk = wast[start:i]
- if chunk.startswith('(module'):
- ret += [(chunk, [])]
- elif chunk.startswith('(assert_invalid'):
- continue
- elif chunk.startswith(('(assert', '(invoke')):
- ret[-1][1].append(chunk)
- return ret
+ elif chunk.startswith(('(assert', '(invoke')):
+ ret[-1][1].append(chunk)
+ return ret
# write a split wast from split_wast. the wast may be binary if the original
# file was binary
def write_wast(filename, wast, asserts=[]):
- if type(wast) == bytes:
- assert not asserts
- with open(filename, 'wb') as o:
- o.write(wast)
- else:
- with open(filename, 'w') as o:
- o.write(wast + '\n'.join(asserts))
+ if type(wast) == bytes:
+ assert not asserts
+ with open(filename, 'wb') as o:
+ o.write(wast)
+ else:
+ with open(filename, 'w') as o:
+ o.write(wast + '\n'.join(asserts))
def run_command(cmd, expected_status=0, stderr=None,
expected_err=None, err_contains=False, err_ignore=None):
- if expected_err is not None:
- assert stderr == subprocess.PIPE or stderr is None,\
- "Can't redirect stderr if using expected_err"
- stderr = subprocess.PIPE
- print('executing: ', ' '.join(cmd))
- proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=stderr, universal_newlines=True)
- out, err = proc.communicate()
- code = proc.returncode
- if expected_status is not None and code != expected_status:
- raise Exception(('run_command failed (%s)' % code, out + str(err or '')))
- if expected_err is not None:
- if err_ignore is not None:
- err = "\n".join([line for line in err.split('\n') if err_ignore not in line])
- err_correct = expected_err in err if err_contains else expected_err == err
- if not err_correct:
- raise Exception(('run_command unexpected stderr',
- "expected '%s', actual '%s'" % (expected_err, err)))
- return out
+ if expected_err is not None:
+ assert stderr == subprocess.PIPE or stderr is None,\
+ "Can't redirect stderr if using expected_err"
+ stderr = subprocess.PIPE
+ print('executing: ', ' '.join(cmd))
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=stderr, universal_newlines=True)
+ out, err = proc.communicate()
+ code = proc.returncode
+ if expected_status is not None and code != expected_status:
+ raise Exception(('run_command failed (%s)' % code, out + str(err or '')))
+ if expected_err is not None:
+ if err_ignore is not None:
+ err = "\n".join([line for line in err.split('\n') if err_ignore not in line])
+ err_correct = expected_err in err if err_contains else expected_err == err
+ if not err_correct:
+ raise Exception(('run_command unexpected stderr',
+ "expected '%s', actual '%s'" % (expected_err, err)))
+ return out
def node_has_webassembly(cmd):
- cmd = [cmd, '-e', 'process.stdout.write(typeof WebAssembly)']
- return run_command(cmd) == 'object'
+ cmd = [cmd, '-e', 'process.stdout.write(typeof WebAssembly)']
+ return run_command(cmd) == 'object'
def node_test_glue():
- # running concatenated files (a.js) in node interferes with module loading
- # because the concatenated file expects a 'var Binaryen' but binaryen.js
- # assigned to module.exports. this is correct behavior but tests then need
- # a workaround:
- return ('if (typeof module === "object" && typeof exports === "object")\n'
- ' Binaryen = module.exports;\n')
+ # running concatenated files (a.js) in node interferes with module loading
+ # because the concatenated file expects a 'var Binaryen' but binaryen.js
+ # assigned to module.exports. this is correct behavior but tests then need
+ # a workaround:
+ return ('if (typeof module === "object" && typeof exports === "object")\n'
+ ' Binaryen = module.exports;\n')