Esempio n. 1
0
 def test_list_element(self) -> None:
     x = List__i32([1, 2, 3])
     self.assertTrue(inspectable(x))
     self.assertTrue(inspectable(List__i32))
     r = inspect(x)
     self.assertEqual(r.value, int)
     self.assertEqual(r.kind, NumberType.I32)
Esempio n. 2
0
 def test_set_element(self) -> None:
     x = Set__Color({Color.red, Color.blue})
     self.assertTrue(inspectable(x))
     self.assertTrue(inspectable(Set__Color))
     r = inspect(x)
     self.assertEqual(r.value, Color)
     self.assertEqual(r.kind, NumberType.NOT_A_NUMBER)
Esempio n. 3
0
    def test_struct_fields(self) -> None:
        r = inspect(Messy)

        self.assertEqual(len(r.fields), 4)

        self.assertEqual(r.fields[0].name, "opt_field")
        self.assertEqual(r.fields[0].type, str)
        self.assertEqual(r.fields[0].qualifier, Qualifier.OPTIONAL)
        self.assertEqual(r.fields[0].default, None)
        self.assertEqual(
            r.fields[0].annotations, {"some": "annotation", "a.b.c": "d.e.f"}
        )

        self.assertEqual(r.fields[1].name, "req_field")
        self.assertEqual(r.fields[1].type, str)
        self.assertEqual(r.fields[1].qualifier, Qualifier.REQUIRED)
        self.assertEqual(r.fields[1].default, None)
        self.assertEqual(r.fields[1].annotations, {})

        self.assertEqual(r.fields[2].name, "unq_field")
        self.assertEqual(r.fields[2].type, str)
        self.assertEqual(r.fields[2].qualifier, Qualifier.NONE)
        self.assertEqual(r.fields[2].default, "xyzzy")
        self.assertEqual(r.fields[2].annotations, {})

        self.assertEqual(r.fields[3].name, "struct_field")
        self.assertEqual(r.fields[3].type, Runtime)
        self.assertEqual(r.fields[3].qualifier, Qualifier.NONE)
        self.assertEqual(
            r.fields[3].default,
            Runtime(bool_val=True, enum_val=Color.blue, int_list_val=[10, 20, 30]),
        )
        self.assertEqual(r.fields[3].annotations, {})
Esempio n. 4
0
 def test_map_key_value(self) -> None:
     x = StrStrIntListMapMap({"a": StrI32ListMap({"b": I32List([7, 8, 9])})})
     self.assertTrue(inspectable(x))
     self.assertTrue(inspectable(StrStrIntListMapMap))
     r = inspect(x)
     self.assertEqual(r.key, str)
     self.assertEqual(r.value, StrI32ListMap)
Esempio n. 5
0
def _to_py_struct(cls: Type[T], obj: Struct) -> T:
    try:
        field_id_to_py3_name = {
            field_spec.id: (field_spec.annotations.get("py3.name")
                            or field_spec.name)
            for field_spec in inspect(obj).fields
        }
    except TypeError:
        field_id_to_py3_name = {}
    # pyre-fixme[16]: `T` has no attribute `isUnion`.
    if cls.isUnion():
        return cls(
            **{
                field.name: _to_py_field(
                    field.type,
                    field.type_args,
                    getattr(obj, field_id_to_py3_name.get(
                        field.id, field.name)),
                )
                for field in parse_struct_spec(cls)
                # pyre-fixme[16]: `Struct` has no attribute `type`.
                if field_id_to_py3_name.get(field.id, field.name) ==
                obj.type.name
            })
    else:
        return cls(
            **{
                field.name: _to_py_field(
                    field.type,
                    field.type_args,
                    getattr(obj, field_id_to_py3_name.get(
                        field.id, field.name)),
                )
                for field in parse_struct_spec(cls)
            })
Esempio n. 6
0
 def test_union(self) -> None:
     x = Integers(large=100)
     self.assertTrue(inspectable(x))
     self.assertTrue(inspectable(Integers))
     r = inspect(x)
     self.assertEqual(r.name, "Integers")
     self.assertEqual(r.kind, StructType.UNION)
     self.assertEqual(r.annotations, {})
Esempio n. 7
0
 def test_exception(self) -> None:
     x = SimpleError(color=Color.red)
     self.assertTrue(inspectable(x))
     self.assertTrue(inspectable(SimpleError))
     r = inspect(x)
     self.assertEqual(r.name, "SimpleError")
     self.assertEqual(r.kind, StructType.EXCEPTION)
     self.assertEqual(r.annotations, {})
Esempio n. 8
0
 def test_struct(self) -> None:
     x = easy(val=1, an_int=Integers(small=300), name="foo", val_list=[1, 2, 3, 4])
     self.assertTrue(inspectable(x))
     self.assertTrue(inspectable(easy))
     r = inspect(x)
     self.assertEqual(r.name, "easy")
     self.assertEqual(r.kind, StructType.STRUCT)
     self.assertEqual(r.annotations, {"anno1": "foo", "bar": "1"})
Esempio n. 9
0
    def test_struct_fields(self) -> None:
        r = inspect(Messy)

        self.assertEqual(len(r.fields), 3)

        self.assertEqual(r.fields[0].id, 1)
        self.assertEqual(r.fields[0].name, "opt_field")
        self.assertEqual(r.fields[0].type, str)
        self.assertEqual(r.fields[0].kind, NumberType.NOT_A_NUMBER)
        self.assertEqual(r.fields[0].qualifier, Qualifier.OPTIONAL)
        self.assertEqual(r.fields[0].default, None)
        self.assertEqual(r.fields[0].annotations, {
            "some": "annotation",
            "a.b.c": "d.e.f"
        })

        self.assertEqual(r.fields[1].id, 3)
        self.assertEqual(r.fields[1].name, "unq_field")
        self.assertEqual(r.fields[1].type, str)
        self.assertEqual(r.fields[1].kind, NumberType.NOT_A_NUMBER)
        self.assertEqual(r.fields[1].qualifier, Qualifier.UNQUALIFIED)
        self.assertEqual(r.fields[1].default, "xyzzy")
        self.assertEqual(r.fields[1].annotations, {})

        self.assertEqual(r.fields[2].id, 4)
        self.assertEqual(r.fields[2].name, "struct_field")
        self.assertEqual(r.fields[2].type, Runtime)
        self.assertEqual(r.fields[2].kind, NumberType.NOT_A_NUMBER)
        self.assertEqual(r.fields[2].qualifier, Qualifier.UNQUALIFIED)
        self.assertEqual(
            r.fields[2].default,
            Runtime(bool_val=True,
                    enum_val=Color.blue,
                    int_list_val=[10, 20, 30]),
        )
        self.assertEqual(r.fields[2].annotations, {})
Esempio n. 10
0
    def test_interface(self) -> None:
        self.assertTrue(inspectable(TestingService))
        self.assertTrue(inspectable(TestingServiceInterface))
        x = inspect(TestingService)
        self.assertEqual(x, inspect(TestingServiceInterface))
        self.assertEqual(x.name, "TestingService")
        self.assertEqual(
            x.annotations,
            {
                "fun_times": "yes",
                "single_quote": "'",
                "double_quotes": '"""',
                "py3.pass_context": "1",
            },
        )

        methods = (
            MethodSpec(
                name="getName",
                arguments=[],
                result=str,
                result_kind=NumberType.NOT_A_NUMBER,
                exceptions=[],
                annotations={},
            ),
            MethodSpec(
                name="shutdown",
                arguments=[],
                result=None,
                result_kind=NumberType.NOT_A_NUMBER,
                exceptions=[],
                annotations={},
            ),
            MethodSpec(
                name="invert",
                arguments=[
                    ArgumentSpec(
                        name="value",
                        type=bool,
                        kind=NumberType.NOT_A_NUMBER,
                        annotations={},
                    )
                ],
                result=bool,
                result_kind=NumberType.NOT_A_NUMBER,
                exceptions=[],
                annotations={},
            ),
            MethodSpec(
                name="complex_action",
                arguments=[
                    ArgumentSpec(
                        name="first",
                        type=str,
                        kind=NumberType.NOT_A_NUMBER,
                        annotations={},
                    ),
                    ArgumentSpec(
                        name="second",
                        type=str,
                        kind=NumberType.NOT_A_NUMBER,
                        annotations={},
                    ),
                    ArgumentSpec(name="third",
                                 type=int,
                                 kind=NumberType.I64,
                                 annotations={}),
                    ArgumentSpec(
                        name="fourth",
                        type=str,
                        kind=NumberType.NOT_A_NUMBER,
                        annotations={"iv": "4"},
                    ),
                ],
                result=int,
                result_kind=NumberType.I32,
                exceptions=[],
                annotations={},
            ),
            MethodSpec(
                name="takes_a_list",
                arguments=[
                    ArgumentSpec(
                        name="ints",
                        type=I32List,
                        kind=NumberType.NOT_A_NUMBER,
                        annotations={},
                    )
                ],
                result=None,
                result_kind=NumberType.NOT_A_NUMBER,
                exceptions=[SimpleError],
                annotations={},
            ),
            MethodSpec(
                name="take_it_easy",
                arguments=[
                    ArgumentSpec(name="how",
                                 type=int,
                                 kind=NumberType.I32,
                                 annotations={}),
                    ArgumentSpec(
                        name="what",
                        type=easy,
                        kind=NumberType.NOT_A_NUMBER,
                        annotations={},
                    ),
                ],
                result=None,
                result_kind=NumberType.NOT_A_NUMBER,
                exceptions=[],
                annotations={"a": "b.c.d"},
            ),
            MethodSpec(
                name="pick_a_color",
                arguments=[
                    ArgumentSpec(
                        name="color",
                        type=Color,
                        kind=NumberType.NOT_A_NUMBER,
                        annotations={},
                    )
                ],
                result=None,
                result_kind=NumberType.NOT_A_NUMBER,
                exceptions=[],
                annotations={},
            ),
            MethodSpec(
                name="int_sizes",
                arguments=[
                    ArgumentSpec(name="one",
                                 type=int,
                                 kind=NumberType.BYTE,
                                 annotations={}),
                    ArgumentSpec(name="two",
                                 type=int,
                                 kind=NumberType.I16,
                                 annotations={}),
                    ArgumentSpec(name="three",
                                 type=int,
                                 kind=NumberType.I32,
                                 annotations={}),
                    ArgumentSpec(name="four",
                                 type=int,
                                 kind=NumberType.I64,
                                 annotations={}),
                ],
                result=None,
                result_kind=NumberType.NOT_A_NUMBER,
                exceptions=[],
                annotations={},
            ),
            MethodSpec(
                name="hard_error",
                arguments=[
                    ArgumentSpec(
                        name="valid",
                        type=bool,
                        kind=NumberType.NOT_A_NUMBER,
                        annotations={},
                    )
                ],
                result=None,
                result_kind=NumberType.NOT_A_NUMBER,
                exceptions=[HardError],
                annotations={},
            ),
        )
        self.assertEqual(x.methods, methods)
Esempio n. 11
0
 def test_set_element(self) -> None:
     x = Set__Color({Color.red, Color.blue})
     self.assertTrue(inspectable(x))
     self.assertTrue(inspectable(Set__Color))
     r = inspect(x)
     self.assertEqual(r.value, Color)