@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
package/dist/src/modifiers.js
CHANGED
|
@@ -1,34 +1,20 @@
|
|
|
1
1
|
// the possible C# access modifiers
|
|
2
2
|
// https://learn.microsoft.com/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
// note that the C# keyword includes a trailing space
|
|
6
|
-
const accessModifierLookup = {
|
|
7
|
-
public: "public ",
|
|
8
|
-
protected: "protected ",
|
|
9
|
-
private: "private ",
|
|
10
|
-
internal: "internal ",
|
|
11
|
-
"protected-internal": "protected internal ",
|
|
12
|
-
"private-protected": "private protected ",
|
|
13
|
-
file: "file "
|
|
14
|
-
};
|
|
4
|
+
/** Access modifiers. */
|
|
15
5
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return accessModifier ? accessModifierLookup[accessModifier] : "";
|
|
6
|
+
export const getAccessModifier = makeModifiers(["public", "protected", "private", "internal", "file"]);
|
|
7
|
+
export function getAsyncModifier(async) {
|
|
8
|
+
return async ? "async" : "";
|
|
20
9
|
}
|
|
21
|
-
// maps the above method modifier value to its C# syntax.
|
|
22
|
-
// note that the C# keyword includes a trailing space
|
|
23
|
-
const methodModifierLookup = {
|
|
24
|
-
abstract: "abstract ",
|
|
25
|
-
sealed: "sealed ",
|
|
26
|
-
static: "static ",
|
|
27
|
-
virtual: "virtual "
|
|
28
|
-
};
|
|
29
10
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return
|
|
11
|
+
/** Resolve the modifier prefix */
|
|
12
|
+
export function computeModifiersPrefix(modifiers) {
|
|
13
|
+
const resolved = modifiers.filter(x => x);
|
|
14
|
+
return resolved.length > 0 ? resolved.join(" ") + " " : "";
|
|
15
|
+
}
|
|
16
|
+
export function makeModifiers(obj) {
|
|
17
|
+
return data => {
|
|
18
|
+
return obj.map(key => data[key] ? key : undefined).filter(x => x).join(" ");
|
|
19
|
+
};
|
|
34
20
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as core from "@alloy-js/core";
|
|
2
|
-
export type CSharpElements = "class" | "constant" | "enum" | "enum-member" | "function" | "interface" | "class-member-private" | "class-member-public" | "class-method" | "parameter" | "type-parameter";
|
|
2
|
+
export type CSharpElements = "class" | "constant" | "enum" | "enum-member" | "function" | "interface" | "class-member-private" | "class-member-public" | "class-method" | "class-property" | "parameter" | "type-parameter";
|
|
3
3
|
export declare function createCSharpNamePolicy(): core.NamePolicy<CSharpElements>;
|
|
4
4
|
export declare function useCSharpNamePolicy(): core.NamePolicy<CSharpElements>;
|
|
5
5
|
//# sourceMappingURL=name-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-policy.d.ts","sourceRoot":"","sources":["../../src/name-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAIvC,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,UAAU,GACV,MAAM,GACN,aAAa,GACb,UAAU,GACV,WAAW,GACX,sBAAsB,GACtB,qBAAqB,GACrB,cAAc,GACd,WAAW,GACX,gBAAgB,CAAC;AAGrB,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"name-policy.d.ts","sourceRoot":"","sources":["../../src/name-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAIvC,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,UAAU,GACV,MAAM,GACN,aAAa,GACb,UAAU,GACV,WAAW,GACX,sBAAsB,GACtB,qBAAqB,GACrB,cAAc,GACd,gBAAgB,GAChB,WAAW,GACX,gBAAgB,CAAC;AAGrB,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAkBxE;AAGD,wBAAgB,mBAAmB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAErE"}
|
package/dist/src/name-policy.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-declaration.test.d.ts","sourceRoot":"","sources":["../../test/class-declaration.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,34 +1,76 @@
|
|
|
1
|
-
import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
|
|
1
|
+
import { createComponent as _$createComponent, mergeProps as _$mergeProps, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
|
|
2
2
|
import * as core from "@alloy-js/core";
|
|
3
3
|
import * as coretest from "@alloy-js/core/testing";
|
|
4
|
-
import { expect, it } from "vitest";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
5
|
import * as csharp from "../src/index.js";
|
|
6
|
+
import { ClassDeclaration, ClassMember } from "../src/index.js";
|
|
6
7
|
import * as utils from "./utils.js";
|
|
7
8
|
it("declares class with no members", () => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
namespace TestCode
|
|
14
|
-
{
|
|
15
|
-
public class TestClass;
|
|
9
|
+
expect(_$createComponent(utils.TestNamespace, {
|
|
10
|
+
get children() {
|
|
11
|
+
return _$createComponent(ClassDeclaration, {
|
|
12
|
+
name: "TestClass"
|
|
13
|
+
});
|
|
16
14
|
}
|
|
15
|
+
})).toRenderTo(`
|
|
16
|
+
class TestClass;
|
|
17
17
|
`);
|
|
18
18
|
});
|
|
19
|
+
describe("modifiers", () => {
|
|
20
|
+
it.each(["public", "private"])("%s", mod => {
|
|
21
|
+
expect(_$createComponent(utils.TestNamespace, {
|
|
22
|
+
get children() {
|
|
23
|
+
return _$createComponent(ClassDeclaration, _$mergeProps({
|
|
24
|
+
[mod]: true
|
|
25
|
+
}, {
|
|
26
|
+
name: "TestClass"
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
})).toRenderTo(`
|
|
30
|
+
${mod} class TestClass;
|
|
31
|
+
`);
|
|
32
|
+
});
|
|
33
|
+
it.each(["partial", "abstract", "static", "sealed"])("%s", mod => {
|
|
34
|
+
expect(_$createComponent(utils.TestNamespace, {
|
|
35
|
+
get children() {
|
|
36
|
+
return _$createComponent(ClassDeclaration, _$mergeProps({
|
|
37
|
+
[mod]: true
|
|
38
|
+
}, {
|
|
39
|
+
name: "TestClass"
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
})).toRenderTo(`
|
|
43
|
+
${mod} class TestClass;
|
|
44
|
+
`);
|
|
45
|
+
});
|
|
46
|
+
it("combines modifiers", () => {
|
|
47
|
+
expect(_$createComponent(utils.TestNamespace, {
|
|
48
|
+
get children() {
|
|
49
|
+
return _$createComponent(ClassDeclaration, {
|
|
50
|
+
"public": true,
|
|
51
|
+
abstract: true,
|
|
52
|
+
partial: true,
|
|
53
|
+
name: "TestClass"
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
})).toRenderTo(`
|
|
57
|
+
public abstract partial class TestClass;
|
|
58
|
+
`);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
19
61
|
it("declares class with some members", () => {
|
|
20
|
-
const res = utils.toSourceText(_$createComponent(csharp.
|
|
21
|
-
|
|
62
|
+
const res = utils.toSourceText(_$createComponent(csharp.ClassDeclaration, {
|
|
63
|
+
"public": true,
|
|
22
64
|
name: "TestClass",
|
|
23
65
|
get children() {
|
|
24
66
|
return _$createComponent(core.StatementList, {
|
|
25
67
|
get children() {
|
|
26
68
|
return [_$createComponent(csharp.ClassMember, {
|
|
27
|
-
|
|
69
|
+
"public": true,
|
|
28
70
|
name: "MemberOne",
|
|
29
71
|
type: "string"
|
|
30
72
|
}), _$createComponent(csharp.ClassMember, {
|
|
31
|
-
|
|
73
|
+
"private": true,
|
|
32
74
|
name: "MemberTwo",
|
|
33
75
|
type: "int"
|
|
34
76
|
})];
|
|
@@ -48,18 +90,18 @@ it("declares class with some members", () => {
|
|
|
48
90
|
`);
|
|
49
91
|
});
|
|
50
92
|
it("declares class with some methods", () => {
|
|
51
|
-
const res = utils.toSourceText(_$createComponent(csharp.
|
|
52
|
-
|
|
93
|
+
const res = utils.toSourceText(_$createComponent(csharp.ClassDeclaration, {
|
|
94
|
+
"public": true,
|
|
53
95
|
name: "TestClass",
|
|
54
96
|
get children() {
|
|
55
97
|
return _$createComponent(core.List, {
|
|
56
98
|
get children() {
|
|
57
99
|
return [_$createComponent(csharp.ClassMethod, {
|
|
58
|
-
|
|
100
|
+
"public": true,
|
|
59
101
|
name: "MethodOne"
|
|
60
102
|
}), _$createComponent(csharp.ClassMethod, {
|
|
61
|
-
|
|
62
|
-
|
|
103
|
+
"private": true,
|
|
104
|
+
virtual: true,
|
|
63
105
|
name: "MethodTwo"
|
|
64
106
|
})];
|
|
65
107
|
}
|
|
@@ -77,36 +119,6 @@ it("declares class with some methods", () => {
|
|
|
77
119
|
}
|
|
78
120
|
`);
|
|
79
121
|
});
|
|
80
|
-
it("declares class with params and return type", () => {
|
|
81
|
-
const params = [{
|
|
82
|
-
name: "IntParam",
|
|
83
|
-
type: "int"
|
|
84
|
-
}, {
|
|
85
|
-
name: "StringParam",
|
|
86
|
-
type: "string"
|
|
87
|
-
}];
|
|
88
|
-
const res = utils.toSourceText(_$createComponent(csharp.Class, {
|
|
89
|
-
accessModifier: "public",
|
|
90
|
-
name: "TestClass",
|
|
91
|
-
get children() {
|
|
92
|
-
return _$createComponent(csharp.ClassMethod, {
|
|
93
|
-
accessModifier: "public",
|
|
94
|
-
name: "MethodOne",
|
|
95
|
-
parameters: params,
|
|
96
|
-
returns: "string"
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}));
|
|
100
|
-
expect(res).toBe(coretest.d`
|
|
101
|
-
namespace TestCode
|
|
102
|
-
{
|
|
103
|
-
public class TestClass
|
|
104
|
-
{
|
|
105
|
-
public string MethodOne(int intParam, string stringParam) {}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
`);
|
|
109
|
-
});
|
|
110
122
|
it("uses refkeys for members, params, and return type", () => {
|
|
111
123
|
const inputTypeRefkey = core.refkey();
|
|
112
124
|
const testResultTypeRefkey = core.refkey();
|
|
@@ -129,8 +141,8 @@ it("uses refkeys for members, params, and return type", () => {
|
|
|
129
141
|
return _$createComponent(csharp.SourceFile, {
|
|
130
142
|
path: "Test.cs",
|
|
131
143
|
get children() {
|
|
132
|
-
return [_$createComponent(csharp.
|
|
133
|
-
|
|
144
|
+
return [_$createComponent(csharp.EnumDeclaration, {
|
|
145
|
+
"public": true,
|
|
134
146
|
name: "TestEnum",
|
|
135
147
|
refkey: enumTypeRefkey,
|
|
136
148
|
get children() {
|
|
@@ -146,24 +158,24 @@ it("uses refkeys for members, params, and return type", () => {
|
|
|
146
158
|
}
|
|
147
159
|
});
|
|
148
160
|
}
|
|
149
|
-
}), _$createIntrinsic("hbr", {}), _$createComponent(csharp.
|
|
150
|
-
|
|
161
|
+
}), _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassDeclaration, {
|
|
162
|
+
"public": true,
|
|
151
163
|
name: "TestInput",
|
|
152
164
|
refkey: inputTypeRefkey
|
|
153
|
-
}), _$createIntrinsic("hbr", {}), _$createComponent(csharp.
|
|
154
|
-
|
|
165
|
+
}), _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassDeclaration, {
|
|
166
|
+
"public": true,
|
|
155
167
|
name: "TestResult",
|
|
156
168
|
refkey: testResultTypeRefkey
|
|
157
|
-
}), _$createIntrinsic("hbr", {}), _$createComponent(csharp.
|
|
158
|
-
|
|
169
|
+
}), _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassDeclaration, {
|
|
170
|
+
"public": true,
|
|
159
171
|
name: "TestClass",
|
|
160
172
|
get children() {
|
|
161
173
|
return [_$createComponent(csharp.ClassMember, {
|
|
162
|
-
|
|
174
|
+
"private": true,
|
|
163
175
|
name: "MemberOne",
|
|
164
176
|
type: enumTypeRefkey
|
|
165
177
|
}), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMethod, {
|
|
166
|
-
|
|
178
|
+
"public": true,
|
|
167
179
|
name: "MethodOne",
|
|
168
180
|
parameters: params,
|
|
169
181
|
returns: testResultTypeRefkey,
|
|
@@ -205,19 +217,19 @@ it("declares class with generic parameters", () => {
|
|
|
205
217
|
T: core.refkey(),
|
|
206
218
|
U: core.refkey()
|
|
207
219
|
};
|
|
208
|
-
const res = utils.toSourceText(_$createComponent(csharp.
|
|
209
|
-
|
|
220
|
+
const res = utils.toSourceText(_$createComponent(csharp.ClassDeclaration, {
|
|
221
|
+
"public": true,
|
|
210
222
|
name: "TestClass",
|
|
211
223
|
typeParameters: typeParameters,
|
|
212
224
|
get children() {
|
|
213
225
|
return [_$createComponent(csharp.ClassMember, {
|
|
214
|
-
|
|
226
|
+
"public": true,
|
|
215
227
|
name: "memberOne",
|
|
216
228
|
get type() {
|
|
217
229
|
return typeParameters.T;
|
|
218
230
|
}
|
|
219
231
|
}), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMember, {
|
|
220
|
-
|
|
232
|
+
"private": true,
|
|
221
233
|
name: "memberTwo",
|
|
222
234
|
get type() {
|
|
223
235
|
return typeParameters.U;
|
|
@@ -237,8 +249,8 @@ it("declares class with generic parameters", () => {
|
|
|
237
249
|
`);
|
|
238
250
|
});
|
|
239
251
|
it("declares class with invalid members", () => {
|
|
240
|
-
const decl = _$createComponent(csharp.
|
|
241
|
-
|
|
252
|
+
const decl = _$createComponent(csharp.ClassDeclaration, {
|
|
253
|
+
"public": true,
|
|
242
254
|
name: "TestClass",
|
|
243
255
|
get children() {
|
|
244
256
|
return [_$createComponent(csharp.EnumMember, {
|
|
@@ -251,12 +263,12 @@ it("declares class with invalid members", () => {
|
|
|
251
263
|
expect(() => utils.toSourceText(decl)).toThrow("can't define an enum member outside of an enum-decl scope");
|
|
252
264
|
});
|
|
253
265
|
it("declares class with constructor", () => {
|
|
254
|
-
const res = utils.toSourceText(_$createComponent(csharp.
|
|
255
|
-
|
|
266
|
+
const res = utils.toSourceText(_$createComponent(csharp.ClassDeclaration, {
|
|
267
|
+
"public": true,
|
|
256
268
|
name: "TestClass",
|
|
257
269
|
get children() {
|
|
258
270
|
return _$createComponent(csharp.ClassConstructor, {
|
|
259
|
-
|
|
271
|
+
"public": true
|
|
260
272
|
});
|
|
261
273
|
}
|
|
262
274
|
}));
|
|
@@ -284,22 +296,22 @@ it("declares class with constructor params and assigns values to fields", () =>
|
|
|
284
296
|
type: "int",
|
|
285
297
|
refkey: paramSizeRefkey
|
|
286
298
|
}];
|
|
287
|
-
const res = utils.toSourceText(_$createComponent(csharp.
|
|
288
|
-
|
|
299
|
+
const res = utils.toSourceText(_$createComponent(csharp.ClassDeclaration, {
|
|
300
|
+
"public": true,
|
|
289
301
|
name: "TestClass",
|
|
290
302
|
get children() {
|
|
291
303
|
return [_$createComponent(csharp.ClassMember, {
|
|
292
|
-
|
|
304
|
+
"private": true,
|
|
293
305
|
name: "name",
|
|
294
306
|
type: "string",
|
|
295
307
|
refkey: thisNameRefkey
|
|
296
308
|
}), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMember, {
|
|
297
|
-
|
|
309
|
+
"private": true,
|
|
298
310
|
name: "size",
|
|
299
311
|
type: "int",
|
|
300
312
|
refkey: thisSizeRefkey
|
|
301
313
|
}), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassConstructor, {
|
|
302
|
-
|
|
314
|
+
"public": true,
|
|
303
315
|
parameters: ctorParams,
|
|
304
316
|
get children() {
|
|
305
317
|
return [thisNameRefkey, " = ", paramNameRefkey, ";", _$createIntrinsic("hbr", {}), thisSizeRefkey, " = ", paramSizeRefkey, ";"];
|
|
@@ -325,4 +337,42 @@ it("declares class with constructor params and assigns values to fields", () =>
|
|
|
325
337
|
}
|
|
326
338
|
}
|
|
327
339
|
`);
|
|
340
|
+
});
|
|
341
|
+
it("specify doc comment", () => {
|
|
342
|
+
expect(_$createComponent(utils.TestNamespace, {
|
|
343
|
+
get children() {
|
|
344
|
+
return _$createComponent(ClassDeclaration, {
|
|
345
|
+
name: "Test",
|
|
346
|
+
doc: "This is a test"
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
})).toRenderTo(`
|
|
350
|
+
/// This is a test
|
|
351
|
+
class Test;
|
|
352
|
+
`);
|
|
353
|
+
});
|
|
354
|
+
it("supports class member doc comments", () => {
|
|
355
|
+
expect(_$createComponent(utils.TestNamespace, {
|
|
356
|
+
get children() {
|
|
357
|
+
return _$createComponent(ClassDeclaration, {
|
|
358
|
+
name: "Test",
|
|
359
|
+
doc: "This is a test",
|
|
360
|
+
get children() {
|
|
361
|
+
return _$createComponent(ClassMember, {
|
|
362
|
+
name: "Member",
|
|
363
|
+
"public": true,
|
|
364
|
+
type: "int",
|
|
365
|
+
doc: "This is a member"
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
})).toRenderTo(`
|
|
371
|
+
/// This is a test
|
|
372
|
+
class Test
|
|
373
|
+
{
|
|
374
|
+
/// This is a member
|
|
375
|
+
public int Member
|
|
376
|
+
}
|
|
377
|
+
`);
|
|
328
378
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-method.test.d.ts","sourceRoot":"","sources":["../../test/class-method.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { memo as _$memo, createComponent as _$createComponent, mergeProps as _$mergeProps } 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.js";
|
|
5
|
+
const Wrapper = props => _$createComponent(TestNamespace, {
|
|
6
|
+
get children() {
|
|
7
|
+
return _$createComponent(ClassDeclaration, {
|
|
8
|
+
"public": true,
|
|
9
|
+
name: "TestClass",
|
|
10
|
+
get children() {
|
|
11
|
+
return props.children;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
describe("modifiers", () => {
|
|
17
|
+
describe("access modifiers", () => {
|
|
18
|
+
it.each(["public", "private", "protected", "internal"])("%s", accessModifier => {
|
|
19
|
+
expect(_$createComponent(Wrapper, {
|
|
20
|
+
get children() {
|
|
21
|
+
return _$createComponent(ClassMethod, _$mergeProps({
|
|
22
|
+
[accessModifier]: true
|
|
23
|
+
}, {
|
|
24
|
+
name: "MethodOne"
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
})).toRenderTo(`
|
|
28
|
+
public class TestClass
|
|
29
|
+
{
|
|
30
|
+
${accessModifier} void MethodOne() {}
|
|
31
|
+
}
|
|
32
|
+
`);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe("method modifiers", () => {
|
|
36
|
+
it.each(["static", "virtual", "sealed"])("%s", methodModifier => {
|
|
37
|
+
expect(_$createComponent(Wrapper, {
|
|
38
|
+
get children() {
|
|
39
|
+
return _$createComponent(ClassMethod, _$mergeProps({
|
|
40
|
+
[methodModifier]: true
|
|
41
|
+
}, {
|
|
42
|
+
name: "MethodOne"
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
})).toRenderTo(`
|
|
46
|
+
public class TestClass
|
|
47
|
+
{
|
|
48
|
+
${methodModifier} void MethodOne() {}
|
|
49
|
+
}
|
|
50
|
+
`);
|
|
51
|
+
});
|
|
52
|
+
it("abstract exclude body", () => {
|
|
53
|
+
expect(_$createComponent(Wrapper, {
|
|
54
|
+
get children() {
|
|
55
|
+
return _$createComponent(ClassMethod, {
|
|
56
|
+
abstract: true,
|
|
57
|
+
name: "MethodOne"
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
})).toRenderTo(`
|
|
61
|
+
public class TestClass
|
|
62
|
+
{
|
|
63
|
+
abstract void MethodOne();
|
|
64
|
+
}
|
|
65
|
+
`);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
it("mark method async", () => {
|
|
69
|
+
expect(_$createComponent(Wrapper, {
|
|
70
|
+
get children() {
|
|
71
|
+
return _$createComponent(ClassMethod, {
|
|
72
|
+
async: true,
|
|
73
|
+
name: "MethodOne"
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
})).toRenderTo(`
|
|
77
|
+
public class TestClass
|
|
78
|
+
{
|
|
79
|
+
async Task MethodOne() {}
|
|
80
|
+
}
|
|
81
|
+
`);
|
|
82
|
+
});
|
|
83
|
+
it("combine modifiers", () => {
|
|
84
|
+
expect(_$createComponent(Wrapper, {
|
|
85
|
+
get children() {
|
|
86
|
+
return _$createComponent(ClassMethod, {
|
|
87
|
+
async: true,
|
|
88
|
+
returns: "Task",
|
|
89
|
+
"public": true,
|
|
90
|
+
abstract: true,
|
|
91
|
+
name: "MethodOne"
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
})).toRenderTo(`
|
|
95
|
+
public class TestClass
|
|
96
|
+
{
|
|
97
|
+
public abstract async Task MethodOne();
|
|
98
|
+
}
|
|
99
|
+
`);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
it("applies PascalCase naming policy", () => {
|
|
103
|
+
expect(_$createComponent(Wrapper, {
|
|
104
|
+
get children() {
|
|
105
|
+
return _$createComponent(ClassMethod, {
|
|
106
|
+
name: "method_one"
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
})).toRenderTo(`
|
|
110
|
+
public class TestClass
|
|
111
|
+
{
|
|
112
|
+
void MethodOne() {}
|
|
113
|
+
}
|
|
114
|
+
`);
|
|
115
|
+
});
|
|
116
|
+
it("defines params and return type", () => {
|
|
117
|
+
const params = [{
|
|
118
|
+
name: "intParam",
|
|
119
|
+
type: "int"
|
|
120
|
+
}, {
|
|
121
|
+
name: "stringParam",
|
|
122
|
+
type: "string"
|
|
123
|
+
}];
|
|
124
|
+
const res = _$createComponent(Wrapper, {
|
|
125
|
+
get children() {
|
|
126
|
+
return _$createComponent(ClassMethod, {
|
|
127
|
+
"public": true,
|
|
128
|
+
name: "MethodOne",
|
|
129
|
+
parameters: params,
|
|
130
|
+
returns: "string"
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
expect(res).toRenderTo(`
|
|
135
|
+
public class TestClass
|
|
136
|
+
{
|
|
137
|
+
public string MethodOne(int intParam, string stringParam) {}
|
|
138
|
+
}
|
|
139
|
+
`);
|
|
140
|
+
});
|
|
141
|
+
it("specify doc comment", () => {
|
|
142
|
+
expect(_$createComponent(TestNamespace, {
|
|
143
|
+
get children() {
|
|
144
|
+
return _$createComponent(ClassDeclaration, {
|
|
145
|
+
name: "Test",
|
|
146
|
+
get children() {
|
|
147
|
+
return _$createComponent(ClassMethod, {
|
|
148
|
+
name: "Method",
|
|
149
|
+
doc: "This is a test"
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
})).toRenderTo(`
|
|
155
|
+
class Test
|
|
156
|
+
{
|
|
157
|
+
/// This is a test
|
|
158
|
+
void Method() {}
|
|
159
|
+
}
|
|
160
|
+
`);
|
|
161
|
+
});
|
package/dist/test/enum.test.js
CHANGED
|
@@ -5,8 +5,8 @@ import { expect, it } from "vitest";
|
|
|
5
5
|
import * as csharp from "../src/index.js";
|
|
6
6
|
import * as utils from "./utils.js";
|
|
7
7
|
it("declares enum with no members", () => {
|
|
8
|
-
const res = utils.toSourceText(_$createComponent(csharp.
|
|
9
|
-
|
|
8
|
+
const res = utils.toSourceText(_$createComponent(csharp.EnumDeclaration, {
|
|
9
|
+
"public": true,
|
|
10
10
|
name: "TestEnum"
|
|
11
11
|
}));
|
|
12
12
|
expect(res).toBe(coretest.d`
|
|
@@ -17,8 +17,8 @@ it("declares enum with no members", () => {
|
|
|
17
17
|
`);
|
|
18
18
|
});
|
|
19
19
|
it("declares enum with members", () => {
|
|
20
|
-
const res = utils.toSourceText(_$createComponent(csharp.
|
|
21
|
-
|
|
20
|
+
const res = utils.toSourceText(_$createComponent(csharp.EnumDeclaration, {
|
|
21
|
+
"public": true,
|
|
22
22
|
name: "TestEnum",
|
|
23
23
|
get children() {
|
|
24
24
|
return [_$createComponent(csharp.EnumMember, {
|
|
@@ -40,8 +40,8 @@ it("declares enum with members", () => {
|
|
|
40
40
|
`);
|
|
41
41
|
});
|
|
42
42
|
it("applies naming policy to enum and members", () => {
|
|
43
|
-
const res = utils.toSourceText(_$createComponent(csharp.
|
|
44
|
-
|
|
43
|
+
const res = utils.toSourceText(_$createComponent(csharp.EnumDeclaration, {
|
|
44
|
+
"public": true,
|
|
45
45
|
name: "testEnum",
|
|
46
46
|
get children() {
|
|
47
47
|
return [_$createComponent(csharp.EnumMember, {
|
|
@@ -73,8 +73,8 @@ it("can reference things by refkey", () => {
|
|
|
73
73
|
return _$createComponent(csharp.SourceFile, {
|
|
74
74
|
path: "Test.cs",
|
|
75
75
|
get children() {
|
|
76
|
-
return [_$createComponent(csharp.
|
|
77
|
-
|
|
76
|
+
return [_$createComponent(csharp.EnumDeclaration, {
|
|
77
|
+
"public": true,
|
|
78
78
|
name: "TestEnum",
|
|
79
79
|
refkey: enumRK,
|
|
80
80
|
get children() {
|
|
@@ -116,8 +116,8 @@ it("can reference things by refkey across files", () => {
|
|
|
116
116
|
return [_$createComponent(csharp.SourceFile, {
|
|
117
117
|
path: "Test.cs",
|
|
118
118
|
get children() {
|
|
119
|
-
return [_$createComponent(csharp.
|
|
120
|
-
|
|
119
|
+
return [_$createComponent(csharp.EnumDeclaration, {
|
|
120
|
+
"public": true,
|
|
121
121
|
name: "TestEnum",
|
|
122
122
|
get children() {
|
|
123
123
|
return [_$createComponent(csharp.EnumMember, {
|
|
@@ -131,8 +131,8 @@ it("can reference things by refkey across files", () => {
|
|
|
131
131
|
}), _$createComponent(csharp.SourceFile, {
|
|
132
132
|
path: "Other.cs",
|
|
133
133
|
get children() {
|
|
134
|
-
return [_$createComponent(csharp.
|
|
135
|
-
|
|
134
|
+
return [_$createComponent(csharp.EnumDeclaration, {
|
|
135
|
+
"public": true,
|
|
136
136
|
name: "OtherEnum",
|
|
137
137
|
refkey: enumRK,
|
|
138
138
|
get children() {
|
|
@@ -12,16 +12,16 @@ it("defines multiple namespaces and source files with unique content", () => {
|
|
|
12
12
|
return [_$createComponent(csharp.SourceFile, {
|
|
13
13
|
path: "Model1.cs",
|
|
14
14
|
get children() {
|
|
15
|
-
return _$createComponent(csharp.
|
|
16
|
-
|
|
15
|
+
return _$createComponent(csharp.ClassDeclaration, {
|
|
16
|
+
"public": true,
|
|
17
17
|
name: "Model1"
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
}), _$createComponent(csharp.SourceFile, {
|
|
21
21
|
path: "Model2.cs",
|
|
22
22
|
get children() {
|
|
23
|
-
return _$createComponent(csharp.
|
|
24
|
-
|
|
23
|
+
return _$createComponent(csharp.ClassDeclaration, {
|
|
24
|
+
"public": true,
|
|
25
25
|
name: "Model2"
|
|
26
26
|
});
|
|
27
27
|
}
|
|
@@ -33,16 +33,16 @@ it("defines multiple namespaces and source files with unique content", () => {
|
|
|
33
33
|
return [_$createComponent(csharp.SourceFile, {
|
|
34
34
|
path: "Model3.cs",
|
|
35
35
|
get children() {
|
|
36
|
-
return _$createComponent(csharp.
|
|
37
|
-
|
|
36
|
+
return _$createComponent(csharp.ClassDeclaration, {
|
|
37
|
+
"public": true,
|
|
38
38
|
name: "Model3"
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
}), _$createComponent(csharp.SourceFile, {
|
|
42
42
|
path: "Model4.cs",
|
|
43
43
|
get children() {
|
|
44
|
-
return _$createComponent(csharp.
|
|
45
|
-
|
|
44
|
+
return _$createComponent(csharp.ClassDeclaration, {
|
|
45
|
+
"public": true,
|
|
46
46
|
name: "Model4"
|
|
47
47
|
});
|
|
48
48
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-directory.test.d.ts","sourceRoot":"","sources":["../../test/project-directory.test.tsx"],"names":[],"mappings":""}
|