variables
This commit is contained in:
parent
4a5eb8cd42
commit
caed523ac3
2 changed files with 11 additions and 6 deletions
|
|
@ -50,7 +50,7 @@ class Function:
|
||||||
if isinstance(arg, Variable):
|
if isinstance(arg, Variable):
|
||||||
variables.add(arg)
|
variables.add(arg)
|
||||||
elif isinstance(arg, Function):
|
elif isinstance(arg, Function):
|
||||||
variables.union(arg.variables)
|
variables.update(arg.variables)
|
||||||
|
|
||||||
return variables
|
return variables
|
||||||
|
|
||||||
|
|
@ -71,6 +71,6 @@ class SyntaxTree:
|
||||||
if isinstance(token, Variable):
|
if isinstance(token, Variable):
|
||||||
variables.add(token)
|
variables.add(token)
|
||||||
elif isinstance(token, Function):
|
elif isinstance(token, Function):
|
||||||
variables.union(token.variables)
|
variables.update(token.variables)
|
||||||
|
|
||||||
return variables
|
return variables
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,13 @@ from ytdl_sub.utils.exceptions import StringFormattingException
|
||||||
|
|
||||||
class TestParser:
|
class TestParser:
|
||||||
def test_simple(self):
|
def test_simple(self):
|
||||||
assert parse("hello world") == SyntaxTree([LiteralString(value="hello world")])
|
parsed = parse("hello world")
|
||||||
|
assert parsed == SyntaxTree([LiteralString(value="hello world")])
|
||||||
|
assert parsed.variables == set()
|
||||||
|
|
||||||
def test_single_function_one_arg(self):
|
def test_single_function_one_arg(self):
|
||||||
assert parse("hello {%capitalize('hi mom')}") == SyntaxTree(
|
parsed = parse("hello {%capitalize('hi mom')}")
|
||||||
|
assert parsed == SyntaxTree(
|
||||||
[
|
[
|
||||||
LiteralString("hello "),
|
LiteralString("hello "),
|
||||||
Function(name="capitalize", args=[String(value="hi mom")]),
|
Function(name="capitalize", args=[String(value="hi mom")]),
|
||||||
|
|
@ -27,10 +30,11 @@ class TestParser:
|
||||||
@pytest.mark.parametrize("whitespace", ["", " ", " ", "\n", " \n "])
|
@pytest.mark.parametrize("whitespace", ["", " ", " ", "\n", " \n "])
|
||||||
def test_single_function_multiple_args(self, whitespace: str):
|
def test_single_function_multiple_args(self, whitespace: str):
|
||||||
s = whitespace
|
s = whitespace
|
||||||
assert parse(
|
parsed = parse(
|
||||||
f"hello{s}{{{s}%concat({s}'string'{s},{s}1{s},{s}2.4{s},"
|
f"hello{s}{{{s}%concat({s}'string'{s},{s}1{s},{s}2.4{s},"
|
||||||
f"{s}TRUE{s},{s}variable_name{s},{s}%capitalize({s}'hi'{s}){s}){s}}}"
|
f"{s}TRUE{s},{s}variable_name{s},{s}%capitalize({s}'hi'{s}){s}){s}}}"
|
||||||
) == SyntaxTree(
|
)
|
||||||
|
assert parsed == SyntaxTree(
|
||||||
[
|
[
|
||||||
LiteralString(value=f"hello{s}"),
|
LiteralString(value=f"hello{s}"),
|
||||||
Function(
|
Function(
|
||||||
|
|
@ -47,6 +51,7 @@ class TestParser:
|
||||||
]
|
]
|
||||||
+ ([LiteralString(value=s)] if s else [])
|
+ ([LiteralString(value=s)] if s else [])
|
||||||
)
|
)
|
||||||
|
assert parsed.variables == {Variable(name="variable_name")}
|
||||||
|
|
||||||
|
|
||||||
class TestParserBracketFailures:
|
class TestParserBracketFailures:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue