def test_idio_filter_recognizes_startinline_as_lexer_option(): for doc in run_dexy(TEST_IDIO_LEXER_OPTION_CONFIG): doc.run() assert doc.key() == "code.php|idio" assert """<span class="mi">""" in doc.output() TEST_IDIO_LEXER_OPTION_CONFIG["."]["@code.php|idio"]["idio"]["lexer-startinline"] = False for doc in run_dexy(TEST_IDIO_LEXER_OPTION_CONFIG): doc.run() assert doc.key() == "code.php|idio" assert not """<span class="mi">""" in doc.output() assert """<span class="x">""" in doc.output()
def test_ignore_errors_controller(): """ Ensure we can ignore errors by setting the controller-wide param 'ignore' to true. """ args = { "ignore" : True } for doc in run_dexy(TRIGGER_EXCEPTIONS_CONFIG, args): doc.run()
def test_run(): filters = dexy.introspect.filters() tested_filter_classes = [] args = {} for doc in run_dexy(TRIGGER_EXCEPTIONS_CONFIG, args): if not doc.key() in tests_to_skip(): try: doc.run() if not doc.key() in ["input.txt"]: assert False, "expected exception for %s" % doc.key() except dexy.commands.UserFeedback: tested_filter_alias = doc.filters[-1] tested_filter_classes.append(filters[tested_filter_alias]) assert True else: tested_filter_alias = doc.filters[-1] tested_filter_classes.append(filters[tested_filter_alias]) for filter_class in filters.values(): is_text_process_filter = issubclass(filter_class, ProcessFilter) and not filter_class.BINARY check_return = is_text_process_filter and filter_class.CHECK_RETURN_CODE not_tested = not filter_class in tested_filter_classes must_test = not filter_class.__name__ in DONT_KNOW_HOW_TO_TEST if is_text_process_filter and check_return and not_tested and must_test: raise Exception("class %s not tested! aliases: %s" % (filter_class.__name__, ", ".join(filter_class.ALIASES)))
def test_basic_filter(): for doc in run_dexy(CONFIG): doc.run() artifact = doc.last_artifact assert artifact.ext == ".json" artifact.setup_kv_storage() assert "Directory tree generator." in artifact["os.walk:doc"] assert "Directory tree generator." in artifact._storage.retrieve("os.walk:doc")
def test_python_create_files(): contents = """with open("new-file.txt", "w") as f:\n f.write("hello!")\n""" config = {"." : { "@example.py|pycon" : {"pycon": {"ext" : ".json", "meta" : True}, "contents" : contents }}} for doc in run_dexy(config): doc.run() artifact = doc.last_artifact kv_artifact = artifact.inputs().values()[0] kv_artifact.setup_kv_storage() assert kv_artifact['1:files:new-file.txt'] == "hello!"
def test_html(): contents = """<div id="abc">def</div>""" config = {"." : { "@example.html|htmlsec" : {"contents" : contents }}} for doc in run_dexy(config): doc.run() artifact = doc.last_artifact artifact.setup_kv_storage() assert artifact['abc:text'] == "def" assert artifact['abc:source'] == contents
def test_filter_storage(): set_filter_list([ConvertLinesToKeyValueStorageFilter]) for doc in run_dexy(CONFIG): doc.run() artifact = doc.last_artifact artifact.setup_kv_storage() assert artifact["1"] == "This is the first line." assert artifact["2"] == "This is the 2nd line." assert artifact._storage.mode == "read" assert artifact._storage.keys() == ["1", "2"]
def test_bash_create_additional_artifacts(): contents = """ ls echo "hi" > dexy--hello.txt """ config = {"." : { "@script.sh|fn|shint" : {"shint": {"ext" : ".json", "meta" : True}, "contents" : contents }}} for doc in run_dexy(config): doc.run() artifact = doc.last_artifact assert artifact.inputs()['hello.txt'].output_text() == "hi\n"
def test_ignore_errors_document(): """ Ensure we can ignore errors by setting 'ignore-errors' to true for each individual document. """ trigger_ignore_exceptions_config = TRIGGER_EXCEPTIONS_CONFIG.copy() for k, v in trigger_ignore_exceptions_config['.'].iteritems(): v['ignore-errors'] = True for doc in run_dexy(trigger_ignore_exceptions_config): doc.run()
def test_sed_filter(): config = { "@example.sed|sed" : { "contents" : "s/e/E/g", "allinputs" : True }, "@input.txt" : { "contents" : "hello" } } for doc in run_dexy({"." : config}): doc.run() if doc.key().endswith("sed"): assert doc.output() == "hEllo"
def test_markdown(): for doc in run_dexy(CONFIG): doc.run() if doc.key() == "example1.md|markdown": assert doc.output() == "<p>[TOC]</p>" elif doc.key() == "example2.md|markdown": assert doc.output() == """<div class="toc"></div>""" elif doc.key() == "example3.md|markdown": assert doc.output() == """<div class="toc"><span class="toctitle">My Table of Contents</span></div>""" elif doc.key() == "example4.md|markdown": assert doc.output() == """<p><a class="wikilink" href="/wikime/">wikime</a></p>""" else: assert False, "Should not get here."
def test_used_filter(): config = { "@input.txt|used" : { "contents" : "hello", "inputs" : ["@example.sed"] }, "@example.sed" : { "contents" : "s/e/E/g" }, } for doc in run_dexy({"." : config}): doc.run() if doc.key().endswith("used"): assert doc.output() == "hEllo"
def test_bash_create_additional_files(): contents = """ mkdir abc ls echo "hi" > abc/hello.txt """ config = {"." : { "@script.sh|shint" : {"shint": {"meta" : True}, "contents" : contents }}} for doc in run_dexy(config): doc.run() artifact = doc.last_artifact kv_artifact = artifact.inputs().values()[0] kv_artifact.setup_kv_storage() assert kv_artifact['1:files:abc/hello.txt'] == "hi\n"
def test_irb(): assert_output("example.rb|irb", "1+1", ">> 1+1\n=> 2") config = {"." : { "@example.rb|irb" : {"irb": {"ext" : ".json", "meta" : True}, "contents" : "1+1"}}} for doc in run_dexy(config): doc.run() artifact = doc.last_artifact assert artifact.output() == ">> 1+1\n=> 2" kv_artifact = artifact.inputs().values()[0] kv_artifact.setup_kv_storage() assert kv_artifact['1:files:example.rb'] == "1+1" assert kv_artifact['1:html-output'] assert kv_artifact['1:latex-output'] assert kv_artifact['1:output'] == ">> 1+1\n=> 2"
def test_bash_create_git_repo(): contents = """ mkdir abc ls echo "hi" > abc/hello.txt git init git add . """ config = {"." : { "@script.sh|shint" : {"shint": {"ext" : ".json", "meta" : True}, "contents" : contents }}} for doc in run_dexy(config): doc.run() artifact = doc.last_artifact kv_artifact = artifact.inputs().values()[0] kv_artifact.setup_kv_storage() assert "[core]" in kv_artifact["1:files:.git/config"]
def test_python_input_filter(): script = """import sys for line in sys.stdin: line = line.strip() print "You said '%s', that took '%d' characters!" % (line, len(line))""" config = { "@script.py|pyinput" : { "contents" : script, "inputs" : ["@input.txt"] }, "@input.txt" : { "contents" : "hello" }, } for doc in run_dexy({"." : config}): doc.run() if doc.key().endswith("input"): assert doc.output() == "You said 'hello', that took '5' characters!\n"
def test_ruby_input_filter(): script = """ while line = gets puts "you typed: #{line}" end """ config = { "@script.rb|rbinput" : { "contents" : script, "inputs" : ["@input.txt"] }, "@input.txt" : { "contents" : "hello" }, } for doc in run_dexy({"." : config}): doc.run() if doc.key().endswith("input"): assert doc.output() == "you typed: hello\n"
def test_basic_filter(): set_filter_list([BasicFilter, BasicBinaryFilter]) for doc in run_dexy(CONFIG): doc.run() assert doc.output() == DATA
def test_existing_content(): for doc in run_dexy(CONTENT_CONFIG): artifact = doc.last_artifact assert artifact["abc"] == 123