@alloy-js/python 0.5.0-dev.1 → 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.
Files changed (166) hide show
  1. package/dist/dev/src/components/SourceFile.js +44 -32
  2. package/dist/dev/src/components/SourceFile.js.map +1 -1
  3. package/dist/dev/test/callsignatures.test.js +471 -297
  4. package/dist/dev/test/callsignatures.test.js.map +1 -1
  5. package/dist/dev/test/class-method-declaration.test.js +21 -10
  6. package/dist/dev/test/class-method-declaration.test.js.map +1 -1
  7. package/dist/dev/test/classdeclarations.test.js +459 -393
  8. package/dist/dev/test/classdeclarations.test.js.map +1 -1
  9. package/dist/dev/test/classinstantiations.test.js +201 -168
  10. package/dist/dev/test/classinstantiations.test.js.map +1 -1
  11. package/dist/dev/test/constructordeclaration.test.js +22 -11
  12. package/dist/dev/test/constructordeclaration.test.js.map +1 -1
  13. package/dist/dev/test/dataclassdeclarations.test.js +322 -368
  14. package/dist/dev/test/dataclassdeclarations.test.js.map +1 -1
  15. package/dist/dev/test/decoratorlist.test.js +96 -49
  16. package/dist/dev/test/decoratorlist.test.js.map +1 -1
  17. package/dist/dev/test/dundermethoddeclaration.test.js +22 -11
  18. package/dist/dev/test/dundermethoddeclaration.test.js.map +1 -1
  19. package/dist/dev/test/enums.test.js +218 -184
  20. package/dist/dev/test/enums.test.js.map +1 -1
  21. package/dist/dev/test/externals.test.js +57 -45
  22. package/dist/dev/test/externals.test.js.map +1 -1
  23. package/dist/dev/test/factories.test.js +124 -50
  24. package/dist/dev/test/factories.test.js.map +1 -1
  25. package/dist/dev/test/functioncallexpressions.test.js +199 -164
  26. package/dist/dev/test/functioncallexpressions.test.js.map +1 -1
  27. package/dist/dev/test/functiondeclaration.test.js +439 -272
  28. package/dist/dev/test/functiondeclaration.test.js.map +1 -1
  29. package/dist/dev/test/imports.test.js +273 -221
  30. package/dist/dev/test/imports.test.js.map +1 -1
  31. package/dist/dev/test/memberexpressions.test.js +1237 -972
  32. package/dist/dev/test/memberexpressions.test.js.map +1 -1
  33. package/dist/dev/test/methoddeclaration.test.js +142 -78
  34. package/dist/dev/test/methoddeclaration.test.js.map +1 -1
  35. package/dist/dev/test/namepolicies.test.js +130 -94
  36. package/dist/dev/test/namepolicies.test.js.map +1 -1
  37. package/dist/dev/test/propertydeclaration.test.js +88 -59
  38. package/dist/dev/test/propertydeclaration.test.js.map +1 -1
  39. package/dist/dev/test/pydanticclassdeclarations.test.js +299 -347
  40. package/dist/dev/test/pydanticclassdeclarations.test.js.map +1 -1
  41. package/dist/dev/test/pydocs.test.js +888 -715
  42. package/dist/dev/test/pydocs.test.js.map +1 -1
  43. package/dist/dev/test/references.test.js +42 -35
  44. package/dist/dev/test/references.test.js.map +1 -1
  45. package/dist/dev/test/sourcefiles.test.js +1109 -841
  46. package/dist/dev/test/sourcefiles.test.js.map +1 -1
  47. package/dist/dev/test/staticmethoddeclaration.test.js +21 -10
  48. package/dist/dev/test/staticmethoddeclaration.test.js.map +1 -1
  49. package/dist/dev/test/type-checking-imports.test.js +408 -359
  50. package/dist/dev/test/type-checking-imports.test.js.map +1 -1
  51. package/dist/dev/test/typereference.test.js +55 -40
  52. package/dist/dev/test/typereference.test.js.map +1 -1
  53. package/dist/dev/test/uniontypeexpression.test.js +222 -146
  54. package/dist/dev/test/uniontypeexpression.test.js.map +1 -1
  55. package/dist/dev/test/utils.js +39 -77
  56. package/dist/dev/test/utils.js.map +1 -1
  57. package/dist/dev/test/values.test.js +237 -101
  58. package/dist/dev/test/values.test.js.map +1 -1
  59. package/dist/dev/test/variables.test.js +321 -203
  60. package/dist/dev/test/variables.test.js.map +1 -1
  61. package/dist/dev/test/vitest.setup.js +2 -0
  62. package/dist/dev/test/vitest.setup.js.map +1 -0
  63. package/dist/src/components/SourceFile.d.ts +2 -2
  64. package/dist/src/components/SourceFile.d.ts.map +1 -1
  65. package/dist/src/components/SourceFile.js +12 -0
  66. package/dist/src/components/SourceFile.js.map +1 -1
  67. package/dist/test/callsignatures.test.js +346 -272
  68. package/dist/test/callsignatures.test.js.map +1 -1
  69. package/dist/test/class-method-declaration.test.js +7 -4
  70. package/dist/test/class-method-declaration.test.js.map +1 -1
  71. package/dist/test/classdeclarations.test.js +302 -288
  72. package/dist/test/classdeclarations.test.js.map +1 -1
  73. package/dist/test/classinstantiations.test.js +112 -103
  74. package/dist/test/classinstantiations.test.js.map +1 -1
  75. package/dist/test/constructordeclaration.test.js +7 -4
  76. package/dist/test/constructordeclaration.test.js.map +1 -1
  77. package/dist/test/dataclassdeclarations.test.js +134 -184
  78. package/dist/test/dataclassdeclarations.test.js.map +1 -1
  79. package/dist/test/decoratorlist.test.js +59 -36
  80. package/dist/test/decoratorlist.test.js.map +1 -1
  81. package/dist/test/dundermethoddeclaration.test.js +7 -4
  82. package/dist/test/dundermethoddeclaration.test.js.map +1 -1
  83. package/dist/test/enums.test.js +161 -159
  84. package/dist/test/enums.test.js.map +1 -1
  85. package/dist/test/externals.test.js +24 -24
  86. package/dist/test/externals.test.js.map +1 -1
  87. package/dist/test/factories.test.js +75 -33
  88. package/dist/test/factories.test.js.map +1 -1
  89. package/dist/test/functioncallexpressions.test.js +117 -106
  90. package/dist/test/functioncallexpressions.test.js.map +1 -1
  91. package/dist/test/functiondeclaration.test.js +247 -180
  92. package/dist/test/functiondeclaration.test.js.map +1 -1
  93. package/dist/test/imports.test.js +171 -143
  94. package/dist/test/imports.test.js.map +1 -1
  95. package/dist/test/memberexpressions.test.js +582 -453
  96. package/dist/test/memberexpressions.test.js.map +1 -1
  97. package/dist/test/methoddeclaration.test.js +66 -46
  98. package/dist/test/methoddeclaration.test.js.map +1 -1
  99. package/dist/test/namepolicies.test.js +90 -78
  100. package/dist/test/namepolicies.test.js.map +1 -1
  101. package/dist/test/propertydeclaration.test.js +25 -20
  102. package/dist/test/propertydeclaration.test.js.map +1 -1
  103. package/dist/test/pydanticclassdeclarations.test.js +134 -190
  104. package/dist/test/pydanticclassdeclarations.test.js.map +1 -1
  105. package/dist/test/pydocs.test.js +573 -532
  106. package/dist/test/pydocs.test.js.map +1 -1
  107. package/dist/test/references.test.js +31 -28
  108. package/dist/test/references.test.js.map +1 -1
  109. package/dist/test/sourcefiles.test.js +700 -580
  110. package/dist/test/sourcefiles.test.js.map +1 -1
  111. package/dist/test/staticmethoddeclaration.test.js +7 -4
  112. package/dist/test/staticmethoddeclaration.test.js.map +1 -1
  113. package/dist/test/type-checking-imports.test.js +297 -284
  114. package/dist/test/type-checking-imports.test.js.map +1 -1
  115. package/dist/test/typereference.test.js +29 -22
  116. package/dist/test/typereference.test.js.map +1 -1
  117. package/dist/test/uniontypeexpression.test.js +124 -88
  118. package/dist/test/uniontypeexpression.test.js.map +1 -1
  119. package/dist/test/utils.d.ts +10 -17
  120. package/dist/test/utils.d.ts.map +1 -1
  121. package/dist/test/utils.js +32 -74
  122. package/dist/test/utils.js.map +1 -1
  123. package/dist/test/values.test.js +135 -67
  124. package/dist/test/values.test.js.map +1 -1
  125. package/dist/test/variables.test.js +201 -151
  126. package/dist/test/variables.test.js.map +1 -1
  127. package/dist/test/vitest.setup.d.ts +2 -0
  128. package/dist/test/vitest.setup.d.ts.map +1 -0
  129. package/dist/test/vitest.setup.js +2 -0
  130. package/dist/test/vitest.setup.js.map +1 -0
  131. package/dist/tsconfig.tsbuildinfo +1 -1
  132. package/docs/api/components/SourceFile.md +20 -8
  133. package/package.json +2 -2
  134. package/src/components/SourceFile.tsx +6 -1
  135. package/temp/api.json +16 -2
  136. package/test/callsignatures.test.tsx +309 -283
  137. package/test/class-method-declaration.test.tsx +3 -4
  138. package/test/classdeclarations.test.tsx +263 -248
  139. package/test/classinstantiations.test.tsx +115 -109
  140. package/test/constructordeclaration.test.tsx +9 -6
  141. package/test/dataclassdeclarations.test.tsx +243 -361
  142. package/test/decoratorlist.test.tsx +78 -59
  143. package/test/dundermethoddeclaration.test.tsx +3 -4
  144. package/test/enums.test.tsx +65 -81
  145. package/test/externals.test.tsx +25 -25
  146. package/test/factories.test.tsx +64 -22
  147. package/test/functioncallexpressions.test.tsx +123 -109
  148. package/test/functiondeclaration.test.tsx +209 -148
  149. package/test/imports.test.tsx +119 -91
  150. package/test/memberexpressions.test.tsx +265 -207
  151. package/test/methoddeclaration.test.tsx +84 -63
  152. package/test/namepolicies.test.tsx +69 -69
  153. package/test/propertydeclaration.test.tsx +7 -8
  154. package/test/pydanticclassdeclarations.test.tsx +355 -487
  155. package/test/pydocs.test.tsx +531 -579
  156. package/test/references.test.tsx +24 -23
  157. package/test/sourcefiles.test.tsx +527 -492
  158. package/test/staticmethoddeclaration.test.tsx +3 -4
  159. package/test/type-checking-imports.test.tsx +206 -218
  160. package/test/typereference.test.tsx +15 -12
  161. package/test/uniontypeexpression.test.tsx +74 -61
  162. package/test/utils.tsx +26 -110
  163. package/test/values.test.tsx +82 -32
  164. package/test/variables.test.tsx +162 -142
  165. package/test/vitest.setup.ts +1 -0
  166. package/vitest.config.ts +3 -0
@@ -1,127 +1,134 @@
1
- import { d } from "@alloy-js/core/testing";
2
1
  import { describe, expect, it } from "vitest";
3
2
  import * as py from "../src/index.js";
4
- import { toSourceText } from "./utils.jsx";
3
+ import { TestOutput } from "./utils.jsx";
5
4
 
6
5
  describe("Call Signature Parameters", () => {
7
6
  it("renders simple function parameters", () => {
8
- const result = toSourceText([
9
- <py.CallSignatureParameters parameters={["a", "b"]} />,
10
- ]);
11
- expect(result).toRenderTo(d`
7
+ expect(
8
+ <TestOutput>
9
+ <py.CallSignatureParameters parameters={["a", "b"]} />
10
+ </TestOutput>,
11
+ ).toRenderTo(`
12
12
  a, b
13
13
  `);
14
14
  });
15
15
  it("renders ParameterDescriptor parameters", () => {
16
- const result = toSourceText([
17
- <py.CallSignatureParameters
18
- parameters={[{ name: "a" }, { name: "b" }]}
19
- />,
20
- ]);
21
- expect(result).toRenderTo(d`
16
+ expect(
17
+ <TestOutput>
18
+ <py.CallSignatureParameters
19
+ parameters={[{ name: "a" }, { name: "b" }]}
20
+ />
21
+ </TestOutput>,
22
+ ).toRenderTo(`
22
23
  a, b
23
24
  `);
24
25
  });
25
26
  it("renders ParameterDescriptor parameters with types", () => {
26
- const result = toSourceText([
27
- <py.CallSignatureParameters
28
- parameters={[
29
- {
30
- name: "a",
31
- type: "int",
32
- },
33
- {
34
- name: "b",
35
- type: "str",
36
- },
37
- ]}
38
- />,
39
- ]);
40
- expect(result).toRenderTo(d`
27
+ expect(
28
+ <TestOutput>
29
+ <py.CallSignatureParameters
30
+ parameters={[
31
+ {
32
+ name: "a",
33
+ type: "int",
34
+ },
35
+ {
36
+ name: "b",
37
+ type: "str",
38
+ },
39
+ ]}
40
+ />
41
+ </TestOutput>,
42
+ ).toRenderTo(`
41
43
  a: int, b: str
42
44
  `);
43
45
  });
44
46
  it("renders optional ParameterDescriptor parameters with types", () => {
45
- const result = toSourceText([
46
- <py.CallSignatureParameters
47
- parameters={[
48
- {
49
- name: "a",
50
- type: "int",
51
- default: null,
52
- },
53
- {
54
- name: "b",
55
- type: "str",
56
- default: null,
57
- },
58
- ]}
59
- />,
60
- ]);
61
- expect(result).toRenderTo(d`
47
+ expect(
48
+ <TestOutput>
49
+ <py.CallSignatureParameters
50
+ parameters={[
51
+ {
52
+ name: "a",
53
+ type: "int",
54
+ default: null,
55
+ },
56
+ {
57
+ name: "b",
58
+ type: "str",
59
+ default: null,
60
+ },
61
+ ]}
62
+ />
63
+ </TestOutput>,
64
+ ).toRenderTo(`
62
65
  a: int = None, b: str = None
63
66
  `);
64
67
  });
65
68
  it("renders optional ParameterDescriptor parameters default", () => {
66
- const result = toSourceText([
67
- <py.CallSignatureParameters
68
- parameters={[
69
- { name: "a", default: 5 },
70
- { name: "b", default: "hello" },
71
- ]}
72
- />,
73
- ]);
74
- expect(result).toRenderTo(d`
69
+ expect(
70
+ <TestOutput>
71
+ <py.CallSignatureParameters
72
+ parameters={[
73
+ { name: "a", default: 5 },
74
+ { name: "b", default: "hello" },
75
+ ]}
76
+ />
77
+ </TestOutput>,
78
+ ).toRenderTo(`
75
79
  a=5, b="hello"
76
80
  `);
77
81
  });
78
82
  it("renders optional ParameterDescriptor parameters with types and default", () => {
79
- const result = toSourceText([
80
- <py.CallSignatureParameters
81
- parameters={[
82
- {
83
- name: "a",
84
- type: "int",
85
- default: 5,
86
- },
87
- {
88
- name: "b",
89
- type: "str",
90
- default: "hello",
91
- },
92
- ]}
93
- />,
94
- ]);
95
- expect(result).toRenderTo(d`
83
+ expect(
84
+ <TestOutput>
85
+ <py.CallSignatureParameters
86
+ parameters={[
87
+ {
88
+ name: "a",
89
+ type: "int",
90
+ default: 5,
91
+ },
92
+ {
93
+ name: "b",
94
+ type: "str",
95
+ default: "hello",
96
+ },
97
+ ]}
98
+ />
99
+ </TestOutput>,
100
+ ).toRenderTo(`
96
101
  a: int = 5, b: str = "hello"
97
102
  `);
98
103
  });
99
104
  it("renders keyword-only parameters with * marker", () => {
100
- const result = toSourceText([
101
- <py.CallSignatureParameters
102
- parameters={[
103
- { name: "a", type: "str" },
104
- "*",
105
- { name: "b", type: "int", default: 10 },
106
- { name: "c", type: "bool", default: true },
107
- ]}
108
- />,
109
- ]);
110
- expect(result).toRenderTo(d`
105
+ expect(
106
+ <TestOutput>
107
+ <py.CallSignatureParameters
108
+ parameters={[
109
+ { name: "a", type: "str" },
110
+ "*",
111
+ { name: "b", type: "int", default: 10 },
112
+ { name: "c", type: "bool", default: true },
113
+ ]}
114
+ />
115
+ </TestOutput>,
116
+ ).toRenderTo(`
111
117
  a: str, *, b: int = 10, c: bool = True
112
118
  `);
113
119
  });
114
120
  it("renders only keyword-only parameters with * marker at start", () => {
115
- const result = toSourceText([
116
- <py.CallSignatureParameters
117
- parameters={[
118
- "*",
119
- { name: "a", type: "str", default: "hello" },
120
- { name: "b", type: "int", default: 42 },
121
- ]}
122
- />,
123
- ]);
124
- expect(result).toRenderTo(d`
121
+ expect(
122
+ <TestOutput>
123
+ <py.CallSignatureParameters
124
+ parameters={[
125
+ "*",
126
+ { name: "a", type: "str", default: "hello" },
127
+ { name: "b", type: "int", default: 42 },
128
+ ]}
129
+ />
130
+ </TestOutput>,
131
+ ).toRenderTo(`
125
132
  *, a: str = "hello", b: int = 42
126
133
  `);
127
134
  });
@@ -129,58 +136,66 @@ describe("Call Signature Parameters", () => {
129
136
 
130
137
  describe("Call Signature", () => {
131
138
  it("renders a call signature with strings", () => {
132
- const result = toSourceText([<py.CallSignature parameters={["a", "b"]} />]);
133
- expect(result).toRenderTo(d`
139
+ expect(
140
+ <TestOutput>
141
+ <py.CallSignature parameters={["a", "b"]} />
142
+ </TestOutput>,
143
+ ).toRenderTo(`
134
144
  (a, b)
135
145
  `);
136
146
  });
137
147
  it("renders a call signature with parameter descriptors", () => {
138
- const result = toSourceText([
139
- <py.CallSignature parameters={[{ name: "a" }, { name: "b" }]} />,
140
- ]);
141
- expect(result).toRenderTo(d`
148
+ expect(
149
+ <TestOutput>
150
+ <py.CallSignature parameters={[{ name: "a" }, { name: "b" }]} />
151
+ </TestOutput>,
152
+ ).toRenderTo(`
142
153
  (a, b)
143
154
  `);
144
155
  });
145
156
  it("renders a call signature with mixed strings and parameter descriptors", () => {
146
- const result = toSourceText([
147
- <py.CallSignature parameters={["a", { name: "b" }]} />,
148
- ]);
149
- expect(result).toRenderTo(d`
157
+ expect(
158
+ <TestOutput>
159
+ <py.CallSignature parameters={["a", { name: "b" }]} />
160
+ </TestOutput>,
161
+ ).toRenderTo(`
150
162
  (a, b)
151
163
  `);
152
164
  });
153
165
  it("renders a simple call signature with args and kwargs", () => {
154
- const result = toSourceText([
155
- <py.CallSignature
156
- parameters={[{ name: "a" }, { name: "b" }]}
157
- args
158
- kwargs
159
- />,
160
- ]);
161
- expect(result).toRenderTo(d`
166
+ expect(
167
+ <TestOutput>
168
+ <py.CallSignature
169
+ parameters={[{ name: "a" }, { name: "b" }]}
170
+ args
171
+ kwargs
172
+ />
173
+ </TestOutput>,
174
+ ).toRenderTo(`
162
175
  (a, b, *args, **kwargs)
163
176
  `);
164
177
  });
165
178
  it("renders a simple call signature with type parameters", () => {
166
- const result = toSourceText([
167
- <py.CallSignature
168
- parameters={[{ name: "a" }, { name: "b" }]}
169
- typeParameters={["T", "U"]}
170
- />,
171
- ]);
172
- expect(result).toRenderTo(d`
179
+ expect(
180
+ <TestOutput>
181
+ <py.CallSignature
182
+ parameters={[{ name: "a" }, { name: "b" }]}
183
+ typeParameters={["T", "U"]}
184
+ />
185
+ </TestOutput>,
186
+ ).toRenderTo(`
173
187
  [T, U](a, b)
174
188
  `);
175
189
  });
176
190
  it("renders a simple call signature with return type", () => {
177
- const result = toSourceText([
178
- <py.CallSignature
179
- parameters={[{ name: "a" }, { name: "b" }]}
180
- returnType="int"
181
- />,
182
- ]);
183
- expect(result).toRenderTo(d`
191
+ expect(
192
+ <TestOutput>
193
+ <py.CallSignature
194
+ parameters={[{ name: "a" }, { name: "b" }]}
195
+ returnType="int"
196
+ />
197
+ </TestOutput>,
198
+ ).toRenderTo(`
184
199
  (a, b) -> int
185
200
  `);
186
201
  });
@@ -188,206 +203,217 @@ describe("Call Signature", () => {
188
203
 
189
204
  describe("Call Signature - Parameter Descriptors", () => {
190
205
  it("renders a call signature with parameter descriptors", () => {
191
- const result = toSourceText([
192
- <py.CallSignature
193
- parameters={[
194
- {
195
- name: "a",
196
- type: "int",
197
- },
198
- {
199
- name: "b",
200
- type: "str",
201
- },
202
- ]}
203
- />,
204
- ]);
205
- expect(result).toRenderTo(d`
206
+ expect(
207
+ <TestOutput>
208
+ <py.CallSignature
209
+ parameters={[
210
+ {
211
+ name: "a",
212
+ type: "int",
213
+ },
214
+ {
215
+ name: "b",
216
+ type: "str",
217
+ },
218
+ ]}
219
+ />
220
+ </TestOutput>,
221
+ ).toRenderTo(`
206
222
  (a: int, b: str)
207
223
  `);
208
224
  });
209
225
  it("renders a call signature with parameter descriptors, args and kwargs", () => {
210
- const result = toSourceText([
211
- <py.CallSignature
212
- parameters={[
213
- {
214
- name: "a",
215
- type: "int",
216
- },
217
- {
218
- name: "b",
219
- type: "str",
220
- },
221
- ]}
222
- args
223
- kwargs
224
- />,
225
- ]);
226
- expect(result).toRenderTo(d`
226
+ expect(
227
+ <TestOutput>
228
+ <py.CallSignature
229
+ parameters={[
230
+ {
231
+ name: "a",
232
+ type: "int",
233
+ },
234
+ {
235
+ name: "b",
236
+ type: "str",
237
+ },
238
+ ]}
239
+ args
240
+ kwargs
241
+ />
242
+ </TestOutput>,
243
+ ).toRenderTo(`
227
244
  (a: int, b: str, *args, **kwargs)
228
245
  `);
229
246
  });
230
247
  it("renders a call signature with parameter descriptors and return type", () => {
231
- const result = toSourceText([
232
- <py.CallSignature
233
- parameters={[
234
- {
235
- name: "a",
236
- type: "int",
237
- },
238
- {
239
- name: "b",
240
- type: "str",
241
- },
242
- ]}
243
- returnType="int"
244
- />,
245
- ]);
246
- expect(result).toRenderTo(d`
248
+ expect(
249
+ <TestOutput>
250
+ <py.CallSignature
251
+ parameters={[
252
+ {
253
+ name: "a",
254
+ type: "int",
255
+ },
256
+ {
257
+ name: "b",
258
+ type: "str",
259
+ },
260
+ ]}
261
+ returnType="int"
262
+ />
263
+ </TestOutput>,
264
+ ).toRenderTo(`
247
265
  (a: int, b: str) -> int
248
266
  `);
249
267
  });
250
268
  it("renders a call signature with parameter descriptors for a class function", () => {
251
- const result = toSourceText([
252
- <py.CallSignature
253
- parameters={[
254
- {
255
- name: "a",
256
- type: "int",
257
- },
258
- {
259
- name: "b",
260
- type: "str",
261
- },
262
- ]}
263
- />,
264
- ]);
265
- expect(result).toRenderTo(d`
269
+ expect(
270
+ <TestOutput>
271
+ <py.CallSignature
272
+ parameters={[
273
+ {
274
+ name: "a",
275
+ type: "int",
276
+ },
277
+ {
278
+ name: "b",
279
+ type: "str",
280
+ },
281
+ ]}
282
+ />
283
+ </TestOutput>,
284
+ ).toRenderTo(`
266
285
  (a: int, b: str)
267
286
  `);
268
287
  });
269
288
  it("renders a call signature with all", () => {
270
- const result = toSourceText([
271
- <py.CallSignature
272
- parameters={[
273
- {
274
- name: "a",
275
- type: "int",
276
- },
277
- {
278
- name: "b",
279
- type: "str",
280
- },
281
- ]}
282
- args
283
- kwargs
284
- returnType="int"
285
- />,
286
- ]);
287
- expect(result).toRenderTo(d`
289
+ expect(
290
+ <TestOutput>
291
+ <py.CallSignature
292
+ parameters={[
293
+ {
294
+ name: "a",
295
+ type: "int",
296
+ },
297
+ {
298
+ name: "b",
299
+ type: "str",
300
+ },
301
+ ]}
302
+ args
303
+ kwargs
304
+ returnType="int"
305
+ />
306
+ </TestOutput>,
307
+ ).toRenderTo(`
288
308
  (a: int, b: str, *args, **kwargs) -> int
289
309
  `);
290
310
  });
291
311
  it("renders a more complex call signature with parameter descriptors", () => {
292
- const result = toSourceText([
293
- <py.CallSignature
294
- typeParameters={["T", "U"]}
295
- parameters={[
296
- {
297
- name: "a",
298
- type: "int",
299
- },
300
- {
301
- name: "b",
302
- type: "str",
303
- default: "default_value",
304
- },
305
- ]}
306
- returnType="int"
307
- />,
308
- ]);
309
- expect(result).toRenderTo(d`
312
+ expect(
313
+ <TestOutput>
314
+ <py.CallSignature
315
+ typeParameters={["T", "U"]}
316
+ parameters={[
317
+ {
318
+ name: "a",
319
+ type: "int",
320
+ },
321
+ {
322
+ name: "b",
323
+ type: "str",
324
+ default: "default_value",
325
+ },
326
+ ]}
327
+ returnType="int"
328
+ />
329
+ </TestOutput>,
330
+ ).toRenderTo(`
310
331
  [T, U](a: int, b: str = "default_value") -> int
311
332
  `);
312
333
  });
313
334
  it("renders a call signature with keyword-only parameters using * marker", () => {
314
- const result = toSourceText([
315
- <py.CallSignature
316
- parameters={[
317
- { name: "id", type: "str" },
318
- "*",
319
- { name: "locale", type: "str", default: "en-US" },
320
- { name: "debug", type: "bool", default: false },
321
- ]}
322
- returnType="str"
323
- />,
324
- ]);
325
- expect(result).toRenderTo(d`
335
+ expect(
336
+ <TestOutput>
337
+ <py.CallSignature
338
+ parameters={[
339
+ { name: "id", type: "str" },
340
+ "*",
341
+ { name: "locale", type: "str", default: "en-US" },
342
+ { name: "debug", type: "bool", default: false },
343
+ ]}
344
+ returnType="str"
345
+ />
346
+ </TestOutput>,
347
+ ).toRenderTo(`
326
348
  (id: str, *, locale: str = "en-US", debug: bool = False) -> str
327
349
  `);
328
350
  });
329
351
  it("renders a call signature with only keyword-only parameters", () => {
330
- const result = toSourceText([
331
- <py.CallSignature
332
- parameters={[
333
- "*",
334
- { name: "name", type: "str", default: "alice" },
335
- { name: "age", type: "int", default: 30 },
336
- ]}
337
- returnType="None"
338
- />,
339
- ]);
340
- expect(result).toRenderTo(d`
352
+ expect(
353
+ <TestOutput>
354
+ <py.CallSignature
355
+ parameters={[
356
+ "*",
357
+ { name: "name", type: "str", default: "alice" },
358
+ { name: "age", type: "int", default: 30 },
359
+ ]}
360
+ returnType="None"
361
+ />
362
+ </TestOutput>,
363
+ ).toRenderTo(`
341
364
  (*, name: str = "alice", age: int = 30) -> None
342
365
  `);
343
366
  });
344
367
  it("renders a call signature with positional, keyword-only, and *args/**kwargs", () => {
345
- const result = toSourceText([
346
- <py.CallSignature
347
- parameters={[
348
- { name: "a", type: "int" },
349
- "*",
350
- { name: "b", type: "str", default: "hello" },
351
- ]}
352
- args
353
- kwargs
354
- returnType="None"
355
- />,
356
- ]);
357
- expect(result).toRenderTo(d`
368
+ expect(
369
+ <TestOutput>
370
+ <py.CallSignature
371
+ parameters={[
372
+ { name: "a", type: "int" },
373
+ "*",
374
+ { name: "b", type: "str", default: "hello" },
375
+ ]}
376
+ args
377
+ kwargs
378
+ returnType="None"
379
+ />
380
+ </TestOutput>,
381
+ ).toRenderTo(`
358
382
  (a: int, *, b: str = "hello", *args, **kwargs) -> None
359
383
  `);
360
384
  });
361
385
  it("renders a call signature with positional-only parameters using / marker", () => {
362
- const result = toSourceText([
363
- <py.CallSignature
364
- parameters={[
365
- { name: "a", type: "int" },
366
- { name: "b", type: "str" },
367
- "/",
368
- { name: "c", type: "bool" },
369
- ]}
370
- returnType="None"
371
- />,
372
- ]);
373
- expect(result).toRenderTo(d`
386
+ expect(
387
+ <TestOutput>
388
+ <py.CallSignature
389
+ parameters={[
390
+ { name: "a", type: "int" },
391
+ { name: "b", type: "str" },
392
+ "/",
393
+ { name: "c", type: "bool" },
394
+ ]}
395
+ returnType="None"
396
+ />
397
+ </TestOutput>,
398
+ ).toRenderTo(`
374
399
  (a: int, b: str, /, c: bool) -> None
375
400
  `);
376
401
  });
377
402
  it("renders a call signature with positional-only, regular, and keyword-only parameters", () => {
378
- const result = toSourceText([
379
- <py.CallSignature
380
- parameters={[
381
- { name: "a", type: "int" },
382
- "/",
383
- { name: "b", type: "str" },
384
- "*",
385
- { name: "c", type: "bool", default: true },
386
- ]}
387
- returnType="None"
388
- />,
389
- ]);
390
- expect(result).toRenderTo(d`
403
+ expect(
404
+ <TestOutput>
405
+ <py.CallSignature
406
+ parameters={[
407
+ { name: "a", type: "int" },
408
+ "/",
409
+ { name: "b", type: "str" },
410
+ "*",
411
+ { name: "c", type: "bool", default: true },
412
+ ]}
413
+ returnType="None"
414
+ />
415
+ </TestOutput>,
416
+ ).toRenderTo(`
391
417
  (a: int, /, b: str, *, c: bool = True) -> None
392
418
  `);
393
419
  });