@alloy-js/python 0.5.0-dev.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/dev/src/components/CallSignature.js +2 -2
- package/dist/dev/src/components/CallSignature.js.map +1 -1
- package/dist/dev/src/components/ConstructorDeclaration.js +1 -1
- package/dist/dev/src/components/ConstructorDeclaration.js.map +1 -1
- package/dist/dev/src/components/DataclassDeclaration.js +5 -5
- package/dist/dev/src/components/DataclassDeclaration.js.map +1 -1
- package/dist/dev/src/components/FunctionBase.js +9 -9
- package/dist/dev/src/components/FunctionBase.js.map +1 -1
- package/dist/dev/src/components/PropertyDeclaration.js +8 -8
- package/dist/dev/src/components/PropertyDeclaration.js.map +1 -1
- package/dist/dev/src/components/PyDoc.js +64 -64
- package/dist/dev/src/components/PyDoc.js.map +1 -1
- package/dist/dev/src/components/PydanticClassDeclaration.js +5 -5
- package/dist/dev/src/components/PydanticClassDeclaration.js.map +1 -1
- package/dist/dev/src/components/SourceFile.js +44 -32
- package/dist/dev/src/components/SourceFile.js.map +1 -1
- package/dist/dev/src/symbols/python-output-symbol.js.map +1 -1
- package/dist/dev/test/callsignatures.test.js +471 -297
- package/dist/dev/test/callsignatures.test.js.map +1 -1
- package/dist/dev/test/class-method-declaration.test.js +21 -10
- package/dist/dev/test/class-method-declaration.test.js.map +1 -1
- package/dist/dev/test/classdeclarations.test.js +459 -393
- package/dist/dev/test/classdeclarations.test.js.map +1 -1
- package/dist/dev/test/classinstantiations.test.js +201 -168
- package/dist/dev/test/classinstantiations.test.js.map +1 -1
- package/dist/dev/test/constructordeclaration.test.js +22 -11
- package/dist/dev/test/constructordeclaration.test.js.map +1 -1
- package/dist/dev/test/dataclassdeclarations.test.js +322 -368
- package/dist/dev/test/dataclassdeclarations.test.js.map +1 -1
- package/dist/dev/test/decoratorlist.test.js +96 -49
- package/dist/dev/test/decoratorlist.test.js.map +1 -1
- package/dist/dev/test/dundermethoddeclaration.test.js +22 -11
- package/dist/dev/test/dundermethoddeclaration.test.js.map +1 -1
- package/dist/dev/test/enums.test.js +218 -184
- package/dist/dev/test/enums.test.js.map +1 -1
- package/dist/dev/test/externals.test.js +57 -45
- package/dist/dev/test/externals.test.js.map +1 -1
- package/dist/dev/test/factories.test.js +124 -50
- package/dist/dev/test/factories.test.js.map +1 -1
- package/dist/dev/test/functioncallexpressions.test.js +199 -164
- package/dist/dev/test/functioncallexpressions.test.js.map +1 -1
- package/dist/dev/test/functiondeclaration.test.js +439 -272
- package/dist/dev/test/functiondeclaration.test.js.map +1 -1
- package/dist/dev/test/imports.test.js +273 -221
- package/dist/dev/test/imports.test.js.map +1 -1
- package/dist/dev/test/memberexpressions.test.js +1237 -972
- package/dist/dev/test/memberexpressions.test.js.map +1 -1
- package/dist/dev/test/methoddeclaration.test.js +142 -78
- package/dist/dev/test/methoddeclaration.test.js.map +1 -1
- package/dist/dev/test/namepolicies.test.js +130 -94
- package/dist/dev/test/namepolicies.test.js.map +1 -1
- package/dist/dev/test/propertydeclaration.test.js +88 -59
- package/dist/dev/test/propertydeclaration.test.js.map +1 -1
- package/dist/dev/test/pydanticclassdeclarations.test.js +299 -347
- package/dist/dev/test/pydanticclassdeclarations.test.js.map +1 -1
- package/dist/dev/test/pydocs.test.js +888 -715
- package/dist/dev/test/pydocs.test.js.map +1 -1
- package/dist/dev/test/references.test.js +42 -35
- package/dist/dev/test/references.test.js.map +1 -1
- package/dist/dev/test/sourcefiles.test.js +1109 -841
- package/dist/dev/test/sourcefiles.test.js.map +1 -1
- package/dist/dev/test/staticmethoddeclaration.test.js +21 -10
- package/dist/dev/test/staticmethoddeclaration.test.js.map +1 -1
- package/dist/dev/test/type-checking-imports.test.js +408 -359
- package/dist/dev/test/type-checking-imports.test.js.map +1 -1
- package/dist/dev/test/typereference.test.js +55 -40
- package/dist/dev/test/typereference.test.js.map +1 -1
- package/dist/dev/test/uniontypeexpression.test.js +222 -146
- package/dist/dev/test/uniontypeexpression.test.js.map +1 -1
- package/dist/dev/test/utils.js +39 -77
- package/dist/dev/test/utils.js.map +1 -1
- package/dist/dev/test/values.test.js +237 -101
- package/dist/dev/test/values.test.js.map +1 -1
- package/dist/dev/test/variables.test.js +321 -203
- package/dist/dev/test/variables.test.js.map +1 -1
- package/dist/dev/test/vitest.setup.js +2 -0
- package/dist/dev/test/vitest.setup.js.map +1 -0
- package/dist/src/components/CallSignature.d.ts.map +1 -1
- package/dist/src/components/CallSignature.js.map +1 -1
- package/dist/src/components/ConstructorDeclaration.d.ts.map +1 -1
- package/dist/src/components/ConstructorDeclaration.js.map +1 -1
- package/dist/src/components/DataclassDeclaration.d.ts.map +1 -1
- package/dist/src/components/DataclassDeclaration.js.map +1 -1
- package/dist/src/components/FunctionBase.d.ts.map +1 -1
- package/dist/src/components/FunctionBase.js.map +1 -1
- package/dist/src/components/PropertyDeclaration.d.ts.map +1 -1
- package/dist/src/components/PropertyDeclaration.js.map +1 -1
- package/dist/src/components/PyDoc.d.ts.map +1 -1
- package/dist/src/components/PyDoc.js.map +1 -1
- package/dist/src/components/PydanticClassDeclaration.d.ts.map +1 -1
- package/dist/src/components/PydanticClassDeclaration.js.map +1 -1
- package/dist/src/components/SourceFile.d.ts +2 -2
- package/dist/src/components/SourceFile.d.ts.map +1 -1
- package/dist/src/components/SourceFile.js +12 -0
- package/dist/src/components/SourceFile.js.map +1 -1
- package/dist/src/symbols/python-output-symbol.d.ts.map +1 -1
- package/dist/src/symbols/python-output-symbol.js.map +1 -1
- package/dist/test/callsignatures.test.js +346 -272
- package/dist/test/callsignatures.test.js.map +1 -1
- package/dist/test/class-method-declaration.test.js +7 -4
- package/dist/test/class-method-declaration.test.js.map +1 -1
- package/dist/test/classdeclarations.test.js +302 -288
- package/dist/test/classdeclarations.test.js.map +1 -1
- package/dist/test/classinstantiations.test.js +112 -103
- package/dist/test/classinstantiations.test.js.map +1 -1
- package/dist/test/constructordeclaration.test.js +7 -4
- package/dist/test/constructordeclaration.test.js.map +1 -1
- package/dist/test/dataclassdeclarations.test.js +134 -184
- package/dist/test/dataclassdeclarations.test.js.map +1 -1
- package/dist/test/decoratorlist.test.js +59 -36
- package/dist/test/decoratorlist.test.js.map +1 -1
- package/dist/test/dundermethoddeclaration.test.js +7 -4
- package/dist/test/dundermethoddeclaration.test.js.map +1 -1
- package/dist/test/enums.test.js +161 -159
- package/dist/test/enums.test.js.map +1 -1
- package/dist/test/externals.test.js +24 -24
- package/dist/test/externals.test.js.map +1 -1
- package/dist/test/factories.test.js +75 -33
- package/dist/test/factories.test.js.map +1 -1
- package/dist/test/functioncallexpressions.test.js +117 -106
- package/dist/test/functioncallexpressions.test.js.map +1 -1
- package/dist/test/functiondeclaration.test.js +247 -180
- package/dist/test/functiondeclaration.test.js.map +1 -1
- package/dist/test/imports.test.js +171 -143
- package/dist/test/imports.test.js.map +1 -1
- package/dist/test/memberexpressions.test.js +582 -453
- package/dist/test/memberexpressions.test.js.map +1 -1
- package/dist/test/methoddeclaration.test.js +66 -46
- package/dist/test/methoddeclaration.test.js.map +1 -1
- package/dist/test/namepolicies.test.js +90 -78
- package/dist/test/namepolicies.test.js.map +1 -1
- package/dist/test/propertydeclaration.test.js +25 -20
- package/dist/test/propertydeclaration.test.js.map +1 -1
- package/dist/test/pydanticclassdeclarations.test.js +134 -190
- package/dist/test/pydanticclassdeclarations.test.js.map +1 -1
- package/dist/test/pydocs.test.js +573 -532
- package/dist/test/pydocs.test.js.map +1 -1
- package/dist/test/references.test.js +31 -28
- package/dist/test/references.test.js.map +1 -1
- package/dist/test/sourcefiles.test.js +700 -580
- package/dist/test/sourcefiles.test.js.map +1 -1
- package/dist/test/staticmethoddeclaration.test.js +7 -4
- package/dist/test/staticmethoddeclaration.test.js.map +1 -1
- package/dist/test/type-checking-imports.test.js +297 -284
- package/dist/test/type-checking-imports.test.js.map +1 -1
- package/dist/test/typereference.test.js +29 -22
- package/dist/test/typereference.test.js.map +1 -1
- package/dist/test/uniontypeexpression.test.js +124 -88
- package/dist/test/uniontypeexpression.test.js.map +1 -1
- package/dist/test/utils.d.ts +10 -17
- package/dist/test/utils.d.ts.map +1 -1
- package/dist/test/utils.js +32 -74
- package/dist/test/utils.js.map +1 -1
- package/dist/test/values.test.js +135 -67
- package/dist/test/values.test.js.map +1 -1
- package/dist/test/variables.test.js +201 -151
- package/dist/test/variables.test.js.map +1 -1
- package/dist/test/vitest.setup.d.ts +2 -0
- package/dist/test/vitest.setup.d.ts.map +1 -0
- package/dist/test/vitest.setup.js +2 -0
- package/dist/test/vitest.setup.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/api/components/FunctionalEnumDeclaration.md +3 -6
- package/docs/api/components/MemberExpression.md +1 -5
- package/docs/api/components/SourceFile.md +20 -8
- package/docs/api/components/index.md +0 -2
- package/docs/api/functions/isTypeRefContext.md +1 -1
- package/docs/api/index.md +2 -2
- package/docs/api/types/ReferenceProps.md +7 -0
- package/docs/api/types/TypeRefContextProps.md +7 -0
- package/docs/api/types/index.md +2 -0
- package/package.json +11 -10
- package/src/components/CallSignature.tsx +4 -2
- package/src/components/ConstructorDeclaration.tsx +4 -2
- package/src/components/DataclassDeclaration.tsx +1 -2
- package/src/components/FunctionBase.tsx +1 -2
- package/src/components/PropertyDeclaration.tsx +8 -4
- package/src/components/PyDoc.tsx +12 -6
- package/src/components/PydanticClassDeclaration.tsx +1 -2
- package/src/components/SourceFile.tsx +6 -1
- package/src/symbols/python-output-symbol.ts +1 -2
- package/temp/api.json +107 -61
- package/test/callsignatures.test.tsx +309 -283
- package/test/class-method-declaration.test.tsx +3 -4
- package/test/classdeclarations.test.tsx +263 -248
- package/test/classinstantiations.test.tsx +115 -109
- package/test/constructordeclaration.test.tsx +9 -6
- package/test/dataclassdeclarations.test.tsx +243 -361
- package/test/decoratorlist.test.tsx +78 -59
- package/test/dundermethoddeclaration.test.tsx +3 -4
- package/test/enums.test.tsx +65 -81
- package/test/externals.test.tsx +25 -25
- package/test/factories.test.tsx +64 -22
- package/test/functioncallexpressions.test.tsx +123 -109
- package/test/functiondeclaration.test.tsx +209 -148
- package/test/imports.test.tsx +119 -91
- package/test/memberexpressions.test.tsx +265 -207
- package/test/methoddeclaration.test.tsx +84 -63
- package/test/namepolicies.test.tsx +69 -69
- package/test/propertydeclaration.test.tsx +7 -8
- package/test/pydanticclassdeclarations.test.tsx +355 -487
- package/test/pydocs.test.tsx +531 -579
- package/test/references.test.tsx +24 -23
- package/test/sourcefiles.test.tsx +527 -492
- package/test/staticmethoddeclaration.test.tsx +3 -4
- package/test/type-checking-imports.test.tsx +206 -218
- package/test/typereference.test.tsx +15 -12
- package/test/uniontypeexpression.test.tsx +74 -61
- package/test/utils.tsx +26 -110
- package/test/values.test.tsx +82 -32
- package/test/variables.test.tsx +162 -142
- package/test/vitest.setup.ts +1 -0
- package/tsdoc-metadata.json +1 -1
- package/vitest.config.ts +4 -0
- package/docs/api/components/Reference.md +0 -31
- package/docs/api/components/TypeRefContext.md +0 -41
|
@@ -1,182 +1,201 @@
|
|
|
1
|
-
import { code, namekey, refkey } from "@alloy-js/core";
|
|
2
|
-
import { d } from "@alloy-js/core/testing";
|
|
1
|
+
import { code, namekey, refkey, render } from "@alloy-js/core";
|
|
3
2
|
import { describe, expect, it } from "vitest";
|
|
4
3
|
import * as py from "../src/index.js";
|
|
5
4
|
import { abcModule } from "../src/index.js";
|
|
6
|
-
import {
|
|
7
|
-
assertFileContents,
|
|
8
|
-
toSourceText,
|
|
9
|
-
toSourceTextMultiple,
|
|
10
|
-
} from "./utils.js";
|
|
5
|
+
import { TestOutput, TestOutputDirectory } from "./utils.js";
|
|
11
6
|
|
|
12
7
|
describe("Function Declaration", () => {
|
|
13
8
|
it("renders multiple decorators above def without blank lines", () => {
|
|
14
|
-
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
expect(
|
|
10
|
+
<TestOutput>
|
|
11
|
+
<py.FunctionDeclaration name="f" decorators={["@a", "@b", "@c"]}>
|
|
12
|
+
pass
|
|
13
|
+
</py.FunctionDeclaration>
|
|
14
|
+
</TestOutput>,
|
|
15
|
+
).toRenderTo(
|
|
16
|
+
`
|
|
20
17
|
@a
|
|
21
18
|
@b
|
|
22
19
|
@c
|
|
23
20
|
def f():
|
|
24
21
|
pass
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
`,
|
|
24
|
+
);
|
|
28
25
|
});
|
|
29
26
|
|
|
30
27
|
it("renders a function with no body as 'pass'", () => {
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
expect(
|
|
29
|
+
<TestOutput>
|
|
30
|
+
<py.FunctionDeclaration name="foo" />
|
|
31
|
+
</TestOutput>,
|
|
32
|
+
).toRenderTo(
|
|
33
|
+
`
|
|
33
34
|
def foo():
|
|
34
35
|
pass
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
`,
|
|
38
|
+
);
|
|
38
39
|
});
|
|
39
40
|
|
|
40
41
|
it("takes a namekey", () => {
|
|
41
|
-
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
expect(
|
|
43
|
+
<TestOutput>
|
|
44
|
+
<py.FunctionDeclaration name={namekey("foo-bar")} />
|
|
45
|
+
</TestOutput>,
|
|
46
|
+
).toRenderTo(
|
|
47
|
+
`
|
|
45
48
|
def foo_bar():
|
|
46
49
|
pass
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
`,
|
|
52
|
+
);
|
|
50
53
|
});
|
|
51
54
|
|
|
52
55
|
it("renders a function with no body as 'pass' with return type", () => {
|
|
53
|
-
|
|
54
|
-
<
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
expect(
|
|
57
|
+
<TestOutput>
|
|
58
|
+
<py.FunctionDeclaration name="foo" returnType="int" />
|
|
59
|
+
</TestOutput>,
|
|
60
|
+
).toRenderTo(
|
|
61
|
+
`
|
|
57
62
|
def foo() -> int:
|
|
58
63
|
pass
|
|
59
64
|
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
`,
|
|
66
|
+
);
|
|
62
67
|
});
|
|
63
68
|
|
|
64
69
|
it("renders a function that calls another function", () => {
|
|
65
70
|
const refkeyFoo = refkey();
|
|
66
|
-
|
|
67
|
-
<
|
|
68
|
-
<py.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
<py.FunctionDeclaration name="bar" returnType="int">
|
|
74
|
-
<py.VariableDeclaration
|
|
75
|
-
name="result"
|
|
76
|
-
type="int"
|
|
77
|
-
initializer={
|
|
78
|
-
<py.FunctionCallExpression target={refkeyFoo} args={[]} />
|
|
79
|
-
}
|
|
71
|
+
expect(
|
|
72
|
+
<TestOutput>
|
|
73
|
+
<py.StatementList>
|
|
74
|
+
<py.FunctionDeclaration
|
|
75
|
+
name="foo"
|
|
76
|
+
returnType="int"
|
|
77
|
+
refkey={refkeyFoo}
|
|
80
78
|
/>
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
79
|
+
<py.FunctionDeclaration name="bar" returnType="int">
|
|
80
|
+
<py.VariableDeclaration
|
|
81
|
+
name="result"
|
|
82
|
+
type="int"
|
|
83
|
+
initializer={
|
|
84
|
+
<py.FunctionCallExpression target={refkeyFoo} args={[]} />
|
|
85
|
+
}
|
|
86
|
+
/>
|
|
87
|
+
</py.FunctionDeclaration>
|
|
88
|
+
</py.StatementList>
|
|
89
|
+
</TestOutput>,
|
|
90
|
+
).toRenderTo(
|
|
91
|
+
`
|
|
85
92
|
def foo() -> int:
|
|
86
93
|
pass
|
|
87
94
|
|
|
88
95
|
def bar() -> int:
|
|
89
96
|
result: int = foo()
|
|
90
97
|
|
|
91
|
-
|
|
92
|
-
|
|
98
|
+
`,
|
|
99
|
+
);
|
|
93
100
|
});
|
|
94
101
|
|
|
95
102
|
it("renders a function with parameters", () => {
|
|
96
|
-
|
|
97
|
-
<
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
{
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
103
|
+
expect(
|
|
104
|
+
<TestOutput>
|
|
105
|
+
<py.FunctionDeclaration
|
|
106
|
+
name="baz"
|
|
107
|
+
parameters={[
|
|
108
|
+
{ name: "x", type: "int" },
|
|
109
|
+
{ name: "y", default: 0 },
|
|
110
|
+
{ name: "z", type: "int", default: 42 },
|
|
111
|
+
]}
|
|
112
|
+
args={true}
|
|
113
|
+
kwargs={true}
|
|
114
|
+
>
|
|
115
|
+
print(x, y)
|
|
116
|
+
</py.FunctionDeclaration>
|
|
117
|
+
</TestOutput>,
|
|
118
|
+
).toRenderTo(
|
|
119
|
+
`
|
|
112
120
|
def baz(x: int, y=0, z: int = 42, *args, **kwargs):
|
|
113
121
|
print(x, y)
|
|
114
122
|
|
|
115
|
-
|
|
116
123
|
`,
|
|
117
124
|
);
|
|
118
125
|
});
|
|
119
126
|
|
|
120
127
|
it("renders an __init__ function with no body as 'pass'", () => {
|
|
121
|
-
|
|
122
|
-
<
|
|
123
|
-
<py.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
expect(
|
|
129
|
+
<TestOutput>
|
|
130
|
+
<py.ClassDeclaration name="MyClass">
|
|
131
|
+
<py.DunderMethodDeclaration
|
|
132
|
+
name="__init__"
|
|
133
|
+
parameters={[{ name: "x" }]}
|
|
134
|
+
/>
|
|
135
|
+
</py.ClassDeclaration>
|
|
136
|
+
</TestOutput>,
|
|
137
|
+
).toRenderTo(
|
|
138
|
+
`
|
|
130
139
|
class MyClass:
|
|
131
140
|
def __init__(self, x):
|
|
132
141
|
pass
|
|
133
142
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
143
|
+
|
|
144
|
+
`,
|
|
145
|
+
);
|
|
137
146
|
});
|
|
138
147
|
|
|
139
148
|
it("can be an async function", () => {
|
|
140
|
-
expect(
|
|
149
|
+
expect(
|
|
150
|
+
<TestOutput>
|
|
151
|
+
<py.FunctionDeclaration async name="foo" />
|
|
152
|
+
</TestOutput>,
|
|
153
|
+
).toRenderTo(
|
|
154
|
+
`
|
|
141
155
|
async def foo():
|
|
142
156
|
pass
|
|
143
157
|
|
|
144
|
-
|
|
158
|
+
`,
|
|
159
|
+
);
|
|
145
160
|
});
|
|
146
161
|
|
|
147
162
|
it("can be an async function with returnType", () => {
|
|
148
163
|
expect(
|
|
149
|
-
|
|
150
|
-
<py.FunctionDeclaration async name="foo" returnType={"Foo"}
|
|
151
|
-
|
|
152
|
-
).
|
|
164
|
+
<TestOutput>
|
|
165
|
+
<py.FunctionDeclaration async name="foo" returnType={"Foo"} />
|
|
166
|
+
</TestOutput>,
|
|
167
|
+
).toRenderTo(
|
|
168
|
+
`
|
|
153
169
|
async def foo() -> Foo:
|
|
154
170
|
pass
|
|
155
171
|
|
|
156
|
-
|
|
172
|
+
`,
|
|
173
|
+
);
|
|
157
174
|
});
|
|
158
175
|
|
|
159
176
|
it("can be an async function with returnType element with Reference", () => {
|
|
160
177
|
expect(
|
|
161
|
-
|
|
178
|
+
<TestOutput>
|
|
162
179
|
<py.StatementList>
|
|
163
180
|
<py.ClassDeclaration name="Foo" refkey={refkey("Foo")} />
|
|
164
181
|
<py.FunctionDeclaration async name="foo" returnType={refkey("Foo")} />
|
|
165
|
-
</py.StatementList
|
|
166
|
-
|
|
167
|
-
).
|
|
182
|
+
</py.StatementList>
|
|
183
|
+
</TestOutput>,
|
|
184
|
+
).toRenderTo(
|
|
185
|
+
`
|
|
168
186
|
class Foo:
|
|
169
187
|
pass
|
|
170
188
|
|
|
171
189
|
async def foo() -> Foo:
|
|
172
190
|
pass
|
|
173
191
|
|
|
174
|
-
|
|
192
|
+
`,
|
|
193
|
+
);
|
|
175
194
|
});
|
|
176
195
|
|
|
177
196
|
it("can be an async function with returnType element with list of References", () => {
|
|
178
197
|
expect(
|
|
179
|
-
|
|
198
|
+
<TestOutput>
|
|
180
199
|
<py.StatementList>
|
|
181
200
|
<py.ClassDeclaration name="Foo" refkey={refkey("Foo")} />
|
|
182
201
|
<py.FunctionDeclaration
|
|
@@ -184,16 +203,18 @@ describe("Function Declaration", () => {
|
|
|
184
203
|
name="foo"
|
|
185
204
|
returnType={code`list[${refkey("Foo")}]`}
|
|
186
205
|
/>
|
|
187
|
-
</py.StatementList
|
|
188
|
-
|
|
189
|
-
).
|
|
206
|
+
</py.StatementList>
|
|
207
|
+
</TestOutput>,
|
|
208
|
+
).toRenderTo(
|
|
209
|
+
`
|
|
190
210
|
class Foo:
|
|
191
211
|
pass
|
|
192
212
|
|
|
193
213
|
async def foo() -> list[Foo]:
|
|
194
214
|
pass
|
|
195
215
|
|
|
196
|
-
|
|
216
|
+
`,
|
|
217
|
+
);
|
|
197
218
|
});
|
|
198
219
|
|
|
199
220
|
it("can be an async dunder method", () => {
|
|
@@ -213,13 +234,15 @@ describe("Function Declaration", () => {
|
|
|
213
234
|
</py.StatementList>
|
|
214
235
|
);
|
|
215
236
|
|
|
216
|
-
expect(
|
|
237
|
+
expect(<TestOutput>{decl}</TestOutput>).toRenderTo(
|
|
238
|
+
`
|
|
217
239
|
class MyClass:
|
|
218
240
|
async def __aenter__(self) -> MyClass:
|
|
219
241
|
return self
|
|
220
242
|
|
|
221
243
|
|
|
222
|
-
|
|
244
|
+
`,
|
|
245
|
+
);
|
|
223
246
|
});
|
|
224
247
|
|
|
225
248
|
it("can be an async constructor", () => {
|
|
@@ -235,13 +258,15 @@ describe("Function Declaration", () => {
|
|
|
235
258
|
</py.StatementList>
|
|
236
259
|
);
|
|
237
260
|
|
|
238
|
-
expect(
|
|
261
|
+
expect(<TestOutput>{decl}</TestOutput>).toRenderTo(
|
|
262
|
+
`
|
|
239
263
|
class MyClass:
|
|
240
264
|
async def __new__(cls) -> MyClass:
|
|
241
265
|
return super().__new__(cls)
|
|
242
266
|
|
|
243
267
|
|
|
244
|
-
|
|
268
|
+
`,
|
|
269
|
+
);
|
|
245
270
|
});
|
|
246
271
|
|
|
247
272
|
it("supports parameters", () => {
|
|
@@ -254,12 +279,15 @@ describe("Function Declaration", () => {
|
|
|
254
279
|
</py.FunctionDeclaration>
|
|
255
280
|
);
|
|
256
281
|
|
|
257
|
-
expect(
|
|
282
|
+
expect(<TestOutput>{decl}</TestOutput>).toRenderTo(
|
|
283
|
+
`
|
|
258
284
|
def foo(a, b):
|
|
259
285
|
return a + b
|
|
260
286
|
|
|
261
|
-
|
|
287
|
+
`,
|
|
288
|
+
);
|
|
262
289
|
});
|
|
290
|
+
|
|
263
291
|
it("supports type parameters", () => {
|
|
264
292
|
const decl = (
|
|
265
293
|
<py.FunctionDeclaration
|
|
@@ -271,12 +299,15 @@ describe("Function Declaration", () => {
|
|
|
271
299
|
</py.FunctionDeclaration>
|
|
272
300
|
);
|
|
273
301
|
|
|
274
|
-
expect(
|
|
302
|
+
expect(<TestOutput>{decl}</TestOutput>).toRenderTo(
|
|
303
|
+
`
|
|
275
304
|
def foo[T, U](a, b):
|
|
276
305
|
return a + b
|
|
277
306
|
|
|
278
|
-
|
|
307
|
+
`,
|
|
308
|
+
);
|
|
279
309
|
});
|
|
310
|
+
|
|
280
311
|
it("renders abstract methods", () => {
|
|
281
312
|
const parameters = [{ name: "x", type: "int" }];
|
|
282
313
|
const decl = (
|
|
@@ -303,7 +334,8 @@ describe("Function Declaration", () => {
|
|
|
303
334
|
</py.StatementList>
|
|
304
335
|
);
|
|
305
336
|
|
|
306
|
-
expect(
|
|
337
|
+
expect(<TestOutput externals={[abcModule]}>{decl}</TestOutput>).toRenderTo(
|
|
338
|
+
`
|
|
307
339
|
from abc import abstractmethod
|
|
308
340
|
|
|
309
341
|
|
|
@@ -323,8 +355,10 @@ describe("Function Declaration", () => {
|
|
|
323
355
|
pass
|
|
324
356
|
|
|
325
357
|
|
|
326
|
-
|
|
358
|
+
`,
|
|
359
|
+
);
|
|
327
360
|
});
|
|
361
|
+
|
|
328
362
|
it("renders dunder methods with parameters", () => {
|
|
329
363
|
const parameters = [{ name: "x", type: "int" }];
|
|
330
364
|
const decl = (
|
|
@@ -340,7 +374,8 @@ describe("Function Declaration", () => {
|
|
|
340
374
|
</py.ClassDeclaration>
|
|
341
375
|
);
|
|
342
376
|
|
|
343
|
-
expect(
|
|
377
|
+
expect(<TestOutput>{decl}</TestOutput>).toRenderTo(
|
|
378
|
+
`
|
|
344
379
|
class MyClass:
|
|
345
380
|
def __init__(self, x: int):
|
|
346
381
|
self.attribute = "value"
|
|
@@ -349,7 +384,8 @@ describe("Function Declaration", () => {
|
|
|
349
384
|
return "MyClass"
|
|
350
385
|
|
|
351
386
|
|
|
352
|
-
|
|
387
|
+
`,
|
|
388
|
+
);
|
|
353
389
|
});
|
|
354
390
|
|
|
355
391
|
it("renders dunder methods __new__", () => {
|
|
@@ -363,13 +399,15 @@ describe("Function Declaration", () => {
|
|
|
363
399
|
</py.ClassDeclaration>
|
|
364
400
|
);
|
|
365
401
|
|
|
366
|
-
expect(
|
|
402
|
+
expect(<TestOutput>{decl}</TestOutput>).toRenderTo(
|
|
403
|
+
`
|
|
367
404
|
class MyClass:
|
|
368
405
|
def __new__(cls, *args, **kwargs):
|
|
369
406
|
pass
|
|
370
407
|
|
|
371
408
|
|
|
372
|
-
|
|
409
|
+
`,
|
|
410
|
+
);
|
|
373
411
|
});
|
|
374
412
|
|
|
375
413
|
it("renders nested functions", () => {
|
|
@@ -411,7 +449,8 @@ describe("Function Declaration", () => {
|
|
|
411
449
|
</py.FunctionDeclaration>
|
|
412
450
|
);
|
|
413
451
|
|
|
414
|
-
expect(
|
|
452
|
+
expect(<TestOutput>{decl}</TestOutput>).toRenderTo(
|
|
453
|
+
`
|
|
415
454
|
def foo(x: int):
|
|
416
455
|
def bar(y: int):
|
|
417
456
|
def foobar(z: int):
|
|
@@ -419,39 +458,41 @@ describe("Function Declaration", () => {
|
|
|
419
458
|
return foobar(2)
|
|
420
459
|
return bar(3)
|
|
421
460
|
|
|
422
|
-
|
|
461
|
+
`,
|
|
462
|
+
);
|
|
423
463
|
});
|
|
424
|
-
it("renders complex typing structure", () => {
|
|
425
|
-
const res = toSourceTextMultiple([
|
|
426
|
-
<py.SourceFile path="mod1.py">
|
|
427
|
-
<py.ClassDeclaration name="Foo" refkey={refkey("Foo")} />
|
|
428
|
-
</py.SourceFile>,
|
|
429
|
-
<py.SourceFile path="mod2.py">
|
|
430
|
-
<py.ClassDeclaration name="A" refkey={refkey("A")} />
|
|
431
|
-
<py.ClassDeclaration name="B" refkey={refkey("B")} />
|
|
432
|
-
</py.SourceFile>,
|
|
433
|
-
<py.SourceFile path="usage.py">
|
|
434
|
-
<py.FunctionDeclaration
|
|
435
|
-
async
|
|
436
|
-
name="foo"
|
|
437
|
-
parameters={[
|
|
438
|
-
{
|
|
439
|
-
name: "x",
|
|
440
|
-
type: refkey("A"),
|
|
441
|
-
},
|
|
442
|
-
{
|
|
443
|
-
name: "y",
|
|
444
|
-
type: refkey("B"),
|
|
445
|
-
},
|
|
446
|
-
]}
|
|
447
|
-
args={true}
|
|
448
|
-
kwargs={true}
|
|
449
|
-
returnType={refkey("Foo")}
|
|
450
|
-
/>
|
|
451
|
-
</py.SourceFile>,
|
|
452
|
-
]);
|
|
453
464
|
|
|
454
|
-
|
|
465
|
+
it("renders complex typing structure", () => {
|
|
466
|
+
expect(
|
|
467
|
+
<TestOutputDirectory>
|
|
468
|
+
<py.SourceFile path="mod1.py">
|
|
469
|
+
<py.ClassDeclaration name="Foo" refkey={refkey("Foo")} />
|
|
470
|
+
</py.SourceFile>
|
|
471
|
+
<py.SourceFile path="mod2.py">
|
|
472
|
+
<py.ClassDeclaration name="A" refkey={refkey("A")} />
|
|
473
|
+
<py.ClassDeclaration name="B" refkey={refkey("B")} />
|
|
474
|
+
</py.SourceFile>
|
|
475
|
+
<py.SourceFile path="usage.py">
|
|
476
|
+
<py.FunctionDeclaration
|
|
477
|
+
async
|
|
478
|
+
name="foo"
|
|
479
|
+
parameters={[
|
|
480
|
+
{
|
|
481
|
+
name: "x",
|
|
482
|
+
type: refkey("A"),
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
name: "y",
|
|
486
|
+
type: refkey("B"),
|
|
487
|
+
},
|
|
488
|
+
]}
|
|
489
|
+
args={true}
|
|
490
|
+
kwargs={true}
|
|
491
|
+
returnType={refkey("Foo")}
|
|
492
|
+
/>
|
|
493
|
+
</py.SourceFile>
|
|
494
|
+
</TestOutputDirectory>,
|
|
495
|
+
).toRenderTo({
|
|
455
496
|
"mod1.py": `
|
|
456
497
|
class Foo:
|
|
457
498
|
pass
|
|
@@ -484,13 +525,21 @@ describe("Function Declaration", () => {
|
|
|
484
525
|
|
|
485
526
|
it("throws error when PropertyDeclaration is used outside of a class", () => {
|
|
486
527
|
expect(() => {
|
|
487
|
-
|
|
528
|
+
render(
|
|
529
|
+
<TestOutput>
|
|
530
|
+
<py.PropertyDeclaration name="x" />
|
|
531
|
+
</TestOutput>,
|
|
532
|
+
);
|
|
488
533
|
}).toThrow('Method "x" must be declared inside a class (member scope)');
|
|
489
534
|
});
|
|
490
535
|
|
|
491
536
|
it("throws error when MethodDeclaration is used outside of a class", () => {
|
|
492
537
|
expect(() => {
|
|
493
|
-
|
|
538
|
+
render(
|
|
539
|
+
<TestOutput>
|
|
540
|
+
<py.MethodDeclaration name="my_method" />
|
|
541
|
+
</TestOutput>,
|
|
542
|
+
);
|
|
494
543
|
}).toThrow(
|
|
495
544
|
'Method "my_method" must be declared inside a class (member scope)',
|
|
496
545
|
);
|
|
@@ -498,7 +547,11 @@ describe("Function Declaration", () => {
|
|
|
498
547
|
|
|
499
548
|
it("throws error when ClassMethodDeclaration is used outside of a class", () => {
|
|
500
549
|
expect(() => {
|
|
501
|
-
|
|
550
|
+
render(
|
|
551
|
+
<TestOutput>
|
|
552
|
+
<py.ClassMethodDeclaration name="my_class_method" />
|
|
553
|
+
</TestOutput>,
|
|
554
|
+
);
|
|
502
555
|
}).toThrow(
|
|
503
556
|
'Method "my_class_method" must be declared inside a class (member scope)',
|
|
504
557
|
);
|
|
@@ -506,7 +559,11 @@ describe("Function Declaration", () => {
|
|
|
506
559
|
|
|
507
560
|
it("throws error when StaticMethodDeclaration is used outside of a class", () => {
|
|
508
561
|
expect(() => {
|
|
509
|
-
|
|
562
|
+
render(
|
|
563
|
+
<TestOutput>
|
|
564
|
+
<py.StaticMethodDeclaration name="my_static_method" />
|
|
565
|
+
</TestOutput>,
|
|
566
|
+
);
|
|
510
567
|
}).toThrow(
|
|
511
568
|
'Method "my_static_method" must be declared inside a class (member scope)',
|
|
512
569
|
);
|
|
@@ -514,7 +571,11 @@ describe("Function Declaration", () => {
|
|
|
514
571
|
|
|
515
572
|
it("throws error when DunderMethodDeclaration is used outside of a class", () => {
|
|
516
573
|
expect(() => {
|
|
517
|
-
|
|
574
|
+
render(
|
|
575
|
+
<TestOutput>
|
|
576
|
+
<py.DunderMethodDeclaration name="__init__" />
|
|
577
|
+
</TestOutput>,
|
|
578
|
+
);
|
|
518
579
|
}).toThrow(
|
|
519
580
|
'Method "__init__" must be declared inside a class (member scope)',
|
|
520
581
|
);
|