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

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 (153) 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} +59 -32
  5. package/dist/src/components/ClassMethod.d.ts +25 -4
  6. package/dist/src/components/ClassMethod.d.ts.map +1 -1
  7. package/dist/src/components/ClassMethod.js +22 -3
  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/Parameters.d.ts +6 -1
  12. package/dist/src/components/Parameters.d.ts.map +1 -1
  13. package/dist/src/components/Parameters.js +3 -2
  14. package/dist/src/components/doc/comment.d.ts +70 -0
  15. package/dist/src/components/doc/comment.d.ts.map +1 -0
  16. package/dist/src/components/doc/comment.js +88 -0
  17. package/dist/src/components/doc/comment.test.d.ts +2 -0
  18. package/dist/src/components/doc/comment.test.d.ts.map +1 -0
  19. package/dist/src/components/doc/comment.test.js +348 -0
  20. package/dist/src/components/doc/from-markdown.d.ts +6 -0
  21. package/dist/src/components/doc/from-markdown.d.ts.map +1 -0
  22. package/dist/src/components/doc/from-markdown.js +58 -0
  23. package/dist/src/components/doc/from-markdown.test.d.ts +2 -0
  24. package/dist/src/components/doc/from-markdown.test.d.ts.map +1 -0
  25. package/dist/src/components/doc/from-markdown.test.js +83 -0
  26. package/dist/src/components/index.d.ts +12 -3
  27. package/dist/src/components/index.d.ts.map +1 -1
  28. package/dist/src/components/index.js +13 -4
  29. package/dist/src/components/interface/declaration.d.ts +47 -0
  30. package/dist/src/components/interface/declaration.d.ts.map +1 -0
  31. package/dist/src/components/interface/declaration.js +77 -0
  32. package/dist/src/components/interface/declaration.test.d.ts +2 -0
  33. package/dist/src/components/interface/declaration.test.d.ts.map +1 -0
  34. package/dist/src/components/interface/declaration.test.js +153 -0
  35. package/dist/src/components/interface/method.d.ts +32 -0
  36. package/dist/src/components/interface/method.d.ts.map +1 -0
  37. package/dist/src/components/interface/method.js +69 -0
  38. package/dist/src/components/interface/method.test.d.ts +2 -0
  39. package/dist/src/components/interface/method.test.d.ts.map +1 -0
  40. package/dist/src/components/interface/method.test.js +254 -0
  41. package/dist/src/components/interface/property.d.ts +38 -0
  42. package/dist/src/components/interface/property.d.ts.map +1 -0
  43. package/dist/src/components/interface/property.js +67 -0
  44. package/dist/src/components/interface/property.test.d.ts +2 -0
  45. package/dist/src/components/interface/property.test.d.ts.map +1 -0
  46. package/dist/src/components/interface/property.test.js +165 -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/{Class.tsx → ClassDeclaration.tsx} +108 -43
  106. package/src/components/ClassMethod.tsx +53 -12
  107. package/src/components/{Enum.tsx → EnumDeclaration.tsx} +30 -6
  108. package/src/components/Parameters.tsx +10 -3
  109. package/src/components/doc/comment.test.tsx +337 -0
  110. package/src/components/doc/comment.tsx +152 -0
  111. package/src/components/doc/from-markdown.test.tsx +103 -0
  112. package/src/components/doc/from-markdown.tsx +58 -0
  113. package/src/components/index.ts +12 -3
  114. package/src/components/interface/declaration.test.tsx +143 -0
  115. package/src/components/interface/declaration.tsx +105 -0
  116. package/src/components/interface/method.test.tsx +250 -0
  117. package/src/components/interface/method.tsx +105 -0
  118. package/src/components/interface/property.test.tsx +144 -0
  119. package/src/components/interface/property.tsx +107 -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 +5227 -685
  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/test/class.test.d.ts +0 -2
  149. package/dist/test/class.test.d.ts.map +0 -1
  150. package/dist/test/class.test.js +0 -298
  151. package/dist/test/projectdirectory.test.d.ts +0 -2
  152. package/dist/test/projectdirectory.test.d.ts.map +0 -1
  153. package/test/class.test.tsx +0 -292
package/vitest.config.ts CHANGED
@@ -6,5 +6,8 @@ export default defineConfig({
6
6
  jsx: "preserve",
7
7
  sourcemap: "both",
8
8
  },
9
+ test: {
10
+ setupFiles: ["./test/vitest.setup.ts"],
11
+ },
9
12
  plugins: [alloyPlugin()],
10
13
  });
@@ -1,26 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- import { AccessModifier } from "../modifiers.js";
3
- import { ParameterProps } from "./Parameters.js";
4
- export interface ClassProps extends Omit<core.DeclarationProps, "nameKind"> {
5
- name: string;
6
- refkey?: core.Refkey;
7
- accessModifier?: AccessModifier;
8
- typeParameters?: Record<string, core.Refkey>;
9
- }
10
- export declare function Class(props: ClassProps): core.Children;
11
- export interface ClassConstructorProps {
12
- accessModifier?: AccessModifier;
13
- parameters?: Array<ParameterProps>;
14
- refkey?: core.Refkey;
15
- symbol?: core.OutputSymbol;
16
- children?: core.Children;
17
- }
18
- export declare function ClassConstructor(props: ClassConstructorProps): core.Children;
19
- export interface ClassMemberProps {
20
- name: string;
21
- type: core.Children;
22
- accessModifier?: AccessModifier;
23
- refkey?: core.Refkey;
24
- }
25
- export declare function ClassMember(props: ClassMemberProps): core.Children;
26
- //# sourceMappingURL=Class.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../../src/components/Class.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAKpE,OAAO,EAAE,cAAc,EAAc,MAAM,iBAAiB,CAAC;AAG7D,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;CAC9C;AAGD,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,iBAoDtC;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;CAC1B;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,iBAiC5D;AAGD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;CACtB;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,iBAwBlD"}
@@ -1,15 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- import { AccessModifier } from "../modifiers.js";
3
- export interface EnumProps {
4
- name: string;
5
- refkey?: core.Refkey;
6
- children?: core.Children;
7
- accessModifier?: AccessModifier;
8
- }
9
- export declare function Enum(props: EnumProps): core.Children;
10
- export interface EnumMemberProps {
11
- name: string;
12
- refkey?: core.Refkey;
13
- }
14
- export declare function EnumMember(props: EnumMemberProps): core.Children;
15
- //# sourceMappingURL=Enum.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Enum.d.ts","sourceRoot":"","sources":["../../../src/components/Enum.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAOpE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAGD,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,iBA8BpC;AAGD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;CACtB;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,iBAmBhD"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=class.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"class.test.d.ts","sourceRoot":"","sources":["../../test/class.test.tsx"],"names":[],"mappings":""}
@@ -1,298 +0,0 @@
1
- import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
- import * as core from "@alloy-js/core";
3
- import * as coretest from "@alloy-js/core/testing";
4
- import { expect, it } from "vitest";
5
- import * as csharp from "../src/index.js";
6
- import * as utils from "./utils.js";
7
- it("declares class with no members", () => {
8
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
9
- accessModifier: "public",
10
- name: "TestClass"
11
- }));
12
- expect(res).toBe(coretest.d`
13
- namespace TestCode
14
- {
15
- public class TestClass;
16
- }
17
- `);
18
- });
19
- it("declares class with some members", () => {
20
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
21
- accessModifier: "public",
22
- name: "TestClass",
23
- get children() {
24
- return _$createComponent(core.StatementList, {
25
- get children() {
26
- return [_$createComponent(csharp.ClassMember, {
27
- accessModifier: "public",
28
- name: "MemberOne",
29
- type: "string"
30
- }), _$createComponent(csharp.ClassMember, {
31
- accessModifier: "private",
32
- name: "MemberTwo",
33
- type: "int"
34
- })];
35
- }
36
- });
37
- }
38
- }));
39
- expect(res).toBe(coretest.d`
40
- namespace TestCode
41
- {
42
- public class TestClass
43
- {
44
- public string MemberOne;
45
- private int memberTwo;
46
- }
47
- }
48
- `);
49
- });
50
- it("declares class with some methods", () => {
51
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
52
- accessModifier: "public",
53
- name: "TestClass",
54
- get children() {
55
- return _$createComponent(core.List, {
56
- get children() {
57
- return [_$createComponent(csharp.ClassMethod, {
58
- accessModifier: "public",
59
- name: "MethodOne"
60
- }), _$createComponent(csharp.ClassMethod, {
61
- accessModifier: "private",
62
- methodModifier: "virtual",
63
- name: "MethodTwo"
64
- })];
65
- }
66
- });
67
- }
68
- }));
69
- expect(res).toBe(coretest.d`
70
- namespace TestCode
71
- {
72
- public class TestClass
73
- {
74
- public void MethodOne() {}
75
- private virtual void MethodTwo() {}
76
- }
77
- }
78
- `);
79
- });
80
- it("uses refkeys for members, params, and return type", () => {
81
- const inputTypeRefkey = core.refkey();
82
- const testResultTypeRefkey = core.refkey();
83
- const enumTypeRefkey = core.refkey();
84
- const params = [{
85
- name: "IntParam",
86
- type: "int"
87
- }, {
88
- name: "BodyParam",
89
- type: inputTypeRefkey
90
- }];
91
- const res = core.render(_$createComponent(core.Output, {
92
- get namePolicy() {
93
- return csharp.createCSharpNamePolicy();
94
- },
95
- get children() {
96
- return _$createComponent(csharp.Namespace, {
97
- name: "TestCode",
98
- get children() {
99
- return _$createComponent(csharp.SourceFile, {
100
- path: "Test.cs",
101
- get children() {
102
- return [_$createComponent(csharp.Enum, {
103
- accessModifier: "public",
104
- name: "TestEnum",
105
- refkey: enumTypeRefkey,
106
- get children() {
107
- return _$createComponent(core.List, {
108
- comma: true,
109
- hardline: true,
110
- get children() {
111
- return [_$createComponent(csharp.EnumMember, {
112
- name: "One"
113
- }), _$createComponent(csharp.EnumMember, {
114
- name: "Two"
115
- })];
116
- }
117
- });
118
- }
119
- }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
120
- accessModifier: "public",
121
- name: "TestInput",
122
- refkey: inputTypeRefkey
123
- }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
124
- accessModifier: "public",
125
- name: "TestResult",
126
- refkey: testResultTypeRefkey
127
- }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
128
- accessModifier: "public",
129
- name: "TestClass",
130
- get children() {
131
- return [_$createComponent(csharp.ClassMember, {
132
- accessModifier: "private",
133
- name: "MemberOne",
134
- type: enumTypeRefkey
135
- }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMethod, {
136
- accessModifier: "public",
137
- name: "MethodOne",
138
- parameters: params,
139
- returns: testResultTypeRefkey,
140
- get children() {
141
- return ["return new ", testResultTypeRefkey, "();"];
142
- }
143
- })];
144
- }
145
- })];
146
- }
147
- });
148
- }
149
- });
150
- }
151
- }));
152
- expect(res.contents[0].contents).toBe(coretest.d`
153
- namespace TestCode
154
- {
155
- public enum TestEnum
156
- {
157
- One,
158
- Two
159
- }
160
- public class TestInput;
161
- public class TestResult;
162
- public class TestClass
163
- {
164
- private TestEnum memberOne;
165
- public TestResult MethodOne(int intParam, TestInput bodyParam)
166
- {
167
- return new TestResult();
168
- }
169
- }
170
- }
171
- `);
172
- });
173
- it("declares class with generic parameters", () => {
174
- const typeParameters = {
175
- T: core.refkey(),
176
- U: core.refkey()
177
- };
178
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
179
- accessModifier: "public",
180
- name: "TestClass",
181
- typeParameters: typeParameters,
182
- get children() {
183
- return [_$createComponent(csharp.ClassMember, {
184
- accessModifier: "public",
185
- name: "memberOne",
186
- get type() {
187
- return typeParameters.T;
188
- }
189
- }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMember, {
190
- accessModifier: "private",
191
- name: "memberTwo",
192
- get type() {
193
- return typeParameters.U;
194
- }
195
- }), ";"];
196
- }
197
- }));
198
- expect(res).toBe(coretest.d`
199
- namespace TestCode
200
- {
201
- public class TestClass<T, U>
202
- {
203
- public T MemberOne;
204
- private U memberTwo;
205
- }
206
- }
207
- `);
208
- });
209
- it("declares class with invalid members", () => {
210
- const decl = _$createComponent(csharp.Class, {
211
- accessModifier: "public",
212
- name: "TestClass",
213
- get children() {
214
- return [_$createComponent(csharp.EnumMember, {
215
- name: "One"
216
- }), ",", _$createIntrinsic("hbr", {}), _$createComponent(csharp.EnumMember, {
217
- name: "Two"
218
- })];
219
- }
220
- });
221
- expect(() => utils.toSourceText(decl)).toThrow("can't define an enum member outside of an enum-decl scope");
222
- });
223
- it("declares class with constructor", () => {
224
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
225
- accessModifier: "public",
226
- name: "TestClass",
227
- get children() {
228
- return _$createComponent(csharp.ClassConstructor, {
229
- accessModifier: "public"
230
- });
231
- }
232
- }));
233
- expect(res).toBe(coretest.d`
234
- namespace TestCode
235
- {
236
- public class TestClass
237
- {
238
- public TestClass() {}
239
- }
240
- }
241
- `);
242
- });
243
- it("declares class with constructor params and assigns values to fields", () => {
244
- const thisNameRefkey = core.refkey();
245
- const thisSizeRefkey = core.refkey();
246
- const paramNameRefkey = core.refkey();
247
- const paramSizeRefkey = core.refkey();
248
- const ctorParams = [{
249
- name: "name",
250
- type: "string",
251
- refkey: paramNameRefkey
252
- }, {
253
- name: "size",
254
- type: "int",
255
- refkey: paramSizeRefkey
256
- }];
257
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
258
- accessModifier: "public",
259
- name: "TestClass",
260
- get children() {
261
- return [_$createComponent(csharp.ClassMember, {
262
- accessModifier: "private",
263
- name: "name",
264
- type: "string",
265
- refkey: thisNameRefkey
266
- }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMember, {
267
- accessModifier: "private",
268
- name: "size",
269
- type: "int",
270
- refkey: thisSizeRefkey
271
- }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassConstructor, {
272
- accessModifier: "public",
273
- parameters: ctorParams,
274
- get children() {
275
- return [thisNameRefkey, " = ", paramNameRefkey, ";", _$createIntrinsic("hbr", {}), thisSizeRefkey, " = ", paramSizeRefkey, ";"];
276
- }
277
- })];
278
- }
279
- }));
280
-
281
- // TODO: assignments to members should have this. prefix
282
- // e.g. this.name = name;
283
- expect(res).toBe(coretest.d`
284
- namespace TestCode
285
- {
286
- public class TestClass
287
- {
288
- private string name;
289
- private int size;
290
- public TestClass(string name, int size)
291
- {
292
- name = name;
293
- size = size;
294
- }
295
- }
296
- }
297
- `);
298
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=projectdirectory.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projectdirectory.test.d.ts","sourceRoot":"","sources":["../../test/projectdirectory.test.tsx"],"names":[],"mappings":""}
@@ -1,292 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- import * as coretest from "@alloy-js/core/testing";
3
- import { expect, it } from "vitest";
4
- import * as csharp from "../src/index.js";
5
- import * as utils from "./utils.js";
6
-
7
- 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
- }
17
- `);
18
- });
19
-
20
- it("declares class with some members", () => {
21
- const res = utils.toSourceText(
22
- <csharp.Class accessModifier="public" name="TestClass">
23
- <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
- />
34
- </core.StatementList>
35
- </csharp.Class>,
36
- );
37
-
38
- expect(res).toBe(coretest.d`
39
- namespace TestCode
40
- {
41
- public class TestClass
42
- {
43
- public string MemberOne;
44
- private int memberTwo;
45
- }
46
- }
47
- `);
48
- });
49
-
50
- it("declares class with some methods", () => {
51
- const res = utils.toSourceText(
52
- <csharp.Class accessModifier="public" name="TestClass">
53
- <core.List>
54
- <csharp.ClassMethod accessModifier="public" name="MethodOne" />
55
- <csharp.ClassMethod
56
- accessModifier="private"
57
- methodModifier="virtual"
58
- name="MethodTwo"
59
- />
60
- </core.List>
61
- </csharp.Class>,
62
- );
63
-
64
- expect(res).toBe(coretest.d`
65
- namespace TestCode
66
- {
67
- public class TestClass
68
- {
69
- public void MethodOne() {}
70
- private virtual void MethodTwo() {}
71
- }
72
- }
73
- `);
74
- });
75
-
76
- it("uses refkeys for members, params, and return type", () => {
77
- const inputTypeRefkey = core.refkey();
78
- const testResultTypeRefkey = core.refkey();
79
- const enumTypeRefkey = core.refkey();
80
-
81
- const params = [
82
- {
83
- name: "IntParam",
84
- type: "int",
85
- },
86
- {
87
- name: "BodyParam",
88
- type: inputTypeRefkey,
89
- },
90
- ];
91
-
92
- const res = core.render(
93
- <core.Output namePolicy={csharp.createCSharpNamePolicy()}>
94
- <csharp.Namespace name="TestCode">
95
- <csharp.SourceFile path="Test.cs">
96
- <csharp.Enum
97
- accessModifier="public"
98
- name="TestEnum"
99
- refkey={enumTypeRefkey}
100
- >
101
- <core.List comma hardline>
102
- <csharp.EnumMember name="One" />
103
- <csharp.EnumMember name="Two" />
104
- </core.List>
105
- </csharp.Enum>
106
- <hbr />
107
- <csharp.Class
108
- accessModifier="public"
109
- name="TestInput"
110
- refkey={inputTypeRefkey}
111
- />
112
- <hbr />
113
- <csharp.Class
114
- accessModifier="public"
115
- name="TestResult"
116
- refkey={testResultTypeRefkey}
117
- />
118
- <hbr />
119
- <csharp.Class accessModifier="public" name="TestClass">
120
- <csharp.ClassMember
121
- accessModifier="private"
122
- name="MemberOne"
123
- type={enumTypeRefkey}
124
- />
125
- ;
126
- <hbr />
127
- <csharp.ClassMethod
128
- accessModifier="public"
129
- name="MethodOne"
130
- parameters={params}
131
- returns={testResultTypeRefkey}
132
- >
133
- return new {testResultTypeRefkey}();
134
- </csharp.ClassMethod>
135
- </csharp.Class>
136
- </csharp.SourceFile>
137
- </csharp.Namespace>
138
- </core.Output>,
139
- );
140
-
141
- expect(res.contents[0].contents).toBe(coretest.d`
142
- namespace TestCode
143
- {
144
- public enum TestEnum
145
- {
146
- One,
147
- Two
148
- }
149
- public class TestInput;
150
- public class TestResult;
151
- public class TestClass
152
- {
153
- private TestEnum memberOne;
154
- public TestResult MethodOne(int intParam, TestInput bodyParam)
155
- {
156
- return new TestResult();
157
- }
158
- }
159
- }
160
- `);
161
- });
162
-
163
- it("declares class with generic parameters", () => {
164
- const typeParameters = {
165
- T: core.refkey(),
166
- U: core.refkey(),
167
- };
168
-
169
- const res = utils.toSourceText(
170
- <csharp.Class
171
- accessModifier="public"
172
- name="TestClass"
173
- typeParameters={typeParameters}
174
- >
175
- <csharp.ClassMember
176
- accessModifier="public"
177
- name="memberOne"
178
- type={typeParameters.T}
179
- />
180
- ;<hbr />
181
- <csharp.ClassMember
182
- accessModifier="private"
183
- name="memberTwo"
184
- type={typeParameters.U}
185
- />
186
- ;
187
- </csharp.Class>,
188
- );
189
-
190
- expect(res).toBe(coretest.d`
191
- namespace TestCode
192
- {
193
- public class TestClass<T, U>
194
- {
195
- public T MemberOne;
196
- private U memberTwo;
197
- }
198
- }
199
- `);
200
- });
201
-
202
- it("declares class with invalid members", () => {
203
- const decl = (
204
- <csharp.Class accessModifier="public" name="TestClass">
205
- <csharp.EnumMember name="One" />,<hbr />
206
- <csharp.EnumMember name="Two" />
207
- </csharp.Class>
208
- );
209
-
210
- expect(() => utils.toSourceText(decl)).toThrow(
211
- "can't define an enum member outside of an enum-decl scope",
212
- );
213
- });
214
-
215
- it("declares class with constructor", () => {
216
- const res = utils.toSourceText(
217
- <csharp.Class accessModifier="public" name="TestClass">
218
- <csharp.ClassConstructor accessModifier="public" />
219
- </csharp.Class>,
220
- );
221
-
222
- expect(res).toBe(coretest.d`
223
- namespace TestCode
224
- {
225
- public class TestClass
226
- {
227
- public TestClass() {}
228
- }
229
- }
230
- `);
231
- });
232
-
233
- it("declares class with constructor params and assigns values to fields", () => {
234
- const thisNameRefkey = core.refkey();
235
- const thisSizeRefkey = core.refkey();
236
- const paramNameRefkey = core.refkey();
237
- const paramSizeRefkey = core.refkey();
238
-
239
- const ctorParams = [
240
- {
241
- name: "name",
242
- type: "string",
243
- refkey: paramNameRefkey,
244
- },
245
- {
246
- name: "size",
247
- type: "int",
248
- refkey: paramSizeRefkey,
249
- },
250
- ];
251
-
252
- const res = utils.toSourceText(
253
- <csharp.Class accessModifier="public" name="TestClass">
254
- <csharp.ClassMember
255
- accessModifier="private"
256
- name="name"
257
- type="string"
258
- refkey={thisNameRefkey}
259
- />
260
- ;<hbr />
261
- <csharp.ClassMember
262
- accessModifier="private"
263
- name="size"
264
- type="int"
265
- refkey={thisSizeRefkey}
266
- />
267
- ;<hbr />
268
- <csharp.ClassConstructor accessModifier="public" parameters={ctorParams}>
269
- {thisNameRefkey} = {paramNameRefkey};<hbr />
270
- {thisSizeRefkey} = {paramSizeRefkey};
271
- </csharp.ClassConstructor>
272
- </csharp.Class>,
273
- );
274
-
275
- // TODO: assignments to members should have this. prefix
276
- // e.g. this.name = name;
277
- expect(res).toBe(coretest.d`
278
- namespace TestCode
279
- {
280
- public class TestClass
281
- {
282
- private string name;
283
- private int size;
284
- public TestClass(string name, int size)
285
- {
286
- name = name;
287
- size = size;
288
- }
289
- }
290
- }
291
- `);
292
- });