more array tests wip
This commit is contained in:
parent
469d03777e
commit
5ad6973a18
3 changed files with 39 additions and 9 deletions
|
|
@ -29,7 +29,7 @@ UNREACHABLE = UnreachableSyntaxException(
|
||||||
"https://github.com/jmbannon/ytdl-sub/issues"
|
"https://github.com/jmbannon/ytdl-sub/issues"
|
||||||
)
|
)
|
||||||
|
|
||||||
UNEXPECTED_ARGUMENT = InvalidSyntaxException("Unexpected comma when parsing arguments")
|
UNEXPECTED_COMMA_ARGUMENT = InvalidSyntaxException("Unexpected comma when parsing arguments")
|
||||||
MAP_KEY_WITH_NO_VALUE = InvalidSyntaxException("Map has a key with no value")
|
MAP_KEY_WITH_NO_VALUE = InvalidSyntaxException("Map has a key with no value")
|
||||||
MAP_KEY_MULTIPLE_VALUES = InvalidSyntaxException(
|
MAP_KEY_MULTIPLE_VALUES = InvalidSyntaxException(
|
||||||
"Map key has multiple values when there should only be one"
|
"Map key has multiple values when there should only be one"
|
||||||
|
|
@ -207,7 +207,7 @@ class _Parser:
|
||||||
comma_count += 1
|
comma_count += 1
|
||||||
if argument_index != comma_count:
|
if argument_index != comma_count:
|
||||||
self._set_highlight_position()
|
self._set_highlight_position()
|
||||||
raise UNEXPECTED_ARGUMENT
|
raise UNEXPECTED_COMMA_ARGUMENT
|
||||||
|
|
||||||
self._pos += 1
|
self._pos += 1
|
||||||
else:
|
else:
|
||||||
|
|
@ -247,7 +247,7 @@ class _Parser:
|
||||||
else:
|
else:
|
||||||
function_args = self._parse_args(breaking_chars="]")
|
function_args = self._parse_args(breaking_chars="]")
|
||||||
|
|
||||||
raise StringFormattingException("Invalid function")
|
raise UNREACHABLE
|
||||||
|
|
||||||
def _parse_map(self) -> UnresolvedMap:
|
def _parse_map(self) -> UnresolvedMap:
|
||||||
"""
|
"""
|
||||||
|
|
@ -267,11 +267,11 @@ class _Parser:
|
||||||
return UnresolvedMap(value=output)
|
return UnresolvedMap(value=output)
|
||||||
elif ch == ",":
|
elif ch == ",":
|
||||||
if in_comma:
|
if in_comma:
|
||||||
raise UNEXPECTED_ARGUMENT
|
raise UNEXPECTED_COMMA_ARGUMENT
|
||||||
if key is not None:
|
if key is not None:
|
||||||
raise MAP_KEY_WITH_NO_VALUE
|
raise MAP_KEY_WITH_NO_VALUE
|
||||||
if not output:
|
if not output:
|
||||||
raise UNEXPECTED_ARGUMENT
|
raise UNEXPECTED_COMMA_ARGUMENT
|
||||||
in_comma = True
|
in_comma = True
|
||||||
self._pos += 1
|
self._pos += 1
|
||||||
elif key is None:
|
elif key is None:
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,13 @@
|
||||||
|
import re
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from ytdl_sub.script.parser import UNEXPECTED_COMMA_ARGUMENT
|
||||||
from ytdl_sub.script.script import Script
|
from ytdl_sub.script.script import Script
|
||||||
from ytdl_sub.script.types.array import ResolvedArray
|
from ytdl_sub.script.types.array import ResolvedArray
|
||||||
from ytdl_sub.script.types.resolvable import Float
|
from ytdl_sub.script.types.resolvable import Float
|
||||||
from ytdl_sub.script.types.resolvable import String
|
from ytdl_sub.script.types.resolvable import String
|
||||||
|
from ytdl_sub.script.utils.exceptions import InvalidSyntaxException
|
||||||
|
|
||||||
|
|
||||||
class TestArray:
|
class TestArray:
|
||||||
|
|
@ -34,8 +40,32 @@ class TestArray:
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
def test_empty_array(self):
|
@pytest.mark.parametrize(
|
||||||
assert Script({"array": "{[]}"}).resolve() == {"array": ResolvedArray([])}
|
"array",
|
||||||
|
[
|
||||||
|
"{[]}",
|
||||||
|
"{ [] }",
|
||||||
|
"{ [ ] }",
|
||||||
|
"{[\n]}",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_empty(self, array: str):
|
||||||
|
assert Script({"array": array}).resolve() == {"array": ResolvedArray([])}
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"array",
|
||||||
|
[
|
||||||
|
"{[,]}",
|
||||||
|
"{[ ,]}",
|
||||||
|
"{ [ , ]}",
|
||||||
|
"{ ['test',] }",
|
||||||
|
"{ [ 'test', ] }",
|
||||||
|
"{[\n,\n]}",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_unexpected_comma(self, array: str):
|
||||||
|
with pytest.raises(InvalidSyntaxException, match=re.escape(str(UNEXPECTED_COMMA_ARGUMENT))):
|
||||||
|
Script({"array": array}).resolve()
|
||||||
|
|
||||||
def test_custom_function(self):
|
def test_custom_function(self):
|
||||||
assert Script(
|
assert Script(
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ from ytdl_sub.script.parser import MAP_KEY_MULTIPLE_VALUES
|
||||||
from ytdl_sub.script.parser import MAP_KEY_NOT_HASHABLE
|
from ytdl_sub.script.parser import MAP_KEY_NOT_HASHABLE
|
||||||
from ytdl_sub.script.parser import MAP_KEY_WITH_NO_VALUE
|
from ytdl_sub.script.parser import MAP_KEY_WITH_NO_VALUE
|
||||||
from ytdl_sub.script.parser import MAP_MISSING_KEY
|
from ytdl_sub.script.parser import MAP_MISSING_KEY
|
||||||
from ytdl_sub.script.parser import UNEXPECTED_ARGUMENT
|
from ytdl_sub.script.parser import UNEXPECTED_COMMA_ARGUMENT
|
||||||
from ytdl_sub.script.script import Script
|
from ytdl_sub.script.script import Script
|
||||||
from ytdl_sub.script.types.map import ResolvedMap
|
from ytdl_sub.script.types.map import ResolvedMap
|
||||||
from ytdl_sub.script.types.resolvable import Float
|
from ytdl_sub.script.types.resolvable import Float
|
||||||
|
|
@ -99,7 +99,7 @@ class TestMap:
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_map_unexpected_comma(self, value: str):
|
def test_map_unexpected_comma(self, value: str):
|
||||||
with pytest.raises(InvalidSyntaxException, match=re.escape(str(UNEXPECTED_ARGUMENT))):
|
with pytest.raises(InvalidSyntaxException, match=re.escape(str(UNEXPECTED_COMMA_ARGUMENT))):
|
||||||
Script({"map": value}).resolve()
|
Script({"map": value}).resolve()
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue