@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.
Files changed (117) hide show
  1. package/dist/src/components/ClassDeclaration.d.ts +57 -0
  2. package/dist/src/components/ClassDeclaration.d.ts.map +1 -0
  3. package/dist/src/components/{Class.js → ClassDeclaration.js} +42 -53
  4. package/dist/src/components/ClassMethod.d.ts +25 -0
  5. package/dist/src/components/ClassMethod.d.ts.map +1 -0
  6. package/dist/src/components/ClassMethod.js +60 -0
  7. package/dist/src/components/EnumDeclaration.d.ts +34 -0
  8. package/dist/src/components/EnumDeclaration.d.ts.map +1 -0
  9. package/dist/src/components/{Enum.js → EnumDeclaration.js} +25 -5
  10. package/dist/src/components/class/property.d.ts +55 -0
  11. package/dist/src/components/class/property.d.ts.map +1 -0
  12. package/dist/src/components/class/property.js +67 -0
  13. package/dist/src/components/class/property.test.d.ts +2 -0
  14. package/dist/src/components/class/property.test.d.ts.map +1 -0
  15. package/dist/src/components/class/property.test.js +201 -0
  16. package/dist/src/components/doc/comment.d.ts +70 -0
  17. package/dist/src/components/doc/comment.d.ts.map +1 -0
  18. package/dist/src/components/doc/comment.js +88 -0
  19. package/dist/src/components/doc/comment.test.d.ts +2 -0
  20. package/dist/src/components/doc/comment.test.d.ts.map +1 -0
  21. package/dist/src/components/doc/comment.test.js +348 -0
  22. package/dist/src/components/doc/from-markdown.d.ts +6 -0
  23. package/dist/src/components/doc/from-markdown.d.ts.map +1 -0
  24. package/dist/src/components/doc/from-markdown.js +58 -0
  25. package/dist/src/components/doc/from-markdown.test.d.ts +2 -0
  26. package/dist/src/components/doc/from-markdown.test.d.ts.map +1 -0
  27. package/dist/src/components/doc/from-markdown.test.js +83 -0
  28. package/dist/src/components/index.d.ts +9 -2
  29. package/dist/src/components/index.d.ts.map +1 -1
  30. package/dist/src/components/index.js +9 -2
  31. package/dist/src/components/interface/declaration.d.ts +34 -0
  32. package/dist/src/components/interface/declaration.d.ts.map +1 -0
  33. package/dist/src/components/interface/declaration.js +90 -0
  34. package/dist/src/components/interface/declaration.test.d.ts +2 -0
  35. package/dist/src/components/interface/declaration.test.d.ts.map +1 -0
  36. package/dist/src/components/interface/declaration.test.js +69 -0
  37. package/dist/src/components/interface/method.d.ts +18 -0
  38. package/dist/src/components/interface/method.d.ts.map +1 -0
  39. package/dist/src/components/interface/method.js +59 -0
  40. package/dist/src/components/interface/method.test.d.ts +2 -0
  41. package/dist/src/components/interface/method.test.d.ts.map +1 -0
  42. package/dist/src/components/interface/method.test.js +131 -0
  43. package/dist/src/components/interface/property.d.ts +38 -0
  44. package/dist/src/components/interface/property.d.ts.map +1 -0
  45. package/dist/src/components/interface/property.js +67 -0
  46. package/dist/src/components/interface/property.test.d.ts +2 -0
  47. package/dist/src/components/interface/property.test.d.ts.map +1 -0
  48. package/dist/src/components/interface/property.test.js +165 -0
  49. package/dist/src/components/stc/index.d.ts +2 -2
  50. package/dist/src/components/stc/index.d.ts.map +1 -1
  51. package/dist/src/components/stc/index.js +2 -2
  52. package/dist/src/modifiers.d.ts +13 -4
  53. package/dist/src/modifiers.d.ts.map +1 -1
  54. package/dist/src/modifiers.js +13 -27
  55. package/dist/src/name-policy.d.ts +1 -1
  56. package/dist/src/name-policy.d.ts.map +1 -1
  57. package/dist/src/name-policy.js +1 -0
  58. package/dist/test/class-declaration.test.d.ts +2 -0
  59. package/dist/test/class-declaration.test.d.ts.map +1 -0
  60. package/dist/test/{class.test.js → class-declaration.test.js} +123 -73
  61. package/dist/test/class-method.test.d.ts +2 -0
  62. package/dist/test/class-method.test.d.ts.map +1 -0
  63. package/dist/test/class-method.test.js +161 -0
  64. package/dist/test/enum.test.js +12 -12
  65. package/dist/test/namespace.test.js +8 -8
  66. package/dist/test/project-directory.test.d.ts +2 -0
  67. package/dist/test/project-directory.test.d.ts.map +1 -0
  68. package/dist/test/{projectdirectory.test.js → project-directory.test.js} +8 -8
  69. package/dist/test/sourcefile.test.js +4 -4
  70. package/dist/test/using.test.js +9 -9
  71. package/dist/test/utils.d.ts +3 -0
  72. package/dist/test/utils.d.ts.map +1 -1
  73. package/dist/test/utils.js +15 -0
  74. package/dist/test/vitest.setup.d.ts +2 -0
  75. package/dist/test/vitest.setup.d.ts.map +1 -0
  76. package/dist/test/vitest.setup.js +1 -0
  77. package/dist/tsconfig.tsbuildinfo +1 -1
  78. package/package.json +7 -6
  79. package/src/components/{Class.tsx → ClassDeclaration.tsx} +68 -66
  80. package/src/components/ClassMethod.tsx +94 -0
  81. package/src/components/{Enum.tsx → EnumDeclaration.tsx} +30 -6
  82. package/src/components/class/property.test.tsx +180 -0
  83. package/src/components/class/property.tsx +135 -0
  84. package/src/components/doc/comment.test.tsx +337 -0
  85. package/src/components/doc/comment.tsx +152 -0
  86. package/src/components/doc/from-markdown.test.tsx +103 -0
  87. package/src/components/doc/from-markdown.tsx +58 -0
  88. package/src/components/index.ts +9 -2
  89. package/src/components/interface/declaration.test.tsx +56 -0
  90. package/src/components/interface/declaration.tsx +109 -0
  91. package/src/components/interface/method.test.tsx +120 -0
  92. package/src/components/interface/method.tsx +82 -0
  93. package/src/components/interface/property.test.tsx +144 -0
  94. package/src/components/interface/property.tsx +107 -0
  95. package/src/components/stc/index.ts +2 -2
  96. package/src/modifiers.ts +32 -37
  97. package/src/name-policy.ts +2 -0
  98. package/temp/api.json +4419 -567
  99. package/test/{class.test.tsx → class-declaration.test.tsx} +103 -99
  100. package/test/class-method.test.tsx +147 -0
  101. package/test/enum.test.tsx +11 -11
  102. package/test/namespace.test.tsx +4 -4
  103. package/test/{projectdirectory.test.tsx → project-directory.test.tsx} +4 -4
  104. package/test/sourcefile.test.tsx +2 -2
  105. package/test/using.test.tsx +9 -9
  106. package/test/utils.tsx +9 -0
  107. package/test/vitest.setup.ts +1 -0
  108. package/tsconfig.json +2 -1
  109. package/vitest.config.ts +3 -0
  110. package/dist/src/components/Class.d.ts +0 -36
  111. package/dist/src/components/Class.d.ts.map +0 -1
  112. package/dist/src/components/Enum.d.ts +0 -15
  113. package/dist/src/components/Enum.d.ts.map +0 -1
  114. package/dist/test/class.test.d.ts +0 -2
  115. package/dist/test/class.test.d.ts.map +0 -1
  116. package/dist/test/projectdirectory.test.d.ts +0 -2
  117. 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 * as utils from "./utils.js";
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
- const res = utils.toSourceText(
9
- <csharp.Class accessModifier="public" name="TestClass" />,
10
- );
11
-
12
- expect(res).toBe(coretest.d`
13
- namespace TestCode
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.Class accessModifier="public" name="TestClass">
52
+ <csharp.ClassDeclaration public name="TestClass">
23
53
  <core.StatementList>
24
- <csharp.ClassMember
25
- accessModifier="public"
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.Class>,
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.Class accessModifier="public" name="TestClass">
74
+ <csharp.ClassDeclaration public name="TestClass">
53
75
  <core.List>
54
- <csharp.ClassMethod accessModifier="public" name="MethodOne" />
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.Class>,
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.Enum
130
- accessModifier="public"
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.Enum>
123
+ </csharp.EnumDeclaration>
139
124
  <hbr />
140
- <csharp.Class
141
- accessModifier="public"
125
+ <csharp.ClassDeclaration
126
+ public
142
127
  name="TestInput"
143
128
  refkey={inputTypeRefkey}
144
129
  />
145
130
  <hbr />
146
- <csharp.Class
147
- accessModifier="public"
131
+ <csharp.ClassDeclaration
132
+ public
148
133
  name="TestResult"
149
134
  refkey={testResultTypeRefkey}
150
135
  />
151
136
  <hbr />
152
- <csharp.Class accessModifier="public" name="TestClass">
137
+ <csharp.ClassDeclaration public name="TestClass">
153
138
  <csharp.ClassMember
154
- accessModifier="private"
139
+ private
155
140
  name="MemberOne"
156
141
  type={enumTypeRefkey}
157
142
  />
158
143
  ;
159
144
  <hbr />
160
145
  <csharp.ClassMethod
161
- accessModifier="public"
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.Class>
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.Class
204
- accessModifier="public"
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
- accessModifier="private"
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.Class accessModifier="public" name="TestClass">
213
+ <csharp.ClassDeclaration public name="TestClass">
238
214
  <csharp.EnumMember name="One" />,<hbr />
239
215
  <csharp.EnumMember name="Two" />
240
- </csharp.Class>
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.Class accessModifier="public" name="TestClass">
251
- <csharp.ClassConstructor accessModifier="public" />
252
- </csharp.Class>,
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.Class accessModifier="public" name="TestClass">
262
+ <csharp.ClassDeclaration public name="TestClass">
287
263
  <csharp.ClassMember
288
- accessModifier="private"
264
+ private
289
265
  name="name"
290
266
  type="string"
291
267
  refkey={thisNameRefkey}
292
268
  />
293
269
  ;<hbr />
294
270
  <csharp.ClassMember
295
- accessModifier="private"
271
+ private
296
272
  name="size"
297
273
  type="int"
298
274
  refkey={thisSizeRefkey}
299
275
  />
300
276
  ;<hbr />
301
- <csharp.ClassConstructor accessModifier="public" parameters={ctorParams}>
277
+ <csharp.ClassConstructor public parameters={ctorParams}>
302
278
  {thisNameRefkey} = {paramNameRefkey};<hbr />
303
279
  {thisSizeRefkey} = {paramSizeRefkey};
304
280
  </csharp.ClassConstructor>
305
- </csharp.Class>,
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
+ });
@@ -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>
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"],