File: ngmodel_test.py

package info (click to toggle)
python-tatsu 5.17.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,516 kB
  • sloc: python: 13,185; makefile: 127
file content (60 lines) | stat: -rw-r--r-- 1,245 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# Copyright (c) 2017-2026 Juancarlo AƱez (apalala@gmail.com)
# SPDX-License-Identifier: BSD-4-Clause
from __future__ import annotations

import pytest

from tatsu.objectmodel import Node, tatsudataclass


def test_init_attributes():
    node = Node()
    assert hasattr(node, 'ast')
    assert hasattr(node, 'parseinfo')


def test_init_attributes_transferred():
    node = Node(ast='Hello!')
    assert node.ast == 'Hello!'

    node = Node(ctx=object(), ast='Hello!')
    assert node.ast == 'Hello!'
    assert node.ctx


def test_attributes_through_shell():
    node = Node(ast='Hello')

    assert hasattr(node, 'ast')
    assert hasattr(node, 'parseinfo')


@tatsudataclass
class Inner(Node):
    id: str


@tatsudataclass
class Outer(Node):
    left: Inner
    right: Inner


def test_children():
    with pytest.raises(TypeError):
        Outer()

    with pytest.raises(TypeError):
        Inner()

    with pytest.raises(TypeError):
        Inner('x')

    a_inner = Inner(id='a')
    b_inner = Inner(id='b')
    outer = Outer(left=a_inner, right=b_inner)
    assert outer
    assert isinstance(outer.left, Inner)
    assert isinstance(outer.right, Inner)
    children = outer.children()
    assert set(children) == {a_inner, b_inner}