1
0
mirror of https://github.com/MarkParker5/STARK.git synced 2026-06-18 17:24:52 +02:00
Files

47 lines
1.8 KiB
Python
Raw Permalink Normal View History

2023-03-12 09:56:40 +01:00
import re
import pytest
2023-09-20 09:59:36 +02:00
from stark.core import Pattern
from stark.core.types import Object, Word, String
from stark.core.patterns import expressions
from stark.general.classproperty import classproperty
2023-10-02 07:10:12 +02:00
from stark.general.localisation import Localizer
2023-03-12 09:56:40 +01:00
word = fr'[{expressions.alphanumerics}]*'
words = fr'[{expressions.alphanumerics}\s]*'
2023-09-15 13:08:14 +02:00
class ExtraParameterInPattern(Object):
word1: Word
word2: Word
2023-03-12 09:56:40 +01:00
@classproperty
def pattern(cls) -> Pattern:
2023-09-15 13:08:14 +02:00
return Pattern('$word1:Word $word2:Word $word3:Word')
2023-03-12 09:56:40 +01:00
2023-10-02 07:10:12 +02:00
async def test_typed_parameters(get_transcription):
2023-09-15 13:08:14 +02:00
p = Pattern('lorem $name:Word dolor')
2023-10-02 07:10:12 +02:00
p.get_compiled('en', Localizer())
2023-09-15 13:08:14 +02:00
assert p.parameters == {'name': Word}
2023-10-02 07:10:12 +02:00
# assert p._compiled['en'] == fr'lorem (?P<name>{word}) dolor'
2023-03-12 09:56:40 +01:00
2023-10-02 07:10:12 +02:00
m = await p.match(get_transcription('lorem ipsum dolor'), Localizer())
2023-03-12 09:56:40 +01:00
assert m
2023-10-02 07:10:12 +02:00
assert m[0].subtrack.text == 'lorem ipsum dolor'
2023-09-15 13:08:14 +02:00
assert m[0].parameters == {'name': Word('ipsum')}
2023-10-02 07:10:12 +02:00
assert not await p.match(get_transcription('lorem ipsum foo dolor'), Localizer())
2023-03-12 09:56:40 +01:00
2023-09-15 13:08:14 +02:00
p = Pattern('lorem $name:String dolor')
assert p.parameters == {'name': String}
2023-10-02 07:10:12 +02:00
m = await p.match(get_transcription('lorem ipsum foo bar dolor'), Localizer())
2023-03-12 09:56:40 +01:00
assert m
2023-10-02 07:10:12 +02:00
assert m[0].subtrack.text == 'lorem ipsum foo bar dolor'
2023-09-15 13:08:14 +02:00
assert m[0].parameters == {'name': String('ipsum foo bar')}
2023-03-12 09:56:40 +01:00
def test_undefined_typed_parameters():
pattern = 'lorem $name:Lorem dolor'
with pytest.raises(NameError, match=re.escape(f'Unknown type: "Lorem" for parameter: "name" in pattern: "{pattern}"')):
Pattern(pattern)
def test_extra_parameter_in_pattern():
with pytest.raises(AssertionError, match='Can`t add parameter type "ExtraParameterInPattern": pattern parameters do not match properties annotated in class'):
Pattern.add_parameter_type(ExtraParameterInPattern)