@@ -31,12 +31,14 @@ Deno.test("isObjectOf<T>", async (t) => {
31
31
assertEquals (
32
32
isObjectOf ( predObj ) ( { a : 0 , b : "a" , c : true , d : "ignored" } ) ,
33
33
true ,
34
+ "Undefined properties are ignored" ,
34
35
) ;
35
36
assertEquals (
36
37
isObjectOf ( predObj ) (
37
38
Object . assign ( ( ) => void 0 , { a : 0 , b : "a" , c : true } ) ,
38
39
) ,
39
40
true ,
41
+ "Function are treated as an object" ,
40
42
) ;
41
43
} ) ;
42
44
@@ -64,7 +66,7 @@ Deno.test("isObjectOf<T>", async (t) => {
64
66
const predObj = {
65
67
getFullYear : is . Function ,
66
68
} ;
67
- assertEquals ( isObjectOf ( predObj ) ( date ) , true , "Value is not an object" ) ;
69
+ assertEquals ( isObjectOf ( predObj ) ( date ) , true ) ;
68
70
} ) ;
69
71
70
72
await t . step ( "predicated type is correct" , ( ) => {
@@ -98,4 +100,56 @@ Deno.test("isObjectOf<T>", async (t) => {
98
100
> ( true ) ;
99
101
}
100
102
} ) ;
103
+
104
+ await t . step (
105
+ "does not affect prototype properties of 'predObj'" ,
106
+ async ( t ) => {
107
+ const prototypeObj = {
108
+ a : is . Number ,
109
+ b : is . Boolean ,
110
+ } ;
111
+ // deno-lint-ignore ban-types
112
+ const predObj = Object . assign ( Object . create ( prototypeObj ) as { } , {
113
+ c : is . String ,
114
+ } ) ;
115
+
116
+ await t . step ( "returns true on T object" , ( ) => {
117
+ assertEquals ( isObjectOf ( predObj ) ( { c : "a" } ) , true ) ;
118
+ assertEquals (
119
+ isObjectOf ( predObj ) ( { a : "ignored" , b : "ignored" , c : "a" } ) ,
120
+ true ,
121
+ "Predicates defined in the prototype are ignored" ,
122
+ ) ;
123
+ assertEquals (
124
+ isObjectOf ( predObj ) ( { c : "a" , d : "ignored" } ) ,
125
+ true ,
126
+ "Undefined properties are ignored" ,
127
+ ) ;
128
+ assertEquals (
129
+ isObjectOf ( predObj ) ( Object . assign ( ( ) => void 0 , { c : "a" } ) ) ,
130
+ true ,
131
+ "Function are treated as an object" ,
132
+ ) ;
133
+ } ) ;
134
+
135
+ await t . step ( "returns false on non T object" , ( ) => {
136
+ assertEquals ( isObjectOf ( predObj ) ( "a" ) , false , "Value is not an object" ) ;
137
+ assertEquals (
138
+ isObjectOf ( predObj ) ( { a : 0 , b : true , c : 1 } ) ,
139
+ false ,
140
+ "Object have a different type property" ,
141
+ ) ;
142
+ assertEquals (
143
+ isObjectOf ( predObj ) ( { a : 0 , b : true } ) ,
144
+ false ,
145
+ "Object does not have one property" ,
146
+ ) ;
147
+ assertEquals (
148
+ isObjectOf ( { 0 : is . String } ) ( [ "a" ] ) ,
149
+ false ,
150
+ "Value is not an object" ,
151
+ ) ;
152
+ } ) ;
153
+ } ,
154
+ ) ;
101
155
} ) ;
0 commit comments