import os import re import subprocess def create_file(ctx, filename=None): with open(filename, 'wb') as f: f.write(get_file(filename)) def try_docgen(ctx, md=None, output=None): docgen = binary('sp-docgen') runcmd(ctx, [docgen, md, '-o', output]) def run_docgen(ctx, md=None, output=None): try_docgen(ctx, md=md, output=output) exit_code_zero(ctx) def try_codegen(ctx, filename=None): codegen = binary('sp-codegen') tmpldir = os.path.join(srcdir, 'templates') runcmd(ctx, [codegen, filename, '-o', 'test.py', '--run', '--templates', tmpldir]) def run_codegen(ctx, filename=None): try_codegen(ctx, filename=filename) exit_code_zero(ctx) def run_meta(ctx, filename=None): meta = binary('sp-meta') runcmd(ctx, [meta, filename]) exit_code_zero(ctx) def run_pandoc_with_filter(ctx, filename=None, output=None): sp_filter = binary('sp-filter') runcmd(ctx, ['pandoc', '--filter', sp_filter, filename, '-o', output]) exit_code_zero(ctx) def file_exists(ctx, filename=None): assert_eq(os.path.exists(filename), True) def file_matches(ctx, filename=None, regex=None): with open(filename) as f: content = f.read() m = re.search(regex, content) if m is None: print('content:', repr(content)) print('regex:', repr(regex)) assert_eq(bool(m), True) def scenario_was_run(ctx, name=None): stdout_matches(ctx, '\nrunning scenario: {}\n'.format(name)) def step_was_run(ctx, keyword=None, name=None): stdout_matches(ctx, '\n step: {}\n'.format(name)) def exit_code_zero(ctx): if ctx.get('exit') != 0: print('context:', ctx.as_dict()) assert_eq(ctx.get('exit'), 0) def exit_code_nonzero(ctx): assert_ne(ctx.get('exit'), 0) def binary(basename): return os.path.join(srcdir, 'target', 'debug', basename) def stdout_matches(ctx, pattern): stdout = ctx.get('stdout', '') return pattern in stdout def runcmd(ctx, argv): p = subprocess.Popen(argv, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate("") ctx['argv'] = argv ctx['stdout'] = stdout.decode('utf-8') ctx['stderr'] = stderr.decode('utf-8') ctx['exit'] = p.returncode