Example #1
0
def test_single_bundle_doc_with_args_2():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse(
            '.', """

      -  hello:
            - foo: bar
            - filter_fruit: orange
            - args:
                - ping: pong
            - another-task:
                - foo: baz
                - yet-another-task:
                    - foo: bar
            - one-more-task

      -  more:
            - hello
            - one-more-task
            - foo: bar

        """)

        ast.walk()

        assert wrapper.roots[0].key_with_class() == "bundle:more"
        assert len(wrapper.nodes) == 5
Example #2
0
def test_text_parser():
    with wrap() as wrapper:
        with open("f1.py", "w") as f:
            f.write("print 'hello'")

        with open("f2.py", "w") as f:
            f.write("print 'hello'")

        with open("index.md", "w") as f:
            f.write("")

        wrapper = Wrapper()
        wrapper.to_valid()

        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        parser.parse(
            ".", """
        *.py
        *.py|pyg
        *.md|jinja
        """)
        ast.walk()
        assert len(wrapper.nodes) == 8
Example #3
0
def test_single_bundle_doc_with_args_2():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', """

      -  hello:
            - foo: bar
            - filter_fruit: orange
            - args:
                - ping: pong
            - another-task:
                - foo: baz
                - yet-another-task:
                    - foo: bar
            - one-more-task

      -  more:
            - hello
            - one-more-task
            - foo: bar

        """)

        ast.walk()

        assert wrapper.roots[0].key_with_class() == "bundle:more"
        assert len(wrapper.nodes) == 5
Example #4
0
def test_text_parser():
    with wrap() as wrapper:
        with open("f1.py", "w") as f:
            f.write("print 'hello'")

        with open("f2.py", "w") as f:
            f.write("print 'hello'")

        with open("index.md", "w") as f:
            f.write("")

        wrapper = Wrapper()
        wrapper.to_valid()

        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        parser.parse(".", """
        *.py
        *.py|pyg
        *.md|jinja
        """)
        ast.walk()
        assert len(wrapper.nodes) == 8
Example #5
0
def test_parse_inactive():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML_WITH_INACTIVE)
        ast.walk()
        assert len(wrapper.nodes) == 0
Example #6
0
def test_parse_inactive():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML_WITH_INACTIVE)
        ast.walk()
        assert len(wrapper.nodes) == 0
Example #7
0
def test_text_parser_blank_lines():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        parser.parse('.', "\n\n")
        ast.walk()
        docs = wrapper.roots
        assert len(docs) == 0
Example #8
0
def test_text_parser_blank_lines():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        parser.parse('.', "\n\n")
        ast.walk()
        docs = wrapper.roots
        assert len(docs) == 0
Example #9
0
def test_single_bundle_doc():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', "hello")
        ast.walk()
        wrapper.transition('walked')
        wrapper.to_checked()
        assert "bundle:hello" in wrapper.nodes
Example #10
0
def test_single_bundle_doc():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', "hello")
        ast.walk()
        wrapper.transition('walked')
        wrapper.to_checked()
        assert "bundle:hello" in wrapper.nodes
Example #11
0
def test_parse_default():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML_WITH_DEFAULT_OFF)
        ast.walk()
        assert len(wrapper.nodes) == 0

    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        wrapper.full = True
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML_WITH_DEFAULT_OFF)
        ast.walk()
        assert len(wrapper.nodes) == 1
Example #12
0
def test_children_siblings_order():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', """
        p1:
            - c1
            - c2:
                - g1
                - g2
                - g3
            - c3
        """)
        ast.walk()
        wrapper.transition('walked')

        wrapper.to_checked()

        wrapper.run()

        p1 = wrapper.nodes['bundle:p1']
        assert [i.key_with_class() for i in p1.walk_inputs()] == [
                'bundle:c1',
                'bundle:c2',
                'bundle:g1',
                'bundle:g2',
                'bundle:g3',
                'bundle:c3'
                ]

        c1 = wrapper.nodes['bundle:c1']
        assert len(c1.inputs) == 0

        c2 = wrapper.nodes['bundle:c2']
        assert [i.key_with_class() for i in c2.walk_inputs()] == [
                'bundle:g1',
                'bundle:g2',
                'bundle:g3'
                ]

        c3 = wrapper.nodes['bundle:c3']
        assert len(c3.inputs) == 0

        g3 = wrapper.nodes['bundle:g3']
        assert len(g3.inputs) == 0
Example #13
0
def test_except_patterndoc():
    with wrap() as wrapper:
        with open("exceptme.abc", "w") as f:
            f.write("hello")

        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', """.abc:\n  - except : 'exceptme.abc' """)
        ast.walk()

        assert len(wrapper.nodes) == 1
Example #14
0
def test_except_patterndoc():
    with wrap() as wrapper:
        with open("exceptme.abc", "w") as f:
            f.write("hello")

        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', """.abc:\n  - except : 'exceptme.abc' """)
        ast.walk()

        assert len(wrapper.nodes) == 1
Example #15
0
def test_original_parser():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        conf = """{
        "*.txt" : {}
        }"""
        ast = AbstractSyntaxTree(wrapper)
        parser = Original(wrapper, ast)
        parser.parse('.', conf)
        ast.walk()

        assert wrapper.roots[0].key_with_class() == "pattern:*.txt"
Example #16
0
def test_original_parser():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        conf = """{
        "*.txt" : {}
        }"""
        ast = AbstractSyntaxTree(wrapper)
        parser = Original(wrapper, ast)
        parser.parse('.', conf)
        ast.walk()

        assert wrapper.roots[0].key_with_class() == "pattern:*.txt"
Example #17
0
def parsers_command():
    wrapper = dummy_wrapper()
    ast = AbstractSyntaxTree(wrapper)

    processed_aliases = set()

    for alias in sorted(Parser.plugins):
        if alias in processed_aliases:
            continue

        parser = Parser.create_instance(alias, ast, wrapper)

        for alias in parser.aliases:
            processed_aliases.add(alias)

        print "%s Parser" % parser.__class__.__name__
        print ''
        print parser.setting('help')
        print ''
        print "aliases:"
        for alias in parser.aliases:
            print "  %s" % alias
        print ''

    print "Default parsers are: " + defaults['parsers']
    print ''
    print "Dexy will only look for config files to parse in the root directory"
    print "of your project unless --recurse is specified."
    print ''
Example #18
0
def test_text_parser_valid_json():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        parser.parse('.', """
        doc.txt { "contents" : "123" }
        """)
        ast.walk()

        docs = wrapper.roots
        assert docs[0].key == "doc.txt"
        assert docs[0].args['contents'] == "123"
Example #19
0
def test_text_parser_valid_json():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        parser.parse('.', """
        doc.txt { "contents" : "123" }
        """)
        ast.walk()

        docs = wrapper.roots
        assert docs[0].key == "doc.txt"
        assert docs[0].args['contents'] == "123"
Example #20
0
def test_text_parser_comments():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        parser.parse('.', """
        valid.doc { "contents" : "foo" }
        # commented-out.doc
        """)
        ast.walk()

        assert len(wrapper.roots) == 1
        assert wrapper.roots[0].key == "valid.doc"
Example #21
0
def test_yaml_with_defaults():
    with wrap() as wrapper:
        os.makedirs("s1/s2")

        with open("s1/s2/hello.txt", "w") as f:
            f.write("hello")

        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML_WITH_DEFAULTS)
        ast.walk()

        assert wrapper.roots[0].args['foo'] == 'bar'
Example #22
0
def test_text_parser_comments():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        parser.parse(
            '.', """
        valid.doc { "contents" : "foo" }
        # commented-out.doc
        """)
        ast.walk()

        assert len(wrapper.roots) == 1
        assert wrapper.roots[0].key == "valid.doc"
Example #23
0
def test_yaml_with_defaults():
    with wrap() as wrapper:
        os.makedirs("s1/s2")

        with open("s1/s2/hello.txt", "w") as f:
            f.write("hello")

        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML_WITH_DEFAULTS)
        ast.walk()

        assert wrapper.roots[0].args['foo'] == 'bar'
Example #24
0
def test_invalid_yaml():
    with wrap() as wrapper:
        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        try:
            parser.parse('.', INVALID_YAML)
            assert False, "should raise UserFeedback"
        except dexy.exceptions.UserFeedback as e:
            assert 'YAML' in e.message
Example #25
0
def test_children_siblings_order():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse(
            '.', """
        p1:
            - c1
            - c2:
                - g1
                - g2
                - g3
            - c3
        """)
        ast.walk()
        wrapper.transition('walked')

        wrapper.to_checked()

        wrapper.run()

        p1 = wrapper.nodes['bundle:p1']
        assert [i.key_with_class() for i in p1.walk_inputs()] == [
            'bundle:c1', 'bundle:c2', 'bundle:g1', 'bundle:g2', 'bundle:g3',
            'bundle:c3'
        ]

        c1 = wrapper.nodes['bundle:c1']
        assert len(c1.inputs) == 0

        c2 = wrapper.nodes['bundle:c2']
        assert [i.key_with_class() for i in c2.walk_inputs()
                ] == ['bundle:g1', 'bundle:g2', 'bundle:g3']

        c3 = wrapper.nodes['bundle:c3']
        assert len(c3.inputs) == 0

        g3 = wrapper.nodes['bundle:g3']
        assert len(g3.inputs) == 0
Example #26
0
def test_original_parser_allinputs():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        conf = """{
        "*.txt" : {},
        "hello.txt" : { "contents" : "Hello!" },
        "*.md|jinja" : { "allinputs" : true }
        }"""

        ast = AbstractSyntaxTree(wrapper)
        parser = Original(wrapper, ast)
        parser.parse('.', conf)
        ast.walk()

        assert len(wrapper.roots) == 1
        assert wrapper.roots[0].key_with_class() == "pattern:*.md|jinja"
Example #27
0
def test_single_file_doc():
    with wrap() as wrapper:
        with open("hello.txt", "w") as f:
            f.write("hello")

        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', "hello.txt")
        ast.walk()
        wrapper.transition('walked')

        wrapper.to_checked()

        wrapper.run()
        assert "doc:hello.txt" in wrapper.nodes
Example #28
0
def test_original_parser_allinputs():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        conf = """{
        "*.txt" : {},
        "hello.txt" : { "contents" : "Hello!" },
        "*.md|jinja" : { "allinputs" : true }
        }"""

        ast = AbstractSyntaxTree(wrapper)
        parser = Original(wrapper, ast)
        parser.parse('.', conf)
        ast.walk()

        assert len(wrapper.roots) == 1
        assert wrapper.roots[0].key_with_class() == "pattern:*.md|jinja"
Example #29
0
def test_single_file_doc():
    with wrap() as wrapper:
        with open("hello.txt", "w") as f:
            f.write("hello")

        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', "hello.txt")
        ast.walk()
        wrapper.transition('walked')

        wrapper.to_checked()

        wrapper.run()
        assert "doc:hello.txt" in wrapper.nodes
Example #30
0
def test_text_parser_invalid_json():
    with wrap() as wrapper:
        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        try:
            parser.parse(
                '.', """
            doc.txt { "contents" : 123
            """)
            assert False, 'should raise UserFeedback'
        except dexy.exceptions.UserFeedback as e:
            assert 'unable to parse' in e.message
Example #31
0
def test_parse_default():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML_WITH_DEFAULT_OFF)
        ast.walk()
        assert len(wrapper.nodes) == 0

    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        wrapper.full = True
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML_WITH_DEFAULT_OFF)
        ast.walk()
        assert len(wrapper.nodes) == 1
Example #32
0
def run_yaml_with_target(target):
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML)
        ast.walk()

        wrapper.transition('walked')
        wrapper.to_checked()

        assert len(wrapper.roots) == 3
        assert len(wrapper.nodes) == 8

        wrapper.target = target
        wrapper.run()

        yield wrapper
Example #33
0
def run_yaml_with_target(target):
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML)
        ast.walk()

        wrapper.transition('walked')
        wrapper.to_checked()

        assert len(wrapper.roots) == 3
        assert len(wrapper.nodes) == 8

        wrapper.target = target
        wrapper.run()

        yield wrapper
Example #34
0
def test_text_parser_virtual_file():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        parser.parse('.', """
        virtual.txt { "contents" : "hello" }
        """)
        ast.walk()

        wrapper.transition('walked')
        wrapper.to_checked()

        wrapper.run()
        docs = wrapper.roots

        assert docs[0].key == "virtual.txt"
        assert str(docs[0].output_data()) == "hello"
Example #35
0
def test_text_parser_virtual_file():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = TextFile(wrapper, ast)
        parser.parse(
            '.', """
        virtual.txt { "contents" : "hello" }
        """)
        ast.walk()

        wrapper.transition('walked')
        wrapper.to_checked()

        wrapper.run()
        docs = wrapper.roots

        assert docs[0].key == "virtual.txt"
        assert str(docs[0].output_data()) == "hello"
Example #36
0
def test_yaml_parser():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)
        parser = Yaml(wrapper, ast)
        parser.parse('.', YAML)
        for doc in wrapper.roots:
            assert doc.__class__.__name__ == 'BundleNode'
            assert doc.key in ['code', 'wordpress']

        wrapper.run_docs()
Example #37
0
def test_ast():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)

        ast.add_node("abc.txt", foo='bar', contents = 'abc')
        ast.add_dependency("abc.txt", "def.txt")
        ast.add_node("def.txt", foo='baz', contents = 'def')

        assert ast.tree == ['doc:abc.txt']
        assert ast.args_for_node('doc:abc.txt')['foo'] == 'bar'
        assert ast.args_for_node('doc:def.txt')['foo'] == 'baz'
        assert ast.inputs_for_node('abc.txt') == ['doc:def.txt']
        assert not ast.inputs_for_node('def.txt')

        ast.walk()
        assert len(wrapper.roots) == 1
        assert len(wrapper.nodes) == 2
def test_ast():
    with wrap() as wrapper:
        wrapper.nodes = {}
        wrapper.roots = []
        wrapper.batch = dexy.batch.Batch(wrapper)
        wrapper.filemap = wrapper.map_files()

        ast = AbstractSyntaxTree(wrapper)

        ast.add_node("abc.txt", foo='bar', contents = 'abc')
        ast.add_dependency("abc.txt", "def.txt")
        ast.add_node("def.txt", foo='baz', contents = 'def')

        assert ast.tree == ['doc:abc.txt']
        assert ast.args_for_node('doc:abc.txt')['foo'] == 'bar'
        assert ast.args_for_node('doc:def.txt')['foo'] == 'baz'
        assert ast.inputs_for_node('abc.txt') == ['doc:def.txt']
        assert not ast.inputs_for_node('def.txt')

        ast.walk()
        assert len(wrapper.roots) == 1
        assert len(wrapper.nodes) == 2