Example #1
0
def test_link_simple(scope):
    spec = StructTypeSpec('SimpleStruct',
                          fields=[
                              FieldSpec(1,
                                        'a',
                                        spec=prim_spec.TextTypeSpec,
                                        required=True),
                              FieldSpec(2,
                                        'b',
                                        spec=prim_spec.BinaryTypeSpec,
                                        required=False),
                              FieldSpec(3,
                                        'c',
                                        spec=prim_spec.I32TypeSpec,
                                        required=True),
                              FieldSpec(4,
                                        'd',
                                        spec=prim_spec.I64TypeSpec,
                                        required=False),
                          ])
    spec = spec.link(scope)

    SimpleStruct = spec.surface
    assert SimpleStruct.type_spec is spec
    assert 'SimpleStruct(a, c, b=None, d=None)' in SimpleStruct.__doc__
Example #2
0
def test_compile_reference(parse):
    struct_ast = parse('''struct RefStruct {
        1: optional string x;
        2: required SomeCustomType y;
        3: optional AnotherCustomType z;
    }''')

    spec = StructTypeSpec.compile(struct_ast)

    assert spec.name == 'RefStruct'
    assert spec.fields == [
        FieldSpec(id=1, name='x', spec=prim_spec.TextTypeSpec, required=False),
        FieldSpec(
            id=2,
            name='y',
            spec=TypeReference('SomeCustomType', 3),
            required=True,
        ),
        FieldSpec(
            id=3,
            name='z',
            spec=TypeReference('AnotherCustomType', 4),
            required=False,
        ),
    ]
Example #3
0
def test_compile_primitives(parse):
    struct_ast = parse('''struct PrimitiveStruct {
        1: required string x;
        2: optional i32 y;
        3: required double z;
    }''')

    spec = StructTypeSpec.compile(struct_ast)

    assert spec.name == 'PrimitiveStruct'
    assert spec.fields == [
        FieldSpec(id=1, name='x', spec=prim_spec.TextTypeSpec, required=True),
        FieldSpec(id=2, name='y', spec=prim_spec.I32TypeSpec, required=False),
        FieldSpec(id=3, name='z', spec=prim_spec.DoubleTypeSpec,
                  required=True),
    ]
Example #4
0
def test_compile(parse):
    spec = ServiceSpec.compile(
        parse('''
        service KeyValue extends BaseService {
            void putItem(
                1: string key,
                2: Item item
            ) throws (1: ItemAlreadyExists alreadyExists);

            Item getItem(
                1: string key
            ) throws (1: KeyDoesNotExist doesNotExist);

            bool healthy();

            // Does not accept or return anything
            void noop();
        }
    '''))

    assert spec.name == 'KeyValue'
    assert spec.parent == ServiceReference('BaseService', 2)

    put_item_spec = spec.functions[0]
    get_item_spec = spec.functions[1]
    healthy_spec = spec.functions[2]
    noop_spec = spec.functions[3]

    assert put_item_spec.name == 'putItem'
    assert put_item_spec.args_spec.fields == [
        FieldSpec(1, 'key', prim_spec.TextTypeSpec, False),
        FieldSpec(2, 'item', TypeReference('Item', 5), False),
    ]
    assert put_item_spec.result_spec.fields == [
        FieldSpec(1, 'alreadyExists', TypeReference('ItemAlreadyExists', 6),
                  False),
    ]
    assert put_item_spec.result_spec.return_spec is None

    assert get_item_spec.name == 'getItem'
    assert get_item_spec.args_spec.fields == [
        FieldSpec(1, 'key', prim_spec.TextTypeSpec, False),
    ]
    assert get_item_spec.result_spec.fields == [
        FieldSpec(0, 'success', TypeReference('Item', 8), False),
        FieldSpec(1, 'doesNotExist', TypeReference('KeyDoesNotExist', 10),
                  False),
    ]
    assert get_item_spec.result_spec.return_spec == TypeReference('Item', 8)

    assert healthy_spec.name == 'healthy'
    assert healthy_spec.args_spec.fields == []
    assert healthy_spec.result_spec.fields == [
        FieldSpec(0, 'success', prim_spec.BoolTypeSpec, False)
    ]

    assert noop_spec.name == 'noop'
    assert noop_spec.args_spec.fields == []
    assert noop_spec.result_spec.fields == []
Example #5
0
def test_compile(parse):
    spec = UnionTypeSpec.compile(
        parse('''union Foo {
            1: binary b
            2: string s
            3: i32 i
            4: list<Foo> l
        }'''))

    assert spec.name == 'Foo'
    assert spec.fields == [
        FieldSpec(id=1,
                  name='b',
                  spec=prim_spec.BinaryTypeSpec,
                  required=False),
        FieldSpec(id=2, name='s', spec=prim_spec.TextTypeSpec, required=False),
        FieldSpec(id=3, name='i', spec=prim_spec.I32TypeSpec, required=False),
        FieldSpec(id=4,
                  name='l',
                  required=False,
                  spec=ListTypeSpec(TypeReference('Foo', 5))),
    ]