Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(python): classes do not correctly implement interfaces #2809

Merged
merged 11 commits into from
May 26, 2021
Merged
18 changes: 18 additions & 0 deletions packages/@jsii/python-runtime/tests/test_python.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import jsii
import pytest
from typing import Any, cast

from jsii.errors import JSIIError
import jsii_calc
from jsii_calc.module2702 import IVpc, Vpc, IBaz, Baz


class TestErrorHandling:
Expand All @@ -27,8 +29,24 @@ def test_descriptive_error_when_passing_function(self):
obj = jsii_calc.Calculator()

with pytest.raises(JSIIError, match="Cannot pass function as argument here.*"):
# types: ignore
obj.add(self.test_descriptive_error_when_passing_function)

def test_implements_interface(self) -> None:
"""Checks that jsii-generated classes correctly implement the relevant jsii-generated interfaces."""

def vpc_interface_func(v: IVpc) -> None:
assert v is not None

vpc = Vpc()
vpc_interface_func(vpc)

def baz_interface_func(b: IBaz) -> None:
assert b is not None

baz = Baz()
baz_interface_func(baz)


def find_struct_bases(x):
ret = []
Expand Down
42 changes: 42 additions & 0 deletions packages/jsii-calc/lib/module2702/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,45 @@ export class Class3 implements IBaseInterface {
export interface IFoo extends IBaseInterface {
readonly iBaseInterface: string;
}

// See https://github.com/aws/aws-cdk/issues/13474

export interface IConstruct {
constructMethod(): void;
}

export interface IResource extends IConstruct {
resourceMethod(): void;
}

export interface IVpc extends IResource {
vpcMethod(): void;
}

export class Construct implements IConstruct {
public constructMethod(): void {
return;
}
}

export abstract class Resource extends Construct implements IResource {
public resourceMethod(): void {
return;
}
}

export class Vpc extends Resource implements IVpc {
public vpcMethod(): void {
return;
}
}

export interface IBaz extends IBaseInterface {
bazMethod(): void;
}

export class Baz extends Class3 implements IBaz {
public bazMethod(): void {
return;
}
}
263 changes: 262 additions & 1 deletion packages/jsii-calc/test/assembly.jsii
Original file line number Diff line number Diff line change
Expand Up @@ -14968,6 +14968,42 @@
}
]
},
"jsii-calc.module2702.Baz": {
"assembly": "jsii-calc",
"base": "jsii-calc.module2702.Class3",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.Baz",
"initializer": {
"docs": {
"stability": "stable"
}
},
"interfaces": [
"jsii-calc.module2702.IBaz"
],
"kind": "class",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 70
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 71
},
"name": "bazMethod",
"overrides": "jsii-calc.module2702.IBaz"
}
],
"name": "Baz",
"namespace": "module2702"
},
"jsii-calc.module2702.Class1": {
"assembly": "jsii-calc",
"base": "@scope/jsii-calc-base.Base",
Expand Down Expand Up @@ -15084,6 +15120,98 @@
"name": "Class3",
"namespace": "module2702"
},
"jsii-calc.module2702.Construct": {
"assembly": "jsii-calc",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.Construct",
"initializer": {
"docs": {
"stability": "stable"
}
},
"interfaces": [
"jsii-calc.module2702.IConstruct"
],
"kind": "class",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 48
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 49
},
"name": "constructMethod",
"overrides": "jsii-calc.module2702.IConstruct"
}
],
"name": "Construct",
"namespace": "module2702"
},
"jsii-calc.module2702.IBaz": {
"assembly": "jsii-calc",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.IBaz",
"interfaces": [
"@scope/jsii-calc-base.IBaseInterface"
],
"kind": "interface",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 66
},
"methods": [
{
"abstract": true,
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 67
},
"name": "bazMethod"
}
],
"name": "IBaz",
"namespace": "module2702"
},
"jsii-calc.module2702.IConstruct": {
"assembly": "jsii-calc",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.IConstruct",
"kind": "interface",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 36
},
"methods": [
{
"abstract": true,
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 37
},
"name": "constructMethod"
}
],
"name": "IConstruct",
"namespace": "module2702"
},
"jsii-calc.module2702.IFoo": {
"assembly": "jsii-calc",
"docs": {
Expand Down Expand Up @@ -15118,6 +15246,139 @@
}
]
},
"jsii-calc.module2702.IResource": {
"assembly": "jsii-calc",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.IResource",
"interfaces": [
"jsii-calc.module2702.IConstruct"
],
"kind": "interface",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 40
},
"methods": [
{
"abstract": true,
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 41
},
"name": "resourceMethod"
}
],
"name": "IResource",
"namespace": "module2702"
},
"jsii-calc.module2702.IVpc": {
"assembly": "jsii-calc",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.IVpc",
"interfaces": [
"jsii-calc.module2702.IResource"
],
"kind": "interface",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 44
},
"methods": [
{
"abstract": true,
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 45
},
"name": "vpcMethod"
}
],
"name": "IVpc",
"namespace": "module2702"
},
"jsii-calc.module2702.Resource": {
"abstract": true,
"assembly": "jsii-calc",
"base": "jsii-calc.module2702.Construct",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.Resource",
"initializer": {
"docs": {
"stability": "stable"
}
},
"interfaces": [
"jsii-calc.module2702.IResource"
],
"kind": "class",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 54
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 55
},
"name": "resourceMethod",
"overrides": "jsii-calc.module2702.IResource"
}
],
"name": "Resource",
"namespace": "module2702"
},
"jsii-calc.module2702.Vpc": {
"assembly": "jsii-calc",
"base": "jsii-calc.module2702.Resource",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.Vpc",
"initializer": {
"docs": {
"stability": "stable"
}
},
"interfaces": [
"jsii-calc.module2702.IVpc"
],
"kind": "class",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 60
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 61
},
"name": "vpcMethod",
"overrides": "jsii-calc.module2702.IVpc"
}
],
"name": "Vpc",
"namespace": "module2702"
},
"jsii-calc.nodirect.sub1.TypeFromSub1": {
"assembly": "jsii-calc",
"docs": {
Expand Down Expand Up @@ -15874,5 +16135,5 @@
}
},
"version": "3.20.120",
"fingerprint": "ezY52AR44agRJClz62BLSJU4fF1Dhh+7vRL5LX9Fcgc="
"fingerprint": "Ouku0wagXKUVN9v9Ud7ocXYRaRl10KuCazRDvU/7iNk="
}
Loading