@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,11 +1,40 @@
1
1
  import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
- import { Prose, namekey, refkey } from "@alloy-js/core";
3
- import { d } from "@alloy-js/core/testing";
2
+ import { Prose, namekey, refkey, render } from "@alloy-js/core";
4
3
  import { describe, expect, it } from "vitest";
5
4
  import { dataclassesModule } from "../src/builtins/python.js";
6
5
  import * as py from "../src/index.js";
7
- import { assertFileContents, toSourceText, toSourceTextMultiple } from "./utils.js";
6
+ import { TestOutput, TestOutputDirectory } from "./utils.js";
8
7
  describe("DataclassDeclaration", () => {
8
+ it("stacks user decorators above @dataclass", () => {
9
+ expect(_$createComponent(TestOutput, {
10
+ path: "user.py",
11
+ externals: [dataclassesModule],
12
+ get children() {
13
+ return _$createComponent(py.DataclassDeclaration, {
14
+ name: "User",
15
+ frozen: true,
16
+ decorators: ["@final"]
17
+ }, {
18
+ fileName: import.meta.url,
19
+ lineNumber: 11,
20
+ columnNumber: 9
21
+ });
22
+ }
23
+ }, {
24
+ fileName: import.meta.url,
25
+ lineNumber: 10,
26
+ columnNumber: 7
27
+ })).toRenderTo(`
28
+ from dataclasses import dataclass
29
+
30
+
31
+ @final
32
+ @dataclass(frozen=True)
33
+ class User:
34
+ pass
35
+
36
+ `);
37
+ });
9
38
  it("Creates a dataclass with a class doc", () => {
10
39
  const doc = _$createComponent(py.ClassDoc, {
11
40
  get description() {
@@ -13,35 +42,33 @@ describe("DataclassDeclaration", () => {
13
42
  children: "Represents a user."
14
43
  }, {
15
44
  fileName: import.meta.url,
16
- lineNumber: 15,
45
+ lineNumber: 29,
17
46
  columnNumber: 34
18
47
  })];
19
48
  }
20
49
  }, {
21
50
  fileName: import.meta.url,
22
- lineNumber: 15,
51
+ lineNumber: 29,
23
52
  columnNumber: 7
24
53
  });
25
- const res = toSourceText([_$createComponent(py.SourceFile, {
54
+ expect(_$createComponent(TestOutput, {
26
55
  path: "user.py",
56
+ externals: [dataclassesModule],
27
57
  get children() {
28
58
  return _$createComponent(py.DataclassDeclaration, {
29
59
  name: "User",
30
60
  doc: doc
31
61
  }, {
32
62
  fileName: import.meta.url,
33
- lineNumber: 20,
34
- columnNumber: 11
63
+ lineNumber: 33,
64
+ columnNumber: 9
35
65
  });
36
66
  }
37
67
  }, {
38
68
  fileName: import.meta.url,
39
- lineNumber: 19,
40
- columnNumber: 9
41
- })], {
42
- externals: [dataclassesModule]
43
- });
44
- expect(res).toRenderTo(d`
69
+ lineNumber: 32,
70
+ columnNumber: 7
71
+ })).toRenderTo(`
45
72
  from dataclasses import dataclass
46
73
 
47
74
 
@@ -53,12 +80,12 @@ describe("DataclassDeclaration", () => {
53
80
 
54
81
  pass
55
82
 
56
-
57
83
  `);
58
84
  });
59
85
  it("Creates a dataclass with fields and defaults", () => {
60
- const res = toSourceText([_$createComponent(py.SourceFile, {
86
+ expect(_$createComponent(TestOutput, {
61
87
  path: "user.py",
88
+ externals: [dataclassesModule],
62
89
  get children() {
63
90
  return _$createComponent(py.DataclassDeclaration, {
64
91
  name: "User",
@@ -70,8 +97,8 @@ describe("DataclassDeclaration", () => {
70
97
  type: "int"
71
98
  }, {
72
99
  fileName: import.meta.url,
73
- lineNumber: 49,
74
- columnNumber: 13
100
+ lineNumber: 56,
101
+ columnNumber: 11
75
102
  }), _$createComponent(py.VariableDeclaration, {
76
103
  instanceVariable: true,
77
104
  get name() {
@@ -85,8 +112,8 @@ describe("DataclassDeclaration", () => {
85
112
  omitNone: true
86
113
  }, {
87
114
  fileName: import.meta.url,
88
- lineNumber: 55,
89
- columnNumber: 13
115
+ lineNumber: 62,
116
+ columnNumber: 11
90
117
  }), _$createComponent(py.VariableDeclaration, {
91
118
  instanceVariable: true,
92
119
  name: "name",
@@ -94,24 +121,21 @@ describe("DataclassDeclaration", () => {
94
121
  initializer: "Anonymous"
95
122
  }, {
96
123
  fileName: import.meta.url,
97
- lineNumber: 61,
98
- columnNumber: 13
124
+ lineNumber: 68,
125
+ columnNumber: 11
99
126
  })];
100
127
  }
101
128
  }, {
102
129
  fileName: import.meta.url,
103
- lineNumber: 48,
104
- columnNumber: 11
130
+ lineNumber: 55,
131
+ columnNumber: 9
105
132
  });
106
133
  }
107
134
  }, {
108
135
  fileName: import.meta.url,
109
- lineNumber: 47,
110
- columnNumber: 9
111
- })], {
112
- externals: [dataclassesModule]
113
- });
114
- expect(res).toRenderTo(d`
136
+ lineNumber: 54,
137
+ columnNumber: 7
138
+ })).toRenderTo(`
115
139
  from dataclasses import dataclass
116
140
  from typing import TYPE_CHECKING
117
141
 
@@ -125,12 +149,12 @@ describe("DataclassDeclaration", () => {
125
149
  _: KW_ONLY
126
150
  name: str = "Anonymous"
127
151
 
128
-
129
152
  `);
130
153
  });
131
154
  it("Creates a dataclass with keyword arguments", () => {
132
- const res = toSourceText([_$createComponent(py.SourceFile, {
155
+ expect(_$createComponent(TestOutput, {
133
156
  path: "user.py",
157
+ externals: [dataclassesModule],
134
158
  get children() {
135
159
  return _$createComponent(py.DataclassDeclaration, {
136
160
  name: "User",
@@ -145,24 +169,21 @@ describe("DataclassDeclaration", () => {
145
169
  type: "int"
146
170
  }, {
147
171
  fileName: import.meta.url,
148
- lineNumber: 98,
149
- columnNumber: 13
172
+ lineNumber: 99,
173
+ columnNumber: 11
150
174
  });
151
175
  }
152
176
  }, {
153
177
  fileName: import.meta.url,
154
- lineNumber: 97,
155
- columnNumber: 11
178
+ lineNumber: 98,
179
+ columnNumber: 9
156
180
  });
157
181
  }
158
182
  }, {
159
183
  fileName: import.meta.url,
160
- lineNumber: 96,
161
- columnNumber: 9
162
- })], {
163
- externals: [dataclassesModule]
164
- });
165
- expect(res).toRenderTo(d`
184
+ lineNumber: 97,
185
+ columnNumber: 7
186
+ })).toRenderTo(`
166
187
  from dataclasses import dataclass
167
188
 
168
189
 
@@ -170,12 +191,12 @@ describe("DataclassDeclaration", () => {
170
191
  class User:
171
192
  id: int
172
193
 
173
-
174
194
  `);
175
195
  });
176
196
  it("Creates a dataclass with all keyword arguments", () => {
177
- const res = toSourceText([_$createComponent(py.SourceFile, {
197
+ expect(_$createComponent(TestOutput, {
178
198
  path: "user.py",
199
+ externals: [dataclassesModule],
179
200
  get children() {
180
201
  return _$createComponent(py.DataclassDeclaration, {
181
202
  name: "User",
@@ -191,18 +212,15 @@ describe("DataclassDeclaration", () => {
191
212
  weakrefSlot: false
192
213
  }, {
193
214
  fileName: import.meta.url,
194
- lineNumber: 128,
195
- columnNumber: 11
215
+ lineNumber: 123,
216
+ columnNumber: 9
196
217
  });
197
218
  }
198
219
  }, {
199
220
  fileName: import.meta.url,
200
- lineNumber: 127,
201
- columnNumber: 9
202
- })], {
203
- externals: [dataclassesModule]
204
- });
205
- expect(res).toRenderTo(d`
221
+ lineNumber: 122,
222
+ columnNumber: 7
223
+ })).toRenderTo(`
206
224
  from dataclasses import dataclass
207
225
 
208
226
 
@@ -210,33 +228,32 @@ describe("DataclassDeclaration", () => {
210
228
  class User:
211
229
  pass
212
230
 
213
-
214
231
  `);
215
232
  });
216
233
  it("Throws error when weakref_slot=True without slots=True", () => {
217
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
234
+ expect(() => render(_$createComponent(TestOutput, {
218
235
  path: "user.py",
236
+ externals: [dataclassesModule],
219
237
  get children() {
220
238
  return _$createComponent(py.DataclassDeclaration, {
221
239
  name: "User",
222
240
  weakrefSlot: true
223
241
  }, {
224
242
  fileName: import.meta.url,
225
- lineNumber: 165,
226
- columnNumber: 13
243
+ lineNumber: 154,
244
+ columnNumber: 11
227
245
  });
228
246
  }
229
247
  }, {
230
248
  fileName: import.meta.url,
231
- lineNumber: 164,
232
- columnNumber: 11
233
- })], {
234
- externals: [dataclassesModule]
235
- })).toThrowError(/weakref_slot=True requires slots=True in @dataclass decorator/);
249
+ lineNumber: 153,
250
+ columnNumber: 9
251
+ }))).toThrowError(/weakref_slot=True requires slots=True in @dataclass decorator/);
236
252
  });
237
253
  it("Allows weakref_slot=True when slots=True", () => {
238
- const res = toSourceText([_$createComponent(py.SourceFile, {
254
+ expect(_$createComponent(TestOutput, {
239
255
  path: "user.py",
256
+ externals: [dataclassesModule],
240
257
  get children() {
241
258
  return _$createComponent(py.DataclassDeclaration, {
242
259
  name: "User",
@@ -244,18 +261,15 @@ describe("DataclassDeclaration", () => {
244
261
  weakrefSlot: true
245
262
  }, {
246
263
  fileName: import.meta.url,
247
- lineNumber: 179,
248
- columnNumber: 11
264
+ lineNumber: 165,
265
+ columnNumber: 9
249
266
  });
250
267
  }
251
268
  }, {
252
269
  fileName: import.meta.url,
253
- lineNumber: 178,
254
- columnNumber: 9
255
- })], {
256
- externals: [dataclassesModule]
257
- });
258
- expect(res).toRenderTo(d`
270
+ lineNumber: 164,
271
+ columnNumber: 7
272
+ })).toRenderTo(`
259
273
  from dataclasses import dataclass
260
274
 
261
275
 
@@ -263,12 +277,12 @@ describe("DataclassDeclaration", () => {
263
277
  class User:
264
278
  pass
265
279
 
266
-
267
280
  `);
268
281
  });
269
282
  it("Throws error when order=True and eq=False", () => {
270
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
283
+ expect(() => render(_$createComponent(TestOutput, {
271
284
  path: "user.py",
285
+ externals: [dataclassesModule],
272
286
  get children() {
273
287
  return _$createComponent(py.DataclassDeclaration, {
274
288
  name: "User",
@@ -276,39 +290,35 @@ describe("DataclassDeclaration", () => {
276
290
  eq: false
277
291
  }, {
278
292
  fileName: import.meta.url,
279
- lineNumber: 203,
280
- columnNumber: 13
293
+ lineNumber: 184,
294
+ columnNumber: 11
281
295
  });
282
296
  }
283
297
  }, {
284
298
  fileName: import.meta.url,
285
- lineNumber: 202,
286
- columnNumber: 11
287
- })], {
288
- externals: [dataclassesModule]
289
- })).toThrowError(/order=True requires eq=True/);
299
+ lineNumber: 183,
300
+ columnNumber: 9
301
+ }))).toThrowError(/order=True requires eq=True/);
290
302
  });
291
303
  it("Creates a dataclass with order=True and no conflicting methods", () => {
292
- const res = toSourceText([_$createComponent(py.SourceFile, {
304
+ expect(_$createComponent(TestOutput, {
293
305
  path: "user.py",
306
+ externals: [dataclassesModule],
294
307
  get children() {
295
308
  return _$createComponent(py.DataclassDeclaration, {
296
309
  name: "User",
297
310
  order: true
298
311
  }, {
299
312
  fileName: import.meta.url,
300
- lineNumber: 215,
301
- columnNumber: 11
313
+ lineNumber: 193,
314
+ columnNumber: 9
302
315
  });
303
316
  }
304
317
  }, {
305
318
  fileName: import.meta.url,
306
- lineNumber: 214,
307
- columnNumber: 9
308
- })], {
309
- externals: [dataclassesModule]
310
- });
311
- expect(res).toRenderTo(d`
319
+ lineNumber: 192,
320
+ columnNumber: 7
321
+ })).toRenderTo(`
312
322
  from dataclasses import dataclass
313
323
 
314
324
 
@@ -316,12 +326,12 @@ describe("DataclassDeclaration", () => {
316
326
  class User:
317
327
  pass
318
328
 
319
-
320
329
  `);
321
330
  });
322
331
  it("Throws error when order=True and class defines __lt__", () => {
323
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
332
+ expect(() => render(_$createComponent(TestOutput, {
324
333
  path: "user.py",
334
+ externals: [dataclassesModule],
325
335
  get children() {
326
336
  return _$createComponent(py.DataclassDeclaration, {
327
337
  name: "User",
@@ -331,27 +341,26 @@ describe("DataclassDeclaration", () => {
331
341
  name: "__lt__"
332
342
  }, {
333
343
  fileName: import.meta.url,
334
- lineNumber: 240,
335
- columnNumber: 15
344
+ lineNumber: 213,
345
+ columnNumber: 13
336
346
  });
337
347
  }
338
348
  }, {
339
349
  fileName: import.meta.url,
340
- lineNumber: 239,
341
- columnNumber: 13
350
+ lineNumber: 212,
351
+ columnNumber: 11
342
352
  });
343
353
  }
344
354
  }, {
345
355
  fileName: import.meta.url,
346
- lineNumber: 238,
347
- columnNumber: 11
348
- })], {
349
- externals: [dataclassesModule]
350
- })).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
356
+ lineNumber: 211,
357
+ columnNumber: 9
358
+ }))).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
351
359
  });
352
360
  it("Throws error when order=True and class defines __le__", () => {
353
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
361
+ expect(() => render(_$createComponent(TestOutput, {
354
362
  path: "user.py",
363
+ externals: [dataclassesModule],
355
364
  get children() {
356
365
  return _$createComponent(py.DataclassDeclaration, {
357
366
  name: "User",
@@ -361,27 +370,26 @@ describe("DataclassDeclaration", () => {
361
370
  name: "__le__"
362
371
  }, {
363
372
  fileName: import.meta.url,
364
- lineNumber: 257,
365
- columnNumber: 15
373
+ lineNumber: 227,
374
+ columnNumber: 13
366
375
  });
367
376
  }
368
377
  }, {
369
378
  fileName: import.meta.url,
370
- lineNumber: 256,
371
- columnNumber: 13
379
+ lineNumber: 226,
380
+ columnNumber: 11
372
381
  });
373
382
  }
374
383
  }, {
375
384
  fileName: import.meta.url,
376
- lineNumber: 255,
377
- columnNumber: 11
378
- })], {
379
- externals: [dataclassesModule]
380
- })).toThrowError(/Cannot specify order=True when the class already defines __le__\(\)/);
385
+ lineNumber: 225,
386
+ columnNumber: 9
387
+ }))).toThrowError(/Cannot specify order=True when the class already defines __le__\(\)/);
381
388
  });
382
389
  it("Throws error when order=True and class defines __gt__", () => {
383
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
390
+ expect(() => render(_$createComponent(TestOutput, {
384
391
  path: "user.py",
392
+ externals: [dataclassesModule],
385
393
  get children() {
386
394
  return _$createComponent(py.DataclassDeclaration, {
387
395
  name: "User",
@@ -391,27 +399,26 @@ describe("DataclassDeclaration", () => {
391
399
  name: "__gt__"
392
400
  }, {
393
401
  fileName: import.meta.url,
394
- lineNumber: 274,
395
- columnNumber: 15
402
+ lineNumber: 241,
403
+ columnNumber: 13
396
404
  });
397
405
  }
398
406
  }, {
399
407
  fileName: import.meta.url,
400
- lineNumber: 273,
401
- columnNumber: 13
408
+ lineNumber: 240,
409
+ columnNumber: 11
402
410
  });
403
411
  }
404
412
  }, {
405
413
  fileName: import.meta.url,
406
- lineNumber: 272,
407
- columnNumber: 11
408
- })], {
409
- externals: [dataclassesModule]
410
- })).toThrowError(/Cannot specify order=True when the class already defines __gt__\(\)/);
414
+ lineNumber: 239,
415
+ columnNumber: 9
416
+ }))).toThrowError(/Cannot specify order=True when the class already defines __gt__\(\)/);
411
417
  });
412
418
  it("Throws error when order=True and class defines __ge__", () => {
413
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
419
+ expect(() => render(_$createComponent(TestOutput, {
414
420
  path: "user.py",
421
+ externals: [dataclassesModule],
415
422
  get children() {
416
423
  return _$createComponent(py.DataclassDeclaration, {
417
424
  name: "User",
@@ -421,23 +428,21 @@ describe("DataclassDeclaration", () => {
421
428
  name: "__ge__"
422
429
  }, {
423
430
  fileName: import.meta.url,
424
- lineNumber: 291,
425
- columnNumber: 15
431
+ lineNumber: 255,
432
+ columnNumber: 13
426
433
  });
427
434
  }
428
435
  }, {
429
436
  fileName: import.meta.url,
430
- lineNumber: 290,
431
- columnNumber: 13
437
+ lineNumber: 254,
438
+ columnNumber: 11
432
439
  });
433
440
  }
434
441
  }, {
435
442
  fileName: import.meta.url,
436
- lineNumber: 289,
437
- columnNumber: 11
438
- })], {
439
- externals: [dataclassesModule]
440
- })).toThrowError(/Cannot specify order=True when the class already defines __ge__\(\)/);
443
+ lineNumber: 253,
444
+ columnNumber: 9
445
+ }))).toThrowError(/Cannot specify order=True when the class already defines __ge__\(\)/);
441
446
  });
442
447
  it("Throws error when order=True and a wrapper defines __lt__", () => {
443
448
  function Wrapper() {
@@ -445,12 +450,13 @@ describe("DataclassDeclaration", () => {
445
450
  name: "__lt__"
446
451
  }, {
447
452
  fileName: import.meta.url,
448
- lineNumber: 304,
453
+ lineNumber: 266,
449
454
  columnNumber: 14
450
455
  });
451
456
  }
452
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
457
+ expect(() => render(_$createComponent(TestOutput, {
453
458
  path: "user.py",
459
+ externals: [dataclassesModule],
454
460
  get children() {
455
461
  return _$createComponent(py.DataclassDeclaration, {
456
462
  name: "User",
@@ -458,27 +464,26 @@ describe("DataclassDeclaration", () => {
458
464
  get children() {
459
465
  return _$createComponent(Wrapper, {}, {
460
466
  fileName: import.meta.url,
461
- lineNumber: 311,
462
- columnNumber: 15
467
+ lineNumber: 272,
468
+ columnNumber: 13
463
469
  });
464
470
  }
465
471
  }, {
466
472
  fileName: import.meta.url,
467
- lineNumber: 310,
468
- columnNumber: 13
473
+ lineNumber: 271,
474
+ columnNumber: 11
469
475
  });
470
476
  }
471
477
  }, {
472
478
  fileName: import.meta.url,
473
- lineNumber: 309,
474
- columnNumber: 11
475
- })], {
476
- externals: [dataclassesModule]
477
- })).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
479
+ lineNumber: 270,
480
+ columnNumber: 9
481
+ }))).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
478
482
  });
479
483
  it("Throws error when unsafe_hash=True and class defines __hash__", () => {
480
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
484
+ expect(() => render(_$createComponent(TestOutput, {
481
485
  path: "user.py",
486
+ externals: [dataclassesModule],
482
487
  get children() {
483
488
  return _$createComponent(py.DataclassDeclaration, {
484
489
  name: "User",
@@ -488,27 +493,26 @@ describe("DataclassDeclaration", () => {
488
493
  name: "__hash__"
489
494
  }, {
490
495
  fileName: import.meta.url,
491
- lineNumber: 328,
492
- columnNumber: 15
496
+ lineNumber: 286,
497
+ columnNumber: 13
493
498
  });
494
499
  }
495
500
  }, {
496
501
  fileName: import.meta.url,
497
- lineNumber: 327,
498
- columnNumber: 13
502
+ lineNumber: 285,
503
+ columnNumber: 11
499
504
  });
500
505
  }
501
506
  }, {
502
507
  fileName: import.meta.url,
503
- lineNumber: 326,
504
- columnNumber: 11
505
- })], {
506
- externals: [dataclassesModule]
507
- })).toThrowError(/Cannot specify unsafe_hash=True when the class already defines __hash__\(\)/);
508
+ lineNumber: 284,
509
+ columnNumber: 9
510
+ }))).toThrowError(/Cannot specify unsafe_hash=True when the class already defines __hash__\(\)/);
508
511
  });
509
512
  it("Throws error when frozen=True and class defines __setattr__", () => {
510
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
513
+ expect(() => render(_$createComponent(TestOutput, {
511
514
  path: "user.py",
515
+ externals: [dataclassesModule],
512
516
  get children() {
513
517
  return _$createComponent(py.DataclassDeclaration, {
514
518
  name: "User",
@@ -518,27 +522,26 @@ describe("DataclassDeclaration", () => {
518
522
  name: "__setattr__"
519
523
  }, {
520
524
  fileName: import.meta.url,
521
- lineNumber: 345,
522
- columnNumber: 15
525
+ lineNumber: 300,
526
+ columnNumber: 13
523
527
  });
524
528
  }
525
529
  }, {
526
530
  fileName: import.meta.url,
527
- lineNumber: 344,
528
- columnNumber: 13
531
+ lineNumber: 299,
532
+ columnNumber: 11
529
533
  });
530
534
  }
531
535
  }, {
532
536
  fileName: import.meta.url,
533
- lineNumber: 343,
534
- columnNumber: 11
535
- })], {
536
- externals: [dataclassesModule]
537
- })).toThrowError(/Cannot specify frozen=True when the class already defines __setattr__\(\)/);
537
+ lineNumber: 298,
538
+ columnNumber: 9
539
+ }))).toThrowError(/Cannot specify frozen=True when the class already defines __setattr__\(\)/);
538
540
  });
539
541
  it("Throws errorwhen frozen=True and class defines __delattr__", () => {
540
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
542
+ expect(() => render(_$createComponent(TestOutput, {
541
543
  path: "user.py",
544
+ externals: [dataclassesModule],
542
545
  get children() {
543
546
  return _$createComponent(py.DataclassDeclaration, {
544
547
  name: "User",
@@ -548,27 +551,26 @@ describe("DataclassDeclaration", () => {
548
551
  name: "__delattr__"
549
552
  }, {
550
553
  fileName: import.meta.url,
551
- lineNumber: 362,
552
- columnNumber: 15
554
+ lineNumber: 314,
555
+ columnNumber: 13
553
556
  });
554
557
  }
555
558
  }, {
556
559
  fileName: import.meta.url,
557
- lineNumber: 361,
558
- columnNumber: 13
560
+ lineNumber: 313,
561
+ columnNumber: 11
559
562
  });
560
563
  }
561
564
  }, {
562
565
  fileName: import.meta.url,
563
- lineNumber: 360,
564
- columnNumber: 11
565
- })], {
566
- externals: [dataclassesModule]
567
- })).toThrowError(/Cannot specify frozen=True when the class already defines __delattr__\(\)/);
566
+ lineNumber: 312,
567
+ columnNumber: 9
568
+ }))).toThrowError(/Cannot specify frozen=True when the class already defines __delattr__\(\)/);
568
569
  });
569
570
  it("Throws error when slots=True and class defines __slots__", () => {
570
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
571
+ expect(() => render(_$createComponent(TestOutput, {
571
572
  path: "user.py",
573
+ externals: [dataclassesModule],
572
574
  get children() {
573
575
  return _$createComponent(py.DataclassDeclaration, {
574
576
  name: "User",
@@ -578,27 +580,26 @@ describe("DataclassDeclaration", () => {
578
580
  name: "__slots__"
579
581
  }, {
580
582
  fileName: import.meta.url,
581
- lineNumber: 379,
582
- columnNumber: 15
583
+ lineNumber: 328,
584
+ columnNumber: 13
583
585
  });
584
586
  }
585
587
  }, {
586
588
  fileName: import.meta.url,
587
- lineNumber: 378,
588
- columnNumber: 13
589
+ lineNumber: 327,
590
+ columnNumber: 11
589
591
  });
590
592
  }
591
593
  }, {
592
594
  fileName: import.meta.url,
593
- lineNumber: 377,
594
- columnNumber: 11
595
- })], {
596
- externals: [dataclassesModule]
597
- })).toThrowError(/Cannot specify slots=True when the class already defines __slots__\(\)/);
595
+ lineNumber: 326,
596
+ columnNumber: 9
597
+ }))).toThrowError(/Cannot specify slots=True when the class already defines __slots__\(\)/);
598
598
  });
599
599
  it("Creates a dataclass with kw_only=True on decorator (sentinel not used)", () => {
600
- const res = toSourceText([_$createComponent(py.SourceFile, {
600
+ expect(_$createComponent(TestOutput, {
601
601
  path: "user.py",
602
+ externals: [dataclassesModule],
602
603
  get children() {
603
604
  return _$createComponent(py.DataclassDeclaration, {
604
605
  name: "User",
@@ -611,24 +612,21 @@ describe("DataclassDeclaration", () => {
611
612
  type: "int"
612
613
  }, {
613
614
  fileName: import.meta.url,
614
- lineNumber: 395,
615
- columnNumber: 13
615
+ lineNumber: 341,
616
+ columnNumber: 11
616
617
  });
617
618
  }
618
619
  }, {
619
620
  fileName: import.meta.url,
620
- lineNumber: 394,
621
- columnNumber: 11
621
+ lineNumber: 340,
622
+ columnNumber: 9
622
623
  });
623
624
  }
624
625
  }, {
625
626
  fileName: import.meta.url,
626
- lineNumber: 393,
627
- columnNumber: 9
628
- })], {
629
- externals: [dataclassesModule]
630
- });
631
- expect(res).toRenderTo(d`
627
+ lineNumber: 339,
628
+ columnNumber: 7
629
+ })).toRenderTo(`
632
630
  from dataclasses import dataclass
633
631
 
634
632
 
@@ -636,30 +634,27 @@ describe("DataclassDeclaration", () => {
636
634
  class User:
637
635
  id: int
638
636
 
639
-
640
637
  `);
641
638
  });
642
639
  it("Creates a dataclass with base classes", () => {
643
- const res = toSourceText([_$createComponent(py.SourceFile, {
640
+ expect(_$createComponent(TestOutput, {
644
641
  path: "user.py",
642
+ externals: [dataclassesModule],
645
643
  get children() {
646
644
  return _$createComponent(py.DataclassDeclaration, {
647
645
  name: "User",
648
646
  bases: ["Base"]
649
647
  }, {
650
648
  fileName: import.meta.url,
651
- lineNumber: 424,
652
- columnNumber: 11
649
+ lineNumber: 365,
650
+ columnNumber: 9
653
651
  });
654
652
  }
655
653
  }, {
656
654
  fileName: import.meta.url,
657
- lineNumber: 423,
658
- columnNumber: 9
659
- })], {
660
- externals: [dataclassesModule]
661
- });
662
- expect(res).toRenderTo(d`
655
+ lineNumber: 364,
656
+ columnNumber: 7
657
+ })).toRenderTo(`
663
658
  from dataclasses import dataclass
664
659
 
665
660
 
@@ -667,12 +662,12 @@ describe("DataclassDeclaration", () => {
667
662
  class User(Base):
668
663
  pass
669
664
 
670
-
671
665
  `);
672
666
  });
673
667
  it("Throws error when more than one KW_ONLY sentinel is present", () => {
674
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
668
+ expect(() => render(_$createComponent(TestOutput, {
675
669
  path: "user.py",
670
+ externals: [dataclassesModule],
676
671
  get children() {
677
672
  return _$createComponent(py.DataclassDeclaration, {
678
673
  name: "User",
@@ -690,8 +685,8 @@ describe("DataclassDeclaration", () => {
690
685
  omitNone: true
691
686
  }, {
692
687
  fileName: import.meta.url,
693
- lineNumber: 450,
694
- columnNumber: 15
688
+ lineNumber: 385,
689
+ columnNumber: 13
695
690
  }), _$createComponent(py.VariableDeclaration, {
696
691
  instanceVariable: true,
697
692
  get name() {
@@ -705,27 +700,26 @@ describe("DataclassDeclaration", () => {
705
700
  omitNone: true
706
701
  }, {
707
702
  fileName: import.meta.url,
708
- lineNumber: 456,
709
- columnNumber: 15
703
+ lineNumber: 391,
704
+ columnNumber: 13
710
705
  })];
711
706
  }
712
707
  }, {
713
708
  fileName: import.meta.url,
714
- lineNumber: 449,
715
- columnNumber: 13
709
+ lineNumber: 384,
710
+ columnNumber: 11
716
711
  });
717
712
  }
718
713
  }, {
719
714
  fileName: import.meta.url,
720
- lineNumber: 448,
721
- columnNumber: 11
722
- })], {
723
- externals: [dataclassesModule]
724
- })).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
715
+ lineNumber: 383,
716
+ columnNumber: 9
717
+ }))).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
725
718
  });
726
719
  it("Will raise arg validation errors first over member conflicts", () => {
727
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
720
+ expect(() => render(_$createComponent(TestOutput, {
728
721
  path: "user.py",
722
+ externals: [dataclassesModule],
729
723
  get children() {
730
724
  return _$createComponent(py.DataclassDeclaration, {
731
725
  name: "User",
@@ -736,27 +730,26 @@ describe("DataclassDeclaration", () => {
736
730
  name: "__lt__"
737
731
  }, {
738
732
  fileName: import.meta.url,
739
- lineNumber: 476,
740
- columnNumber: 15
733
+ lineNumber: 408,
734
+ columnNumber: 13
741
735
  });
742
736
  }
743
737
  }, {
744
738
  fileName: import.meta.url,
745
- lineNumber: 475,
746
- columnNumber: 13
739
+ lineNumber: 407,
740
+ columnNumber: 11
747
741
  });
748
742
  }
749
743
  }, {
750
744
  fileName: import.meta.url,
751
- lineNumber: 474,
752
- columnNumber: 11
753
- })], {
754
- externals: [dataclassesModule]
755
- })).toThrowError(/order=True requires eq=True/);
745
+ lineNumber: 406,
746
+ columnNumber: 9
747
+ }))).toThrowError(/order=True requires eq=True/);
756
748
  });
757
749
  it("Does not raise errors for member conflict checks without the equivalent kwargs", () => {
758
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
750
+ expect(() => render(_$createComponent(TestOutput, {
759
751
  path: "user.py",
752
+ externals: [dataclassesModule],
760
753
  get children() {
761
754
  return _$createComponent(py.DataclassDeclaration, {
762
755
  name: "User",
@@ -765,69 +758,65 @@ describe("DataclassDeclaration", () => {
765
758
  name: "__lt__"
766
759
  }, {
767
760
  fileName: import.meta.url,
768
- lineNumber: 491,
769
- columnNumber: 15
761
+ lineNumber: 420,
762
+ columnNumber: 13
770
763
  }), _$createComponent(py.DunderMethodDeclaration, {
771
764
  name: "__slots__"
772
765
  }, {
773
766
  fileName: import.meta.url,
774
- lineNumber: 492,
775
- columnNumber: 15
767
+ lineNumber: 421,
768
+ columnNumber: 13
776
769
  }), _$createComponent(py.DunderMethodDeclaration, {
777
770
  name: "__hash__"
778
771
  }, {
779
772
  fileName: import.meta.url,
780
- lineNumber: 493,
781
- columnNumber: 15
773
+ lineNumber: 422,
774
+ columnNumber: 13
782
775
  }), _$createComponent(py.DunderMethodDeclaration, {
783
776
  name: "__setattr__"
784
777
  }, {
785
778
  fileName: import.meta.url,
786
- lineNumber: 494,
787
- columnNumber: 15
779
+ lineNumber: 423,
780
+ columnNumber: 13
788
781
  }), _$createComponent(py.DunderMethodDeclaration, {
789
782
  name: "__delattr__"
790
783
  }, {
791
784
  fileName: import.meta.url,
792
- lineNumber: 495,
793
- columnNumber: 15
785
+ lineNumber: 424,
786
+ columnNumber: 13
794
787
  })];
795
788
  }
796
789
  }, {
797
790
  fileName: import.meta.url,
798
- lineNumber: 490,
799
- columnNumber: 13
791
+ lineNumber: 419,
792
+ columnNumber: 11
800
793
  });
801
794
  }
802
795
  }, {
803
796
  fileName: import.meta.url,
804
- lineNumber: 489,
805
- columnNumber: 11
806
- })], {
807
- externals: [dataclassesModule]
808
- })).not.toThrow();
797
+ lineNumber: 418,
798
+ columnNumber: 9
799
+ }))).not.toThrow();
809
800
  });
810
801
  it("Allows unsafe_hash=True when no __hash__ is defined", () => {
811
- const res = toSourceText([_$createComponent(py.SourceFile, {
802
+ expect(_$createComponent(TestOutput, {
812
803
  path: "user.py",
804
+ externals: [dataclassesModule],
813
805
  get children() {
814
806
  return _$createComponent(py.DataclassDeclaration, {
815
807
  name: "User",
816
808
  unsafeHash: true
817
809
  }, {
818
810
  fileName: import.meta.url,
819
- lineNumber: 508,
820
- columnNumber: 11
811
+ lineNumber: 434,
812
+ columnNumber: 9
821
813
  });
822
814
  }
823
815
  }, {
824
816
  fileName: import.meta.url,
825
- lineNumber: 507,
826
- columnNumber: 9
827
- })], {
828
- externals: [dataclassesModule]
829
- });
830
- expect(res).toRenderTo(d`
817
+ lineNumber: 433,
818
+ columnNumber: 7
819
+ })).toRenderTo(`
831
820
  from dataclasses import dataclass
832
821
 
833
822
 
@@ -835,7 +824,6 @@ describe("DataclassDeclaration", () => {
835
824
  class User:
836
825
  pass
837
826
 
838
-
839
827
  `);
840
828
  });
841
829
  it("Counts KW_ONLY sentinels through wrappers (symbol-level)", () => {
@@ -853,12 +841,13 @@ describe("DataclassDeclaration", () => {
853
841
  omitNone: true
854
842
  }, {
855
843
  fileName: import.meta.url,
856
- lineNumber: 530,
844
+ lineNumber: 452,
857
845
  columnNumber: 9
858
846
  });
859
847
  }
860
- expect(() => toSourceText([_$createComponent(py.SourceFile, {
848
+ expect(() => render(_$createComponent(TestOutput, {
861
849
  path: "user.py",
850
+ externals: [dataclassesModule],
862
851
  get children() {
863
852
  return _$createComponent(py.DataclassDeclaration, {
864
853
  name: "User",
@@ -876,49 +865,45 @@ describe("DataclassDeclaration", () => {
876
865
  omitNone: true
877
866
  }, {
878
867
  fileName: import.meta.url,
879
- lineNumber: 543,
880
- columnNumber: 15
868
+ lineNumber: 464,
869
+ columnNumber: 13
881
870
  }), _$createComponent(Wrapper, {}, {
882
871
  fileName: import.meta.url,
883
- lineNumber: 549,
884
- columnNumber: 15
872
+ lineNumber: 470,
873
+ columnNumber: 13
885
874
  })];
886
875
  }
887
876
  }, {
888
877
  fileName: import.meta.url,
889
- lineNumber: 542,
890
- columnNumber: 13
878
+ lineNumber: 463,
879
+ columnNumber: 11
891
880
  });
892
881
  }
893
882
  }, {
894
883
  fileName: import.meta.url,
895
- lineNumber: 541,
896
- columnNumber: 11
897
- })], {
898
- externals: [dataclassesModule]
899
- })).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
884
+ lineNumber: 462,
885
+ columnNumber: 9
886
+ }))).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
900
887
  });
901
888
  it("Allows frozen=True when no conflicting dunders exist", () => {
902
- const res = toSourceText([_$createComponent(py.SourceFile, {
889
+ expect(_$createComponent(TestOutput, {
903
890
  path: "user.py",
891
+ externals: [dataclassesModule],
904
892
  get children() {
905
893
  return _$createComponent(py.DataclassDeclaration, {
906
894
  name: "User",
907
895
  frozen: true
908
896
  }, {
909
897
  fileName: import.meta.url,
910
- lineNumber: 562,
911
- columnNumber: 11
898
+ lineNumber: 480,
899
+ columnNumber: 9
912
900
  });
913
901
  }
914
902
  }, {
915
903
  fileName: import.meta.url,
916
- lineNumber: 561,
917
- columnNumber: 9
918
- })], {
919
- externals: [dataclassesModule]
920
- });
921
- expect(res).toRenderTo(d`
904
+ lineNumber: 479,
905
+ columnNumber: 7
906
+ })).toRenderTo(`
922
907
  from dataclasses import dataclass
923
908
 
924
909
 
@@ -926,30 +911,27 @@ describe("DataclassDeclaration", () => {
926
911
  class User:
927
912
  pass
928
913
 
929
-
930
914
  `);
931
915
  });
932
916
  it("Allows slots=True when no __slots__ is defined", () => {
933
- const res = toSourceText([_$createComponent(py.SourceFile, {
917
+ expect(_$createComponent(TestOutput, {
934
918
  path: "user.py",
919
+ externals: [dataclassesModule],
935
920
  get children() {
936
921
  return _$createComponent(py.DataclassDeclaration, {
937
922
  name: "User",
938
923
  slots: true
939
924
  }, {
940
925
  fileName: import.meta.url,
941
- lineNumber: 585,
942
- columnNumber: 11
926
+ lineNumber: 498,
927
+ columnNumber: 9
943
928
  });
944
929
  }
945
930
  }, {
946
931
  fileName: import.meta.url,
947
- lineNumber: 584,
948
- columnNumber: 9
949
- })], {
950
- externals: [dataclassesModule]
951
- });
952
- expect(res).toRenderTo(d`
932
+ lineNumber: 497,
933
+ columnNumber: 7
934
+ })).toRenderTo(`
953
935
  from dataclasses import dataclass
954
936
 
955
937
 
@@ -957,111 +939,116 @@ describe("DataclassDeclaration", () => {
957
939
  class User:
958
940
  pass
959
941
 
960
-
961
942
  `);
962
943
  });
963
944
  it("Forwards refkey prop for symbol resolution in type references", () => {
964
945
  const userRefkey = refkey();
965
- const res = toSourceTextMultiple([_$createComponent(py.SourceFile, {
966
- path: "models.py",
946
+ expect(_$createComponent(TestOutputDirectory, {
947
+ externals: [dataclassesModule],
967
948
  get children() {
968
- return _$createComponent(py.DataclassDeclaration, {
969
- name: "User",
970
- refkey: userRefkey,
949
+ return [_$createComponent(py.SourceFile, {
950
+ path: "models.py",
971
951
  get children() {
972
- return [_$createComponent(py.VariableDeclaration, {
973
- instanceVariable: true,
974
- omitNone: true,
975
- name: "id",
976
- type: "int"
977
- }, {
978
- fileName: import.meta.url,
979
- lineNumber: 610,
980
- columnNumber: 13
981
- }), _$createComponent(py.VariableDeclaration, {
982
- instanceVariable: true,
983
- omitNone: true,
984
- name: "name",
985
- type: "str"
952
+ return _$createComponent(py.DataclassDeclaration, {
953
+ name: "User",
954
+ refkey: userRefkey,
955
+ get children() {
956
+ return [_$createComponent(py.VariableDeclaration, {
957
+ instanceVariable: true,
958
+ omitNone: true,
959
+ name: "id",
960
+ type: "int"
961
+ }, {
962
+ fileName: import.meta.url,
963
+ lineNumber: 519,
964
+ columnNumber: 13
965
+ }), _$createComponent(py.VariableDeclaration, {
966
+ instanceVariable: true,
967
+ omitNone: true,
968
+ name: "name",
969
+ type: "str"
970
+ }, {
971
+ fileName: import.meta.url,
972
+ lineNumber: 525,
973
+ columnNumber: 13
974
+ })];
975
+ }
986
976
  }, {
987
977
  fileName: import.meta.url,
988
- lineNumber: 616,
989
- columnNumber: 13
990
- })];
978
+ lineNumber: 518,
979
+ columnNumber: 11
980
+ });
991
981
  }
992
982
  }, {
993
983
  fileName: import.meta.url,
994
- lineNumber: 609,
995
- columnNumber: 11
996
- });
997
- }
998
- }, {
999
- fileName: import.meta.url,
1000
- lineNumber: 608,
1001
- columnNumber: 9
1002
- }), _$createComponent(py.SourceFile, {
1003
- path: "services.py",
1004
- get children() {
1005
- return _$createComponent(py.FunctionDeclaration, {
1006
- name: "get_user",
1007
- returnType: userRefkey,
984
+ lineNumber: 517,
985
+ columnNumber: 9
986
+ }), _$createComponent(py.SourceFile, {
987
+ path: "services.py",
1008
988
  get children() {
1009
- return [_$createComponent(py.VariableDeclaration, {
1010
- name: "user",
1011
- type: userRefkey,
1012
- get initializer() {
1013
- return _$createComponent(py.ClassInstantiation, {
1014
- target: userRefkey,
1015
- args: ["1", '"Alice"']
989
+ return _$createComponent(py.FunctionDeclaration, {
990
+ name: "get_user",
991
+ returnType: userRefkey,
992
+ get children() {
993
+ return [_$createComponent(py.VariableDeclaration, {
994
+ name: "user",
995
+ type: userRefkey,
996
+ get initializer() {
997
+ return _$createComponent(py.ClassInstantiation, {
998
+ target: userRefkey,
999
+ args: ["1", '"Alice"']
1000
+ }, {
1001
+ fileName: import.meta.url,
1002
+ lineNumber: 539,
1003
+ columnNumber: 17
1004
+ });
1005
+ }
1016
1006
  }, {
1017
1007
  fileName: import.meta.url,
1018
- lineNumber: 630,
1019
- columnNumber: 17
1020
- });
1008
+ lineNumber: 535,
1009
+ columnNumber: 13
1010
+ }), _$createIntrinsic("hbr", {}, {
1011
+ fileName: import.meta.url,
1012
+ lineNumber: 545,
1013
+ columnNumber: 13
1014
+ }), "return user"];
1021
1015
  }
1022
1016
  }, {
1023
1017
  fileName: import.meta.url,
1024
- lineNumber: 626,
1025
- columnNumber: 13
1026
- }), _$createIntrinsic("hbr", {}, {
1027
- fileName: import.meta.url,
1028
- lineNumber: 636,
1029
- columnNumber: 13
1030
- }), "return user"];
1018
+ lineNumber: 534,
1019
+ columnNumber: 11
1020
+ });
1031
1021
  }
1032
1022
  }, {
1033
1023
  fileName: import.meta.url,
1034
- lineNumber: 625,
1035
- columnNumber: 11
1036
- });
1024
+ lineNumber: 533,
1025
+ columnNumber: 9
1026
+ })];
1037
1027
  }
1038
1028
  }, {
1039
1029
  fileName: import.meta.url,
1040
- lineNumber: 624,
1041
- columnNumber: 9
1042
- })], {
1043
- externals: [dataclassesModule]
1044
- });
1045
- assertFileContents(res, {
1030
+ lineNumber: 516,
1031
+ columnNumber: 7
1032
+ })).toRenderTo({
1046
1033
  "models.py": `
1047
- from dataclasses import dataclass
1034
+ from dataclasses import dataclass
1048
1035
 
1049
1036
 
1050
- @dataclass
1051
- class User:
1052
- id: int
1053
- name: str
1037
+ @dataclass
1038
+ class User:
1039
+ id: int
1040
+ name: str
1054
1041
 
1055
- `,
1042
+ `,
1056
1043
  "services.py": `
1057
- from models import User
1044
+ from models import User
1058
1045
 
1059
1046
 
1060
- def get_user() -> User:
1061
- user: User = User(1, "Alice")
1062
- return user
1047
+ def get_user() -> User:
1048
+ user: User = User(1, "Alice")
1049
+ return user
1063
1050
 
1064
- `
1051
+ `
1065
1052
  });
1066
1053
  });
1067
1054
  });