1
0
mirror of https://github.com/MarkParker5/STARK.git synced 2026-06-18 17:24:52 +02:00
Files
STARK/tests/test_viobjects/test_nested_viobjects.py
2023-10-02 07:10:12 +02:00

55 lines
1.7 KiB
Python

import pytest
from stark.core import Pattern
from stark.core.types import Object, Word
from stark.general.classproperty import classproperty
from stark.general.localisation import Localizer
class FullName(Object):
first: Word
second: Word
@classproperty
def pattern(cls) -> Pattern:
return Pattern('$first:Word $second:Word')
class ExtraParameterInAnnotation(Object):
word1: Word
word2: Word
word3: Word
@classproperty
def pattern(cls) -> Pattern:
return Pattern('$word1:Word $word2:Word')
async def test_nested_objects(get_transcription):
Pattern.add_parameter_type(FullName)
p = Pattern('$name:FullName')
assert p
p.get_compiled('en', Localizer())
assert p._compiled
m = await p.match(get_transcription('John Galt'), Localizer())
assert m
assert set(m[0].parameters.keys()) == {'name'}
assert isinstance(m[0].parameters['name'], FullName)
assert m[0].parameters['name'].first == Word('John')
assert m[0].parameters['name'].second == Word('Galt')
async def test_extra_parameter_in_annotation(get_transcription):
Pattern.add_parameter_type(ExtraParameterInAnnotation)
p = Pattern('$name:ExtraParameterInAnnotation')
assert p
p.get_compiled('en', Localizer())
assert p._compiled
m = await p.match(get_transcription('John Galt'), Localizer())
assert m
assert set(m[0].parameters.keys()) == {'name'}
assert isinstance(m[0].parameters['name'], ExtraParameterInAnnotation)
assert m[0].parameters['name'].word1 == Word('John')
assert m[0].parameters['name'].word2 == Word('Galt')
assert not hasattr(m[0].parameters['name'], 'word3')