@alloy-js/csharp 0.17.0 → 0.18.0-dev.11
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/src/components/ClassDeclaration.d.ts +57 -0
- package/dist/src/components/ClassDeclaration.d.ts.map +1 -0
- package/dist/src/components/{Class.js → ClassDeclaration.js} +42 -53
- package/dist/src/components/ClassMethod.d.ts +25 -0
- package/dist/src/components/ClassMethod.d.ts.map +1 -0
- package/dist/src/components/ClassMethod.js +60 -0
- package/dist/src/components/EnumDeclaration.d.ts +34 -0
- package/dist/src/components/EnumDeclaration.d.ts.map +1 -0
- package/dist/src/components/{Enum.js → EnumDeclaration.js} +25 -5
- package/dist/src/components/class/property.d.ts +55 -0
- package/dist/src/components/class/property.d.ts.map +1 -0
- package/dist/src/components/class/property.js +67 -0
- package/dist/src/components/class/property.test.d.ts +2 -0
- package/dist/src/components/class/property.test.d.ts.map +1 -0
- package/dist/src/components/class/property.test.js +201 -0
- package/dist/src/components/doc/comment.d.ts +70 -0
- package/dist/src/components/doc/comment.d.ts.map +1 -0
- package/dist/src/components/doc/comment.js +88 -0
- package/dist/src/components/doc/comment.test.d.ts +2 -0
- package/dist/src/components/doc/comment.test.d.ts.map +1 -0
- package/dist/src/components/doc/comment.test.js +348 -0
- package/dist/src/components/doc/from-markdown.d.ts +6 -0
- package/dist/src/components/doc/from-markdown.d.ts.map +1 -0
- package/dist/src/components/doc/from-markdown.js +58 -0
- package/dist/src/components/doc/from-markdown.test.d.ts +2 -0
- package/dist/src/components/doc/from-markdown.test.d.ts.map +1 -0
- package/dist/src/components/doc/from-markdown.test.js +83 -0
- package/dist/src/components/index.d.ts +9 -2
- package/dist/src/components/index.d.ts.map +1 -1
- package/dist/src/components/index.js +9 -2
- package/dist/src/components/interface/declaration.d.ts +34 -0
- package/dist/src/components/interface/declaration.d.ts.map +1 -0
- package/dist/src/components/interface/declaration.js +90 -0
- package/dist/src/components/interface/declaration.test.d.ts +2 -0
- package/dist/src/components/interface/declaration.test.d.ts.map +1 -0
- package/dist/src/components/interface/declaration.test.js +69 -0
- package/dist/src/components/interface/method.d.ts +18 -0
- package/dist/src/components/interface/method.d.ts.map +1 -0
- package/dist/src/components/interface/method.js +59 -0
- package/dist/src/components/interface/method.test.d.ts +2 -0
- package/dist/src/components/interface/method.test.d.ts.map +1 -0
- package/dist/src/components/interface/method.test.js +131 -0
- package/dist/src/components/interface/property.d.ts +38 -0
- package/dist/src/components/interface/property.d.ts.map +1 -0
- package/dist/src/components/interface/property.js +67 -0
- package/dist/src/components/interface/property.test.d.ts +2 -0
- package/dist/src/components/interface/property.test.d.ts.map +1 -0
- package/dist/src/components/interface/property.test.js +165 -0
- package/dist/src/components/stc/index.d.ts +2 -2
- package/dist/src/components/stc/index.d.ts.map +1 -1
- package/dist/src/components/stc/index.js +2 -2
- package/dist/src/modifiers.d.ts +13 -4
- package/dist/src/modifiers.d.ts.map +1 -1
- package/dist/src/modifiers.js +13 -27
- package/dist/src/name-policy.d.ts +1 -1
- package/dist/src/name-policy.d.ts.map +1 -1
- package/dist/src/name-policy.js +1 -0
- package/dist/test/class-declaration.test.d.ts +2 -0
- package/dist/test/class-declaration.test.d.ts.map +1 -0
- package/dist/test/{class.test.js → class-declaration.test.js} +123 -73
- package/dist/test/class-method.test.d.ts +2 -0
- package/dist/test/class-method.test.d.ts.map +1 -0
- package/dist/test/class-method.test.js +161 -0
- package/dist/test/enum.test.js +12 -12
- package/dist/test/namespace.test.js +8 -8
- package/dist/test/project-directory.test.d.ts +2 -0
- package/dist/test/project-directory.test.d.ts.map +1 -0
- package/dist/test/{projectdirectory.test.js → project-directory.test.js} +8 -8
- package/dist/test/sourcefile.test.js +4 -4
- package/dist/test/using.test.js +9 -9
- package/dist/test/utils.d.ts +3 -0
- package/dist/test/utils.d.ts.map +1 -1
- package/dist/test/utils.js +15 -0
- 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 +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -6
- package/src/components/{Class.tsx → ClassDeclaration.tsx} +68 -66
- package/src/components/ClassMethod.tsx +94 -0
- package/src/components/{Enum.tsx → EnumDeclaration.tsx} +30 -6
- package/src/components/class/property.test.tsx +180 -0
- package/src/components/class/property.tsx +135 -0
- package/src/components/doc/comment.test.tsx +337 -0
- package/src/components/doc/comment.tsx +152 -0
- package/src/components/doc/from-markdown.test.tsx +103 -0
- package/src/components/doc/from-markdown.tsx +58 -0
- package/src/components/index.ts +9 -2
- package/src/components/interface/declaration.test.tsx +56 -0
- package/src/components/interface/declaration.tsx +109 -0
- package/src/components/interface/method.test.tsx +120 -0
- package/src/components/interface/method.tsx +82 -0
- package/src/components/interface/property.test.tsx +144 -0
- package/src/components/interface/property.tsx +107 -0
- package/src/components/stc/index.ts +2 -2
- package/src/modifiers.ts +32 -37
- package/src/name-policy.ts +2 -0
- package/temp/api.json +4419 -567
- package/test/{class.test.tsx → class-declaration.test.tsx} +103 -99
- package/test/class-method.test.tsx +147 -0
- package/test/enum.test.tsx +11 -11
- package/test/namespace.test.tsx +4 -4
- package/test/{projectdirectory.test.tsx → project-directory.test.tsx} +4 -4
- package/test/sourcefile.test.tsx +2 -2
- package/test/using.test.tsx +9 -9
- package/test/utils.tsx +9 -0
- package/test/vitest.setup.ts +1 -0
- package/tsconfig.json +2 -1
- package/vitest.config.ts +3 -0
- package/dist/src/components/Class.d.ts +0 -36
- package/dist/src/components/Class.d.ts.map +0 -1
- package/dist/src/components/Enum.d.ts +0 -15
- package/dist/src/components/Enum.d.ts.map +0 -1
- package/dist/test/class.test.d.ts +0 -2
- package/dist/test/class.test.d.ts.map +0 -1
- package/dist/test/projectdirectory.test.d.ts +0 -2
- package/dist/test/projectdirectory.test.d.ts.map +0 -1
|
@@ -1,38 +1,60 @@
|
|
|
1
1
|
import * as core from "@alloy-js/core";
|
|
2
2
|
import * as coretest from "@alloy-js/core/testing";
|
|
3
|
-
import { expect, it } from "vitest";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
4
|
import * as csharp from "../src/index.js";
|
|
5
|
-
import
|
|
5
|
+
import { ClassDeclaration, ClassMember } from "../src/index.js";
|
|
6
|
+
import * as utils from "./utils.jsx";
|
|
6
7
|
|
|
7
8
|
it("declares class with no members", () => {
|
|
8
|
-
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
{
|
|
15
|
-
public class TestClass;
|
|
16
|
-
}
|
|
9
|
+
expect(
|
|
10
|
+
<utils.TestNamespace>
|
|
11
|
+
<ClassDeclaration name="TestClass" />
|
|
12
|
+
</utils.TestNamespace>,
|
|
13
|
+
).toRenderTo(`
|
|
14
|
+
class TestClass;
|
|
17
15
|
`);
|
|
18
16
|
});
|
|
19
17
|
|
|
18
|
+
describe("modifiers", () => {
|
|
19
|
+
it.each(["public", "private"])("%s", (mod) => {
|
|
20
|
+
expect(
|
|
21
|
+
<utils.TestNamespace>
|
|
22
|
+
<ClassDeclaration {...{ [mod]: true }} name="TestClass" />
|
|
23
|
+
</utils.TestNamespace>,
|
|
24
|
+
).toRenderTo(`
|
|
25
|
+
${mod} class TestClass;
|
|
26
|
+
`);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it.each(["partial", "abstract", "static", "sealed"])("%s", (mod) => {
|
|
30
|
+
expect(
|
|
31
|
+
<utils.TestNamespace>
|
|
32
|
+
<ClassDeclaration {...{ [mod]: true }} name="TestClass" />
|
|
33
|
+
</utils.TestNamespace>,
|
|
34
|
+
).toRenderTo(`
|
|
35
|
+
${mod} class TestClass;
|
|
36
|
+
`);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("combines modifiers", () => {
|
|
40
|
+
expect(
|
|
41
|
+
<utils.TestNamespace>
|
|
42
|
+
<ClassDeclaration public abstract partial name="TestClass" />
|
|
43
|
+
</utils.TestNamespace>,
|
|
44
|
+
).toRenderTo(`
|
|
45
|
+
public abstract partial class TestClass;
|
|
46
|
+
`);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
20
50
|
it("declares class with some members", () => {
|
|
21
51
|
const res = utils.toSourceText(
|
|
22
|
-
<csharp.
|
|
52
|
+
<csharp.ClassDeclaration public name="TestClass">
|
|
23
53
|
<core.StatementList>
|
|
24
|
-
<csharp.ClassMember
|
|
25
|
-
|
|
26
|
-
name="MemberOne"
|
|
27
|
-
type="string"
|
|
28
|
-
/>
|
|
29
|
-
<csharp.ClassMember
|
|
30
|
-
accessModifier="private"
|
|
31
|
-
name="MemberTwo"
|
|
32
|
-
type="int"
|
|
33
|
-
/>
|
|
54
|
+
<csharp.ClassMember public name="MemberOne" type="string" />
|
|
55
|
+
<csharp.ClassMember private name="MemberTwo" type="int" />
|
|
34
56
|
</core.StatementList>
|
|
35
|
-
</csharp.
|
|
57
|
+
</csharp.ClassDeclaration>,
|
|
36
58
|
);
|
|
37
59
|
|
|
38
60
|
expect(res).toBe(coretest.d`
|
|
@@ -49,16 +71,12 @@ it("declares class with some members", () => {
|
|
|
49
71
|
|
|
50
72
|
it("declares class with some methods", () => {
|
|
51
73
|
const res = utils.toSourceText(
|
|
52
|
-
<csharp.
|
|
74
|
+
<csharp.ClassDeclaration public name="TestClass">
|
|
53
75
|
<core.List>
|
|
54
|
-
<csharp.ClassMethod
|
|
55
|
-
<csharp.ClassMethod
|
|
56
|
-
accessModifier="private"
|
|
57
|
-
methodModifier="virtual"
|
|
58
|
-
name="MethodTwo"
|
|
59
|
-
/>
|
|
76
|
+
<csharp.ClassMethod public name="MethodOne" />
|
|
77
|
+
<csharp.ClassMethod private virtual name="MethodTwo" />
|
|
60
78
|
</core.List>
|
|
61
|
-
</csharp.
|
|
79
|
+
</csharp.ClassDeclaration>,
|
|
62
80
|
);
|
|
63
81
|
|
|
64
82
|
expect(res).toBe(coretest.d`
|
|
@@ -73,39 +91,6 @@ it("declares class with some methods", () => {
|
|
|
73
91
|
`);
|
|
74
92
|
});
|
|
75
93
|
|
|
76
|
-
it("declares class with params and return type", () => {
|
|
77
|
-
const params = [
|
|
78
|
-
{
|
|
79
|
-
name: "IntParam",
|
|
80
|
-
type: "int",
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
name: "StringParam",
|
|
84
|
-
type: "string",
|
|
85
|
-
},
|
|
86
|
-
];
|
|
87
|
-
const res = utils.toSourceText(
|
|
88
|
-
<csharp.Class accessModifier="public" name="TestClass">
|
|
89
|
-
<csharp.ClassMethod
|
|
90
|
-
accessModifier="public"
|
|
91
|
-
name="MethodOne"
|
|
92
|
-
parameters={params}
|
|
93
|
-
returns="string"
|
|
94
|
-
/>
|
|
95
|
-
</csharp.Class>,
|
|
96
|
-
);
|
|
97
|
-
|
|
98
|
-
expect(res).toBe(coretest.d`
|
|
99
|
-
namespace TestCode
|
|
100
|
-
{
|
|
101
|
-
public class TestClass
|
|
102
|
-
{
|
|
103
|
-
public string MethodOne(int intParam, string stringParam) {}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
`);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
94
|
it("uses refkeys for members, params, and return type", () => {
|
|
110
95
|
const inputTypeRefkey = core.refkey();
|
|
111
96
|
const testResultTypeRefkey = core.refkey();
|
|
@@ -126,8 +111,8 @@ it("uses refkeys for members, params, and return type", () => {
|
|
|
126
111
|
<core.Output namePolicy={csharp.createCSharpNamePolicy()}>
|
|
127
112
|
<csharp.Namespace name="TestCode">
|
|
128
113
|
<csharp.SourceFile path="Test.cs">
|
|
129
|
-
<csharp.
|
|
130
|
-
|
|
114
|
+
<csharp.EnumDeclaration
|
|
115
|
+
public
|
|
131
116
|
name="TestEnum"
|
|
132
117
|
refkey={enumTypeRefkey}
|
|
133
118
|
>
|
|
@@ -135,37 +120,37 @@ it("uses refkeys for members, params, and return type", () => {
|
|
|
135
120
|
<csharp.EnumMember name="One" />
|
|
136
121
|
<csharp.EnumMember name="Two" />
|
|
137
122
|
</core.List>
|
|
138
|
-
</csharp.
|
|
123
|
+
</csharp.EnumDeclaration>
|
|
139
124
|
<hbr />
|
|
140
|
-
<csharp.
|
|
141
|
-
|
|
125
|
+
<csharp.ClassDeclaration
|
|
126
|
+
public
|
|
142
127
|
name="TestInput"
|
|
143
128
|
refkey={inputTypeRefkey}
|
|
144
129
|
/>
|
|
145
130
|
<hbr />
|
|
146
|
-
<csharp.
|
|
147
|
-
|
|
131
|
+
<csharp.ClassDeclaration
|
|
132
|
+
public
|
|
148
133
|
name="TestResult"
|
|
149
134
|
refkey={testResultTypeRefkey}
|
|
150
135
|
/>
|
|
151
136
|
<hbr />
|
|
152
|
-
<csharp.
|
|
137
|
+
<csharp.ClassDeclaration public name="TestClass">
|
|
153
138
|
<csharp.ClassMember
|
|
154
|
-
|
|
139
|
+
private
|
|
155
140
|
name="MemberOne"
|
|
156
141
|
type={enumTypeRefkey}
|
|
157
142
|
/>
|
|
158
143
|
;
|
|
159
144
|
<hbr />
|
|
160
145
|
<csharp.ClassMethod
|
|
161
|
-
|
|
146
|
+
public
|
|
162
147
|
name="MethodOne"
|
|
163
148
|
parameters={params}
|
|
164
149
|
returns={testResultTypeRefkey}
|
|
165
150
|
>
|
|
166
151
|
return new {testResultTypeRefkey}();
|
|
167
152
|
</csharp.ClassMethod>
|
|
168
|
-
</csharp.
|
|
153
|
+
</csharp.ClassDeclaration>
|
|
169
154
|
</csharp.SourceFile>
|
|
170
155
|
</csharp.Namespace>
|
|
171
156
|
</core.Output>,
|
|
@@ -200,24 +185,15 @@ it("declares class with generic parameters", () => {
|
|
|
200
185
|
};
|
|
201
186
|
|
|
202
187
|
const res = utils.toSourceText(
|
|
203
|
-
<csharp.
|
|
204
|
-
|
|
188
|
+
<csharp.ClassDeclaration
|
|
189
|
+
public
|
|
205
190
|
name="TestClass"
|
|
206
191
|
typeParameters={typeParameters}
|
|
207
192
|
>
|
|
208
|
-
<csharp.ClassMember
|
|
209
|
-
accessModifier="public"
|
|
210
|
-
name="memberOne"
|
|
211
|
-
type={typeParameters.T}
|
|
212
|
-
/>
|
|
193
|
+
<csharp.ClassMember public name="memberOne" type={typeParameters.T} />
|
|
213
194
|
;<hbr />
|
|
214
|
-
<csharp.ClassMember
|
|
215
|
-
|
|
216
|
-
name="memberTwo"
|
|
217
|
-
type={typeParameters.U}
|
|
218
|
-
/>
|
|
219
|
-
;
|
|
220
|
-
</csharp.Class>,
|
|
195
|
+
<csharp.ClassMember private name="memberTwo" type={typeParameters.U} />;
|
|
196
|
+
</csharp.ClassDeclaration>,
|
|
221
197
|
);
|
|
222
198
|
|
|
223
199
|
expect(res).toBe(coretest.d`
|
|
@@ -234,10 +210,10 @@ it("declares class with generic parameters", () => {
|
|
|
234
210
|
|
|
235
211
|
it("declares class with invalid members", () => {
|
|
236
212
|
const decl = (
|
|
237
|
-
<csharp.
|
|
213
|
+
<csharp.ClassDeclaration public name="TestClass">
|
|
238
214
|
<csharp.EnumMember name="One" />,<hbr />
|
|
239
215
|
<csharp.EnumMember name="Two" />
|
|
240
|
-
</csharp.
|
|
216
|
+
</csharp.ClassDeclaration>
|
|
241
217
|
);
|
|
242
218
|
|
|
243
219
|
expect(() => utils.toSourceText(decl)).toThrow(
|
|
@@ -247,9 +223,9 @@ it("declares class with invalid members", () => {
|
|
|
247
223
|
|
|
248
224
|
it("declares class with constructor", () => {
|
|
249
225
|
const res = utils.toSourceText(
|
|
250
|
-
<csharp.
|
|
251
|
-
<csharp.ClassConstructor
|
|
252
|
-
</csharp.
|
|
226
|
+
<csharp.ClassDeclaration public name="TestClass">
|
|
227
|
+
<csharp.ClassConstructor public />
|
|
228
|
+
</csharp.ClassDeclaration>,
|
|
253
229
|
);
|
|
254
230
|
|
|
255
231
|
expect(res).toBe(coretest.d`
|
|
@@ -283,26 +259,26 @@ it("declares class with constructor params and assigns values to fields", () =>
|
|
|
283
259
|
];
|
|
284
260
|
|
|
285
261
|
const res = utils.toSourceText(
|
|
286
|
-
<csharp.
|
|
262
|
+
<csharp.ClassDeclaration public name="TestClass">
|
|
287
263
|
<csharp.ClassMember
|
|
288
|
-
|
|
264
|
+
private
|
|
289
265
|
name="name"
|
|
290
266
|
type="string"
|
|
291
267
|
refkey={thisNameRefkey}
|
|
292
268
|
/>
|
|
293
269
|
;<hbr />
|
|
294
270
|
<csharp.ClassMember
|
|
295
|
-
|
|
271
|
+
private
|
|
296
272
|
name="size"
|
|
297
273
|
type="int"
|
|
298
274
|
refkey={thisSizeRefkey}
|
|
299
275
|
/>
|
|
300
276
|
;<hbr />
|
|
301
|
-
<csharp.ClassConstructor
|
|
277
|
+
<csharp.ClassConstructor public parameters={ctorParams}>
|
|
302
278
|
{thisNameRefkey} = {paramNameRefkey};<hbr />
|
|
303
279
|
{thisSizeRefkey} = {paramSizeRefkey};
|
|
304
280
|
</csharp.ClassConstructor>
|
|
305
|
-
</csharp.
|
|
281
|
+
</csharp.ClassDeclaration>,
|
|
306
282
|
);
|
|
307
283
|
|
|
308
284
|
// TODO: assignments to members should have this. prefix
|
|
@@ -323,3 +299,31 @@ it("declares class with constructor params and assigns values to fields", () =>
|
|
|
323
299
|
}
|
|
324
300
|
`);
|
|
325
301
|
});
|
|
302
|
+
|
|
303
|
+
it("specify doc comment", () => {
|
|
304
|
+
expect(
|
|
305
|
+
<utils.TestNamespace>
|
|
306
|
+
<ClassDeclaration name="Test" doc="This is a test" />
|
|
307
|
+
</utils.TestNamespace>,
|
|
308
|
+
).toRenderTo(`
|
|
309
|
+
/// This is a test
|
|
310
|
+
class Test;
|
|
311
|
+
`);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
it("supports class member doc comments", () => {
|
|
315
|
+
expect(
|
|
316
|
+
<utils.TestNamespace>
|
|
317
|
+
<ClassDeclaration name="Test" doc="This is a test">
|
|
318
|
+
<ClassMember name="Member" public type="int" doc="This is a member" />
|
|
319
|
+
</ClassDeclaration>
|
|
320
|
+
</utils.TestNamespace>,
|
|
321
|
+
).toRenderTo(`
|
|
322
|
+
/// This is a test
|
|
323
|
+
class Test
|
|
324
|
+
{
|
|
325
|
+
/// This is a member
|
|
326
|
+
public int Member
|
|
327
|
+
}
|
|
328
|
+
`);
|
|
329
|
+
});
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Children } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { ClassDeclaration, ClassMethod } from "../src/index.js";
|
|
4
|
+
import { TestNamespace } from "./utils.jsx";
|
|
5
|
+
|
|
6
|
+
const Wrapper = (props: { children: Children }) => (
|
|
7
|
+
<TestNamespace>
|
|
8
|
+
<ClassDeclaration public name="TestClass">
|
|
9
|
+
{props.children}
|
|
10
|
+
</ClassDeclaration>
|
|
11
|
+
</TestNamespace>
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
describe("modifiers", () => {
|
|
15
|
+
describe("access modifiers", () => {
|
|
16
|
+
it.each(["public", "private", "protected", "internal"] as const)(
|
|
17
|
+
"%s",
|
|
18
|
+
(accessModifier) => {
|
|
19
|
+
expect(
|
|
20
|
+
<Wrapper>
|
|
21
|
+
<ClassMethod {...{ [accessModifier]: true }} name="MethodOne" />
|
|
22
|
+
</Wrapper>,
|
|
23
|
+
).toRenderTo(`
|
|
24
|
+
public class TestClass
|
|
25
|
+
{
|
|
26
|
+
${accessModifier} void MethodOne() {}
|
|
27
|
+
}
|
|
28
|
+
`);
|
|
29
|
+
},
|
|
30
|
+
);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe("method modifiers", () => {
|
|
34
|
+
it.each(["static", "virtual", "sealed"] as const)(
|
|
35
|
+
"%s",
|
|
36
|
+
(methodModifier) => {
|
|
37
|
+
expect(
|
|
38
|
+
<Wrapper>
|
|
39
|
+
<ClassMethod {...{ [methodModifier]: true }} name="MethodOne" />
|
|
40
|
+
</Wrapper>,
|
|
41
|
+
).toRenderTo(`
|
|
42
|
+
public class TestClass
|
|
43
|
+
{
|
|
44
|
+
${methodModifier} void MethodOne() {}
|
|
45
|
+
}
|
|
46
|
+
`);
|
|
47
|
+
},
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
it("abstract exclude body", () => {
|
|
51
|
+
expect(
|
|
52
|
+
<Wrapper>
|
|
53
|
+
<ClassMethod abstract name="MethodOne" />
|
|
54
|
+
</Wrapper>,
|
|
55
|
+
).toRenderTo(`
|
|
56
|
+
public class TestClass
|
|
57
|
+
{
|
|
58
|
+
abstract void MethodOne();
|
|
59
|
+
}
|
|
60
|
+
`);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("mark method async", () => {
|
|
65
|
+
expect(
|
|
66
|
+
<Wrapper>
|
|
67
|
+
<ClassMethod async name="MethodOne" />
|
|
68
|
+
</Wrapper>,
|
|
69
|
+
).toRenderTo(`
|
|
70
|
+
public class TestClass
|
|
71
|
+
{
|
|
72
|
+
async Task MethodOne() {}
|
|
73
|
+
}
|
|
74
|
+
`);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it("combine modifiers", () => {
|
|
78
|
+
expect(
|
|
79
|
+
<Wrapper>
|
|
80
|
+
<ClassMethod async returns="Task" public abstract name="MethodOne" />
|
|
81
|
+
</Wrapper>,
|
|
82
|
+
).toRenderTo(`
|
|
83
|
+
public class TestClass
|
|
84
|
+
{
|
|
85
|
+
public abstract async Task MethodOne();
|
|
86
|
+
}
|
|
87
|
+
`);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("applies PascalCase naming policy", () => {
|
|
92
|
+
expect(
|
|
93
|
+
<Wrapper>
|
|
94
|
+
<ClassMethod name="method_one" />
|
|
95
|
+
</Wrapper>,
|
|
96
|
+
).toRenderTo(`
|
|
97
|
+
public class TestClass
|
|
98
|
+
{
|
|
99
|
+
void MethodOne() {}
|
|
100
|
+
}
|
|
101
|
+
`);
|
|
102
|
+
});
|
|
103
|
+
it("defines params and return type", () => {
|
|
104
|
+
const params = [
|
|
105
|
+
{
|
|
106
|
+
name: "intParam",
|
|
107
|
+
type: "int",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: "stringParam",
|
|
111
|
+
type: "string",
|
|
112
|
+
},
|
|
113
|
+
];
|
|
114
|
+
const res = (
|
|
115
|
+
<Wrapper>
|
|
116
|
+
<ClassMethod
|
|
117
|
+
public
|
|
118
|
+
name="MethodOne"
|
|
119
|
+
parameters={params}
|
|
120
|
+
returns="string"
|
|
121
|
+
/>
|
|
122
|
+
</Wrapper>
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
expect(res).toRenderTo(`
|
|
126
|
+
public class TestClass
|
|
127
|
+
{
|
|
128
|
+
public string MethodOne(int intParam, string stringParam) {}
|
|
129
|
+
}
|
|
130
|
+
`);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("specify doc comment", () => {
|
|
134
|
+
expect(
|
|
135
|
+
<TestNamespace>
|
|
136
|
+
<ClassDeclaration name="Test">
|
|
137
|
+
<ClassMethod name="Method" doc="This is a test" />
|
|
138
|
+
</ClassDeclaration>
|
|
139
|
+
</TestNamespace>,
|
|
140
|
+
).toRenderTo(`
|
|
141
|
+
class Test
|
|
142
|
+
{
|
|
143
|
+
/// This is a test
|
|
144
|
+
void Method() {}
|
|
145
|
+
}
|
|
146
|
+
`);
|
|
147
|
+
});
|
package/test/enum.test.tsx
CHANGED
|
@@ -6,7 +6,7 @@ import * as utils from "./utils.js";
|
|
|
6
6
|
|
|
7
7
|
it("declares enum with no members", () => {
|
|
8
8
|
const res = utils.toSourceText(
|
|
9
|
-
<csharp.
|
|
9
|
+
<csharp.EnumDeclaration public name="TestEnum" />,
|
|
10
10
|
);
|
|
11
11
|
|
|
12
12
|
expect(res).toBe(coretest.d`
|
|
@@ -19,10 +19,10 @@ it("declares enum with no members", () => {
|
|
|
19
19
|
|
|
20
20
|
it("declares enum with members", () => {
|
|
21
21
|
const res = utils.toSourceText(
|
|
22
|
-
<csharp.
|
|
22
|
+
<csharp.EnumDeclaration public name="TestEnum">
|
|
23
23
|
<csharp.EnumMember name="One" />,<hbr />
|
|
24
24
|
<csharp.EnumMember name="Two" />
|
|
25
|
-
</csharp.
|
|
25
|
+
</csharp.EnumDeclaration>,
|
|
26
26
|
);
|
|
27
27
|
|
|
28
28
|
expect(res).toBe(coretest.d`
|
|
@@ -39,10 +39,10 @@ it("declares enum with members", () => {
|
|
|
39
39
|
|
|
40
40
|
it("applies naming policy to enum and members", () => {
|
|
41
41
|
const res = utils.toSourceText(
|
|
42
|
-
<csharp.
|
|
42
|
+
<csharp.EnumDeclaration public name="testEnum">
|
|
43
43
|
<csharp.EnumMember name="one" />,<hbr />
|
|
44
44
|
<csharp.EnumMember name="two" />
|
|
45
|
-
</csharp.
|
|
45
|
+
</csharp.EnumDeclaration>,
|
|
46
46
|
);
|
|
47
47
|
|
|
48
48
|
expect(res).toBe(coretest.d`
|
|
@@ -65,10 +65,10 @@ it("can reference things by refkey", () => {
|
|
|
65
65
|
<core.Output>
|
|
66
66
|
<csharp.Namespace name="TestCode">
|
|
67
67
|
<csharp.SourceFile path="Test.cs">
|
|
68
|
-
<csharp.
|
|
68
|
+
<csharp.EnumDeclaration public name="TestEnum" refkey={enumRK}>
|
|
69
69
|
<csharp.EnumMember name="One" />,<hbr />
|
|
70
70
|
<csharp.EnumMember name="Two" refkey={twoRK} />
|
|
71
|
-
</csharp.
|
|
71
|
+
</csharp.EnumDeclaration>
|
|
72
72
|
<hbr />
|
|
73
73
|
{enumRK};<hbr />
|
|
74
74
|
{twoRK};
|
|
@@ -99,19 +99,19 @@ it("can reference things by refkey across files", () => {
|
|
|
99
99
|
<core.Output>
|
|
100
100
|
<csharp.Namespace name="TestCode">
|
|
101
101
|
<csharp.SourceFile path="Test.cs">
|
|
102
|
-
<csharp.
|
|
102
|
+
<csharp.EnumDeclaration public name="TestEnum">
|
|
103
103
|
<csharp.EnumMember name="One" />,<hbr />
|
|
104
104
|
<csharp.EnumMember name="Two" />
|
|
105
|
-
</csharp.
|
|
105
|
+
</csharp.EnumDeclaration>
|
|
106
106
|
<hbr />
|
|
107
107
|
{enumRK};<hbr />
|
|
108
108
|
{barRK};
|
|
109
109
|
</csharp.SourceFile>
|
|
110
110
|
<csharp.SourceFile path="Other.cs">
|
|
111
|
-
<csharp.
|
|
111
|
+
<csharp.EnumDeclaration public name="OtherEnum" refkey={enumRK}>
|
|
112
112
|
<csharp.EnumMember name="Foo" />,<hbr />
|
|
113
113
|
<csharp.EnumMember name="Bar" refkey={barRK} />
|
|
114
|
-
</csharp.
|
|
114
|
+
</csharp.EnumDeclaration>
|
|
115
115
|
<hbr />
|
|
116
116
|
{enumRK};<hbr />
|
|
117
117
|
{barRK};
|
package/test/namespace.test.tsx
CHANGED
|
@@ -8,18 +8,18 @@ it("defines multiple namespaces and source files with unique content", () => {
|
|
|
8
8
|
<core.Output>
|
|
9
9
|
<csharp.Namespace name="Namespace1">
|
|
10
10
|
<csharp.SourceFile path="Model1.cs">
|
|
11
|
-
<csharp.
|
|
11
|
+
<csharp.ClassDeclaration public name="Model1" />
|
|
12
12
|
</csharp.SourceFile>
|
|
13
13
|
<csharp.SourceFile path="Model2.cs">
|
|
14
|
-
<csharp.
|
|
14
|
+
<csharp.ClassDeclaration public name="Model2" />
|
|
15
15
|
</csharp.SourceFile>
|
|
16
16
|
</csharp.Namespace>
|
|
17
17
|
<csharp.Namespace name="Namespace2">
|
|
18
18
|
<csharp.SourceFile path="Model3.cs">
|
|
19
|
-
<csharp.
|
|
19
|
+
<csharp.ClassDeclaration public name="Model3" />
|
|
20
20
|
</csharp.SourceFile>
|
|
21
21
|
<csharp.SourceFile path="Model4.cs">
|
|
22
|
-
<csharp.
|
|
22
|
+
<csharp.ClassDeclaration public name="Model4" />
|
|
23
23
|
</csharp.SourceFile>
|
|
24
24
|
</csharp.Namespace>
|
|
25
25
|
</core.Output>,
|
|
@@ -14,10 +14,10 @@ it("defines a project directory file with multiple source files", () => {
|
|
|
14
14
|
>
|
|
15
15
|
<csharp.Namespace name="TestCode">
|
|
16
16
|
<csharp.SourceFile path="Test1.cs">
|
|
17
|
-
<csharp.
|
|
17
|
+
<csharp.ClassDeclaration public name="TestClass1" />
|
|
18
18
|
</csharp.SourceFile>
|
|
19
19
|
<csharp.SourceFile path="Test2.cs">
|
|
20
|
-
<csharp.
|
|
20
|
+
<csharp.ClassDeclaration public name="TestClass2" />
|
|
21
21
|
</csharp.SourceFile>
|
|
22
22
|
</csharp.Namespace>
|
|
23
23
|
</csharp.ProjectDirectory>
|
|
@@ -71,10 +71,10 @@ it("defines a project directory file with multiple source files and a custom TFM
|
|
|
71
71
|
>
|
|
72
72
|
<csharp.Namespace name="TestCode">
|
|
73
73
|
<csharp.SourceFile path="Test1.cs">
|
|
74
|
-
<csharp.
|
|
74
|
+
<csharp.ClassDeclaration public name="TestClass1" />
|
|
75
75
|
</csharp.SourceFile>
|
|
76
76
|
<csharp.SourceFile path="Test2.cs">
|
|
77
|
-
<csharp.
|
|
77
|
+
<csharp.ClassDeclaration public name="TestClass2" />
|
|
78
78
|
</csharp.SourceFile>
|
|
79
79
|
</csharp.Namespace>
|
|
80
80
|
</csharp.ProjectDirectory>
|
package/test/sourcefile.test.tsx
CHANGED
|
@@ -8,10 +8,10 @@ it("defines multiple source files with unique content", () => {
|
|
|
8
8
|
<core.Output>
|
|
9
9
|
<csharp.Namespace name="TestCode">
|
|
10
10
|
<csharp.SourceFile path="Test1.cs">
|
|
11
|
-
<csharp.
|
|
11
|
+
<csharp.ClassDeclaration public name="TestClass1" />
|
|
12
12
|
</csharp.SourceFile>
|
|
13
13
|
<csharp.SourceFile path="Test2.cs">
|
|
14
|
-
<csharp.
|
|
14
|
+
<csharp.ClassDeclaration public name="TestClass2" />
|
|
15
15
|
</csharp.SourceFile>
|
|
16
16
|
</csharp.Namespace>
|
|
17
17
|
</core.Output>,
|
package/test/using.test.tsx
CHANGED
|
@@ -52,34 +52,34 @@ it("adds using statement across namespaces", () => {
|
|
|
52
52
|
<core.Output namePolicy={csharp.createCSharpNamePolicy()}>
|
|
53
53
|
<csharp.Namespace name="Models">
|
|
54
54
|
<csharp.SourceFile path="Models.cs">
|
|
55
|
-
<csharp.
|
|
56
|
-
|
|
55
|
+
<csharp.ClassDeclaration
|
|
56
|
+
public
|
|
57
57
|
name="Input"
|
|
58
58
|
refkey={inputTypeRefkey}
|
|
59
59
|
/>
|
|
60
60
|
<hbr />
|
|
61
|
-
<csharp.
|
|
62
|
-
|
|
61
|
+
<csharp.ClassDeclaration
|
|
62
|
+
public
|
|
63
63
|
name="Output"
|
|
64
64
|
refkey={outputTypeRefkey}
|
|
65
65
|
/>
|
|
66
66
|
<hbr />
|
|
67
|
-
<csharp.
|
|
67
|
+
<csharp.EnumDeclaration public name="TestEnum">
|
|
68
68
|
<csharp.EnumMember name="One" />,<hbr />
|
|
69
69
|
<csharp.EnumMember name="Two" refkey={twoValRefkey} />
|
|
70
|
-
</csharp.
|
|
70
|
+
</csharp.EnumDeclaration>
|
|
71
71
|
</csharp.SourceFile>
|
|
72
72
|
</csharp.Namespace>
|
|
73
73
|
<csharp.Namespace name="Client">
|
|
74
74
|
<csharp.SourceFile path="Client.cs" using={["System"]}>
|
|
75
|
-
<csharp.
|
|
75
|
+
<csharp.ClassDeclaration public name="Client">
|
|
76
76
|
<csharp.ClassMethod
|
|
77
|
-
|
|
77
|
+
public
|
|
78
78
|
name="MethodOne"
|
|
79
79
|
parameters={params}
|
|
80
80
|
returns={outputTypeRefkey}
|
|
81
81
|
/>
|
|
82
|
-
</csharp.
|
|
82
|
+
</csharp.ClassDeclaration>
|
|
83
83
|
<hbr />
|
|
84
84
|
{twoValRefkey};
|
|
85
85
|
</csharp.SourceFile>
|
package/test/utils.tsx
CHANGED
|
@@ -3,6 +3,15 @@ import * as coretest from "@alloy-js/core/testing";
|
|
|
3
3
|
import { expect } from "vitest";
|
|
4
4
|
import * as csharp from "../src/index.js";
|
|
5
5
|
|
|
6
|
+
export function TestNamespace(props: {
|
|
7
|
+
children: core.Children;
|
|
8
|
+
}): core.Children {
|
|
9
|
+
return (
|
|
10
|
+
<core.Output namePolicy={csharp.createCSharpNamePolicy()}>
|
|
11
|
+
<csharp.Namespace name="TestCode">{props.children}</csharp.Namespace>
|
|
12
|
+
</core.Output>
|
|
13
|
+
);
|
|
14
|
+
}
|
|
6
15
|
export function toSourceText(c: core.Children): string {
|
|
7
16
|
const res = core.render(
|
|
8
17
|
<core.Output namePolicy={csharp.createCSharpNamePolicy()}>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "@alloy-js/core/testing";
|
package/tsconfig.json
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
"compilerOptions": {
|
|
4
4
|
"emitDeclarationOnly": true,
|
|
5
5
|
"declaration": true,
|
|
6
|
-
"outDir": "dist"
|
|
6
|
+
"outDir": "dist",
|
|
7
|
+
"types": ["@alloy-js/core/testing/matchers"]
|
|
7
8
|
},
|
|
8
9
|
"references": [{ "path": "../core" }],
|
|
9
10
|
"include": ["src/**/*.ts", "src/**/*.tsx", "test/**/*.ts", "test/**/*.tsx"],
|