@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,68 +1,105 @@
1
1
  import { createComponent as _$createComponent, memo as _$memo } from "@alloy-js/core/jsx-runtime";
2
2
  import { memberRefkey, namekey, refkey } from "@alloy-js/core";
3
- import { d } from "@alloy-js/core/testing";
4
3
  import { describe, expect, it } from "vitest";
5
4
  import * as py from "../src/index.js";
6
- import { assertFileContents, toSourceText, toSourceTextMultiple } from "./utils.js";
5
+ import { TestOutput, TestOutputDirectory } from "./utils.js";
7
6
  describe("Python Class", () => {
8
- it("renders a class with no body as 'pass'", () => {
9
- const result = toSourceText([_$createComponent(py.ClassDeclaration, {
10
- name: "Foo"
11
- })]);
12
- expect(result).toRenderTo(d`
7
+ it("renders class-level decorators above `class`", () => {
8
+ expect(_$createComponent(TestOutput, {
9
+ get children() {
10
+ return _$createComponent(py.ClassDeclaration, {
11
+ name: "Foo",
12
+ decorators: ["@final", "@deprecated('use Bar')"]
13
+ });
14
+ }
15
+ })).toRenderTo(`
16
+ @final
17
+ @deprecated('use Bar')
13
18
  class Foo:
14
19
  pass
15
20
 
21
+ `);
22
+ });
23
+ it("renders nothing extra when decorators is undefined", () => {
24
+ expect(_$createComponent(TestOutput, {
25
+ get children() {
26
+ return _$createComponent(py.ClassDeclaration, {
27
+ name: "Foo"
28
+ });
29
+ }
30
+ })).toRenderTo(`
31
+ class Foo:
32
+ pass
16
33
 
17
34
  `);
18
35
  });
19
- it("takes a namekey", () => {
20
- const result = toSourceText([_$createComponent(py.ClassDeclaration, {
21
- get name() {
22
- return namekey("Foo");
36
+ it("renders a class with no body as 'pass'", () => {
37
+ expect(_$createComponent(TestOutput, {
38
+ get children() {
39
+ return _$createComponent(py.ClassDeclaration, {
40
+ name: "Foo"
41
+ });
23
42
  }
24
- })]);
25
- expect(result).toRenderTo(d`
43
+ })).toRenderTo(`
26
44
  class Foo:
27
45
  pass
28
46
 
47
+ `);
48
+ });
49
+ it("takes a namekey", () => {
50
+ expect(_$createComponent(TestOutput, {
51
+ get children() {
52
+ return _$createComponent(py.ClassDeclaration, {
53
+ get name() {
54
+ return namekey("Foo");
55
+ }
56
+ });
57
+ }
58
+ })).toRenderTo(`
59
+ class Foo:
60
+ pass
29
61
 
30
62
  `);
31
63
  });
32
64
  it("renders a class with a body", () => {
33
- const result = toSourceText([_$createComponent(py.ClassDeclaration, {
34
- name: "Bar",
35
- children: "print('hi')"
36
- })]);
37
- expect(result).toRenderTo(d`
65
+ expect(_$createComponent(TestOutput, {
66
+ get children() {
67
+ return _$createComponent(py.ClassDeclaration, {
68
+ name: "Bar",
69
+ children: "print('hi')"
70
+ });
71
+ }
72
+ })).toRenderTo(`
38
73
  class Bar:
39
74
  print('hi')
40
75
 
41
-
42
76
  `);
43
77
  });
44
78
  it("renders a class with base classes", () => {
45
- const result = toSourceText([_$createComponent(py.StatementList, {
79
+ expect(_$createComponent(TestOutput, {
46
80
  get children() {
47
- return [_$createComponent(py.ClassDeclaration, {
48
- name: "Base1",
49
- get refkey() {
50
- return refkey("Base1");
51
- }
52
- }), _$createComponent(py.ClassDeclaration, {
53
- name: "Base2",
54
- get refkey() {
55
- return refkey("Base2");
56
- }
57
- }), _$createComponent(py.ClassDeclaration, {
58
- name: "Baz",
59
- get bases() {
60
- return [refkey("Base1"), refkey("Base2")];
81
+ return _$createComponent(py.StatementList, {
82
+ get children() {
83
+ return [_$createComponent(py.ClassDeclaration, {
84
+ name: "Base1",
85
+ get refkey() {
86
+ return refkey("Base1");
87
+ }
88
+ }), _$createComponent(py.ClassDeclaration, {
89
+ name: "Base2",
90
+ get refkey() {
91
+ return refkey("Base2");
92
+ }
93
+ }), _$createComponent(py.ClassDeclaration, {
94
+ name: "Baz",
95
+ get bases() {
96
+ return [refkey("Base1"), refkey("Base2")];
97
+ }
98
+ })];
61
99
  }
62
- })];
100
+ });
63
101
  }
64
- })]);
65
- const expected = d`
102
+ })).toRenderTo(`
66
103
  class Base1:
67
104
  pass
68
105
 
@@ -72,123 +109,119 @@ describe("Python Class", () => {
72
109
  class Baz(Base1, Base2):
73
110
  pass
74
111
 
75
-
76
- `;
77
- expect(result).toRenderTo(expected);
112
+ `);
78
113
  });
79
114
  it("renders a class with base classes and body", () => {
80
- const result = toSourceText([_$createComponent(py.ClassDeclaration, {
81
- name: "Qux",
82
- bases: ["Base"],
83
- children: "print('hello')"
84
- })]);
85
- expect(result).toRenderTo(d`
115
+ expect(_$createComponent(TestOutput, {
116
+ get children() {
117
+ return _$createComponent(py.ClassDeclaration, {
118
+ name: "Qux",
119
+ bases: ["Base"],
120
+ children: "print('hello')"
121
+ });
122
+ }
123
+ })).toRenderTo(`
86
124
  class Qux(Base):
87
125
  print('hello')
88
126
 
89
-
90
127
  `);
91
128
  });
92
129
  it("renders classes across modules with inheritance", () => {
93
- const result = toSourceTextMultiple([_$createComponent(py.SourceFile, {
94
- path: "mod1.py",
130
+ expect(_$createComponent(TestOutputDirectory, {
95
131
  get children() {
96
- return _$createComponent(py.ClassDeclaration, {
97
- name: "A",
98
- get refkey() {
99
- return refkey("A");
132
+ return [_$createComponent(py.SourceFile, {
133
+ path: "mod1.py",
134
+ get children() {
135
+ return _$createComponent(py.ClassDeclaration, {
136
+ name: "A",
137
+ get refkey() {
138
+ return refkey("A");
139
+ }
140
+ });
100
141
  }
101
- });
102
- }
103
- }), _$createComponent(py.SourceFile, {
104
- path: "folder/mod2.py",
105
- get children() {
106
- return _$createComponent(py.ClassDeclaration, {
107
- name: "B",
108
- get refkey() {
109
- return refkey("B");
110
- },
111
- get bases() {
112
- return [refkey("A")];
142
+ }), _$createComponent(py.SourceFile, {
143
+ path: "folder/mod2.py",
144
+ get children() {
145
+ return _$createComponent(py.ClassDeclaration, {
146
+ name: "B",
147
+ get refkey() {
148
+ return refkey("B");
149
+ },
150
+ get bases() {
151
+ return [refkey("A")];
152
+ }
153
+ });
113
154
  }
114
- });
115
- }
116
- }), _$createComponent(py.SourceFile, {
117
- path: "mod3.py",
118
- get children() {
119
- return _$createComponent(py.ClassDeclaration, {
120
- name: "C",
121
- get bases() {
122
- return [refkey("B")];
155
+ }), _$createComponent(py.SourceFile, {
156
+ path: "mod3.py",
157
+ get children() {
158
+ return _$createComponent(py.ClassDeclaration, {
159
+ name: "C",
160
+ get bases() {
161
+ return [refkey("B")];
162
+ }
163
+ });
123
164
  }
124
- });
165
+ })];
125
166
  }
126
- })]);
127
- const mod1Expected = d`
128
- class A:
129
- pass
130
-
131
-
132
- `;
133
- const mod2Expected = d`
134
- from mod1 import A
167
+ })).toRenderTo({
168
+ "mod1.py": `
169
+ class A:
170
+ pass
135
171
 
172
+ `,
173
+ "folder/mod2.py": `
174
+ from mod1 import A
136
175
 
137
- class B(A):
138
- pass
139
176
 
177
+ class B(A):
178
+ pass
140
179
 
141
- `;
142
- const mod3Expected = d`
143
- from folder.mod2 import B
144
-
180
+ `,
181
+ "mod3.py": `
182
+ from folder.mod2 import B
145
183
 
146
- class C(B):
147
- pass
148
184
 
185
+ class C(B):
186
+ pass
149
187
 
150
- `;
151
- assertFileContents(result, {
152
- "mod1.py": mod1Expected
153
- });
154
- assertFileContents(result, {
155
- "folder/mod2.py": mod2Expected
156
- });
157
- assertFileContents(result, {
158
- "mod3.py": mod3Expected
188
+ `
159
189
  });
160
190
  });
161
191
  it("renders a class with class variables like foo: str, and also bar: A where A is another class", () => {
162
- const result = toSourceText([_$createComponent(py.StatementList, {
192
+ expect(_$createComponent(TestOutput, {
163
193
  get children() {
164
- return [_$createComponent(py.ClassDeclaration, {
165
- name: "A",
166
- get refkey() {
167
- return refkey("A");
168
- }
169
- }), _$createComponent(py.ClassDeclaration, {
170
- name: "B",
194
+ return _$createComponent(py.StatementList, {
171
195
  get children() {
172
- return _$createComponent(py.StatementList, {
196
+ return [_$createComponent(py.ClassDeclaration, {
197
+ name: "A",
198
+ get refkey() {
199
+ return refkey("A");
200
+ }
201
+ }), _$createComponent(py.ClassDeclaration, {
202
+ name: "B",
173
203
  get children() {
174
- return [_$createComponent(py.VariableDeclaration, {
175
- name: "bar",
176
- get type() {
177
- return refkey("A");
178
- },
179
- omitNone: true
180
- }), _$createComponent(py.VariableDeclaration, {
181
- name: "foo",
182
- type: "str",
183
- omitNone: true
184
- })];
204
+ return _$createComponent(py.StatementList, {
205
+ get children() {
206
+ return [_$createComponent(py.VariableDeclaration, {
207
+ name: "bar",
208
+ get type() {
209
+ return refkey("A");
210
+ },
211
+ omitNone: true
212
+ }), _$createComponent(py.VariableDeclaration, {
213
+ name: "foo",
214
+ type: "str",
215
+ omitNone: true
216
+ })];
217
+ }
218
+ });
185
219
  }
186
- });
220
+ })];
187
221
  }
188
- })];
222
+ });
189
223
  }
190
- })]);
191
- const expected = d`
224
+ })).toRenderTo(`
192
225
  class A:
193
226
  pass
194
227
 
@@ -196,47 +229,48 @@ describe("Python Class", () => {
196
229
  bar: A
197
230
  foo: str
198
231
 
199
-
200
- `;
201
- expect(result).toRenderTo(expected);
232
+ `);
202
233
  });
203
234
  it("renders a class with class variables like foo: str, and another identical class", () => {
204
235
  const fooKey = refkey();
205
236
  const barKey = refkey();
206
- const result = toSourceText([_$createComponent(py.StatementList, {
237
+ expect(_$createComponent(TestOutput, {
207
238
  get children() {
208
- return [_$createComponent(py.ClassDeclaration, {
209
- name: "A",
239
+ return _$createComponent(py.StatementList, {
210
240
  get children() {
211
- return _$createComponent(py.StatementList, {
241
+ return [_$createComponent(py.ClassDeclaration, {
242
+ name: "A",
212
243
  get children() {
213
- return _$createComponent(py.VariableDeclaration, {
214
- name: "foo",
215
- type: "str",
216
- refkey: fooKey,
217
- omitNone: true
244
+ return _$createComponent(py.StatementList, {
245
+ get children() {
246
+ return _$createComponent(py.VariableDeclaration, {
247
+ name: "foo",
248
+ type: "str",
249
+ refkey: fooKey,
250
+ omitNone: true
251
+ });
252
+ }
218
253
  });
219
254
  }
220
- });
221
- }
222
- }), _$createComponent(py.ClassDeclaration, {
223
- name: "B",
224
- get children() {
225
- return _$createComponent(py.StatementList, {
255
+ }), _$createComponent(py.ClassDeclaration, {
256
+ name: "B",
226
257
  get children() {
227
- return _$createComponent(py.VariableDeclaration, {
228
- name: "foo",
229
- type: "str",
230
- refkey: barKey,
231
- omitNone: true
258
+ return _$createComponent(py.StatementList, {
259
+ get children() {
260
+ return _$createComponent(py.VariableDeclaration, {
261
+ name: "foo",
262
+ type: "str",
263
+ refkey: barKey,
264
+ omitNone: true
265
+ });
266
+ }
232
267
  });
233
268
  }
234
- });
269
+ }), fooKey, barKey];
235
270
  }
236
- }), fooKey, barKey];
271
+ });
237
272
  }
238
- })]);
239
- const expected = d`
273
+ })).toRenderTo(`
240
274
  class A:
241
275
  foo: str
242
276
 
@@ -245,53 +279,55 @@ describe("Python Class", () => {
245
279
 
246
280
  A.foo
247
281
  B.foo
248
- `;
249
- expect(result).toRenderTo(expected);
282
+ `);
250
283
  });
251
284
  });
252
285
  describe("Python Class - VariableDeclaration", () => {
253
286
  it("renders a class with class fields", () => {
254
- const result = toSourceText([_$createComponent(py.StatementList, {
287
+ expect(_$createComponent(TestOutput, {
255
288
  get children() {
256
- return [_$createComponent(py.ClassDeclaration, {
257
- get refkey() {
258
- return refkey("Base");
259
- },
260
- name: "Base"
261
- }), _$createComponent(py.ClassDeclaration, {
262
- get refkey() {
263
- return refkey("A");
264
- },
265
- name: "A",
289
+ return _$createComponent(py.StatementList, {
266
290
  get children() {
267
- return _$createComponent(py.StatementList, {
291
+ return [_$createComponent(py.ClassDeclaration, {
292
+ get refkey() {
293
+ return refkey("Base");
294
+ },
295
+ name: "Base"
296
+ }), _$createComponent(py.ClassDeclaration, {
297
+ get refkey() {
298
+ return refkey("A");
299
+ },
300
+ name: "A",
268
301
  get children() {
269
- return [_$createComponent(py.VariableDeclaration, {
270
- instanceVariable: true,
271
- name: "just_name"
272
- }), _$createComponent(py.VariableDeclaration, {
273
- name: "name_and_type",
274
- type: "number",
275
- instanceVariable: true
276
- }), _$createComponent(py.VariableDeclaration, {
277
- instanceVariable: true,
278
- name: "name_type_and_value",
279
- type: "number",
280
- initializer: 12
281
- }), _$createComponent(py.VariableDeclaration, {
282
- instanceVariable: true,
283
- name: "class_based",
284
- get type() {
285
- return refkey("Base");
302
+ return _$createComponent(py.StatementList, {
303
+ get children() {
304
+ return [_$createComponent(py.VariableDeclaration, {
305
+ instanceVariable: true,
306
+ name: "just_name"
307
+ }), _$createComponent(py.VariableDeclaration, {
308
+ name: "name_and_type",
309
+ type: "number",
310
+ instanceVariable: true
311
+ }), _$createComponent(py.VariableDeclaration, {
312
+ instanceVariable: true,
313
+ name: "name_type_and_value",
314
+ type: "number",
315
+ initializer: 12
316
+ }), _$createComponent(py.VariableDeclaration, {
317
+ instanceVariable: true,
318
+ name: "class_based",
319
+ get type() {
320
+ return refkey("Base");
321
+ }
322
+ })];
286
323
  }
287
- })];
324
+ });
288
325
  }
289
- });
326
+ })];
290
327
  }
291
- })];
328
+ });
292
329
  }
293
- })]);
294
- const expected = d`
330
+ })).toRenderTo(`
295
331
  class Base:
296
332
  pass
297
333
 
@@ -301,74 +337,75 @@ describe("Python Class - VariableDeclaration", () => {
301
337
  name_type_and_value: number = 12
302
338
  class_based: Base = None
303
339
 
304
-
305
- `;
306
- expect(result).toRenderTo(expected);
340
+ `);
307
341
  });
308
342
  it("correctly access members of its type", () => {
309
343
  const classRk = refkey();
310
344
  const classMemberRk = refkey();
311
345
  const classMethodRk = refkey();
312
346
  const v1Rk = refkey();
313
- const res = toSourceTextMultiple([_$createComponent(py.SourceFile, {
314
- path: "inst.py",
347
+ expect(_$createComponent(TestOutputDirectory, {
315
348
  get children() {
316
- return _$createComponent(py.StatementList, {
349
+ return [_$createComponent(py.SourceFile, {
350
+ path: "inst.py",
317
351
  get children() {
318
- return [_$createComponent(py.VariableDeclaration, {
319
- name: "one",
320
- refkey: v1Rk,
321
- type: classRk,
322
- get initializer() {
323
- return _$createComponent(py.ClassInstantiation, {
324
- target: classRk
325
- });
352
+ return _$createComponent(py.StatementList, {
353
+ get children() {
354
+ return [_$createComponent(py.VariableDeclaration, {
355
+ name: "one",
356
+ refkey: v1Rk,
357
+ type: classRk,
358
+ get initializer() {
359
+ return _$createComponent(py.ClassInstantiation, {
360
+ target: classRk
361
+ });
362
+ }
363
+ }), [_$memo(() => memberRefkey(v1Rk, classMemberRk))], [_$memo(() => memberRefkey(v1Rk, classMethodRk)), "()"]];
326
364
  }
327
- }), [_$memo(() => memberRefkey(v1Rk, classMemberRk))], [_$memo(() => memberRefkey(v1Rk, classMethodRk)), "()"]];
365
+ });
328
366
  }
329
- });
330
- }
331
- }), _$createComponent(py.SourceFile, {
332
- path: "decl.py",
333
- get children() {
334
- return _$createComponent(py.ClassDeclaration, {
335
- name: "Bar",
336
- refkey: classRk,
367
+ }), _$createComponent(py.SourceFile, {
368
+ path: "decl.py",
337
369
  get children() {
338
- return _$createComponent(py.StatementList, {
370
+ return _$createComponent(py.ClassDeclaration, {
371
+ name: "Bar",
372
+ refkey: classRk,
339
373
  get children() {
340
- return [_$createComponent(py.VariableDeclaration, {
341
- name: "instanceProp",
342
- refkey: classMemberRk,
343
- initializer: 42,
344
- instanceVariable: true
345
- }), _$createComponent(py.MethodDeclaration, {
346
- name: "instanceMethod",
347
- refkey: classMethodRk,
348
- returnType: "int"
349
- })];
374
+ return _$createComponent(py.StatementList, {
375
+ get children() {
376
+ return [_$createComponent(py.VariableDeclaration, {
377
+ name: "instanceProp",
378
+ refkey: classMemberRk,
379
+ initializer: 42,
380
+ instanceVariable: true
381
+ }), _$createComponent(py.MethodDeclaration, {
382
+ name: "instanceMethod",
383
+ refkey: classMethodRk,
384
+ returnType: "int"
385
+ })];
386
+ }
387
+ });
350
388
  }
351
389
  });
352
390
  }
353
- });
391
+ })];
354
392
  }
355
- })]);
356
- assertFileContents(res, {
393
+ })).toRenderTo({
357
394
  "inst.py": `
358
- from decl import Bar
395
+ from decl import Bar
359
396
 
360
- one: Bar = Bar()
361
- one.instance_prop
362
- one.instance_method()
363
- `,
397
+ one: Bar = Bar()
398
+ one.instance_prop
399
+ one.instance_method()
400
+ `,
364
401
  "decl.py": `
365
- class Bar:
366
- instance_prop = 42
367
- def instance_method(self) -> int:
368
- pass
402
+ class Bar:
403
+ instance_prop = 42
404
+ def instance_method(self) -> int:
405
+ pass
369
406
 
370
407
 
371
- `
408
+ `
372
409
  });
373
410
  });
374
411
  });
@@ -377,52 +414,55 @@ describe("Python Class - FunctionDeclaration", () => {
377
414
  const methodRefkey = refkey();
378
415
  const classMethodRefkey = refkey();
379
416
  const staticMethodRefkey = refkey();
380
- const result = toSourceText([_$createComponent(py.StatementList, {
417
+ expect(_$createComponent(TestOutput, {
381
418
  get children() {
382
- return [_$createComponent(py.ClassDeclaration, {
383
- name: "MyClass",
384
- bases: ["BaseClass"],
419
+ return _$createComponent(py.StatementList, {
385
420
  get children() {
386
- return _$createComponent(py.StatementList, {
421
+ return [_$createComponent(py.ClassDeclaration, {
422
+ name: "MyClass",
423
+ bases: ["BaseClass"],
387
424
  get children() {
388
- return [_$createComponent(py.VariableDeclaration, {
389
- name: "a",
390
- type: "int",
391
- instanceVariable: true
392
- }), _$createComponent(py.VariableDeclaration, {
393
- name: "b",
394
- type: "int",
395
- instanceVariable: true
396
- }), _$createComponent(py.MethodDeclaration, {
397
- name: "my_method",
398
- parameters: [{
399
- name: "a",
400
- type: "int"
401
- }, {
402
- name: "b",
403
- type: "int"
404
- }],
405
- returnType: "int",
406
- refkey: methodRefkey,
407
- children: "return a + b"
408
- }), _$createComponent(py.ClassMethodDeclaration, {
409
- name: "my_class_method",
410
- returnType: "int",
411
- refkey: classMethodRefkey,
412
- children: "pass"
413
- }), _$createComponent(py.FunctionDeclaration, {
414
- name: "my_standalone_function",
415
- returnType: "int",
416
- refkey: staticMethodRefkey,
417
- children: "pass"
418
- })];
425
+ return _$createComponent(py.StatementList, {
426
+ get children() {
427
+ return [_$createComponent(py.VariableDeclaration, {
428
+ name: "a",
429
+ type: "int",
430
+ instanceVariable: true
431
+ }), _$createComponent(py.VariableDeclaration, {
432
+ name: "b",
433
+ type: "int",
434
+ instanceVariable: true
435
+ }), _$createComponent(py.MethodDeclaration, {
436
+ name: "my_method",
437
+ parameters: [{
438
+ name: "a",
439
+ type: "int"
440
+ }, {
441
+ name: "b",
442
+ type: "int"
443
+ }],
444
+ returnType: "int",
445
+ refkey: methodRefkey,
446
+ children: "return a + b"
447
+ }), _$createComponent(py.ClassMethodDeclaration, {
448
+ name: "my_class_method",
449
+ returnType: "int",
450
+ refkey: classMethodRefkey,
451
+ children: "pass"
452
+ }), _$createComponent(py.FunctionDeclaration, {
453
+ name: "my_standalone_function",
454
+ returnType: "int",
455
+ refkey: staticMethodRefkey,
456
+ children: "pass"
457
+ })];
458
+ }
459
+ });
419
460
  }
420
- });
461
+ }), classMethodRefkey, staticMethodRefkey];
421
462
  }
422
- }), classMethodRefkey, staticMethodRefkey];
463
+ });
423
464
  }
424
- })]);
425
- const expected = d`
465
+ })).toRenderTo(`
426
466
  class MyClass(BaseClass):
427
467
  a: int = None
428
468
  b: int = None
@@ -439,8 +479,7 @@ describe("Python Class - FunctionDeclaration", () => {
439
479
 
440
480
  MyClass.my_class_method
441
481
  MyClass.my_standalone_function
442
- `;
443
- expect(result).toRenderTo(expected);
482
+ `);
444
483
  });
445
484
  });
446
485
  //# sourceMappingURL=classdeclarations.test.js.map