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