Skip to content

Commit a5b6b43

Browse files
committed
fix/1229: add tests for camel-cased-properties-X types
1 parent 149564f commit a5b6b43

9 files changed

+134
-1
lines changed

test-d/camel-cased-properties-deep.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,23 @@ type User = {
3333
Role: UserRole;
3434
};
3535

36+
type UserPunctuated = {
37+
'user::id': number;
38+
'user::name': string;
39+
date: Date;
40+
'reg::exp': RegExp;
41+
};
42+
3643
type UserWithFriends = {
3744
UserInfo: User;
3845
UserFriends: User[];
3946
};
4047

48+
type UserWithFriendsPunctuated = {
49+
'user@info': UserPunctuated;
50+
'user#friends': UserPunctuated[];
51+
};
52+
4153
const role = 'someRole' as UserRole;
4254

4355
const result: CamelCasedPropertiesDeep<UserWithFriends> = {
@@ -65,10 +77,14 @@ const result: CamelCasedPropertiesDeep<UserWithFriends> = {
6577
},
6678
],
6779
};
80+
6881
expectType<CamelCasedPropertiesDeep<UserWithFriends>>(result);
6982

7083
expectType<{fooBar: unknown}>({} as CamelCasedPropertiesDeep<{foo_bar: unknown}>);
7184
expectType<{fooBar: {barBaz: unknown}; biz: unknown}>({} as CamelCasedPropertiesDeep<{foo_bar: {bar_baz: unknown}; biz: unknown}>);
7285

7386
expectType<{fooBar: any}>({} as CamelCasedPropertiesDeep<{foo_bar: any}>);
7487
expectType<{fooBar: {barBaz: any}; biz: any}>({} as CamelCasedPropertiesDeep<{foo_bar: {bar_baz: any}; biz: any}>);
88+
89+
expectType<{'fooBar': unknown}>({} as CamelCasedPropertiesDeep<{'foo::bar': unknown}, {splitOnPunctuation: true}>);
90+
expectType<{'fooBar': {'barBaz': unknown}; biz: unknown}>({} as CamelCasedPropertiesDeep<{'foo::bar': {'bar@baz': unknown}; biz: unknown}, {splitOnPunctuation: true}>);

test-d/camel-cased-properties.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,29 @@ expectType<{fooBAR: number; bARFoo: string}>(baz);
1616
declare const biz: CamelCasedProperties<{fooBAR: number; BARFoo: string}>;
1717
expectType<{fooBar: number; barFoo: string}>(biz);
1818

19+
declare const fooBarPunctuated: CamelCasedProperties<{'hello@world1': {'foo::bar': string}}>;
20+
expectType<{'hello@world1': {'foo::bar': string}}>(fooBarPunctuated);
21+
22+
declare const fooBarPunctuatedSplit: CamelCasedProperties<{'hello@world1': {'foo::bar': string}}, {splitOnPunctuation: true}>;
23+
expectType<{'helloWorld1': {'foo::bar': string}}>(fooBarPunctuatedSplit);
24+
25+
declare const fooBarPunctuatedSplitNumberSplit: CamelCasedProperties<{'hello@world1': {'foo::bar': string}}, {splitOnPunctuation: true; splitOnNumbers: true}>;
26+
expectType<{'helloWorld1': {'foo::bar': string}}>(fooBarPunctuatedSplitNumberSplit);
27+
1928
// Verify example
2029
type User = {
2130
UserId: number;
2231
UserName: string;
2332
};
2433

34+
type UserPunctuated = {
35+
'user::id': number;
36+
'user::name': string;
37+
};
38+
2539
const result: CamelCasedProperties<User> = {
2640
userId: 1,
2741
userName: 'Tom',
2842
};
2943
expectType<CamelCasedProperties<User>>(result);
44+
expectType<CamelCasedProperties<UserPunctuated, {splitOnPunctuation: true}>>(result);

test-d/internal/has-multiple-call-signatures.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ type Overloaded = {
88

99
type Overloaded2 = {
1010
(foo: number | undefined): string;
11-
// eslint-disable-next-line @typescript-eslint/unified-signatures
11+
1212
(foo: number): string;
1313
};
1414

test-d/kebab-cased-properties-deep.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,23 @@ type User = {
1717
regExp: RegExp;
1818
};
1919

20+
type UserPunctuated = {
21+
'user::id': number;
22+
'user::name': string;
23+
date: Date;
24+
'reg::exp': RegExp;
25+
};
26+
2027
type UserWithFriends = {
2128
userInfo: User;
2229
userFriends: User[];
2330
};
2431

32+
type UserWithFriendsPunctuated = {
33+
'user@info': UserPunctuated;
34+
'user#friends': UserPunctuated[];
35+
};
36+
2537
const result: KebabCasedPropertiesDeep<UserWithFriends> = {
2638
'user-info': {
2739
'user-id': 1,
@@ -44,10 +56,15 @@ const result: KebabCasedPropertiesDeep<UserWithFriends> = {
4456
},
4557
],
4658
};
59+
4760
expectType<KebabCasedPropertiesDeep<UserWithFriends>>(result);
61+
expectType<KebabCasedPropertiesDeep<UserWithFriendsPunctuated, {splitOnPunctuation: true}>>(result);
4862

4963
expectType<{'foo-bar': unknown}>({} as KebabCasedPropertiesDeep<{foo_bar: unknown}>);
5064
expectType<{'foo-bar': {'bar-baz': unknown}; biz: unknown}>({} as KebabCasedPropertiesDeep<{foo_bar: {bar_baz: unknown}; biz: unknown}>);
5165

5266
expectType<{'foo-bar': any}>({} as KebabCasedPropertiesDeep<{foo_bar: any}>);
5367
expectType<{'foo-bar': {'bar-baz': any}; biz: any}>({} as KebabCasedPropertiesDeep<{foo_bar: {bar_baz: any}; biz: any}>);
68+
69+
expectType<{'foo-bar': unknown}>({} as KebabCasedPropertiesDeep<{'foo::bar': unknown}, {splitOnPunctuation: true}>);
70+
expectType<{'foo-bar': {'bar-baz': unknown}; biz: unknown}>({} as KebabCasedPropertiesDeep<{'foo::bar': {'bar@baz': unknown}; biz: unknown}, {splitOnPunctuation: true}>);

test-d/kebab-cased-properties.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,38 @@ import {expectType} from 'tsd';
22
import type {KebabCasedProperties} from '../index.d.ts';
33

44
type Foobar = {helloWorld1: {fooBar: string}};
5+
type FoobarPunctuated = {'hello@World1': {'foo::Bar': string}};
56

67
declare const foo: KebabCasedProperties<Foobar>;
78
expectType<{'hello-world1': {fooBar: string}}>(foo);
89

910
declare const bar: KebabCasedProperties<Foobar, {splitOnNumbers: true}>;
1011
expectType<{'hello-world-1': {fooBar: string}}>(bar);
1112

13+
declare const fooBarPunctuated: KebabCasedProperties<FoobarPunctuated>;
14+
expectType<{'hello@-world1': {'foo::Bar': string}}>(fooBarPunctuated);
15+
16+
declare const fooBarPunctuatedSplit: KebabCasedProperties<FoobarPunctuated, {splitOnPunctuation: true}>;
17+
expectType<{'hello-world1': {'foo::Bar': string}}>(fooBarPunctuatedSplit);
18+
19+
declare const fooBarPunctuatedSplitNumberSplit: KebabCasedProperties<FoobarPunctuated, {splitOnPunctuation: true; splitOnNumbers: true}>;
20+
expectType<{'hello-world-1': {'foo::Bar': string}}>(fooBarPunctuatedSplitNumberSplit);
21+
1222
// Verify example
1323
type User = {
1424
userId: number;
1525
userName: string;
1626
};
27+
28+
type UserPunctuated = {
29+
'user::Id': number;
30+
'user::Name': string;
31+
};
32+
1733
const result: KebabCasedProperties<User> = {
1834
'user-id': 1,
1935
'user-name': 'Tom',
2036
};
2137
expectType<KebabCasedProperties<User>>(result);
38+
39+
expectType<KebabCasedProperties<UserPunctuated, {splitOnPunctuation: true}>>(result);

test-d/pascal-cased-properties-deep.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,23 @@ type User = {
1818
regExp: RegExp;
1919
};
2020

21+
type UserPunctuated = {
22+
'user::id': number;
23+
'user::name': string;
24+
date: Date;
25+
'reg::exp': RegExp;
26+
};
27+
2128
type UserWithFriends = {
2229
userInfo: User;
2330
userFriends: User[];
2431
};
2532

33+
type UserWithFriendsPunctuated = {
34+
'user@info': UserPunctuated;
35+
'user#friends': UserPunctuated[];
36+
};
37+
2638
const result: PascalCasedPropertiesDeep<UserWithFriends> = {
2739
UserInfo: {
2840
UserId: 1,
@@ -46,13 +58,17 @@ const result: PascalCasedPropertiesDeep<UserWithFriends> = {
4658
],
4759
};
4860
expectType<PascalCasedPropertiesDeep<UserWithFriends>>(result);
61+
expectType<PascalCasedPropertiesDeep<UserWithFriendsPunctuated, {splitOnPunctuation: true}>>(result);
4962

5063
expectType<{'FooBar': unknown}>({} as PascalCasedPropertiesDeep<{foo_bar: unknown}>);
5164
expectType<{'FooBar': {'BarBaz': unknown}; Biz: unknown}>({} as PascalCasedPropertiesDeep<{foo_bar: {bar_baz: unknown}; biz: unknown}>);
5265

5366
expectType<{'FooBar': any}>({} as PascalCasedPropertiesDeep<{foo_bar: any}>);
5467
expectType<{'FooBar': {'BarBaz': any}; Biz: any}>({} as PascalCasedPropertiesDeep<{foo_bar: {bar_baz: any}; biz: any}>);
5568

69+
expectType<{'FooBar': unknown}>({} as PascalCasedPropertiesDeep<{'foo::bar': unknown}, {splitOnPunctuation: true}>);
70+
expectType<{'FooBar': {'BarBaz': unknown}; Biz: unknown}>({} as PascalCasedPropertiesDeep<{'foo::bar': {'bar@baz': unknown}; biz: unknown}, {splitOnPunctuation: true}>);
71+
5672
type bazBizDeep = {fooBAR: number; baz: {fooBAR: Array<{BARFoo: string}>}};
5773

5874
declare const baz: PascalCasedPropertiesDeep<bazBizDeep, {preserveConsecutiveUppercase: true}>;

test-d/pascal-cased-properties.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import {expectType} from 'tsd';
22
import type {PascalCasedProperties} from '../index.d.ts';
33

44
declare const foo: PascalCasedProperties<{helloWorld: {fooBar: string}}>;
5+
type FoobarPunctuated = {'hello@World1': {'foo::Bar': string}};
6+
57
expectType<{HelloWorld: {fooBar: string}}>(foo);
68

79
declare const bar: PascalCasedProperties<Array<{helloWorld: string}>>;
@@ -10,16 +12,32 @@ expectType<Array<{helloWorld: string}>>(bar);
1012
declare const fooBar: PascalCasedProperties<() => {a: string}>;
1113
expectType<() => {a: string}>(fooBar);
1214

15+
declare const fooBarPunctuated: PascalCasedProperties<FoobarPunctuated>;
16+
expectType<{'Hello@World1': {'foo::Bar': string}}>(fooBarPunctuated);
17+
18+
declare const fooBarPunctuatedSplit: PascalCasedProperties<FoobarPunctuated, {splitOnPunctuation: true}>;
19+
expectType<{'HelloWorld1': {'foo::Bar': string}}>(fooBarPunctuatedSplit);
20+
21+
declare const fooBarPunctuatedSplitNumberSplit: PascalCasedProperties<FoobarPunctuated, {splitOnPunctuation: true; splitOnNumbers: true}>;
22+
expectType<{'HelloWorld1': {'foo::Bar': string}}>(fooBarPunctuatedSplitNumberSplit);
23+
1324
// Verify example
1425
type User = {
1526
userId: number;
1627
userName: string;
1728
};
29+
30+
type UserPunctuated = {
31+
'user::id': number;
32+
'user::name': string;
33+
};
34+
1835
const result: PascalCasedProperties<User> = {
1936
UserId: 1,
2037
UserName: 'Tom',
2138
};
2239
expectType<PascalCasedProperties<User>>(result);
40+
expectType<PascalCasedProperties<UserPunctuated, {splitOnPunctuation: true}>>(result);
2341

2442
declare const baz: PascalCasedProperties<{fooBAR: number; BARFoo: string}, {preserveConsecutiveUppercase: true}>;
2543
expectType<{FooBAR: number; BARFoo: string}>(baz);

test-d/snake-cased-properties-deep.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,23 @@ type User = {
1717
regExp: RegExp;
1818
};
1919

20+
type UserPunctuated = {
21+
'user::id': number;
22+
'user::name': string;
23+
date: Date;
24+
'reg::exp': RegExp;
25+
};
26+
2027
type UserWithFriends = {
2128
userInfo: User;
2229
userFriends: User[];
2330
};
2431

32+
type UserWithFriendsPunctuated = {
33+
'user@info': UserPunctuated;
34+
'user#friends': UserPunctuated[];
35+
};
36+
2537
const result: SnakeCasedPropertiesDeep<UserWithFriends> = {
2638
user_info: {
2739
user_id: 1,
@@ -45,9 +57,13 @@ const result: SnakeCasedPropertiesDeep<UserWithFriends> = {
4557
],
4658
};
4759
expectType<SnakeCasedPropertiesDeep<UserWithFriends>>(result);
60+
expectType<SnakeCasedPropertiesDeep<UserWithFriendsPunctuated, {splitOnPunctuation: true}>>(result);
4861

4962
expectType<{foo_bar: unknown}>({} as SnakeCasedPropertiesDeep<{fooBar: unknown}>);
5063
expectType<{foo_bar: {bar_baz: unknown}; biz: unknown}>({} as SnakeCasedPropertiesDeep<{fooBar: {barBaz: unknown}; biz: unknown}>);
5164

5265
expectType<{foo_bar: any}>({} as SnakeCasedPropertiesDeep<{fooBar: any}>);
5366
expectType<{foo_bar: {bar_baz: any}; biz: any}>({} as SnakeCasedPropertiesDeep<{fooBar: {barBaz: any}; biz: any}>);
67+
68+
expectType<{'foo_bar': unknown}>({} as SnakeCasedPropertiesDeep<{'foo::bar': unknown}, {splitOnPunctuation: true}>);
69+
expectType<{'foo_bar': {'bar_baz': unknown}; biz: unknown}>({} as SnakeCasedPropertiesDeep<{'foo::bar': {'bar@baz': unknown}; biz: unknown}, {splitOnPunctuation: true}>);

test-d/snake-cased-properties.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,37 @@ import {expectType} from 'tsd';
22
import type {SnakeCasedProperties} from '../index.d.ts';
33

44
type Foobar = {helloWorld1: {fooBar: string}};
5+
type FoobarPunctuated = {'hello@World1': {'foo::Bar': string}};
56

67
declare const foo: SnakeCasedProperties<Foobar>;
78
expectType<{hello_world1: {fooBar: string}}>(foo);
89

910
declare const bar: SnakeCasedProperties<Foobar, {splitOnNumbers: true}>;
1011
expectType<{hello_world_1: {fooBar: string}}>(bar);
1112

13+
declare const fooBarPunctuated: SnakeCasedProperties<FoobarPunctuated>;
14+
expectType<{'hello@_world1': {'foo::Bar': string}}>(fooBarPunctuated);
15+
16+
declare const fooBarPunctuatedSplit: SnakeCasedProperties<FoobarPunctuated, {splitOnPunctuation: true}>;
17+
expectType<{'hello_world1': {'foo::Bar': string}}>(fooBarPunctuatedSplit);
18+
19+
declare const fooBarPunctuatedSplitNumberSplit: SnakeCasedProperties<FoobarPunctuated, {splitOnPunctuation: true; splitOnNumbers: true}>;
20+
expectType<{'hello_world_1': {'foo::Bar': string}}>(fooBarPunctuatedSplitNumberSplit);
21+
1222
// Verify example
1323
type User = {
1424
userId: number;
1525
userName: string;
1626
};
27+
28+
type UserPunctuated = {
29+
'user::Id': number;
30+
'user::Name': string;
31+
};
32+
1733
const result: SnakeCasedProperties<User> = {
1834
user_id: 1,
1935
user_name: 'Tom',
2036
};
2137
expectType<SnakeCasedProperties<User>>(result);
38+
expectType<SnakeCasedProperties<UserPunctuated, {splitOnPunctuation: true}>>(result);

0 commit comments

Comments
 (0)