@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.
Files changed (276) hide show
  1. package/dist/dev/src/builtins/python.js +46 -0
  2. package/dist/dev/src/builtins/python.js.map +1 -1
  3. package/dist/dev/src/components/ClassDeclaration.js +19 -10
  4. package/dist/dev/src/components/ClassDeclaration.js.map +1 -1
  5. package/dist/dev/src/components/ClassMethodDeclaration.js +20 -5
  6. package/dist/dev/src/components/ClassMethodDeclaration.js.map +1 -1
  7. package/dist/dev/src/components/DataclassDeclaration.js +14 -12
  8. package/dist/dev/src/components/DataclassDeclaration.js.map +1 -1
  9. package/dist/dev/src/components/DecoratorList.js +55 -0
  10. package/dist/dev/src/components/DecoratorList.js.map +1 -0
  11. package/dist/dev/src/components/EnumDeclaration.js +21 -12
  12. package/dist/dev/src/components/EnumDeclaration.js.map +1 -1
  13. package/dist/dev/src/components/FunctionBase.js +21 -10
  14. package/dist/dev/src/components/FunctionBase.js.map +1 -1
  15. package/dist/dev/src/components/FutureStatement.js +1 -1
  16. package/dist/dev/src/components/MethodBase.js +16 -4
  17. package/dist/dev/src/components/MethodBase.js.map +1 -1
  18. package/dist/dev/src/components/PropertyDeclaration.js +68 -17
  19. package/dist/dev/src/components/PropertyDeclaration.js.map +1 -1
  20. package/dist/dev/src/components/PydanticClassDeclaration.js +136 -0
  21. package/dist/dev/src/components/PydanticClassDeclaration.js.map +1 -0
  22. package/dist/dev/src/components/SourceFile.js +44 -32
  23. package/dist/dev/src/components/SourceFile.js.map +1 -1
  24. package/dist/dev/src/components/StaticMethodDeclaration.js +19 -5
  25. package/dist/dev/src/components/StaticMethodDeclaration.js.map +1 -1
  26. package/dist/dev/src/components/index.js +1 -0
  27. package/dist/dev/src/components/index.js.map +1 -1
  28. package/dist/dev/test/callsignatures.test.js +471 -297
  29. package/dist/dev/test/callsignatures.test.js.map +1 -1
  30. package/dist/dev/test/class-method-declaration.test.js +21 -10
  31. package/dist/dev/test/class-method-declaration.test.js.map +1 -1
  32. package/dist/dev/test/classdeclarations.test.js +480 -381
  33. package/dist/dev/test/classdeclarations.test.js.map +1 -1
  34. package/dist/dev/test/classinstantiations.test.js +201 -168
  35. package/dist/dev/test/classinstantiations.test.js.map +1 -1
  36. package/dist/dev/test/constructordeclaration.test.js +22 -11
  37. package/dist/dev/test/constructordeclaration.test.js.map +1 -1
  38. package/dist/dev/test/dataclassdeclarations.test.js +345 -358
  39. package/dist/dev/test/dataclassdeclarations.test.js.map +1 -1
  40. package/dist/dev/test/decoratorlist.test.js +131 -0
  41. package/dist/dev/test/decoratorlist.test.js.map +1 -0
  42. package/dist/dev/test/dundermethoddeclaration.test.js +22 -11
  43. package/dist/dev/test/dundermethoddeclaration.test.js.map +1 -1
  44. package/dist/dev/test/enums.test.js +231 -166
  45. package/dist/dev/test/enums.test.js.map +1 -1
  46. package/dist/dev/test/externals.test.js +57 -45
  47. package/dist/dev/test/externals.test.js.map +1 -1
  48. package/dist/dev/test/factories.test.js +124 -50
  49. package/dist/dev/test/factories.test.js.map +1 -1
  50. package/dist/dev/test/functioncallexpressions.test.js +199 -164
  51. package/dist/dev/test/functioncallexpressions.test.js.map +1 -1
  52. package/dist/dev/test/functiondeclaration.test.js +452 -265
  53. package/dist/dev/test/functiondeclaration.test.js.map +1 -1
  54. package/dist/dev/test/imports.test.js +273 -221
  55. package/dist/dev/test/imports.test.js.map +1 -1
  56. package/dist/dev/test/memberexpressions.test.js +1237 -972
  57. package/dist/dev/test/memberexpressions.test.js.map +1 -1
  58. package/dist/dev/test/methoddeclaration.test.js +200 -45
  59. package/dist/dev/test/methoddeclaration.test.js.map +1 -1
  60. package/dist/dev/test/namepolicies.test.js +130 -94
  61. package/dist/dev/test/namepolicies.test.js.map +1 -1
  62. package/dist/dev/test/propertydeclaration.test.js +177 -46
  63. package/dist/dev/test/propertydeclaration.test.js.map +1 -1
  64. package/dist/dev/test/pydanticclassdeclarations.test.js +1089 -0
  65. package/dist/dev/test/pydanticclassdeclarations.test.js.map +1 -0
  66. package/dist/dev/test/pydocs.test.js +888 -715
  67. package/dist/dev/test/pydocs.test.js.map +1 -1
  68. package/dist/dev/test/references.test.js +42 -35
  69. package/dist/dev/test/references.test.js.map +1 -1
  70. package/dist/dev/test/sourcefiles.test.js +1109 -841
  71. package/dist/dev/test/sourcefiles.test.js.map +1 -1
  72. package/dist/dev/test/staticmethoddeclaration.test.js +21 -10
  73. package/dist/dev/test/staticmethoddeclaration.test.js.map +1 -1
  74. package/dist/dev/test/type-checking-imports.test.js +408 -359
  75. package/dist/dev/test/type-checking-imports.test.js.map +1 -1
  76. package/dist/dev/test/typereference.test.js +55 -40
  77. package/dist/dev/test/typereference.test.js.map +1 -1
  78. package/dist/dev/test/uniontypeexpression.test.js +222 -146
  79. package/dist/dev/test/uniontypeexpression.test.js.map +1 -1
  80. package/dist/dev/test/utils.js +39 -77
  81. package/dist/dev/test/utils.js.map +1 -1
  82. package/dist/dev/test/values.test.js +237 -101
  83. package/dist/dev/test/values.test.js.map +1 -1
  84. package/dist/dev/test/variables.test.js +321 -203
  85. package/dist/dev/test/variables.test.js.map +1 -1
  86. package/dist/dev/test/vitest.setup.js +2 -0
  87. package/dist/dev/test/vitest.setup.js.map +1 -0
  88. package/dist/src/builtins/python.d.ts +30 -0
  89. package/dist/src/builtins/python.d.ts.map +1 -1
  90. package/dist/src/builtins/python.js +46 -0
  91. package/dist/src/builtins/python.js.map +1 -1
  92. package/dist/src/components/ClassDeclaration.d.ts +21 -0
  93. package/dist/src/components/ClassDeclaration.d.ts.map +1 -1
  94. package/dist/src/components/ClassDeclaration.js +6 -1
  95. package/dist/src/components/ClassDeclaration.js.map +1 -1
  96. package/dist/src/components/ClassMethodDeclaration.d.ts +5 -1
  97. package/dist/src/components/ClassMethodDeclaration.d.ts.map +1 -1
  98. package/dist/src/components/ClassMethodDeclaration.js +14 -3
  99. package/dist/src/components/ClassMethodDeclaration.js.map +1 -1
  100. package/dist/src/components/DataclassDeclaration.d.ts.map +1 -1
  101. package/dist/src/components/DataclassDeclaration.js +10 -4
  102. package/dist/src/components/DataclassDeclaration.js.map +1 -1
  103. package/dist/src/components/DecoratorList.d.ts +43 -0
  104. package/dist/src/components/DecoratorList.d.ts.map +1 -0
  105. package/dist/src/components/DecoratorList.js +47 -0
  106. package/dist/src/components/DecoratorList.js.map +1 -0
  107. package/dist/src/components/EnumDeclaration.d.ts +9 -0
  108. package/dist/src/components/EnumDeclaration.d.ts.map +1 -1
  109. package/dist/src/components/EnumDeclaration.js +6 -1
  110. package/dist/src/components/EnumDeclaration.js.map +1 -1
  111. package/dist/src/components/FunctionBase.d.ts +31 -1
  112. package/dist/src/components/FunctionBase.d.ts.map +1 -1
  113. package/dist/src/components/FunctionBase.js +9 -2
  114. package/dist/src/components/FunctionBase.js.map +1 -1
  115. package/dist/src/components/FutureStatement.d.ts +1 -1
  116. package/dist/src/components/FutureStatement.js +1 -1
  117. package/dist/src/components/MethodBase.d.ts.map +1 -1
  118. package/dist/src/components/MethodBase.js +10 -2
  119. package/dist/src/components/MethodBase.js.map +1 -1
  120. package/dist/src/components/PropertyDeclaration.d.ts +29 -0
  121. package/dist/src/components/PropertyDeclaration.d.ts.map +1 -1
  122. package/dist/src/components/PropertyDeclaration.js +48 -1
  123. package/dist/src/components/PropertyDeclaration.js.map +1 -1
  124. package/dist/src/components/PydanticClassDeclaration.d.ts +120 -0
  125. package/dist/src/components/PydanticClassDeclaration.d.ts.map +1 -0
  126. package/dist/src/components/PydanticClassDeclaration.js +116 -0
  127. package/dist/src/components/PydanticClassDeclaration.js.map +1 -0
  128. package/dist/src/components/SourceFile.d.ts +2 -2
  129. package/dist/src/components/SourceFile.d.ts.map +1 -1
  130. package/dist/src/components/SourceFile.js +12 -0
  131. package/dist/src/components/SourceFile.js.map +1 -1
  132. package/dist/src/components/StaticMethodDeclaration.d.ts +3 -0
  133. package/dist/src/components/StaticMethodDeclaration.d.ts.map +1 -1
  134. package/dist/src/components/StaticMethodDeclaration.js +13 -3
  135. package/dist/src/components/StaticMethodDeclaration.js.map +1 -1
  136. package/dist/src/components/index.d.ts +1 -0
  137. package/dist/src/components/index.d.ts.map +1 -1
  138. package/dist/src/components/index.js +1 -0
  139. package/dist/src/components/index.js.map +1 -1
  140. package/dist/test/callsignatures.test.js +346 -272
  141. package/dist/test/callsignatures.test.js.map +1 -1
  142. package/dist/test/class-method-declaration.test.js +7 -4
  143. package/dist/test/class-method-declaration.test.js.map +1 -1
  144. package/dist/test/classdeclarations.test.js +316 -277
  145. package/dist/test/classdeclarations.test.js.map +1 -1
  146. package/dist/test/classinstantiations.test.js +112 -103
  147. package/dist/test/classinstantiations.test.js.map +1 -1
  148. package/dist/test/constructordeclaration.test.js +7 -4
  149. package/dist/test/constructordeclaration.test.js.map +1 -1
  150. package/dist/test/dataclassdeclarations.test.js +153 -178
  151. package/dist/test/dataclassdeclarations.test.js.map +1 -1
  152. package/dist/test/decoratorlist.test.d.ts +2 -0
  153. package/dist/test/decoratorlist.test.d.ts.map +1 -0
  154. package/dist/test/decoratorlist.test.js +83 -0
  155. package/dist/test/decoratorlist.test.js.map +1 -0
  156. package/dist/test/dundermethoddeclaration.test.js +7 -4
  157. package/dist/test/dundermethoddeclaration.test.js.map +1 -1
  158. package/dist/test/enums.test.js +172 -143
  159. package/dist/test/enums.test.js.map +1 -1
  160. package/dist/test/externals.test.js +24 -24
  161. package/dist/test/externals.test.js.map +1 -1
  162. package/dist/test/factories.test.js +75 -33
  163. package/dist/test/factories.test.js.map +1 -1
  164. package/dist/test/functioncallexpressions.test.js +117 -106
  165. package/dist/test/functioncallexpressions.test.js.map +1 -1
  166. package/dist/test/functiondeclaration.test.js +256 -173
  167. package/dist/test/functiondeclaration.test.js.map +1 -1
  168. package/dist/test/imports.test.js +171 -143
  169. package/dist/test/imports.test.js.map +1 -1
  170. package/dist/test/memberexpressions.test.js +582 -453
  171. package/dist/test/memberexpressions.test.js.map +1 -1
  172. package/dist/test/methoddeclaration.test.js +106 -19
  173. package/dist/test/methoddeclaration.test.js.map +1 -1
  174. package/dist/test/namepolicies.test.js +90 -78
  175. package/dist/test/namepolicies.test.js.map +1 -1
  176. package/dist/test/propertydeclaration.test.js +90 -15
  177. package/dist/test/propertydeclaration.test.js.map +1 -1
  178. package/dist/test/pydanticclassdeclarations.test.d.ts +2 -0
  179. package/dist/test/pydanticclassdeclarations.test.d.ts.map +1 -0
  180. package/dist/test/pydanticclassdeclarations.test.js +773 -0
  181. package/dist/test/pydanticclassdeclarations.test.js.map +1 -0
  182. package/dist/test/pydocs.test.js +573 -532
  183. package/dist/test/pydocs.test.js.map +1 -1
  184. package/dist/test/references.test.js +31 -28
  185. package/dist/test/references.test.js.map +1 -1
  186. package/dist/test/sourcefiles.test.js +700 -580
  187. package/dist/test/sourcefiles.test.js.map +1 -1
  188. package/dist/test/staticmethoddeclaration.test.js +7 -4
  189. package/dist/test/staticmethoddeclaration.test.js.map +1 -1
  190. package/dist/test/type-checking-imports.test.js +297 -284
  191. package/dist/test/type-checking-imports.test.js.map +1 -1
  192. package/dist/test/typereference.test.js +29 -22
  193. package/dist/test/typereference.test.js.map +1 -1
  194. package/dist/test/uniontypeexpression.test.js +124 -88
  195. package/dist/test/uniontypeexpression.test.js.map +1 -1
  196. package/dist/test/utils.d.ts +10 -17
  197. package/dist/test/utils.d.ts.map +1 -1
  198. package/dist/test/utils.js +32 -74
  199. package/dist/test/utils.js.map +1 -1
  200. package/dist/test/values.test.js +135 -67
  201. package/dist/test/values.test.js.map +1 -1
  202. package/dist/test/variables.test.js +201 -151
  203. package/dist/test/variables.test.js.map +1 -1
  204. package/dist/test/vitest.setup.d.ts +2 -0
  205. package/dist/test/vitest.setup.d.ts.map +1 -0
  206. package/dist/test/vitest.setup.js +2 -0
  207. package/dist/test/vitest.setup.js.map +1 -0
  208. package/dist/tsconfig.tsbuildinfo +1 -1
  209. package/docs/api/components/ClassDeclaration.md +10 -7
  210. package/docs/api/components/ClassEnumDeclaration.md +9 -6
  211. package/docs/api/components/ClassMethodDeclaration.md +7 -5
  212. package/docs/api/components/DataclassDeclaration.md +9 -5
  213. package/docs/api/components/DunderMethodDeclaration.md +7 -5
  214. package/docs/api/components/FunctionDeclaration.md +9 -5
  215. package/docs/api/components/FutureStatement.md +1 -1
  216. package/docs/api/components/MethodDeclaration.md +11 -6
  217. package/docs/api/components/PropertyDeclaration.md +11 -8
  218. package/docs/api/components/PydanticClassDeclaration.md +146 -0
  219. package/docs/api/components/SourceFile.md +20 -8
  220. package/docs/api/components/StaticMethodDeclaration.md +7 -5
  221. package/docs/api/components/index.md +1 -0
  222. package/docs/api/index.md +3 -3
  223. package/docs/api/types/CommonFunctionProps.md +4 -3
  224. package/docs/api/types/PydanticModelConfigDictProps.md +32 -0
  225. package/docs/api/types/index.md +1 -0
  226. package/docs/api/variables/index.md +3 -0
  227. package/docs/api/variables/pydanticModule.md +27 -0
  228. package/docs/api/variables/pydanticSettingsModule.md +7 -0
  229. package/docs/api/variables/typingModule.md +9 -0
  230. package/package.json +4 -4
  231. package/src/builtins/python.ts +539 -1
  232. package/src/components/ClassDeclaration.tsx +23 -0
  233. package/src/components/ClassMethodDeclaration.tsx +9 -1
  234. package/src/components/DataclassDeclaration.tsx +18 -11
  235. package/src/components/DecoratorList.tsx +50 -0
  236. package/src/components/EnumDeclaration.tsx +11 -0
  237. package/src/components/FunctionBase.tsx +34 -3
  238. package/src/components/FutureStatement.tsx +1 -1
  239. package/src/components/MethodBase.tsx +6 -2
  240. package/src/components/PropertyDeclaration.tsx +48 -1
  241. package/src/components/PydanticClassDeclaration.tsx +222 -0
  242. package/src/components/SourceFile.tsx +6 -1
  243. package/src/components/StaticMethodDeclaration.tsx +7 -1
  244. package/src/components/index.ts +1 -0
  245. package/temp/api.json +1158 -86
  246. package/test/callsignatures.test.tsx +309 -283
  247. package/test/class-method-declaration.test.tsx +3 -4
  248. package/test/classdeclarations.test.tsx +277 -235
  249. package/test/classinstantiations.test.tsx +115 -109
  250. package/test/constructordeclaration.test.tsx +9 -6
  251. package/test/dataclassdeclarations.test.tsx +256 -349
  252. package/test/decoratorlist.test.tsx +114 -0
  253. package/test/dundermethoddeclaration.test.tsx +3 -4
  254. package/test/enums.test.tsx +84 -71
  255. package/test/externals.test.tsx +25 -25
  256. package/test/factories.test.tsx +64 -22
  257. package/test/functioncallexpressions.test.tsx +123 -109
  258. package/test/functiondeclaration.test.tsx +218 -140
  259. package/test/imports.test.tsx +119 -91
  260. package/test/memberexpressions.test.tsx +265 -207
  261. package/test/methoddeclaration.test.tsx +115 -24
  262. package/test/namepolicies.test.tsx +69 -69
  263. package/test/propertydeclaration.test.tsx +71 -7
  264. package/test/pydanticclassdeclarations.test.tsx +704 -0
  265. package/test/pydocs.test.tsx +531 -579
  266. package/test/references.test.tsx +24 -23
  267. package/test/sourcefiles.test.tsx +527 -492
  268. package/test/staticmethoddeclaration.test.tsx +3 -4
  269. package/test/type-checking-imports.test.tsx +206 -218
  270. package/test/typereference.test.tsx +15 -12
  271. package/test/uniontypeexpression.test.tsx +74 -61
  272. package/test/utils.tsx +26 -110
  273. package/test/values.test.tsx +82 -32
  274. package/test/variables.test.tsx +162 -142
  275. package/test/vitest.setup.ts +1 -0
  276. package/vitest.config.ts +3 -0
@@ -1,7 +1,6 @@
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.js";
3
+ import { TestOutput } from "./utils.js";
5
4
 
6
5
  describe("ClassMethodDeclaration", () => {
7
6
  it("renders async class method", () => {
@@ -21,7 +20,7 @@ describe("ClassMethodDeclaration", () => {
21
20
  </py.StatementList>
22
21
  );
23
22
 
24
- expect(toSourceText([decl])).toBe(d`
23
+ expect(<TestOutput>{decl}</TestOutput>).toRenderTo(`
25
24
  class MyClass:
26
25
  @classmethod
27
26
  async def create(cls) -> MyClass:
@@ -41,7 +40,7 @@ describe("ClassMethodDeclaration", () => {
41
40
  </py.ClassDeclaration>
42
41
  );
43
42
 
44
- expect(toSourceText([decl])).toBe(d`
43
+ expect(<TestOutput>{decl}</TestOutput>).toRenderTo(`
45
44
  class MyClass:
46
45
  @classmethod
47
46
  def foo(cls, x: int):
@@ -1,60 +1,98 @@
1
1
  import { memberRefkey, namekey, refkey } from "@alloy-js/core";
2
- import { d } from "@alloy-js/core/testing";
3
2
  import { describe, expect, it } from "vitest";
4
3
  import * as py from "../src/index.js";
5
- import {
6
- assertFileContents,
7
- toSourceText,
8
- toSourceTextMultiple,
9
- } from "./utils.jsx";
4
+ import { TestOutput, TestOutputDirectory } from "./utils.js";
10
5
 
11
6
  describe("Python Class", () => {
12
- it("renders a class with no body as 'pass'", () => {
13
- const result = toSourceText([<py.ClassDeclaration name="Foo" />]);
14
- expect(result).toRenderTo(d`
7
+ it("renders class-level decorators above `class`", () => {
8
+ expect(
9
+ <TestOutput>
10
+ <py.ClassDeclaration
11
+ name="Foo"
12
+ decorators={["@final", "@deprecated('use Bar')"]}
13
+ />
14
+ </TestOutput>,
15
+ ).toRenderTo(
16
+ `
17
+ @final
18
+ @deprecated('use Bar')
15
19
  class Foo:
16
20
  pass
17
21
 
22
+ `,
23
+ );
24
+ });
18
25
 
19
- `);
26
+ it("renders nothing extra when decorators is undefined", () => {
27
+ expect(
28
+ <TestOutput>
29
+ <py.ClassDeclaration name="Foo" />
30
+ </TestOutput>,
31
+ ).toRenderTo(
32
+ `
33
+ class Foo:
34
+ pass
35
+
36
+ `,
37
+ );
20
38
  });
21
39
 
22
- it("takes a namekey", () => {
23
- const result = toSourceText([
24
- <py.ClassDeclaration name={namekey("Foo")} />,
25
- ]);
26
- expect(result).toRenderTo(d`
40
+ it("renders a class with no body as 'pass'", () => {
41
+ expect(
42
+ <TestOutput>
43
+ <py.ClassDeclaration name="Foo" />
44
+ </TestOutput>,
45
+ ).toRenderTo(
46
+ `
27
47
  class Foo:
28
48
  pass
29
49
 
50
+ `,
51
+ );
52
+ });
53
+
54
+ it("takes a namekey", () => {
55
+ expect(
56
+ <TestOutput>
57
+ <py.ClassDeclaration name={namekey("Foo")} />
58
+ </TestOutput>,
59
+ ).toRenderTo(
60
+ `
61
+ class Foo:
62
+ pass
30
63
 
31
- `);
64
+ `,
65
+ );
32
66
  });
33
67
 
34
68
  it("renders a class with a body", () => {
35
- const result = toSourceText([
36
- <py.ClassDeclaration name="Bar">print('hi')</py.ClassDeclaration>,
37
- ]);
38
- expect(result).toRenderTo(d`
69
+ expect(
70
+ <TestOutput>
71
+ <py.ClassDeclaration name="Bar">print('hi')</py.ClassDeclaration>
72
+ </TestOutput>,
73
+ ).toRenderTo(
74
+ `
39
75
  class Bar:
40
76
  print('hi')
41
77
 
42
-
43
- `);
78
+ `,
79
+ );
44
80
  });
45
81
 
46
82
  it("renders a class with base classes", () => {
47
- const result = toSourceText([
48
- <py.StatementList>
49
- <py.ClassDeclaration name="Base1" refkey={refkey("Base1")} />
50
- <py.ClassDeclaration name="Base2" refkey={refkey("Base2")} />
51
- <py.ClassDeclaration
52
- name="Baz"
53
- bases={[refkey("Base1"), refkey("Base2")]}
54
- />
55
- </py.StatementList>,
56
- ]);
57
- const expected = d`
83
+ expect(
84
+ <TestOutput>
85
+ <py.StatementList>
86
+ <py.ClassDeclaration name="Base1" refkey={refkey("Base1")} />
87
+ <py.ClassDeclaration name="Base2" refkey={refkey("Base2")} />
88
+ <py.ClassDeclaration
89
+ name="Baz"
90
+ bases={[refkey("Base1"), refkey("Base2")]}
91
+ />
92
+ </py.StatementList>
93
+ </TestOutput>,
94
+ ).toRenderTo(
95
+ `
58
96
  class Base1:
59
97
  pass
60
98
 
@@ -64,83 +102,83 @@ describe("Python Class", () => {
64
102
  class Baz(Base1, Base2):
65
103
  pass
66
104
 
67
-
68
- `;
69
- expect(result).toRenderTo(expected);
105
+ `,
106
+ );
70
107
  });
71
108
 
72
109
  it("renders a class with base classes and body", () => {
73
- const result = toSourceText([
74
- <py.ClassDeclaration name="Qux" bases={["Base"]}>
75
- print('hello')
76
- </py.ClassDeclaration>,
77
- ]);
78
- expect(result).toRenderTo(d`
110
+ expect(
111
+ <TestOutput>
112
+ <py.ClassDeclaration name="Qux" bases={["Base"]}>
113
+ print('hello')
114
+ </py.ClassDeclaration>
115
+ </TestOutput>,
116
+ ).toRenderTo(
117
+ `
79
118
  class Qux(Base):
80
119
  print('hello')
81
120
 
82
-
83
- `);
121
+ `,
122
+ );
84
123
  });
85
124
 
86
125
  it("renders classes across modules with inheritance", () => {
87
- const result = toSourceTextMultiple([
88
- <py.SourceFile path="mod1.py">
89
- <py.ClassDeclaration name="A" refkey={refkey("A")} />
90
- </py.SourceFile>,
91
- <py.SourceFile path="folder/mod2.py">
92
- <py.ClassDeclaration
93
- name="B"
94
- refkey={refkey("B")}
95
- bases={[refkey("A")]}
96
- />
97
- </py.SourceFile>,
98
- <py.SourceFile path="mod3.py">
99
- <py.ClassDeclaration name="C" bases={[refkey("B")]} />
100
- </py.SourceFile>,
101
- ]);
102
- const mod1Expected = d`
103
- class A:
104
- pass
105
-
106
-
107
- `;
108
- const mod2Expected = d`
109
- from mod1 import A
110
-
126
+ expect(
127
+ <TestOutputDirectory>
128
+ <py.SourceFile path="mod1.py">
129
+ <py.ClassDeclaration name="A" refkey={refkey("A")} />
130
+ </py.SourceFile>
131
+ <py.SourceFile path="folder/mod2.py">
132
+ <py.ClassDeclaration
133
+ name="B"
134
+ refkey={refkey("B")}
135
+ bases={[refkey("A")]}
136
+ />
137
+ </py.SourceFile>
138
+ <py.SourceFile path="mod3.py">
139
+ <py.ClassDeclaration name="C" bases={[refkey("B")]} />
140
+ </py.SourceFile>
141
+ </TestOutputDirectory>,
142
+ ).toRenderTo({
143
+ "mod1.py": `
144
+ class A:
145
+ pass
111
146
 
112
- class B(A):
113
- pass
147
+ `,
148
+ "folder/mod2.py": `
149
+ from mod1 import A
114
150
 
115
151
 
116
- `;
117
- const mod3Expected = d`
118
- from folder.mod2 import B
152
+ class B(A):
153
+ pass
119
154
 
155
+ `,
156
+ "mod3.py": `
157
+ from folder.mod2 import B
120
158
 
121
- class C(B):
122
- pass
123
159
 
160
+ class C(B):
161
+ pass
124
162
 
125
- `;
126
- assertFileContents(result, { "mod1.py": mod1Expected });
127
- assertFileContents(result, { "folder/mod2.py": mod2Expected });
128
- assertFileContents(result, { "mod3.py": mod3Expected });
163
+ `,
164
+ });
129
165
  });
130
166
 
131
167
  it("renders a class with class variables like foo: str, and also bar: A where A is another class", () => {
132
- const result = toSourceText([
133
- <py.StatementList>
134
- <py.ClassDeclaration name="A" refkey={refkey("A")} />
135
- <py.ClassDeclaration name="B">
136
- <py.StatementList>
137
- <py.VariableDeclaration name="bar" type={refkey("A")} omitNone />
138
- <py.VariableDeclaration name="foo" type="str" omitNone />
139
- </py.StatementList>
140
- </py.ClassDeclaration>
141
- </py.StatementList>,
142
- ]);
143
- const expected = d`
168
+ expect(
169
+ <TestOutput>
170
+ <py.StatementList>
171
+ <py.ClassDeclaration name="A" refkey={refkey("A")} />
172
+ <py.ClassDeclaration name="B">
173
+ <py.StatementList>
174
+ <py.VariableDeclaration name="bar" type={refkey("A")} omitNone />
175
+ <py.VariableDeclaration name="foo" type="str" omitNone />
176
+ </py.StatementList>
177
+ </py.ClassDeclaration>
178
+ </py.StatementList>
179
+ </TestOutput>,
180
+ ).toRenderTo(
181
+ `
144
182
  class A:
145
183
  pass
146
184
 
@@ -148,42 +186,43 @@ describe("Python Class", () => {
148
186
  bar: A
149
187
  foo: str
150
188
 
151
-
152
- `;
153
- expect(result).toRenderTo(expected);
189
+ `,
190
+ );
154
191
  });
155
192
 
156
193
  it("renders a class with class variables like foo: str, and another identical class", () => {
157
194
  const fooKey = refkey();
158
195
  const barKey = refkey();
159
196
 
160
- const result = toSourceText([
161
- <py.StatementList>
162
- <py.ClassDeclaration name="A">
163
- <py.StatementList>
164
- <py.VariableDeclaration
165
- name="foo"
166
- type="str"
167
- refkey={fooKey}
168
- omitNone
169
- />
170
- </py.StatementList>
171
- </py.ClassDeclaration>
172
- <py.ClassDeclaration name="B">
173
- <py.StatementList>
174
- <py.VariableDeclaration
175
- name="foo"
176
- type="str"
177
- refkey={barKey}
178
- omitNone
179
- />
180
- </py.StatementList>
181
- </py.ClassDeclaration>
182
- {fooKey}
183
- {barKey}
184
- </py.StatementList>,
185
- ]);
186
- const expected = d`
197
+ expect(
198
+ <TestOutput>
199
+ <py.StatementList>
200
+ <py.ClassDeclaration name="A">
201
+ <py.StatementList>
202
+ <py.VariableDeclaration
203
+ name="foo"
204
+ type="str"
205
+ refkey={fooKey}
206
+ omitNone
207
+ />
208
+ </py.StatementList>
209
+ </py.ClassDeclaration>
210
+ <py.ClassDeclaration name="B">
211
+ <py.StatementList>
212
+ <py.VariableDeclaration
213
+ name="foo"
214
+ type="str"
215
+ refkey={barKey}
216
+ omitNone
217
+ />
218
+ </py.StatementList>
219
+ </py.ClassDeclaration>
220
+ {fooKey}
221
+ {barKey}
222
+ </py.StatementList>
223
+ </TestOutput>,
224
+ ).toRenderTo(
225
+ `
187
226
  class A:
188
227
  foo: str
189
228
 
@@ -192,43 +231,45 @@ describe("Python Class", () => {
192
231
 
193
232
  A.foo
194
233
  B.foo
195
- `;
196
- expect(result).toRenderTo(expected);
234
+ `,
235
+ );
197
236
  });
198
237
  });
199
238
 
200
239
  describe("Python Class - VariableDeclaration", () => {
201
240
  it("renders a class with class fields", () => {
202
- const result = toSourceText([
203
- <py.StatementList>
204
- <py.ClassDeclaration
205
- refkey={refkey("Base")}
206
- name="Base"
207
- ></py.ClassDeclaration>
208
- <py.ClassDeclaration refkey={refkey("A")} name="A">
209
- <py.StatementList>
210
- <py.VariableDeclaration instanceVariable name="just_name" />
211
- <py.VariableDeclaration
212
- name="name_and_type"
213
- type="number"
214
- instanceVariable
215
- />
216
- <py.VariableDeclaration
217
- instanceVariable
218
- name="name_type_and_value"
219
- type="number"
220
- initializer={12}
221
- />
222
- <py.VariableDeclaration
223
- instanceVariable
224
- name="class_based"
225
- type={refkey("Base")}
226
- />
227
- </py.StatementList>
228
- </py.ClassDeclaration>
229
- </py.StatementList>,
230
- ]);
231
- const expected = d`
241
+ expect(
242
+ <TestOutput>
243
+ <py.StatementList>
244
+ <py.ClassDeclaration
245
+ refkey={refkey("Base")}
246
+ name="Base"
247
+ ></py.ClassDeclaration>
248
+ <py.ClassDeclaration refkey={refkey("A")} name="A">
249
+ <py.StatementList>
250
+ <py.VariableDeclaration instanceVariable name="just_name" />
251
+ <py.VariableDeclaration
252
+ name="name_and_type"
253
+ type="number"
254
+ instanceVariable
255
+ />
256
+ <py.VariableDeclaration
257
+ instanceVariable
258
+ name="name_type_and_value"
259
+ type="number"
260
+ initializer={12}
261
+ />
262
+ <py.VariableDeclaration
263
+ instanceVariable
264
+ name="class_based"
265
+ type={refkey("Base")}
266
+ />
267
+ </py.StatementList>
268
+ </py.ClassDeclaration>
269
+ </py.StatementList>
270
+ </TestOutput>,
271
+ ).toRenderTo(
272
+ `
232
273
  class Base:
233
274
  pass
234
275
 
@@ -238,9 +279,8 @@ describe("Python Class - VariableDeclaration", () => {
238
279
  name_type_and_value: number = 12
239
280
  class_based: Base = None
240
281
 
241
-
242
- `;
243
- expect(result).toRenderTo(expected);
282
+ `,
283
+ );
244
284
  });
245
285
 
246
286
  it("correctly access members of its type", () => {
@@ -249,54 +289,54 @@ describe("Python Class - VariableDeclaration", () => {
249
289
  const classMethodRk = refkey();
250
290
  const v1Rk = refkey();
251
291
 
252
- const res = toSourceTextMultiple([
253
- <py.SourceFile path="inst.py">
254
- <py.StatementList>
255
- <py.VariableDeclaration
256
- name="one"
257
- refkey={v1Rk}
258
- type={classRk}
259
- initializer={<py.ClassInstantiation target={classRk} />}
260
- />
261
- <>{memberRefkey(v1Rk, classMemberRk)}</>
262
- <>{memberRefkey(v1Rk, classMethodRk)}()</>
263
- </py.StatementList>
264
- </py.SourceFile>,
265
- <py.SourceFile path="decl.py">
266
- <py.ClassDeclaration name="Bar" refkey={classRk}>
292
+ expect(
293
+ <TestOutputDirectory>
294
+ <py.SourceFile path="inst.py">
267
295
  <py.StatementList>
268
296
  <py.VariableDeclaration
269
- name="instanceProp"
270
- refkey={classMemberRk}
271
- initializer={42}
272
- instanceVariable
273
- />
274
- <py.MethodDeclaration
275
- name="instanceMethod"
276
- refkey={classMethodRk}
277
- returnType="int"
297
+ name="one"
298
+ refkey={v1Rk}
299
+ type={classRk}
300
+ initializer={<py.ClassInstantiation target={classRk} />}
278
301
  />
302
+ <>{memberRefkey(v1Rk, classMemberRk)}</>
303
+ <>{memberRefkey(v1Rk, classMethodRk)}()</>
279
304
  </py.StatementList>
280
- </py.ClassDeclaration>
281
- </py.SourceFile>,
282
- ]);
283
-
284
- assertFileContents(res, {
305
+ </py.SourceFile>
306
+ <py.SourceFile path="decl.py">
307
+ <py.ClassDeclaration name="Bar" refkey={classRk}>
308
+ <py.StatementList>
309
+ <py.VariableDeclaration
310
+ name="instanceProp"
311
+ refkey={classMemberRk}
312
+ initializer={42}
313
+ instanceVariable
314
+ />
315
+ <py.MethodDeclaration
316
+ name="instanceMethod"
317
+ refkey={classMethodRk}
318
+ returnType="int"
319
+ />
320
+ </py.StatementList>
321
+ </py.ClassDeclaration>
322
+ </py.SourceFile>
323
+ </TestOutputDirectory>,
324
+ ).toRenderTo({
285
325
  "inst.py": `
286
- from decl import Bar
326
+ from decl import Bar
287
327
 
288
- one: Bar = Bar()
289
- one.instance_prop
290
- one.instance_method()
291
- `,
328
+ one: Bar = Bar()
329
+ one.instance_prop
330
+ one.instance_method()
331
+ `,
292
332
  "decl.py": `
293
- class Bar:
294
- instance_prop = 42
295
- def instance_method(self) -> int:
296
- pass
333
+ class Bar:
334
+ instance_prop = 42
335
+ def instance_method(self) -> int:
336
+ pass
297
337
 
298
338
 
299
- `,
339
+ `,
300
340
  });
301
341
  });
302
342
  });
@@ -307,44 +347,46 @@ describe("Python Class - FunctionDeclaration", () => {
307
347
  const classMethodRefkey = refkey();
308
348
  const staticMethodRefkey = refkey();
309
349
 
310
- const result = toSourceText([
311
- <py.StatementList>
312
- <py.ClassDeclaration name="MyClass" bases={["BaseClass"]}>
313
- <py.StatementList>
314
- <py.VariableDeclaration name="a" type="int" instanceVariable />
315
- <py.VariableDeclaration name="b" type="int" instanceVariable />
316
- <py.MethodDeclaration
317
- name="my_method"
318
- parameters={[
319
- { name: "a", type: "int" },
320
- { name: "b", type: "int" },
321
- ]}
322
- returnType="int"
323
- refkey={methodRefkey}
324
- >
325
- return a + b
326
- </py.MethodDeclaration>
327
- <py.ClassMethodDeclaration
328
- name="my_class_method"
329
- returnType="int"
330
- refkey={classMethodRefkey}
331
- >
332
- pass
333
- </py.ClassMethodDeclaration>
334
- <py.FunctionDeclaration
335
- name="my_standalone_function"
336
- returnType="int"
337
- refkey={staticMethodRefkey}
338
- >
339
- pass
340
- </py.FunctionDeclaration>
341
- </py.StatementList>
342
- </py.ClassDeclaration>
343
- {classMethodRefkey}
344
- {staticMethodRefkey}
345
- </py.StatementList>,
346
- ]);
347
- const expected = d`
350
+ expect(
351
+ <TestOutput>
352
+ <py.StatementList>
353
+ <py.ClassDeclaration name="MyClass" bases={["BaseClass"]}>
354
+ <py.StatementList>
355
+ <py.VariableDeclaration name="a" type="int" instanceVariable />
356
+ <py.VariableDeclaration name="b" type="int" instanceVariable />
357
+ <py.MethodDeclaration
358
+ name="my_method"
359
+ parameters={[
360
+ { name: "a", type: "int" },
361
+ { name: "b", type: "int" },
362
+ ]}
363
+ returnType="int"
364
+ refkey={methodRefkey}
365
+ >
366
+ return a + b
367
+ </py.MethodDeclaration>
368
+ <py.ClassMethodDeclaration
369
+ name="my_class_method"
370
+ returnType="int"
371
+ refkey={classMethodRefkey}
372
+ >
373
+ pass
374
+ </py.ClassMethodDeclaration>
375
+ <py.FunctionDeclaration
376
+ name="my_standalone_function"
377
+ returnType="int"
378
+ refkey={staticMethodRefkey}
379
+ >
380
+ pass
381
+ </py.FunctionDeclaration>
382
+ </py.StatementList>
383
+ </py.ClassDeclaration>
384
+ {classMethodRefkey}
385
+ {staticMethodRefkey}
386
+ </py.StatementList>
387
+ </TestOutput>,
388
+ ).toRenderTo(
389
+ `
348
390
  class MyClass(BaseClass):
349
391
  a: int = None
350
392
  b: int = None
@@ -361,7 +403,7 @@ describe("Python Class - FunctionDeclaration", () => {
361
403
 
362
404
  MyClass.my_class_method
363
405
  MyClass.my_standalone_function
364
- `;
365
- expect(result).toRenderTo(expected);
406
+ `,
407
+ );
366
408
  });
367
409
  });