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