Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions packages/@jsii/go-runtime-test/project/covariantoverrides_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package tests

import (
"testing"

"github.com/aws/jsii/jsii-calc/go/jsiicalc/v3/covariantoverrides/classoverrides"
)

func TestBase(t *testing.T) {
base := classoverrides.NewBase()
if *base.Something().Name() != "Superclass" {
t.Errorf("Expected Superclass, got %s", *base.Something().Name())
}
if *base.CreateSomething().SayHello() != "Hello Superclass" {
t.Errorf("Expected 'Hello Superclass', got %s", *base.CreateSomething().SayHello())
}
}

func TestMiddle(t *testing.T) {
middle := classoverrides.NewMiddle()
if *middle.Something().Name() != "Superclass" {
t.Errorf("Expected Superclass, got %s", *middle.Something().Name())
}
if *middle.CreateSomething().SayHello() != "Hello Superclass" {
t.Errorf("Expected 'Hello Superclass', got %s", *middle.CreateSomething().SayHello())
}
}

func TestDerived(t *testing.T) {
derived := classoverrides.NewDerived()
if *derived.Something().Name() != "SubSubclass" {
t.Errorf("Expected SubSubclass, got %s", *derived.Something().Name())
}
created := derived.CreateSomething()
if *created.Name() != "SubSubclass" {
t.Errorf("Expected SubSubclass, got %s", *created.Name())
}
if *created.SayHello() != "Hello SubSubclass" {
t.Errorf("Expected 'Hello SubSubclass', got %s", *created.SayHello())
}
}

func TestPolymorphism(t *testing.T) {
derived := classoverrides.NewDerived()
var base classoverrides.IBase = derived

if *base.Something().Name() != "SubSubclass" {
t.Errorf("Expected SubSubclass, got %s", *base.Something().Name())
}
}

func consumeSubSubclass(s classoverrides.SubSubclass) string {
return *s.Name()
}

func TestTypeCasting(t *testing.T) {
derived := classoverrides.NewDerived()
superclassResult := derived.Something()
name := consumeSubSubclass(superclassResult.(classoverrides.SubSubclass))
if name != "SubSubclass" {
t.Errorf("Expected SubSubclass, got %s", name)
}
}

26 changes: 23 additions & 3 deletions packages/jsii-calc/lib/covariant-overrides/class-overrides.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,33 @@
*/

/** Base class in the inheritance hierarchy */
export class Superclass {}
export class Superclass {
public name = 'Superclass';
public sayHello(): string {
return 'Hello Superclass';
}
}

/** Derived class that extends Superclass */
export class Subclass extends Superclass {}
export class Subclass extends Superclass {
public name = 'Subclass';
public sayHello(): string {
return 'Hello Subclass';
}
}

/** Further derived class that extends Subclass */
export class SubSubclass extends Subclass {}
export class SubSubclass extends Subclass {
/**
* Ensures this class is different than its parent.
*/
public unique = 'yes';

public name = 'SubSubclass';
public sayHello(): string {
return 'Hello SubSubclass';
}
}

export interface IBase {
readonly something: Superclass;
Expand Down
144 changes: 129 additions & 15 deletions packages/jsii-calc/test/assembly.jsii
Original file line number Diff line number Diff line change
Expand Up @@ -16749,7 +16749,7 @@
"kind": "class",
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 22
"line": 42
},
"methods": [
{
Expand All @@ -16758,7 +16758,7 @@
},
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 26
"line": 46
},
"name": "createSomething",
"returns": {
Expand All @@ -16778,7 +16778,7 @@
"immutable": true,
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 24
"line": 44
},
"name": "list",
"type": {
Expand All @@ -16797,7 +16797,7 @@
"immutable": true,
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 23
"line": 43
},
"name": "something",
"overrides": "jsii-calc.covariantOverrides.classOverrides.IBase",
Expand Down Expand Up @@ -16825,7 +16825,7 @@
"kind": "class",
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 42
"line": 62
},
"methods": [
{
Expand All @@ -16834,7 +16834,7 @@
},
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 48
"line": 68
},
"name": "createSomething",
"overrides": "jsii-calc.covariantOverrides.classOverrides.Base",
Expand All @@ -16855,7 +16855,7 @@
"immutable": true,
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 45
"line": 65
},
"name": "list",
"overrides": "jsii-calc.covariantOverrides.classOverrides.Base",
Expand All @@ -16875,7 +16875,7 @@
"immutable": true,
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 44
"line": 64
},
"name": "something",
"overrides": "jsii-calc.covariantOverrides.classOverrides.Base",
Expand All @@ -16895,7 +16895,7 @@
"kind": "interface",
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 17
"line": 37
},
"name": "IBase",
"namespace": "covariantOverrides.classOverrides",
Expand All @@ -16908,7 +16908,7 @@
"immutable": true,
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 18
"line": 38
},
"name": "something",
"type": {
Expand All @@ -16934,7 +16934,7 @@
"kind": "class",
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 32
"line": 52
},
"name": "Middle",
"namespace": "covariantOverrides.classOverrides",
Expand All @@ -16945,7 +16945,7 @@
},
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 33
"line": 53
},
"name": "addUnrelatedMember",
"type": {
Expand All @@ -16971,10 +16971,58 @@
"kind": "class",
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 15
"line": 25
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 32
},
"name": "sayHello",
"overrides": "jsii-calc.covariantOverrides.classOverrides.Subclass",
"returns": {
"type": {
"primitive": "string"
}
}
}
],
"name": "SubSubclass",
"namespace": "covariantOverrides.classOverrides",
"properties": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 31
},
"name": "name",
"overrides": "jsii-calc.covariantOverrides.classOverrides.Subclass",
"type": {
"primitive": "string"
}
},
{
"docs": {
"stability": "stable",
"summary": "Ensures this class is different than its parent."
},
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 29
},
"name": "unique",
"type": {
"primitive": "string"
}
}
],
"symbolId": "lib/covariant-overrides/class-overrides:SubSubclass"
},
"jsii-calc.covariantOverrides.classOverrides.Subclass": {
Expand All @@ -16993,10 +17041,44 @@
"kind": "class",
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 12
"line": 17
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 19
},
"name": "sayHello",
"overrides": "jsii-calc.covariantOverrides.classOverrides.Superclass",
"returns": {
"type": {
"primitive": "string"
}
}
}
],
"name": "Subclass",
"namespace": "covariantOverrides.classOverrides",
"properties": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 18
},
"name": "name",
"overrides": "jsii-calc.covariantOverrides.classOverrides.Superclass",
"type": {
"primitive": "string"
}
}
],
"symbolId": "lib/covariant-overrides/class-overrides:Subclass"
},
"jsii-calc.covariantOverrides.classOverrides.Superclass": {
Expand All @@ -17016,8 +17098,40 @@
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 9
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 11
},
"name": "sayHello",
"returns": {
"type": {
"primitive": "string"
}
}
}
],
"name": "Superclass",
"namespace": "covariantOverrides.classOverrides",
"properties": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/covariant-overrides/class-overrides.ts",
"line": 10
},
"name": "name",
"type": {
"primitive": "string"
}
}
],
"symbolId": "lib/covariant-overrides/class-overrides:Superclass"
},
"jsii-calc.homonymousForwardReferences.bar.Consumer": {
Expand Down Expand Up @@ -19672,5 +19786,5 @@
"intersection-types"
],
"version": "3.20.120",
"fingerprint": "bgdsE4i6uPRf3d8FnIARS1FO4PilyDwzanABdH+SqIg="
"fingerprint": "6Vy4e6a5fe6HlMnZVVfUxQ6kP2NgQEfEjwgiDHv/Ssw="
}
9 changes: 7 additions & 2 deletions packages/jsii-pacmak/lib/targets/go.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,13 @@ export class Golang extends Target {
return Promise.reject(e);
}

if (process.env.JSII_BUILD_GO) {
// This step is taken to ensure that the generated code is compilable
// This step is taken to ensure that the generated code is compilable
// Do it by default, because we didn't use to and that was masking a code generation
// problem.
const doBuild = !['false', '0', 'no'].includes(
process.env.JSII_BUILD_GO ?? '1',
);
if (doBuild) {
await go('build', ['-modfile', localGoMod.path, './...'], {
cwd: pkgDir,
});
Expand Down
Loading
Loading