@alloy-js/python 0.5.0-dev.1 → 0.5.0

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 (217) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/dev/src/components/CallSignature.js +2 -2
  3. package/dist/dev/src/components/CallSignature.js.map +1 -1
  4. package/dist/dev/src/components/ConstructorDeclaration.js +1 -1
  5. package/dist/dev/src/components/ConstructorDeclaration.js.map +1 -1
  6. package/dist/dev/src/components/DataclassDeclaration.js +5 -5
  7. package/dist/dev/src/components/DataclassDeclaration.js.map +1 -1
  8. package/dist/dev/src/components/FunctionBase.js +9 -9
  9. package/dist/dev/src/components/FunctionBase.js.map +1 -1
  10. package/dist/dev/src/components/PropertyDeclaration.js +8 -8
  11. package/dist/dev/src/components/PropertyDeclaration.js.map +1 -1
  12. package/dist/dev/src/components/PyDoc.js +64 -64
  13. package/dist/dev/src/components/PyDoc.js.map +1 -1
  14. package/dist/dev/src/components/PydanticClassDeclaration.js +5 -5
  15. package/dist/dev/src/components/PydanticClassDeclaration.js.map +1 -1
  16. package/dist/dev/src/components/SourceFile.js +44 -32
  17. package/dist/dev/src/components/SourceFile.js.map +1 -1
  18. package/dist/dev/src/symbols/python-output-symbol.js.map +1 -1
  19. package/dist/dev/test/callsignatures.test.js +471 -297
  20. package/dist/dev/test/callsignatures.test.js.map +1 -1
  21. package/dist/dev/test/class-method-declaration.test.js +21 -10
  22. package/dist/dev/test/class-method-declaration.test.js.map +1 -1
  23. package/dist/dev/test/classdeclarations.test.js +459 -393
  24. package/dist/dev/test/classdeclarations.test.js.map +1 -1
  25. package/dist/dev/test/classinstantiations.test.js +201 -168
  26. package/dist/dev/test/classinstantiations.test.js.map +1 -1
  27. package/dist/dev/test/constructordeclaration.test.js +22 -11
  28. package/dist/dev/test/constructordeclaration.test.js.map +1 -1
  29. package/dist/dev/test/dataclassdeclarations.test.js +322 -368
  30. package/dist/dev/test/dataclassdeclarations.test.js.map +1 -1
  31. package/dist/dev/test/decoratorlist.test.js +96 -49
  32. package/dist/dev/test/decoratorlist.test.js.map +1 -1
  33. package/dist/dev/test/dundermethoddeclaration.test.js +22 -11
  34. package/dist/dev/test/dundermethoddeclaration.test.js.map +1 -1
  35. package/dist/dev/test/enums.test.js +218 -184
  36. package/dist/dev/test/enums.test.js.map +1 -1
  37. package/dist/dev/test/externals.test.js +57 -45
  38. package/dist/dev/test/externals.test.js.map +1 -1
  39. package/dist/dev/test/factories.test.js +124 -50
  40. package/dist/dev/test/factories.test.js.map +1 -1
  41. package/dist/dev/test/functioncallexpressions.test.js +199 -164
  42. package/dist/dev/test/functioncallexpressions.test.js.map +1 -1
  43. package/dist/dev/test/functiondeclaration.test.js +439 -272
  44. package/dist/dev/test/functiondeclaration.test.js.map +1 -1
  45. package/dist/dev/test/imports.test.js +273 -221
  46. package/dist/dev/test/imports.test.js.map +1 -1
  47. package/dist/dev/test/memberexpressions.test.js +1237 -972
  48. package/dist/dev/test/memberexpressions.test.js.map +1 -1
  49. package/dist/dev/test/methoddeclaration.test.js +142 -78
  50. package/dist/dev/test/methoddeclaration.test.js.map +1 -1
  51. package/dist/dev/test/namepolicies.test.js +130 -94
  52. package/dist/dev/test/namepolicies.test.js.map +1 -1
  53. package/dist/dev/test/propertydeclaration.test.js +88 -59
  54. package/dist/dev/test/propertydeclaration.test.js.map +1 -1
  55. package/dist/dev/test/pydanticclassdeclarations.test.js +299 -347
  56. package/dist/dev/test/pydanticclassdeclarations.test.js.map +1 -1
  57. package/dist/dev/test/pydocs.test.js +888 -715
  58. package/dist/dev/test/pydocs.test.js.map +1 -1
  59. package/dist/dev/test/references.test.js +42 -35
  60. package/dist/dev/test/references.test.js.map +1 -1
  61. package/dist/dev/test/sourcefiles.test.js +1109 -841
  62. package/dist/dev/test/sourcefiles.test.js.map +1 -1
  63. package/dist/dev/test/staticmethoddeclaration.test.js +21 -10
  64. package/dist/dev/test/staticmethoddeclaration.test.js.map +1 -1
  65. package/dist/dev/test/type-checking-imports.test.js +408 -359
  66. package/dist/dev/test/type-checking-imports.test.js.map +1 -1
  67. package/dist/dev/test/typereference.test.js +55 -40
  68. package/dist/dev/test/typereference.test.js.map +1 -1
  69. package/dist/dev/test/uniontypeexpression.test.js +222 -146
  70. package/dist/dev/test/uniontypeexpression.test.js.map +1 -1
  71. package/dist/dev/test/utils.js +39 -77
  72. package/dist/dev/test/utils.js.map +1 -1
  73. package/dist/dev/test/values.test.js +237 -101
  74. package/dist/dev/test/values.test.js.map +1 -1
  75. package/dist/dev/test/variables.test.js +321 -203
  76. package/dist/dev/test/variables.test.js.map +1 -1
  77. package/dist/dev/test/vitest.setup.js +2 -0
  78. package/dist/dev/test/vitest.setup.js.map +1 -0
  79. package/dist/src/components/CallSignature.d.ts.map +1 -1
  80. package/dist/src/components/CallSignature.js.map +1 -1
  81. package/dist/src/components/ConstructorDeclaration.d.ts.map +1 -1
  82. package/dist/src/components/ConstructorDeclaration.js.map +1 -1
  83. package/dist/src/components/DataclassDeclaration.d.ts.map +1 -1
  84. package/dist/src/components/DataclassDeclaration.js.map +1 -1
  85. package/dist/src/components/FunctionBase.d.ts.map +1 -1
  86. package/dist/src/components/FunctionBase.js.map +1 -1
  87. package/dist/src/components/PropertyDeclaration.d.ts.map +1 -1
  88. package/dist/src/components/PropertyDeclaration.js.map +1 -1
  89. package/dist/src/components/PyDoc.d.ts.map +1 -1
  90. package/dist/src/components/PyDoc.js.map +1 -1
  91. package/dist/src/components/PydanticClassDeclaration.d.ts.map +1 -1
  92. package/dist/src/components/PydanticClassDeclaration.js.map +1 -1
  93. package/dist/src/components/SourceFile.d.ts +2 -2
  94. package/dist/src/components/SourceFile.d.ts.map +1 -1
  95. package/dist/src/components/SourceFile.js +12 -0
  96. package/dist/src/components/SourceFile.js.map +1 -1
  97. package/dist/src/symbols/python-output-symbol.d.ts.map +1 -1
  98. package/dist/src/symbols/python-output-symbol.js.map +1 -1
  99. package/dist/test/callsignatures.test.js +346 -272
  100. package/dist/test/callsignatures.test.js.map +1 -1
  101. package/dist/test/class-method-declaration.test.js +7 -4
  102. package/dist/test/class-method-declaration.test.js.map +1 -1
  103. package/dist/test/classdeclarations.test.js +302 -288
  104. package/dist/test/classdeclarations.test.js.map +1 -1
  105. package/dist/test/classinstantiations.test.js +112 -103
  106. package/dist/test/classinstantiations.test.js.map +1 -1
  107. package/dist/test/constructordeclaration.test.js +7 -4
  108. package/dist/test/constructordeclaration.test.js.map +1 -1
  109. package/dist/test/dataclassdeclarations.test.js +134 -184
  110. package/dist/test/dataclassdeclarations.test.js.map +1 -1
  111. package/dist/test/decoratorlist.test.js +59 -36
  112. package/dist/test/decoratorlist.test.js.map +1 -1
  113. package/dist/test/dundermethoddeclaration.test.js +7 -4
  114. package/dist/test/dundermethoddeclaration.test.js.map +1 -1
  115. package/dist/test/enums.test.js +161 -159
  116. package/dist/test/enums.test.js.map +1 -1
  117. package/dist/test/externals.test.js +24 -24
  118. package/dist/test/externals.test.js.map +1 -1
  119. package/dist/test/factories.test.js +75 -33
  120. package/dist/test/factories.test.js.map +1 -1
  121. package/dist/test/functioncallexpressions.test.js +117 -106
  122. package/dist/test/functioncallexpressions.test.js.map +1 -1
  123. package/dist/test/functiondeclaration.test.js +247 -180
  124. package/dist/test/functiondeclaration.test.js.map +1 -1
  125. package/dist/test/imports.test.js +171 -143
  126. package/dist/test/imports.test.js.map +1 -1
  127. package/dist/test/memberexpressions.test.js +582 -453
  128. package/dist/test/memberexpressions.test.js.map +1 -1
  129. package/dist/test/methoddeclaration.test.js +66 -46
  130. package/dist/test/methoddeclaration.test.js.map +1 -1
  131. package/dist/test/namepolicies.test.js +90 -78
  132. package/dist/test/namepolicies.test.js.map +1 -1
  133. package/dist/test/propertydeclaration.test.js +25 -20
  134. package/dist/test/propertydeclaration.test.js.map +1 -1
  135. package/dist/test/pydanticclassdeclarations.test.js +134 -190
  136. package/dist/test/pydanticclassdeclarations.test.js.map +1 -1
  137. package/dist/test/pydocs.test.js +573 -532
  138. package/dist/test/pydocs.test.js.map +1 -1
  139. package/dist/test/references.test.js +31 -28
  140. package/dist/test/references.test.js.map +1 -1
  141. package/dist/test/sourcefiles.test.js +700 -580
  142. package/dist/test/sourcefiles.test.js.map +1 -1
  143. package/dist/test/staticmethoddeclaration.test.js +7 -4
  144. package/dist/test/staticmethoddeclaration.test.js.map +1 -1
  145. package/dist/test/type-checking-imports.test.js +297 -284
  146. package/dist/test/type-checking-imports.test.js.map +1 -1
  147. package/dist/test/typereference.test.js +29 -22
  148. package/dist/test/typereference.test.js.map +1 -1
  149. package/dist/test/uniontypeexpression.test.js +124 -88
  150. package/dist/test/uniontypeexpression.test.js.map +1 -1
  151. package/dist/test/utils.d.ts +10 -17
  152. package/dist/test/utils.d.ts.map +1 -1
  153. package/dist/test/utils.js +32 -74
  154. package/dist/test/utils.js.map +1 -1
  155. package/dist/test/values.test.js +135 -67
  156. package/dist/test/values.test.js.map +1 -1
  157. package/dist/test/variables.test.js +201 -151
  158. package/dist/test/variables.test.js.map +1 -1
  159. package/dist/test/vitest.setup.d.ts +2 -0
  160. package/dist/test/vitest.setup.d.ts.map +1 -0
  161. package/dist/test/vitest.setup.js +2 -0
  162. package/dist/test/vitest.setup.js.map +1 -0
  163. package/dist/tsconfig.tsbuildinfo +1 -1
  164. package/docs/api/components/FunctionalEnumDeclaration.md +3 -6
  165. package/docs/api/components/MemberExpression.md +1 -5
  166. package/docs/api/components/SourceFile.md +20 -8
  167. package/docs/api/components/index.md +0 -2
  168. package/docs/api/functions/isTypeRefContext.md +1 -1
  169. package/docs/api/index.md +2 -2
  170. package/docs/api/types/ReferenceProps.md +7 -0
  171. package/docs/api/types/TypeRefContextProps.md +7 -0
  172. package/docs/api/types/index.md +2 -0
  173. package/package.json +11 -10
  174. package/src/components/CallSignature.tsx +4 -2
  175. package/src/components/ConstructorDeclaration.tsx +4 -2
  176. package/src/components/DataclassDeclaration.tsx +1 -2
  177. package/src/components/FunctionBase.tsx +1 -2
  178. package/src/components/PropertyDeclaration.tsx +8 -4
  179. package/src/components/PyDoc.tsx +12 -6
  180. package/src/components/PydanticClassDeclaration.tsx +1 -2
  181. package/src/components/SourceFile.tsx +6 -1
  182. package/src/symbols/python-output-symbol.ts +1 -2
  183. package/temp/api.json +107 -61
  184. package/test/callsignatures.test.tsx +309 -283
  185. package/test/class-method-declaration.test.tsx +3 -4
  186. package/test/classdeclarations.test.tsx +263 -248
  187. package/test/classinstantiations.test.tsx +115 -109
  188. package/test/constructordeclaration.test.tsx +9 -6
  189. package/test/dataclassdeclarations.test.tsx +243 -361
  190. package/test/decoratorlist.test.tsx +78 -59
  191. package/test/dundermethoddeclaration.test.tsx +3 -4
  192. package/test/enums.test.tsx +65 -81
  193. package/test/externals.test.tsx +25 -25
  194. package/test/factories.test.tsx +64 -22
  195. package/test/functioncallexpressions.test.tsx +123 -109
  196. package/test/functiondeclaration.test.tsx +209 -148
  197. package/test/imports.test.tsx +119 -91
  198. package/test/memberexpressions.test.tsx +265 -207
  199. package/test/methoddeclaration.test.tsx +84 -63
  200. package/test/namepolicies.test.tsx +69 -69
  201. package/test/propertydeclaration.test.tsx +7 -8
  202. package/test/pydanticclassdeclarations.test.tsx +355 -487
  203. package/test/pydocs.test.tsx +531 -579
  204. package/test/references.test.tsx +24 -23
  205. package/test/sourcefiles.test.tsx +527 -492
  206. package/test/staticmethoddeclaration.test.tsx +3 -4
  207. package/test/type-checking-imports.test.tsx +206 -218
  208. package/test/typereference.test.tsx +15 -12
  209. package/test/uniontypeexpression.test.tsx +74 -61
  210. package/test/utils.tsx +26 -110
  211. package/test/values.test.tsx +82 -32
  212. package/test/variables.test.tsx +162 -142
  213. package/test/vitest.setup.ts +1 -0
  214. package/tsdoc-metadata.json +1 -1
  215. package/vitest.config.ts +4 -0
  216. package/docs/api/components/Reference.md +0 -31
  217. package/docs/api/components/TypeRefContext.md +0 -41
@@ -1,7 +1,6 @@
1
- import { d } from "@alloy-js/core/testing";
2
1
  import { describe, expect, it } from "vitest";
3
2
  import { DecoratorList } from "../src/components/DecoratorList.jsx";
4
- import { toSourceText } from "./utils.js";
3
+ import { TestOutput } from "./utils.js";
5
4
 
6
5
  /**
7
6
  * Direct contract tests for `DecoratorList`. The component is exercised
@@ -12,84 +11,104 @@ import { toSourceText } from "./utils.js";
12
11
  describe("DecoratorList", () => {
13
12
  it("renders nothing when decorators is undefined", () => {
14
13
  expect(
15
- toSourceText([
16
- <>
17
- <DecoratorList />
18
- pass
19
- </>,
20
- ]),
14
+ <TestOutput>
15
+ {[
16
+ <>
17
+ <DecoratorList />
18
+ pass
19
+ </>,
20
+ ]}
21
+ </TestOutput>,
21
22
  ).toRenderTo("pass");
22
23
  });
23
24
 
24
25
  it("renders nothing when decorators is an empty array", () => {
25
26
  expect(
26
- toSourceText([
27
- <>
28
- <DecoratorList decorators={[]} />
29
- pass
30
- </>,
31
- ]),
27
+ <TestOutput>
28
+ {[
29
+ <>
30
+ <DecoratorList decorators={[]} />
31
+ pass
32
+ </>,
33
+ ]}
34
+ </TestOutput>,
32
35
  ).toRenderTo("pass");
33
36
  });
34
37
 
35
38
  it("renders a single decorator followed by exactly one hardline", () => {
36
39
  expect(
37
- toSourceText([
38
- <>
39
- <DecoratorList decorators={["@one"]} />
40
- pass
41
- </>,
42
- ]),
43
- ).toRenderTo(d`
44
- @one
45
- pass
46
- `);
40
+ <TestOutput>
41
+ {[
42
+ <>
43
+ <DecoratorList decorators={["@one"]} />
44
+ pass
45
+ </>,
46
+ ]}
47
+ </TestOutput>,
48
+ ).toRenderTo(
49
+ `
50
+ @one
51
+ pass
52
+ `,
53
+ );
47
54
  });
48
55
 
49
56
  it("renders multiple decorators with no blank lines between adjacent entries", () => {
50
57
  expect(
51
- toSourceText([
52
- <>
53
- <DecoratorList decorators={["@one", "@two", "@three"]} />
54
- pass
55
- </>,
56
- ]),
57
- ).toRenderTo(d`
58
- @one
59
- @two
60
- @three
61
- pass
62
- `);
58
+ <TestOutput>
59
+ {[
60
+ <>
61
+ <DecoratorList decorators={["@one", "@two", "@three"]} />
62
+ pass
63
+ </>,
64
+ ]}
65
+ </TestOutput>,
66
+ ).toRenderTo(
67
+ `
68
+ @one
69
+ @two
70
+ @three
71
+ pass
72
+ `,
73
+ );
63
74
  });
64
75
 
65
76
  it("preserves source order: first entry is topmost (= applied last)", () => {
66
77
  expect(
67
- toSourceText([
68
- <>
69
- <DecoratorList decorators={["@outer", "@middle", "@inner"]} />
70
- pass
71
- </>,
72
- ]),
73
- ).toRenderTo(d`
74
- @outer
75
- @middle
76
- @inner
77
- pass
78
- `);
78
+ <TestOutput>
79
+ {[
80
+ <>
81
+ <DecoratorList decorators={["@outer", "@middle", "@inner"]} />
82
+ pass
83
+ </>,
84
+ ]}
85
+ </TestOutput>,
86
+ ).toRenderTo(
87
+ `
88
+ @outer
89
+ @middle
90
+ @inner
91
+ pass
92
+ `,
93
+ );
79
94
  });
80
95
 
81
96
  it("skips falsy entries without emitting blank lines", () => {
82
97
  expect(
83
- toSourceText([
84
- <>
85
- <DecoratorList decorators={["@one", false, undefined, "@two"]} />
86
- pass
87
- </>,
88
- ]),
89
- ).toRenderTo(d`
90
- @one
91
- @two
92
- pass
93
- `);
98
+ <TestOutput>
99
+ {[
100
+ <>
101
+ <DecoratorList decorators={["@one", false, undefined, "@two"]} />
102
+ pass
103
+ </>,
104
+ ]}
105
+ </TestOutput>,
106
+ ).toRenderTo(
107
+ `
108
+ @one
109
+ @two
110
+ pass
111
+ `,
112
+ );
94
113
  });
95
114
  });
@@ -1,7 +1,6 @@
1
- import { d } from "@alloy-js/core/testing";
2
1
  import { describe, expect, it } from "vitest";
3
2
  import * as py from "../src/index.js";
4
- import { toSourceText } from "./utils.js";
3
+ import { TestOutput } from "./utils.js";
5
4
 
6
5
  describe("Dunder/Constructor Declarations", () => {
7
6
  it("renders dunder methods with parameters", () => {
@@ -19,7 +18,7 @@ describe("Dunder/Constructor Declarations", () => {
19
18
  </py.ClassDeclaration>
20
19
  );
21
20
 
22
- expect(toSourceText([decl])).toBe(d`
21
+ expect(<TestOutput>{decl}</TestOutput>).toRenderTo(`
23
22
  class MyClass:
24
23
  def __init__(self, x: int):
25
24
  self.attribute = "value"
@@ -42,7 +41,7 @@ describe("Dunder/Constructor Declarations", () => {
42
41
  </py.ClassDeclaration>
43
42
  );
44
43
 
45
- expect(toSourceText([decl])).toBe(d`
44
+ expect(<TestOutput>{decl}</TestOutput>).toRenderTo(`
46
45
  class MyClass:
47
46
  def __new__(cls, *args, **kwargs):
48
47
  pass
@@ -1,14 +1,13 @@
1
1
  import { refkey } from "@alloy-js/core";
2
- import { d } from "@alloy-js/core/testing";
3
2
  import { describe, expect, it } from "vitest";
4
3
  import { enumModule } from "../src/builtins/python.js";
5
4
  import * as py from "../src/index.js";
6
- import { toSourceText } from "./utils.jsx";
5
+ import { TestOutput } from "./utils.js";
7
6
 
8
7
  describe("Python Enum", () => {
9
8
  it("renders class-level decorators above ClassEnumDeclaration", () => {
10
- const result = toSourceText(
11
- [
9
+ expect(
10
+ <TestOutput externals={[enumModule]}>
12
11
  <py.ClassEnumDeclaration
13
12
  name="Color"
14
13
  baseType="IntEnum"
@@ -17,12 +16,10 @@ describe("Python Enum", () => {
17
16
  { name: "RED", value: 1 },
18
17
  { name: "GREEN", value: 2 },
19
18
  ]}
20
- />,
21
- ],
22
- { externals: [enumModule] },
23
- );
24
-
25
- expect(result).toRenderTo(d`
19
+ />
20
+ </TestOutput>,
21
+ ).toRenderTo(
22
+ `
26
23
  from enum import IntEnum
27
24
 
28
25
 
@@ -31,13 +28,13 @@ describe("Python Enum", () => {
31
28
  RED = 1
32
29
  GREEN = 2
33
30
 
34
-
35
- `);
31
+ `,
32
+ );
36
33
  });
37
34
 
38
35
  it("class enum with explicit values", () => {
39
- const result = toSourceText(
40
- [
36
+ expect(
37
+ <TestOutput externals={[enumModule]}>
41
38
  <py.ClassEnumDeclaration
42
39
  name="Color"
43
40
  baseType="IntEnum"
@@ -46,11 +43,10 @@ describe("Python Enum", () => {
46
43
  { name: "GREEN", value: "2" },
47
44
  { name: "BLUE", value: "3" },
48
45
  ]}
49
- />,
50
- ],
51
- { externals: [enumModule] },
52
- );
53
- const expected = d`
46
+ />
47
+ </TestOutput>,
48
+ ).toRenderTo(
49
+ `
54
50
  from enum import IntEnum
55
51
 
56
52
 
@@ -59,14 +55,13 @@ describe("Python Enum", () => {
59
55
  GREEN = 2
60
56
  BLUE = 3
61
57
 
62
-
63
- `;
64
- expect(result).toRenderTo(expected);
58
+ `,
59
+ );
65
60
  });
66
61
 
67
62
  it("class enum with jsValues", () => {
68
- const result = toSourceText(
69
- [
63
+ expect(
64
+ <TestOutput externals={[enumModule]}>
70
65
  <py.ClassEnumDeclaration
71
66
  name="Color"
72
67
  baseType="IntEnum"
@@ -75,11 +70,10 @@ describe("Python Enum", () => {
75
70
  { name: "GREEN", jsValue: 2 },
76
71
  { name: "BLUE", jsValue: "3" },
77
72
  ]}
78
- />,
79
- ],
80
- { externals: [enumModule] },
81
- );
82
- const expected = d`
73
+ />
74
+ </TestOutput>,
75
+ ).toRenderTo(
76
+ `
83
77
  from enum import IntEnum
84
78
 
85
79
 
@@ -88,14 +82,13 @@ describe("Python Enum", () => {
88
82
  GREEN = 2
89
83
  BLUE = "3"
90
84
 
91
-
92
- `;
93
- expect(result).toRenderTo(expected);
85
+ `,
86
+ );
94
87
  });
95
88
 
96
89
  it("class enum with a refkey as jsValue", () => {
97
- const result = toSourceText(
98
- [
90
+ expect(
91
+ <TestOutput externals={[enumModule]}>
99
92
  <py.StatementList>
100
93
  <py.ClassDeclaration name="Dog" refkey={refkey("Dog")} />
101
94
  <py.ClassDeclaration name="Cat" refkey={refkey("Cat")} />
@@ -107,11 +100,10 @@ describe("Python Enum", () => {
107
100
  { name: "CAT", value: refkey("Cat") },
108
101
  ]}
109
102
  />
110
- </py.StatementList>,
111
- ],
112
- { externals: [enumModule] },
113
- );
114
- const expected = d`
103
+ </py.StatementList>
104
+ </TestOutput>,
105
+ ).toRenderTo(
106
+ `
115
107
  from enum import Enum
116
108
 
117
109
 
@@ -125,23 +117,21 @@ describe("Python Enum", () => {
125
117
  DOG = Dog
126
118
  CAT = Cat
127
119
 
128
-
129
- `;
130
- expect(result).toRenderTo(expected);
120
+ `,
121
+ );
131
122
  });
132
123
 
133
124
  it("class enum with auto() values", () => {
134
- const result = toSourceText(
135
- [
125
+ expect(
126
+ <TestOutput externals={[enumModule]}>
136
127
  <py.ClassEnumDeclaration
137
128
  name="Animal"
138
129
  auto
139
130
  members={[{ name: "DOG" }, { name: "CAT" }, { name: "RABBIT" }]}
140
- />,
141
- ],
142
- { externals: [enumModule] },
143
- );
144
- const expected = d`
131
+ />
132
+ </TestOutput>,
133
+ ).toRenderTo(
134
+ `
145
135
  from enum import auto
146
136
  from enum import Enum
147
137
 
@@ -151,14 +141,13 @@ describe("Python Enum", () => {
151
141
  CAT = auto()
152
142
  RABBIT = auto()
153
143
 
154
-
155
- `;
156
- expect(result).toRenderTo(expected);
144
+ `,
145
+ );
157
146
  });
158
147
 
159
148
  it("class enum with mixed manual and auto() values", () => {
160
- const result = toSourceText(
161
- [
149
+ expect(
150
+ <TestOutput externals={[enumModule]}>
162
151
  <py.ClassEnumDeclaration
163
152
  name="Permission"
164
153
  baseType="Flag"
@@ -168,12 +157,10 @@ describe("Python Enum", () => {
168
157
  { name: "WRITE" },
169
158
  { name: "EXECUTE" },
170
159
  ]}
171
- />,
172
- ],
173
- { externals: [enumModule] },
174
- );
175
-
176
- const expected = d`
160
+ />
161
+ </TestOutput>,
162
+ ).toRenderTo(
163
+ `
177
164
  from enum import auto
178
165
  from enum import Flag
179
166
 
@@ -183,14 +170,13 @@ describe("Python Enum", () => {
183
170
  WRITE = auto()
184
171
  EXECUTE = auto()
185
172
 
186
-
187
- `;
188
- expect(result).toRenderTo(expected);
173
+ `,
174
+ );
189
175
  });
190
176
 
191
177
  it("functional enum with list", () => {
192
- const result = toSourceText(
193
- [
178
+ expect(
179
+ <TestOutput externals={[enumModule]}>
194
180
  <py.FunctionalEnumDeclaration
195
181
  name="Direction"
196
182
  members={[
@@ -199,22 +185,21 @@ describe("Python Enum", () => {
199
185
  { name: "EAST" },
200
186
  { name: "WEST" },
201
187
  ]}
202
- />,
203
- ],
204
- { externals: [enumModule] },
205
- );
206
- const expected = d`
188
+ />
189
+ </TestOutput>,
190
+ ).toRenderTo(
191
+ `
207
192
  from enum import Enum
208
193
 
209
194
 
210
195
  Direction = Enum('Direction', ['NORTH', 'SOUTH', 'EAST', 'WEST'])
211
- `;
212
- expect(result).toRenderTo(expected);
196
+ `,
197
+ );
213
198
  });
214
199
 
215
200
  it("functional enum with mapping", () => {
216
- const result = toSourceText(
217
- [
201
+ expect(
202
+ <TestOutput externals={[enumModule]}>
218
203
  <py.FunctionalEnumDeclaration
219
204
  name="Priority"
220
205
  members={[
@@ -222,16 +207,15 @@ describe("Python Enum", () => {
222
207
  { name: "MEDIUM", value: 2 },
223
208
  { name: "LOW", value: 3 },
224
209
  ]}
225
- />,
226
- ],
227
- { externals: [enumModule] },
228
- );
229
- const expected = d`
210
+ />
211
+ </TestOutput>,
212
+ ).toRenderTo(
213
+ `
230
214
  from enum import Enum
231
215
 
232
216
 
233
217
  Priority = Enum('Priority', {'HIGH' : 1, 'MEDIUM' : 2, 'LOW' : 3})
234
- `;
235
- expect(result).toRenderTo(expected);
218
+ `,
219
+ );
236
220
  });
237
221
  });
@@ -1,9 +1,8 @@
1
1
  import { code, refkey } from "@alloy-js/core";
2
- import { d } from "@alloy-js/core/testing";
3
2
  import { expect, it } from "vitest";
4
3
  import * as py from "../src/index.js";
5
4
  import { createModule } from "../src/index.js";
6
- import { toSourceText } from "./utils.js";
5
+ import { TestOutput } from "./utils.js";
7
6
 
8
7
  it("uses import from external library", () => {
9
8
  const requestsLib = createModule({
@@ -14,19 +13,18 @@ it("uses import from external library", () => {
14
13
  "models.anothermodule": ["something"],
15
14
  },
16
15
  });
17
- const result = toSourceText(
18
- [
16
+ expect(
17
+ <TestOutput externals={[requestsLib]}>
19
18
  <py.StatementList>
20
19
  {requestsLib["."].get}
21
20
  {requestsLib["."].post}
22
21
  {requestsLib["models"].Request}
23
22
  {requestsLib["models"].Response}
24
23
  {requestsLib["models.anothermodule"].something}
25
- </py.StatementList>,
26
- ],
27
- { externals: [requestsLib] },
28
- );
29
- const expected = d`
24
+ </py.StatementList>
25
+ </TestOutput>,
26
+ ).toRenderTo(
27
+ `
30
28
  from requests import get
31
29
  from requests import post
32
30
  from requests.models import Request
@@ -38,8 +36,8 @@ it("uses import from external library", () => {
38
36
  Request
39
37
  Response
40
38
  something
41
- `;
42
- expect(result).toRenderTo(expected);
39
+ `,
40
+ );
43
41
  });
44
42
 
45
43
  it("uses import from external library in multiple functions", () => {
@@ -86,10 +84,12 @@ it("uses import from external library in multiple functions", () => {
86
84
  </py.FunctionDeclaration>,
87
85
  ];
88
86
 
89
- const result = toSourceText(functionDeclarations, {
90
- externals: [py.requestsModule],
91
- });
92
- const expected = d`
87
+ expect(
88
+ <TestOutput externals={[py.requestsModule]}>
89
+ {functionDeclarations}
90
+ </TestOutput>,
91
+ ).toRenderTo(
92
+ `
93
93
  from requests import get
94
94
  from requests import post
95
95
  from typing import TYPE_CHECKING
@@ -107,9 +107,8 @@ it("uses import from external library in multiple functions", () => {
107
107
  response = post(1)
108
108
  return response.json()
109
109
 
110
-
111
- `;
112
- expect(result).toRenderTo(expected);
110
+ `,
111
+ );
113
112
  });
114
113
 
115
114
  it("uses import from external library in multiple class methods", () => {
@@ -166,10 +165,12 @@ it("uses import from external library in multiple class methods", () => {
166
165
  </py.ClassDeclaration>,
167
166
  ];
168
167
 
169
- const result = toSourceText(functionDeclarations, {
170
- externals: [py.requestsModule],
171
- });
172
- const expected = d`
168
+ expect(
169
+ <TestOutput externals={[py.requestsModule]}>
170
+ {functionDeclarations}
171
+ </TestOutput>,
172
+ ).toRenderTo(
173
+ `
173
174
  from requests import get
174
175
  from requests import post
175
176
  from typing import TYPE_CHECKING
@@ -189,7 +190,6 @@ it("uses import from external library in multiple class methods", () => {
189
190
  return response.json()
190
191
 
191
192
 
192
-
193
- `;
194
- expect(result).toRenderTo(expected);
193
+ `,
194
+ );
195
195
  });