[DEV] Add type-check functions (#905)
This commit is contained in:
parent
29398862da
commit
213580ee84
3 changed files with 138 additions and 2 deletions
|
|
@ -172,6 +172,41 @@ gte
|
||||||
:description:
|
:description:
|
||||||
``>=`` operator. Returns True if left >= right. False otherwise.
|
``>=`` operator. Returns True if left >= right. False otherwise.
|
||||||
|
|
||||||
|
is_array
|
||||||
|
~~~~~~~~
|
||||||
|
:spec: ``is_array(value: AnyArgument) -> Boolean``
|
||||||
|
|
||||||
|
:description:
|
||||||
|
Returns True if a value is a Map. False otherwise.
|
||||||
|
|
||||||
|
is_bool
|
||||||
|
~~~~~~~
|
||||||
|
:spec: ``is_bool(value: AnyArgument) -> Boolean``
|
||||||
|
|
||||||
|
:description:
|
||||||
|
Returns True if a value is a Float. False otherwise.
|
||||||
|
|
||||||
|
is_float
|
||||||
|
~~~~~~~~
|
||||||
|
:spec: ``is_float(value: AnyArgument) -> Boolean``
|
||||||
|
|
||||||
|
:description:
|
||||||
|
Returns True if a value is a Float. False otherwise.
|
||||||
|
|
||||||
|
is_int
|
||||||
|
~~~~~~
|
||||||
|
:spec: ``is_int(value: AnyArgument) -> Boolean``
|
||||||
|
|
||||||
|
:description:
|
||||||
|
Returns True if a value is an Integer. False otherwise.
|
||||||
|
|
||||||
|
is_map
|
||||||
|
~~~~~~
|
||||||
|
:spec: ``is_map(value: AnyArgument) -> Boolean``
|
||||||
|
|
||||||
|
:description:
|
||||||
|
Returns True if a value is a Map. False otherwise.
|
||||||
|
|
||||||
is_null
|
is_null
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
:spec: ``is_null(value: AnyArgument) -> Boolean``
|
:spec: ``is_null(value: AnyArgument) -> Boolean``
|
||||||
|
|
@ -179,6 +214,20 @@ is_null
|
||||||
:description:
|
:description:
|
||||||
Returns True if a value is null (i.e. an empty string). False otherwise.
|
Returns True if a value is null (i.e. an empty string). False otherwise.
|
||||||
|
|
||||||
|
is_numeric
|
||||||
|
~~~~~~~~~~
|
||||||
|
:spec: ``is_numeric(value: AnyArgument) -> Boolean``
|
||||||
|
|
||||||
|
:description:
|
||||||
|
Returns True if a value is either an Integer or Float. False otherwise.
|
||||||
|
|
||||||
|
is_string
|
||||||
|
~~~~~~~~~
|
||||||
|
:spec: ``is_string(value: AnyArgument) -> Boolean``
|
||||||
|
|
||||||
|
:description:
|
||||||
|
Returns True if a value is a String. False otherwise.
|
||||||
|
|
||||||
lt
|
lt
|
||||||
~~
|
~~
|
||||||
:spec: ``lt(left: AnyArgument, right: AnyArgument) -> Boolean``
|
:spec: ``lt(left: AnyArgument, right: AnyArgument) -> Boolean``
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
|
from ytdl_sub.script.types.array import Array
|
||||||
|
from ytdl_sub.script.types.map import Map
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import AnyArgument
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
from ytdl_sub.script.types.resolvable import Boolean
|
||||||
|
from ytdl_sub.script.types.resolvable import Float
|
||||||
|
from ytdl_sub.script.types.resolvable import Integer
|
||||||
from ytdl_sub.script.types.resolvable import String
|
from ytdl_sub.script.types.resolvable import String
|
||||||
|
|
||||||
# pylint: disable=invalid-name
|
# pylint: disable=invalid-name
|
||||||
|
|
@ -107,3 +111,59 @@ class BooleanFunctions:
|
||||||
Returns True if a value is null (i.e. an empty string). False otherwise.
|
Returns True if a value is null (i.e. an empty string). False otherwise.
|
||||||
"""
|
"""
|
||||||
return Boolean(isinstance(value, String) and value.value == "")
|
return Boolean(isinstance(value, String) and value.value == "")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_map(value: AnyArgument) -> Boolean:
|
||||||
|
"""
|
||||||
|
:description:
|
||||||
|
Returns True if a value is a Map. False otherwise.
|
||||||
|
"""
|
||||||
|
return Boolean(isinstance(value, Map))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_array(value: AnyArgument) -> Boolean:
|
||||||
|
"""
|
||||||
|
:description:
|
||||||
|
Returns True if a value is a Map. False otherwise.
|
||||||
|
"""
|
||||||
|
return Boolean(isinstance(value, Array))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_string(value: AnyArgument) -> Boolean:
|
||||||
|
"""
|
||||||
|
:description:
|
||||||
|
Returns True if a value is a String. False otherwise.
|
||||||
|
"""
|
||||||
|
return Boolean(isinstance(value, String))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_numeric(value: AnyArgument) -> Boolean:
|
||||||
|
"""
|
||||||
|
:description:
|
||||||
|
Returns True if a value is either an Integer or Float. False otherwise.
|
||||||
|
"""
|
||||||
|
return Boolean(isinstance(value, (Integer, Float)))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_int(value: AnyArgument) -> Boolean:
|
||||||
|
"""
|
||||||
|
:description:
|
||||||
|
Returns True if a value is an Integer. False otherwise.
|
||||||
|
"""
|
||||||
|
return Boolean(isinstance(value, Integer))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_float(value: AnyArgument) -> Boolean:
|
||||||
|
"""
|
||||||
|
:description:
|
||||||
|
Returns True if a value is a Float. False otherwise.
|
||||||
|
"""
|
||||||
|
return Boolean(isinstance(value, Float))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_bool(value: AnyArgument) -> Boolean:
|
||||||
|
"""
|
||||||
|
:description:
|
||||||
|
Returns True if a value is a Float. False otherwise.
|
||||||
|
"""
|
||||||
|
return Boolean(isinstance(value, Boolean))
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
import pytest
|
import pytest
|
||||||
from unit.script.conftest import single_variable_output
|
from unit.script.conftest import single_variable_output
|
||||||
|
|
||||||
from ytdl_sub.script.script import Script
|
|
||||||
|
|
||||||
|
|
||||||
class TestBooleanFunctions:
|
class TestBooleanFunctions:
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
|
@ -140,3 +138,32 @@ class TestBooleanFunctions:
|
||||||
def test_is_null(self, value: str, expected_output: bool):
|
def test_is_null(self, value: str, expected_output: bool):
|
||||||
output = single_variable_output(f"{{%is_null({value})}}")
|
output = single_variable_output(f"{{%is_null({value})}}")
|
||||||
assert output == expected_output
|
assert output == expected_output
|
||||||
|
|
||||||
|
def test_is_array(self):
|
||||||
|
assert single_variable_output("{ %is_array( [] ) }") is True
|
||||||
|
assert single_variable_output("{ %is_array( {} ) }") is False
|
||||||
|
|
||||||
|
def test_is_map(self):
|
||||||
|
assert single_variable_output("{ %is_map( {} ) }") is True
|
||||||
|
assert single_variable_output("{ %is_map( [] ) }") is False
|
||||||
|
|
||||||
|
def test_is_string(self):
|
||||||
|
assert single_variable_output("{ %is_string( 'hi' ) }") is True
|
||||||
|
assert single_variable_output("{ %is_string( False ) }") is False
|
||||||
|
|
||||||
|
def test_is_bool(self):
|
||||||
|
assert single_variable_output("{ %is_bool( True ) }") is True
|
||||||
|
assert single_variable_output("{ %is_bool( 0 ) }") is False
|
||||||
|
|
||||||
|
def test_is_int(self):
|
||||||
|
assert single_variable_output("{ %is_int( 2 ) }") is True
|
||||||
|
assert single_variable_output("{ %is_int( 2.3 ) }") is False
|
||||||
|
|
||||||
|
def test_is_float(self):
|
||||||
|
assert single_variable_output("{ %is_float( 3.14 ) }") is True
|
||||||
|
assert single_variable_output("{ %is_float( 4 ) }") is False
|
||||||
|
|
||||||
|
def test_is_numeric(self):
|
||||||
|
assert single_variable_output("{ %is_numeric( 4 ) }") is True
|
||||||
|
assert single_variable_output("{ %is_numeric( 2.34 ) }") is True
|
||||||
|
assert single_variable_output("{ %is_numeric( '3.12' ) }") is False
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue