@alloy-js/csharp 0.18.0-dev.2 → 0.18.0-dev.21

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 (158) hide show
  1. package/LICENSE +7 -0
  2. package/dist/src/components/ClassDeclaration.d.ts +74 -0
  3. package/dist/src/components/ClassDeclaration.d.ts.map +1 -0
  4. package/dist/src/components/{Class.js → ClassDeclaration.js} +64 -38
  5. package/dist/src/components/ClassMethod.d.ts +26 -5
  6. package/dist/src/components/ClassMethod.d.ts.map +1 -1
  7. package/dist/src/components/ClassMethod.js +27 -9
  8. package/dist/src/components/EnumDeclaration.d.ts +34 -0
  9. package/dist/src/components/EnumDeclaration.d.ts.map +1 -0
  10. package/dist/src/components/{Enum.js → EnumDeclaration.js} +25 -5
  11. package/dist/src/components/doc/comment.d.ts +70 -0
  12. package/dist/src/components/doc/comment.d.ts.map +1 -0
  13. package/dist/src/components/doc/comment.js +88 -0
  14. package/dist/src/components/doc/comment.test.d.ts +2 -0
  15. package/dist/src/components/doc/comment.test.d.ts.map +1 -0
  16. package/dist/src/components/doc/comment.test.js +348 -0
  17. package/dist/src/components/doc/from-markdown.d.ts +6 -0
  18. package/dist/src/components/doc/from-markdown.d.ts.map +1 -0
  19. package/dist/src/components/doc/from-markdown.js +58 -0
  20. package/dist/src/components/doc/from-markdown.test.d.ts +2 -0
  21. package/dist/src/components/doc/from-markdown.test.d.ts.map +1 -0
  22. package/dist/src/components/doc/from-markdown.test.js +83 -0
  23. package/dist/src/components/index.d.ts +13 -4
  24. package/dist/src/components/index.d.ts.map +1 -1
  25. package/dist/src/components/index.js +14 -5
  26. package/dist/src/components/interface/declaration.d.ts +47 -0
  27. package/dist/src/components/interface/declaration.d.ts.map +1 -0
  28. package/dist/src/components/interface/declaration.js +77 -0
  29. package/dist/src/components/interface/declaration.test.d.ts +2 -0
  30. package/dist/src/components/interface/declaration.test.d.ts.map +1 -0
  31. package/dist/src/components/interface/declaration.test.js +153 -0
  32. package/dist/src/components/interface/method.d.ts +32 -0
  33. package/dist/src/components/interface/method.d.ts.map +1 -0
  34. package/dist/src/components/interface/method.js +68 -0
  35. package/dist/src/components/interface/method.test.d.ts +2 -0
  36. package/dist/src/components/interface/method.test.d.ts.map +1 -0
  37. package/dist/src/components/interface/method.test.js +279 -0
  38. package/dist/src/components/interface/property.d.ts +38 -0
  39. package/dist/src/components/interface/property.d.ts.map +1 -0
  40. package/dist/src/components/interface/property.js +67 -0
  41. package/dist/src/components/interface/property.test.d.ts +2 -0
  42. package/dist/src/components/interface/property.test.d.ts.map +1 -0
  43. package/dist/src/components/interface/property.test.js +165 -0
  44. package/dist/src/components/parameters/parameters.d.ts +19 -0
  45. package/dist/src/components/parameters/parameters.d.ts.map +1 -0
  46. package/dist/src/components/parameters/parameters.js +43 -0
  47. package/dist/src/components/property/property.d.ts +57 -0
  48. package/dist/src/components/property/property.d.ts.map +1 -0
  49. package/dist/src/components/property/property.js +70 -0
  50. package/dist/src/components/property/property.test.d.ts +2 -0
  51. package/dist/src/components/property/property.test.d.ts.map +1 -0
  52. package/dist/src/components/property/property.test.js +218 -0
  53. package/dist/src/components/record/declaration.d.ts +35 -0
  54. package/dist/src/components/record/declaration.d.ts.map +1 -0
  55. package/dist/src/components/record/declaration.js +90 -0
  56. package/dist/src/components/record/declaration.test.d.ts +2 -0
  57. package/dist/src/components/record/declaration.test.d.ts.map +1 -0
  58. package/dist/src/components/record/declaration.test.js +94 -0
  59. package/dist/src/components/stc/index.d.ts +2 -2
  60. package/dist/src/components/stc/index.d.ts.map +1 -1
  61. package/dist/src/components/stc/index.js +2 -2
  62. package/dist/src/components/type-parameters/type-parameter-constraints.d.ts +8 -0
  63. package/dist/src/components/type-parameters/type-parameter-constraints.d.ts.map +1 -0
  64. package/dist/src/components/type-parameters/type-parameter-constraints.js +44 -0
  65. package/dist/src/components/type-parameters/type-parameter-constraints.test.d.ts +2 -0
  66. package/dist/src/components/type-parameters/type-parameter-constraints.test.d.ts.map +1 -0
  67. package/dist/src/components/type-parameters/type-parameter-constraints.test.js +67 -0
  68. package/dist/src/components/type-parameters/type-parameter.d.ts +20 -0
  69. package/dist/src/components/type-parameters/type-parameter.d.ts.map +1 -0
  70. package/dist/src/components/type-parameters/type-parameter.js +22 -0
  71. package/dist/src/components/type-parameters/type-parameters.d.ts +17 -0
  72. package/dist/src/components/type-parameters/type-parameters.d.ts.map +1 -0
  73. package/dist/src/components/type-parameters/type-parameters.js +54 -0
  74. package/dist/src/components/type-parameters/type-parameters.test.d.ts +2 -0
  75. package/dist/src/components/type-parameters/type-parameters.test.d.ts.map +1 -0
  76. package/dist/src/components/type-parameters/type-parameters.test.js +48 -0
  77. package/dist/src/components/var/declaration.d.ts +35 -0
  78. package/dist/src/components/var/declaration.d.ts.map +1 -0
  79. package/dist/src/components/var/declaration.js +40 -0
  80. package/dist/src/components/var/declaration.test.d.ts +2 -0
  81. package/dist/src/components/var/declaration.test.d.ts.map +1 -0
  82. package/dist/src/components/var/declaration.test.js +73 -0
  83. package/dist/src/modifiers.d.ts +10 -4
  84. package/dist/src/modifiers.d.ts.map +1 -1
  85. package/dist/src/modifiers.js +9 -32
  86. package/dist/src/name-policy.d.ts +1 -1
  87. package/dist/src/name-policy.d.ts.map +1 -1
  88. package/dist/src/name-policy.js +2 -0
  89. package/dist/test/class-declaration.test.d.ts +2 -0
  90. package/dist/test/class-declaration.test.d.ts.map +1 -0
  91. package/dist/test/class-declaration.test.js +463 -0
  92. package/dist/test/class-method.test.js +37 -14
  93. package/dist/test/enum.test.js +12 -12
  94. package/dist/test/namespace.test.js +8 -8
  95. package/dist/test/project-directory.test.d.ts +2 -0
  96. package/dist/test/project-directory.test.d.ts.map +1 -0
  97. package/dist/test/{projectdirectory.test.js → project-directory.test.js} +8 -8
  98. package/dist/test/sourcefile.test.js +4 -4
  99. package/dist/test/using.test.js +9 -9
  100. package/dist/test/vitest.setup.d.ts +2 -0
  101. package/dist/test/vitest.setup.d.ts.map +1 -0
  102. package/dist/test/vitest.setup.js +1 -0
  103. package/dist/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +21 -21
  105. package/src/components/ClassDeclaration.tsx +213 -0
  106. package/src/components/ClassMethod.tsx +54 -15
  107. package/src/components/{Enum.tsx → EnumDeclaration.tsx} +30 -6
  108. package/src/components/doc/comment.test.tsx +337 -0
  109. package/src/components/doc/comment.tsx +152 -0
  110. package/src/components/doc/from-markdown.test.tsx +103 -0
  111. package/src/components/doc/from-markdown.tsx +58 -0
  112. package/src/components/index.ts +13 -4
  113. package/src/components/interface/declaration.test.tsx +143 -0
  114. package/src/components/interface/declaration.tsx +105 -0
  115. package/src/components/interface/method.test.tsx +278 -0
  116. package/src/components/interface/method.tsx +102 -0
  117. package/src/components/interface/property.test.tsx +144 -0
  118. package/src/components/interface/property.tsx +107 -0
  119. package/src/components/parameters/parameters.tsx +74 -0
  120. package/src/components/property/property.test.tsx +187 -0
  121. package/src/components/property/property.tsx +146 -0
  122. package/src/components/record/declaration.test.tsx +73 -0
  123. package/src/components/record/declaration.tsx +109 -0
  124. package/src/components/stc/index.ts +2 -2
  125. package/src/components/type-parameters/type-parameter-constraints.test.tsx +93 -0
  126. package/src/components/type-parameters/type-parameter-constraints.tsx +46 -0
  127. package/src/components/type-parameters/type-parameter.tsx +35 -0
  128. package/src/components/type-parameters/type-parameters.test.tsx +46 -0
  129. package/src/components/type-parameters/type-parameters.tsx +63 -0
  130. package/src/components/var/declaration.test.tsx +59 -0
  131. package/src/components/var/declaration.tsx +47 -0
  132. package/src/modifiers.ts +25 -42
  133. package/src/name-policy.ts +5 -0
  134. package/temp/api.json +5228 -686
  135. package/test/class-declaration.test.tsx +418 -0
  136. package/test/class-method.test.tsx +24 -14
  137. package/test/enum.test.tsx +11 -11
  138. package/test/namespace.test.tsx +4 -4
  139. package/test/{projectdirectory.test.tsx → project-directory.test.tsx} +4 -4
  140. package/test/sourcefile.test.tsx +2 -2
  141. package/test/using.test.tsx +9 -9
  142. package/test/vitest.setup.ts +1 -0
  143. package/vitest.config.ts +3 -0
  144. package/dist/src/components/Class.d.ts +0 -26
  145. package/dist/src/components/Class.d.ts.map +0 -1
  146. package/dist/src/components/Enum.d.ts +0 -15
  147. package/dist/src/components/Enum.d.ts.map +0 -1
  148. package/dist/src/components/Parameters.d.ts +0 -13
  149. package/dist/src/components/Parameters.d.ts.map +0 -1
  150. package/dist/src/components/Parameters.js +0 -34
  151. package/dist/test/class.test.d.ts +0 -2
  152. package/dist/test/class.test.d.ts.map +0 -1
  153. package/dist/test/class.test.js +0 -298
  154. package/dist/test/projectdirectory.test.d.ts +0 -2
  155. package/dist/test/projectdirectory.test.d.ts.map +0 -1
  156. package/src/components/Class.tsx +0 -149
  157. package/src/components/Parameters.tsx +0 -51
  158. package/test/class.test.tsx +0 -292
@@ -0,0 +1,418 @@
1
+ import * as core from "@alloy-js/core";
2
+ import { List, refkey } from "@alloy-js/core";
3
+ import * as coretest from "@alloy-js/core/testing";
4
+ import { describe, expect, it } from "vitest";
5
+ import { TypeParameterProps } from "../src/components/type-parameters/type-parameter.jsx";
6
+ import * as csharp from "../src/index.js";
7
+ import {
8
+ ClassDeclaration,
9
+ ClassMember,
10
+ Property,
11
+ SourceFile,
12
+ } from "../src/index.js";
13
+ import * as utils from "./utils.jsx";
14
+
15
+ it("declares class with no members", () => {
16
+ expect(
17
+ <utils.TestNamespace>
18
+ <ClassDeclaration name="TestClass" />
19
+ </utils.TestNamespace>,
20
+ ).toRenderTo(`
21
+ class TestClass;
22
+ `);
23
+ });
24
+
25
+ describe("modifiers", () => {
26
+ it.each(["public", "private"])("%s", (mod) => {
27
+ expect(
28
+ <utils.TestNamespace>
29
+ <ClassDeclaration {...{ [mod]: true }} name="TestClass" />
30
+ </utils.TestNamespace>,
31
+ ).toRenderTo(`
32
+ ${mod} class TestClass;
33
+ `);
34
+ });
35
+
36
+ it.each(["partial", "abstract", "static", "sealed"])("%s", (mod) => {
37
+ expect(
38
+ <utils.TestNamespace>
39
+ <ClassDeclaration {...{ [mod]: true }} name="TestClass" />
40
+ </utils.TestNamespace>,
41
+ ).toRenderTo(`
42
+ ${mod} class TestClass;
43
+ `);
44
+ });
45
+
46
+ it("combines modifiers", () => {
47
+ expect(
48
+ <utils.TestNamespace>
49
+ <ClassDeclaration public abstract partial name="TestClass" />
50
+ </utils.TestNamespace>,
51
+ ).toRenderTo(`
52
+ public abstract partial class TestClass;
53
+ `);
54
+ });
55
+ });
56
+
57
+ describe("base", () => {
58
+ it("define base class", () => {
59
+ expect(
60
+ <utils.TestNamespace>
61
+ <csharp.ClassDeclaration name="TestClass" baseType="Foo" />
62
+ </utils.TestNamespace>,
63
+ ).toRenderTo(`
64
+ class TestClass : Foo;
65
+ `);
66
+ });
67
+
68
+ it("define multiple interface types", () => {
69
+ expect(
70
+ <utils.TestNamespace>
71
+ <csharp.ClassDeclaration
72
+ name="TestClass"
73
+ interfaceTypes={["Foo", "Bar"]}
74
+ />
75
+ </utils.TestNamespace>,
76
+ ).toRenderTo(`
77
+ class TestClass : Foo, Bar;
78
+ `);
79
+ });
80
+
81
+ it("define base class and multiple interface types", () => {
82
+ expect(
83
+ <utils.TestNamespace>
84
+ <csharp.ClassDeclaration
85
+ name="TestClass"
86
+ baseType="BaseClass"
87
+ interfaceTypes={["Foo", "Bar"]}
88
+ />
89
+ </utils.TestNamespace>,
90
+ ).toRenderTo(`
91
+ class TestClass : BaseClass, Foo, Bar;
92
+ `);
93
+ });
94
+ });
95
+
96
+ it("declares class with some members", () => {
97
+ const res = utils.toSourceText(
98
+ <csharp.ClassDeclaration public name="TestClass">
99
+ <core.StatementList>
100
+ <csharp.ClassMember public name="MemberOne" type="string" />
101
+ <csharp.ClassMember private name="MemberTwo" type="int" />
102
+ </core.StatementList>
103
+ </csharp.ClassDeclaration>,
104
+ );
105
+
106
+ expect(res).toBe(coretest.d`
107
+ namespace TestCode
108
+ {
109
+ public class TestClass
110
+ {
111
+ public string MemberOne;
112
+ private int memberTwo;
113
+ }
114
+ }
115
+ `);
116
+ });
117
+
118
+ it("declares class with some methods", () => {
119
+ const res = utils.toSourceText(
120
+ <csharp.ClassDeclaration public name="TestClass">
121
+ <core.List>
122
+ <csharp.ClassMethod public name="MethodOne" />
123
+ <csharp.ClassMethod private virtual name="MethodTwo" />
124
+ </core.List>
125
+ </csharp.ClassDeclaration>,
126
+ );
127
+
128
+ expect(res).toBe(coretest.d`
129
+ namespace TestCode
130
+ {
131
+ public class TestClass
132
+ {
133
+ public void MethodOne() {}
134
+ private virtual void MethodTwo() {}
135
+ }
136
+ }
137
+ `);
138
+ });
139
+
140
+ it("uses refkeys for members, params, and return type", () => {
141
+ const inputTypeRefkey = core.refkey();
142
+ const testResultTypeRefkey = core.refkey();
143
+ const enumTypeRefkey = core.refkey();
144
+
145
+ const params = [
146
+ {
147
+ name: "IntParam",
148
+ type: "int",
149
+ },
150
+ {
151
+ name: "BodyParam",
152
+ type: inputTypeRefkey,
153
+ },
154
+ ];
155
+
156
+ const res = core.render(
157
+ <core.Output namePolicy={csharp.createCSharpNamePolicy()}>
158
+ <csharp.Namespace name="TestCode">
159
+ <csharp.SourceFile path="Test.cs">
160
+ <csharp.EnumDeclaration
161
+ public
162
+ name="TestEnum"
163
+ refkey={enumTypeRefkey}
164
+ >
165
+ <core.List comma hardline>
166
+ <csharp.EnumMember name="One" />
167
+ <csharp.EnumMember name="Two" />
168
+ </core.List>
169
+ </csharp.EnumDeclaration>
170
+ <hbr />
171
+ <csharp.ClassDeclaration
172
+ public
173
+ name="TestInput"
174
+ refkey={inputTypeRefkey}
175
+ />
176
+ <hbr />
177
+ <csharp.ClassDeclaration
178
+ public
179
+ name="TestResult"
180
+ refkey={testResultTypeRefkey}
181
+ />
182
+ <hbr />
183
+ <csharp.ClassDeclaration public name="TestClass">
184
+ <csharp.ClassMember
185
+ private
186
+ name="MemberOne"
187
+ type={enumTypeRefkey}
188
+ />
189
+ ;
190
+ <hbr />
191
+ <csharp.ClassMethod
192
+ public
193
+ name="MethodOne"
194
+ parameters={params}
195
+ returns={testResultTypeRefkey}
196
+ >
197
+ return new {testResultTypeRefkey}();
198
+ </csharp.ClassMethod>
199
+ </csharp.ClassDeclaration>
200
+ </csharp.SourceFile>
201
+ </csharp.Namespace>
202
+ </core.Output>,
203
+ );
204
+
205
+ expect(res.contents[0].contents).toBe(coretest.d`
206
+ namespace TestCode
207
+ {
208
+ public enum TestEnum
209
+ {
210
+ One,
211
+ Two
212
+ }
213
+ public class TestInput;
214
+ public class TestResult;
215
+ public class TestClass
216
+ {
217
+ private TestEnum memberOne;
218
+ public TestResult MethodOne(int intParam, TestInput bodyParam)
219
+ {
220
+ return new TestResult();
221
+ }
222
+ }
223
+ }
224
+ `);
225
+ });
226
+
227
+ describe("with type parameters", () => {
228
+ it("reference parameters", () => {
229
+ const typeParameters: TypeParameterProps[] = [
230
+ {
231
+ name: "T",
232
+ refkey: refkey(),
233
+ },
234
+ {
235
+ name: "U",
236
+ refkey: refkey(),
237
+ },
238
+ ];
239
+
240
+ expect(
241
+ <utils.TestNamespace>
242
+ <SourceFile path="Test.cs">
243
+ <ClassDeclaration
244
+ public
245
+ name="TestClass"
246
+ typeParameters={typeParameters}
247
+ >
248
+ <List>
249
+ <Property name="PropA" type={typeParameters[0].refkey} get set />
250
+ <Property name="PropB" type={typeParameters[1].refkey} get set />
251
+ </List>
252
+ </ClassDeclaration>
253
+ </SourceFile>
254
+ </utils.TestNamespace>,
255
+ ).toRenderTo(`
256
+ namespace TestCode
257
+ {
258
+ public class TestClass<T, U>
259
+ {
260
+ T PropA { get; set; }
261
+ U PropB { get; set; }
262
+ }
263
+ }
264
+ `);
265
+ });
266
+
267
+ it("defines with constraints", () => {
268
+ const typeParameters: TypeParameterProps[] = [
269
+ {
270
+ name: "T",
271
+ constraints: "IFoo",
272
+ },
273
+ {
274
+ name: "U",
275
+ constraints: "IBar",
276
+ },
277
+ ];
278
+
279
+ expect(
280
+ <utils.TestNamespace>
281
+ <ClassDeclaration
282
+ public
283
+ name="TestClass"
284
+ typeParameters={typeParameters}
285
+ >
286
+ // Body
287
+ </ClassDeclaration>
288
+ </utils.TestNamespace>,
289
+ ).toRenderTo(`
290
+ public class TestClass<T, U>
291
+ where T : IFoo
292
+ where U : IBar
293
+ {
294
+ // Body
295
+ }
296
+ `);
297
+ });
298
+ });
299
+
300
+ it("declares class with invalid members", () => {
301
+ const decl = (
302
+ <csharp.ClassDeclaration public name="TestClass">
303
+ <csharp.EnumMember name="One" />,<hbr />
304
+ <csharp.EnumMember name="Two" />
305
+ </csharp.ClassDeclaration>
306
+ );
307
+
308
+ expect(() => utils.toSourceText(decl)).toThrow(
309
+ "can't define an enum member outside of an enum-decl scope",
310
+ );
311
+ });
312
+
313
+ it("declares class with constructor", () => {
314
+ const res = utils.toSourceText(
315
+ <csharp.ClassDeclaration public name="TestClass">
316
+ <csharp.ClassConstructor public />
317
+ </csharp.ClassDeclaration>,
318
+ );
319
+
320
+ expect(res).toBe(coretest.d`
321
+ namespace TestCode
322
+ {
323
+ public class TestClass
324
+ {
325
+ public TestClass() {}
326
+ }
327
+ }
328
+ `);
329
+ });
330
+
331
+ it("declares class with constructor params and assigns values to fields", () => {
332
+ const thisNameRefkey = core.refkey();
333
+ const thisSizeRefkey = core.refkey();
334
+ const paramNameRefkey = core.refkey();
335
+ const paramSizeRefkey = core.refkey();
336
+
337
+ const ctorParams = [
338
+ {
339
+ name: "name",
340
+ type: "string",
341
+ refkey: paramNameRefkey,
342
+ },
343
+ {
344
+ name: "size",
345
+ type: "int",
346
+ refkey: paramSizeRefkey,
347
+ },
348
+ ];
349
+
350
+ const res = utils.toSourceText(
351
+ <csharp.ClassDeclaration public name="TestClass">
352
+ <csharp.ClassMember
353
+ private
354
+ name="name"
355
+ type="string"
356
+ refkey={thisNameRefkey}
357
+ />
358
+ ;<hbr />
359
+ <csharp.ClassMember
360
+ private
361
+ name="size"
362
+ type="int"
363
+ refkey={thisSizeRefkey}
364
+ />
365
+ ;<hbr />
366
+ <csharp.ClassConstructor public parameters={ctorParams}>
367
+ {thisNameRefkey} = {paramNameRefkey};<hbr />
368
+ {thisSizeRefkey} = {paramSizeRefkey};
369
+ </csharp.ClassConstructor>
370
+ </csharp.ClassDeclaration>,
371
+ );
372
+
373
+ // TODO: assignments to members should have this. prefix
374
+ // e.g. this.name = name;
375
+ expect(res).toBe(coretest.d`
376
+ namespace TestCode
377
+ {
378
+ public class TestClass
379
+ {
380
+ private string name;
381
+ private int size;
382
+ public TestClass(string name, int size)
383
+ {
384
+ name = name;
385
+ size = size;
386
+ }
387
+ }
388
+ }
389
+ `);
390
+ });
391
+
392
+ it("specify doc comment", () => {
393
+ expect(
394
+ <utils.TestNamespace>
395
+ <ClassDeclaration name="Test" doc="This is a test" />
396
+ </utils.TestNamespace>,
397
+ ).toRenderTo(`
398
+ /// This is a test
399
+ class Test;
400
+ `);
401
+ });
402
+
403
+ it("supports class member doc comments", () => {
404
+ expect(
405
+ <utils.TestNamespace>
406
+ <ClassDeclaration name="Test" doc="This is a test">
407
+ <ClassMember name="Member" public type="int" doc="This is a member" />
408
+ </ClassDeclaration>
409
+ </utils.TestNamespace>,
410
+ ).toRenderTo(`
411
+ /// This is a test
412
+ class Test
413
+ {
414
+ /// This is a member
415
+ public int Member
416
+ }
417
+ `);
418
+ });
@@ -1,13 +1,13 @@
1
1
  import { Children } from "@alloy-js/core/jsx-runtime";
2
2
  import { describe, expect, it } from "vitest";
3
- import { Class, ClassMethod } from "../src/index.js";
3
+ import { ClassDeclaration, ClassMethod } from "../src/index.js";
4
4
  import { TestNamespace } from "./utils.jsx";
5
5
 
6
6
  const Wrapper = (props: { children: Children }) => (
7
7
  <TestNamespace>
8
- <Class accessModifier="public" name="TestClass">
8
+ <ClassDeclaration public name="TestClass">
9
9
  {props.children}
10
- </Class>
10
+ </ClassDeclaration>
11
11
  </TestNamespace>
12
12
  );
13
13
 
@@ -18,7 +18,7 @@ describe("modifiers", () => {
18
18
  (accessModifier) => {
19
19
  expect(
20
20
  <Wrapper>
21
- <ClassMethod accessModifier={accessModifier} name="MethodOne" />
21
+ <ClassMethod {...{ [accessModifier]: true }} name="MethodOne" />
22
22
  </Wrapper>,
23
23
  ).toRenderTo(`
24
24
  public class TestClass
@@ -36,7 +36,7 @@ describe("modifiers", () => {
36
36
  (methodModifier) => {
37
37
  expect(
38
38
  <Wrapper>
39
- <ClassMethod methodModifier={methodModifier} name="MethodOne" />
39
+ <ClassMethod {...{ [methodModifier]: true }} name="MethodOne" />
40
40
  </Wrapper>,
41
41
  ).toRenderTo(`
42
42
  public class TestClass
@@ -50,7 +50,7 @@ describe("modifiers", () => {
50
50
  it("abstract exclude body", () => {
51
51
  expect(
52
52
  <Wrapper>
53
- <ClassMethod methodModifier="abstract" name="MethodOne" />
53
+ <ClassMethod abstract name="MethodOne" />
54
54
  </Wrapper>,
55
55
  ).toRenderTo(`
56
56
  public class TestClass
@@ -77,13 +77,7 @@ describe("modifiers", () => {
77
77
  it("combine modifiers", () => {
78
78
  expect(
79
79
  <Wrapper>
80
- <ClassMethod
81
- async
82
- returns="Task"
83
- accessModifier="public"
84
- methodModifier="abstract"
85
- name="MethodOne"
86
- />
80
+ <ClassMethod async returns="Task" public abstract name="MethodOne" />
87
81
  </Wrapper>,
88
82
  ).toRenderTo(`
89
83
  public class TestClass
@@ -120,7 +114,7 @@ it("defines params and return type", () => {
120
114
  const res = (
121
115
  <Wrapper>
122
116
  <ClassMethod
123
- accessModifier="public"
117
+ public
124
118
  name="MethodOne"
125
119
  parameters={params}
126
120
  returns="string"
@@ -135,3 +129,19 @@ it("defines params and return type", () => {
135
129
  }
136
130
  `);
137
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
+ });
@@ -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.Enum accessModifier="public" name="TestEnum" />,
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.Enum accessModifier="public" name="TestEnum">
22
+ <csharp.EnumDeclaration public name="TestEnum">
23
23
  <csharp.EnumMember name="One" />,<hbr />
24
24
  <csharp.EnumMember name="Two" />
25
- </csharp.Enum>,
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.Enum accessModifier="public" name="testEnum">
42
+ <csharp.EnumDeclaration public name="testEnum">
43
43
  <csharp.EnumMember name="one" />,<hbr />
44
44
  <csharp.EnumMember name="two" />
45
- </csharp.Enum>,
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.Enum accessModifier="public" name="TestEnum" refkey={enumRK}>
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.Enum>
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.Enum accessModifier="public" name="TestEnum">
102
+ <csharp.EnumDeclaration public name="TestEnum">
103
103
  <csharp.EnumMember name="One" />,<hbr />
104
104
  <csharp.EnumMember name="Two" />
105
- </csharp.Enum>
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.Enum accessModifier="public" name="OtherEnum" refkey={enumRK}>
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.Enum>
114
+ </csharp.EnumDeclaration>
115
115
  <hbr />
116
116
  {enumRK};<hbr />
117
117
  {barRK};
@@ -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.Class accessModifier="public" name="Model1" />
11
+ <csharp.ClassDeclaration public name="Model1" />
12
12
  </csharp.SourceFile>
13
13
  <csharp.SourceFile path="Model2.cs">
14
- <csharp.Class accessModifier="public" name="Model2" />
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.Class accessModifier="public" name="Model3" />
19
+ <csharp.ClassDeclaration public name="Model3" />
20
20
  </csharp.SourceFile>
21
21
  <csharp.SourceFile path="Model4.cs">
22
- <csharp.Class accessModifier="public" name="Model4" />
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.Class accessModifier="public" name="TestClass1" />
17
+ <csharp.ClassDeclaration public name="TestClass1" />
18
18
  </csharp.SourceFile>
19
19
  <csharp.SourceFile path="Test2.cs">
20
- <csharp.Class accessModifier="public" name="TestClass2" />
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.Class accessModifier="public" name="TestClass1" />
74
+ <csharp.ClassDeclaration public name="TestClass1" />
75
75
  </csharp.SourceFile>
76
76
  <csharp.SourceFile path="Test2.cs">
77
- <csharp.Class accessModifier="public" name="TestClass2" />
77
+ <csharp.ClassDeclaration public name="TestClass2" />
78
78
  </csharp.SourceFile>
79
79
  </csharp.Namespace>
80
80
  </csharp.ProjectDirectory>
@@ -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.Class accessModifier="public" name="TestClass1" />
11
+ <csharp.ClassDeclaration public name="TestClass1" />
12
12
  </csharp.SourceFile>
13
13
  <csharp.SourceFile path="Test2.cs">
14
- <csharp.Class accessModifier="public" name="TestClass2" />
14
+ <csharp.ClassDeclaration public name="TestClass2" />
15
15
  </csharp.SourceFile>
16
16
  </csharp.Namespace>
17
17
  </core.Output>,
@@ -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.Class
56
- accessModifier="public"
55
+ <csharp.ClassDeclaration
56
+ public
57
57
  name="Input"
58
58
  refkey={inputTypeRefkey}
59
59
  />
60
60
  <hbr />
61
- <csharp.Class
62
- accessModifier="public"
61
+ <csharp.ClassDeclaration
62
+ public
63
63
  name="Output"
64
64
  refkey={outputTypeRefkey}
65
65
  />
66
66
  <hbr />
67
- <csharp.Enum accessModifier="public" name="TestEnum">
67
+ <csharp.EnumDeclaration public name="TestEnum">
68
68
  <csharp.EnumMember name="One" />,<hbr />
69
69
  <csharp.EnumMember name="Two" refkey={twoValRefkey} />
70
- </csharp.Enum>
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.Class accessModifier="public" name="Client">
75
+ <csharp.ClassDeclaration public name="Client">
76
76
  <csharp.ClassMethod
77
- accessModifier="public"
77
+ public
78
78
  name="MethodOne"
79
79
  parameters={params}
80
80
  returns={outputTypeRefkey}
81
81
  />
82
- </csharp.Class>
82
+ </csharp.ClassDeclaration>
83
83
  <hbr />
84
84
  {twoValRefkey};
85
85
  </csharp.SourceFile>
@@ -0,0 +1 @@
1
+ import "@alloy-js/core/testing";