import pytest
import capnp
import os

this_dir = os.path.dirname(__file__)


@pytest.fixture
def addressbook():
    return capnp.load(os.path.join(this_dir, 'addressbook.capnp'))


@pytest.fixture
def annotations():
    return capnp.load(os.path.join(this_dir, 'annotations.capnp'))


def test_basic_schema(addressbook):
    assert addressbook.Person.schema.fieldnames[0] == 'id'


def test_list_schema(addressbook):
    peopleField = addressbook.AddressBook.schema.fields['people']
    personType = peopleField.schema.elementType

    assert personType.node.id == addressbook.Person.schema.node.id

    personListSchema = capnp._ListSchema(addressbook.Person)

    assert personListSchema.elementType.node.id == addressbook.Person.schema.node.id


def test_annotations(annotations):
    assert annotations.schema.node.annotations[0].value.text == 'TestFile'

    annotation = annotations.TestAnnotationOne.schema.node.annotations[0]
    assert annotation.value.text == 'Test'

    annotation = annotations.TestAnnotationTwo.schema.node.annotations[0]
    assert annotation.value.struct.as_struct(annotations.AnnotationStruct).test == 100

    annotation = annotations.TestAnnotationThree.schema.node.annotations[0]
    annotation_list = annotation.value.list.as_list(capnp._ListSchema(annotations.AnnotationStruct))
    assert annotation_list[0].test == 100
    assert annotation_list[1].test == 101

    annotation = annotations.TestAnnotationFour.schema.node.annotations[0]
    annotation_list = annotation.value.list.as_list(capnp._ListSchema(capnp.types.UInt16))
    assert annotation_list[0] == 200
    assert annotation_list[1] == 201
