@@ -52,6 +52,21 @@ Deno.test("isRecordOf<T>", async (t) => {
52
52
) ;
53
53
} ) ;
54
54
} ) ;
55
+
56
+ await t . step ( "with symbol properties" , async ( t ) => {
57
+ const a = Symbol ( "a" ) ;
58
+ await t . step ( "returns true on T record" , ( ) => {
59
+ assertEquals ( isRecordOf ( is . Number ) ( { [ a ] : 0 } ) , true ) ;
60
+ assertEquals ( isRecordOf ( is . String ) ( { [ a ] : "a" } ) , true ) ;
61
+ assertEquals ( isRecordOf ( is . Boolean ) ( { [ a ] : true } ) , true ) ;
62
+ } ) ;
63
+
64
+ await t . step ( "returns false on non T record" , ( ) => {
65
+ assertEquals ( isRecordOf ( is . String ) ( { [ a ] : 0 } ) , false ) ;
66
+ assertEquals ( isRecordOf ( is . Number ) ( { [ a ] : "a" } ) , false ) ;
67
+ assertEquals ( isRecordOf ( is . String ) ( { [ a ] : true } ) , false ) ;
68
+ } ) ;
69
+ } ) ;
55
70
} ) ;
56
71
57
72
Deno . test ( "isRecordOf<T, K>" , async ( t ) => {
@@ -89,6 +104,7 @@ Deno.test("isRecordOf<T, K>", async (t) => {
89
104
} ) ;
90
105
91
106
await t . step ( "checks only object's own properties" , async ( t ) => {
107
+ const s = Symbol ( "s" ) ;
92
108
await t . step ( "returns true on T record" , ( ) => {
93
109
assertEquals (
94
110
isRecordOf ( is . Number , is . String ) (
@@ -115,6 +131,49 @@ Deno.test("isRecordOf<T, K>", async (t) => {
115
131
true ,
116
132
"No own properties" ,
117
133
) ;
134
+ assertEquals (
135
+ isRecordOf ( is . String , is . String ) (
136
+ Object . assign ( Object . create ( { [ s ] : "ignore" } ) , { /* empty */ } ) ,
137
+ ) ,
138
+ true ,
139
+ "No own properties" ,
140
+ ) ;
141
+ } ) ;
142
+ } ) ;
143
+
144
+ await t . step ( "with symbol properties" , async ( t ) => {
145
+ const a = Symbol ( "a" ) ;
146
+ await t . step ( "returns properly named predicate function" , async ( t ) => {
147
+ await assertSnapshot ( t , isRecordOf ( is . Number , is . Symbol ) . name ) ;
148
+ await assertSnapshot (
149
+ t ,
150
+ isRecordOf ( ( _x ) : _x is string => false , is . Symbol ) . name ,
151
+ ) ;
152
+ } ) ;
153
+
154
+ await t . step ( "returns true on T record" , ( ) => {
155
+ assertEquals ( isRecordOf ( is . Number , is . Symbol ) ( { [ a ] : 0 } ) , true ) ;
156
+ assertEquals ( isRecordOf ( is . String , is . Symbol ) ( { [ a ] : "a" } ) , true ) ;
157
+ assertEquals ( isRecordOf ( is . Boolean , is . Symbol ) ( { [ a ] : true } ) , true ) ;
158
+ } ) ;
159
+
160
+ await t . step ( "returns false on non T record" , ( ) => {
161
+ assertEquals ( isRecordOf ( is . String , is . Symbol ) ( { [ a ] : 0 } ) , false ) ;
162
+ assertEquals ( isRecordOf ( is . Number , is . Symbol ) ( { [ a ] : "a" } ) , false ) ;
163
+ assertEquals ( isRecordOf ( is . String , is . Symbol ) ( { [ a ] : true } ) , false ) ;
164
+ } ) ;
165
+
166
+ await t . step ( "returns false on non K record" , ( ) => {
167
+ assertEquals ( isRecordOf ( is . Number , is . String ) ( { [ a ] : 0 } ) , false ) ;
168
+ assertEquals ( isRecordOf ( is . String , is . String ) ( { [ a ] : "a" } ) , false ) ;
169
+ assertEquals ( isRecordOf ( is . Boolean , is . String ) ( { [ a ] : true } ) , false ) ;
170
+ } ) ;
171
+
172
+ await t . step ( "predicated type is correct" , ( ) => {
173
+ const a : unknown = { a : 0 } ;
174
+ if ( isRecordOf ( is . Number , is . Symbol ) ( a ) ) {
175
+ assertType < Equal < typeof a , Record < symbol , number > > > ( true ) ;
176
+ }
118
177
} ) ;
119
178
} ) ;
120
179
} ) ;
0 commit comments