Skip to content

Commit a609047

Browse files
committed
add tests for record rest with namespaced type
1 parent 96722aa commit a609047

4 files changed

Lines changed: 82 additions & 28 deletions

File tree

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
type config = {name: string, version: string}
2-
type subConfig = {version: string}
2+
module SubConfig = {
3+
type t = {version: string}
4+
}
35

46
let getVersion = (config: config) =>
57
switch config {
6-
| {name: _, ...subConfig as rest} =>
8+
| {name: _, ...SubConfig.t as rest} =>
79
rest.version
810
// ^def
911
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
Definition src/RecordRest.res 6:4
2-
{"uri": "RecordRest.res", "range": {"start": {"line": 5, "character": 30}, "end": {"line": 5, "character": 34}}}
1+
Definition src/RecordRest.res 8:4
2+
{"uri": "RecordRest.res", "range": {"start": {"line": 7, "character": 32}, "end": {"line": 7, "character": 36}}}
33

tests/tests/src/record_rest_test.mjs

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import * as Mocha from "mocha";
44
import * as Test_utils from "./test_utils.mjs";
55

6+
let SubConfig = {};
7+
68
function describeConfig(c) {
79
let rest = ((({name: __unused0, ...__rest}) => __rest))(c);
810
return [
@@ -15,6 +17,10 @@ function getAliasedRest(param) {
1517
return ((({name: __unused0, ...__rest}) => __rest))(param);
1618
}
1719

20+
function getNamespacedRest(param) {
21+
return ((({name: __unused0, ...__rest}) => __rest))(param);
22+
}
23+
1824
function getRenamedRest(param) {
1925
return ((({"user-name": __unused0, ...__rest}) => __rest))(param);
2026
}
@@ -66,13 +72,13 @@ Mocha.describe("Record_rest_test", () => {
6672
version: "1.0",
6773
debug: true
6874
});
69-
Test_utils.eq("File \"record_rest_test.res\", line 128, characters 7-14", "test", "test");
70-
Test_utils.eq("File \"record_rest_test.res\", line 129, characters 7-14", rest, {
75+
Test_utils.eq("File \"record_rest_test.res\", line 136, characters 7-14", "test", "test");
76+
Test_utils.eq("File \"record_rest_test.res\", line 137, characters 7-14", rest, {
7177
version: "1.0",
7278
debug: true
7379
});
7480
});
75-
Mocha.test("match arm returns the named field and the rest record", () => Test_utils.eq("File \"record_rest_test.res\", line 134, characters 6-13", describeConfig({
81+
Mocha.test("match arm returns the named field and the rest record", () => Test_utils.eq("File \"record_rest_test.res\", line 142, characters 6-13", describeConfig({
7682
name: "match",
7783
version: "2.0",
7884
debug: false
@@ -83,28 +89,47 @@ Mocha.describe("Record_rest_test", () => {
8389
debug: false
8490
}
8591
]));
86-
Mocha.test("function parameter destructuring keeps the named field", () => Test_utils.eq("File \"record_rest_test.res\", line 141, characters 7-14", getName({
92+
Mocha.test("function parameter destructuring keeps the named field", () => Test_utils.eq("File \"record_rest_test.res\", line 149, characters 7-14", getName({
8793
name: "param",
8894
version: "3.0",
8995
debug: true
9096
}), "param"));
91-
Mocha.test("record rest accepts type aliases to record shapes", () => Test_utils.eq("File \"record_rest_test.res\", line 146, characters 6-13", getAliasedRest({
97+
Mocha.test("record rest accepts type aliases to record shapes", () => Test_utils.eq("File \"record_rest_test.res\", line 154, characters 6-13", getAliasedRest({
9298
name: "aliased",
9399
version: "3.1",
94100
debug: false
95101
}), {
96102
version: "3.1",
97103
debug: false
98104
}));
99-
Mocha.test("record rest excludes fields renamed with @as", () => Test_utils.eq("File \"record_rest_test.res\", line 154, characters 6-13", getRenamedRest({
105+
Mocha.test("record rest accepts namespaced record types", () => {
106+
Test_utils.eq("File \"record_rest_test.res\", line 162, characters 6-13", getNamespacedRest({
107+
name: "namespaced",
108+
version: "3.15",
109+
debug: true
110+
}), {
111+
version: "3.15",
112+
debug: true
113+
});
114+
let rest = ((({name: __unused0, ...__rest}) => __rest))({
115+
name: "namespaced-let",
116+
version: "3.16",
117+
debug: false
118+
});
119+
Test_utils.eq("File \"record_rest_test.res\", line 174, characters 7-14", rest, {
120+
version: "3.16",
121+
debug: false
122+
});
123+
});
124+
Mocha.test("record rest excludes fields renamed with @as", () => Test_utils.eq("File \"record_rest_test.res\", line 179, characters 6-13", getRenamedRest({
100125
"user-name": "renamed",
101126
version: "3.2",
102127
debug: true
103128
}), {
104129
version: "3.2",
105130
debug: true
106131
}));
107-
Mocha.test("empty-field rest pattern still binds the whole record", () => Test_utils.eq("File \"record_rest_test.res\", line 162, characters 6-13", ((({...__rest}) => __rest))({
132+
Mocha.test("empty-field rest pattern still binds the whole record", () => Test_utils.eq("File \"record_rest_test.res\", line 187, characters 6-13", ((({...__rest}) => __rest))({
108133
name: "whole",
109134
version: "3.5",
110135
debug: false
@@ -120,12 +145,12 @@ Mocha.describe("Record_rest_test", () => {
120145
debug: true
121146
};
122147
let rest = ((({...__rest}) => __rest))(whole);
123-
Test_utils.eq("File \"record_rest_test.res\", line 170, characters 7-14", whole, {
148+
Test_utils.eq("File \"record_rest_test.res\", line 195, characters 7-14", whole, {
124149
name: "wholeAlias",
125150
version: "3.6",
126151
debug: true
127152
});
128-
Test_utils.eq("File \"record_rest_test.res\", line 171, characters 7-14", rest, {
153+
Test_utils.eq("File \"record_rest_test.res\", line 196, characters 7-14", rest, {
129154
name: "wholeAlias",
130155
version: "3.6",
131156
debug: true
@@ -138,7 +163,7 @@ Mocha.describe("Record_rest_test", () => {
138163
style: "bold",
139164
onClick: onClick
140165
});
141-
Test_utils.eq("File \"record_rest_test.res\", line 177, characters 7-14", rest, {
166+
Test_utils.eq("File \"record_rest_test.res\", line 202, characters 7-14", rest, {
142167
style: "bold",
143168
onClick: onClick
144169
});
@@ -148,18 +173,18 @@ Mocha.describe("Record_rest_test", () => {
148173
id: "1",
149174
value: 42
150175
});
151-
Test_utils.eq("File \"record_rest_test.res\", line 182, characters 7-14", "1", "1");
152-
Test_utils.eq("File \"record_rest_test.res\", line 183, characters 7-14", intRest, {
176+
Test_utils.eq("File \"record_rest_test.res\", line 207, characters 7-14", "1", "1");
177+
Test_utils.eq("File \"record_rest_test.res\", line 208, characters 7-14", intRest, {
153178
value: 42
154179
});
155-
Test_utils.eq("File \"record_rest_test.res\", line 184, characters 7-14", ((({id: __unused0, ...__rest}) => __rest))({
180+
Test_utils.eq("File \"record_rest_test.res\", line 209, characters 7-14", ((({id: __unused0, ...__rest}) => __rest))({
156181
id: "2",
157182
value: "hello"
158183
}), {
159184
value: "hello"
160185
});
161186
});
162-
Mocha.test("tuple nested record rest is initialized", () => Test_utils.eq("File \"record_rest_test.res\", line 189, characters 6-13", getTupleRest([
187+
Mocha.test("tuple nested record rest is initialized", () => Test_utils.eq("File \"record_rest_test.res\", line 214, characters 6-13", getTupleRest([
163188
{
164189
name: "tuple",
165190
version: "4.0",
@@ -171,7 +196,7 @@ Mocha.describe("Record_rest_test", () => {
171196
debug: false
172197
}));
173198
Mocha.test("variant payload rest works through the or-pattern path", () => {
174-
Test_utils.eq("File \"record_rest_test.res\", line 197, characters 6-13", getWrappedRest({
199+
Test_utils.eq("File \"record_rest_test.res\", line 222, characters 6-13", getWrappedRest({
175200
TAG: "Wrap",
176201
_0: {
177202
name: "wrapped",
@@ -182,7 +207,7 @@ Mocha.describe("Record_rest_test", () => {
182207
version: "5.0",
183208
debug: true
184209
});
185-
Test_utils.eq("File \"record_rest_test.res\", line 202, characters 6-13", getWrappedRest({
210+
Test_utils.eq("File \"record_rest_test.res\", line 227, characters 6-13", getWrappedRest({
186211
TAG: "Mirror",
187212
_0: {
188213
name: "mirror",
@@ -195,7 +220,7 @@ Mocha.describe("Record_rest_test", () => {
195220
});
196221
});
197222
Mocha.test("inline record variant rest removes the runtime tag field", () => {
198-
Test_utils.eq("File \"record_rest_test.res\", line 210, characters 6-13", getInlineWrappedRest({
223+
Test_utils.eq("File \"record_rest_test.res\", line 235, characters 6-13", getInlineWrappedRest({
199224
TAG: "InlineWrap",
200225
name: "inline",
201226
version: "7.0",
@@ -204,7 +229,7 @@ Mocha.describe("Record_rest_test", () => {
204229
version: "7.0",
205230
debug: true
206231
});
207-
Test_utils.eq("File \"record_rest_test.res\", line 215, characters 6-13", getInlineWrappedRest({
232+
Test_utils.eq("File \"record_rest_test.res\", line 240, characters 6-13", getInlineWrappedRest({
208233
TAG: "InlineMirror",
209234
name: "inlineMirror",
210235
version: "8.0",
@@ -215,7 +240,7 @@ Mocha.describe("Record_rest_test", () => {
215240
});
216241
});
217242
Mocha.test("inline record variant rest excludes fields renamed with @as", () => {
218-
Test_utils.eq("File \"record_rest_test.res\", line 223, characters 6-13", getRenamedInlineWrappedRest({
243+
Test_utils.eq("File \"record_rest_test.res\", line 248, characters 6-13", getRenamedInlineWrappedRest({
219244
TAG: "RenamedInlineWrap",
220245
"user-name": "inlineRenamed",
221246
version: "8.5",
@@ -224,7 +249,7 @@ Mocha.describe("Record_rest_test", () => {
224249
version: "8.5",
225250
debug: true
226251
});
227-
Test_utils.eq("File \"record_rest_test.res\", line 230, characters 6-13", getRenamedInlineWrappedRest({
252+
Test_utils.eq("File \"record_rest_test.res\", line 255, characters 6-13", getRenamedInlineWrappedRest({
228253
TAG: "RenamedInlineMirror",
229254
"user-name": "inlineRenamed2",
230255
version: "8.6",
@@ -235,7 +260,7 @@ Mocha.describe("Record_rest_test", () => {
235260
});
236261
});
237262
Mocha.test("inline record variant rest removes a custom runtime tag field", () => {
238-
Test_utils.eq("File \"record_rest_test.res\", line 240, characters 6-13", getCustomTaggedInlineWrappedRest({
263+
Test_utils.eq("File \"record_rest_test.res\", line 265, characters 6-13", getCustomTaggedInlineWrappedRest({
239264
kind: "CustomInlineWrap",
240265
name: "customInline",
241266
version: "9.0",
@@ -244,7 +269,7 @@ Mocha.describe("Record_rest_test", () => {
244269
version: "9.0",
245270
debug: true
246271
});
247-
Test_utils.eq("File \"record_rest_test.res\", line 247, characters 6-13", getCustomTaggedInlineWrappedRest({
272+
Test_utils.eq("File \"record_rest_test.res\", line 272, characters 6-13", getCustomTaggedInlineWrappedRest({
248273
kind: "CustomInlineMirror",
249274
name: "customInlineMirror",
250275
version: "10.0",
@@ -255,7 +280,7 @@ Mocha.describe("Record_rest_test", () => {
255280
});
256281
});
257282
Mocha.test("inline record rest works with a non-identifier custom tag name", () => {
258-
Test_utils.eq("File \"record_rest_test.res\", line 257, characters 6-13", getDashedTaggedInlineWrappedRest({
283+
Test_utils.eq("File \"record_rest_test.res\", line 282, characters 6-13", getDashedTaggedInlineWrappedRest({
259284
"custom-tag": "DashedInlineWrap",
260285
name: "dashedInline",
261286
version: "11.0",
@@ -264,7 +289,7 @@ Mocha.describe("Record_rest_test", () => {
264289
version: "11.0",
265290
debug: true
266291
});
267-
Test_utils.eq("File \"record_rest_test.res\", line 264, characters 6-13", getDashedTaggedInlineWrappedRest({
292+
Test_utils.eq("File \"record_rest_test.res\", line 289, characters 6-13", getDashedTaggedInlineWrappedRest({
268293
"custom-tag": "DashedInlineMirror",
269294
name: "dashedInlineMirror",
270295
version: "12.0",
@@ -277,8 +302,10 @@ Mocha.describe("Record_rest_test", () => {
277302
});
278303

279304
export {
305+
SubConfig,
280306
describeConfig,
281307
getAliasedRest,
308+
getNamespacedRest,
282309
getRenamedRest,
283310
getName,
284311
getWholeConfig,

tests/tests/src/record_rest_test.res

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ type subConfig = {
1212
debug: bool,
1313
}
1414

15+
module SubConfig = {
16+
type t = {
17+
version: string,
18+
debug: bool,
19+
}
20+
}
21+
1522
type aliasedSubConfig = subConfig
1623

1724
type renamedConfig = {
@@ -27,6 +34,7 @@ let describeConfig = (c: config) =>
2734
}
2835

2936
let getAliasedRest = ({name: _, ...aliasedSubConfig as rest}: config) => rest
37+
let getNamespacedRest = ({name: _, ...SubConfig.t as rest}: config) => rest
3038

3139
let getRenamedRest = ({name: _, ...subConfig as rest}: renamedConfig) => rest
3240

@@ -149,6 +157,23 @@ describe(__MODULE__, () => {
149157
)
150158
})
151159

160+
test("record rest accepts namespaced record types", () => {
161+
eq(
162+
__LOC__,
163+
getNamespacedRest({name: "namespaced", version: "3.15", debug: true}),
164+
{version: "3.15", debug: true},
165+
)
166+
167+
let {name: _, ...SubConfig.t as rest} = (
168+
{
169+
name: "namespaced-let",
170+
version: "3.16",
171+
debug: false,
172+
}: config
173+
)
174+
eq(__LOC__, rest, {version: "3.16", debug: false})
175+
})
176+
152177
test("record rest excludes fields renamed with @as", () => {
153178
eq(
154179
__LOC__,

0 commit comments

Comments
 (0)