@@ -5,15 +5,17 @@ import { instanceOf } from '../instanceOf.js';
5
5
6
6
describe ( 'instanceOf' , ( ) => {
7
7
it ( 'do not throw on values without prototype' , ( ) => {
8
+ const fooSymbol : unique symbol = Symbol ( 'Foo' ) ;
8
9
class Foo {
10
+ readonly __kind : symbol = fooSymbol ;
9
11
get [ Symbol . toStringTag ] ( ) {
10
12
return 'Foo' ;
11
13
}
12
14
}
13
15
14
- expect ( instanceOf ( true , Foo ) ) . to . equal ( false ) ;
15
- expect ( instanceOf ( null , Foo ) ) . to . equal ( false ) ;
16
- expect ( instanceOf ( Object . create ( null ) , Foo ) ) . to . equal ( false ) ;
16
+ expect ( instanceOf ( true , fooSymbol , Foo ) ) . to . equal ( false ) ;
17
+ expect ( instanceOf ( null , fooSymbol , Foo ) ) . to . equal ( false ) ;
18
+ expect ( instanceOf ( Object . create ( null ) , fooSymbol , Foo ) ) . to . equal ( false ) ;
17
19
} ) ;
18
20
19
21
it ( 'detect name clashes with older versions of this lib' , ( ) => {
@@ -23,56 +25,66 @@ describe('instanceOf', () => {
23
25
}
24
26
25
27
function newVersion ( ) {
26
- class Foo {
28
+ const fooSymbol : unique symbol = Symbol ( 'Foo' ) ;
29
+ class FooClass {
30
+ readonly __kind : symbol = fooSymbol ;
27
31
get [ Symbol . toStringTag ] ( ) {
28
32
return 'Foo' ;
29
33
}
30
34
}
31
- return Foo ;
35
+ return { fooSymbol , FooClass } ;
32
36
}
33
37
34
- const NewClass = newVersion ( ) ;
38
+ const { fooSymbol : newSymbol , FooClass : NewClass } = newVersion ( ) ;
35
39
const OldClass = oldVersion ( ) ;
36
- expect ( instanceOf ( new NewClass ( ) , NewClass ) ) . to . equal ( true ) ;
37
- expect ( ( ) => instanceOf ( new OldClass ( ) , NewClass ) ) . to . throw ( ) ;
40
+ expect ( instanceOf ( new NewClass ( ) , newSymbol , NewClass ) ) . to . equal ( true ) ;
41
+ expect ( ( ) => instanceOf ( new OldClass ( ) , newSymbol , NewClass ) ) . to . throw ( ) ;
38
42
} ) ;
39
43
40
44
it ( 'allows instances to have share the same constructor name' , ( ) => {
41
45
function getMinifiedClass ( tag : string ) {
46
+ const someSymbol : unique symbol = Symbol ( tag ) ;
42
47
class SomeNameAfterMinification {
48
+ readonly __kind : symbol = someSymbol ;
43
49
get [ Symbol . toStringTag ] ( ) {
44
50
return tag ;
45
51
}
46
52
}
47
- return SomeNameAfterMinification ;
53
+ return { someSymbol , SomeNameAfterMinification } ;
48
54
}
49
55
50
- const Foo = getMinifiedClass ( 'Foo' ) ;
51
- const Bar = getMinifiedClass ( 'Bar' ) ;
52
- expect ( instanceOf ( new Foo ( ) , Bar ) ) . to . equal ( false ) ;
53
- expect ( instanceOf ( new Bar ( ) , Foo ) ) . to . equal ( false ) ;
56
+ const { someSymbol : fooSymbol , SomeNameAfterMinification : Foo } =
57
+ getMinifiedClass ( 'Foo' ) ;
58
+ const { someSymbol : barSymbol , SomeNameAfterMinification : Bar } =
59
+ getMinifiedClass ( 'Bar' ) ;
60
+ expect ( instanceOf ( new Foo ( ) , barSymbol , Bar ) ) . to . equal ( false ) ;
61
+ expect ( instanceOf ( new Bar ( ) , fooSymbol , Foo ) ) . to . equal ( false ) ;
54
62
55
- const DuplicateOfFoo = getMinifiedClass ( 'Foo' ) ;
56
- expect ( ( ) => instanceOf ( new DuplicateOfFoo ( ) , Foo ) ) . to . throw ( ) ;
57
- expect ( ( ) => instanceOf ( new Foo ( ) , DuplicateOfFoo ) ) . to . throw ( ) ;
63
+ const {
64
+ someSymbol : duplicateOfFooSymbol ,
65
+ SomeNameAfterMinification : DuplicateOfFoo ,
66
+ } = getMinifiedClass ( 'Foo' ) ;
67
+ expect ( ( ) => instanceOf ( new DuplicateOfFoo ( ) , fooSymbol , Foo ) ) . to . throw ( ) ;
68
+ expect ( ( ) => instanceOf ( new Foo ( ) , duplicateOfFooSymbol , Foo ) ) . to . throw ( ) ;
58
69
} ) ;
59
70
60
71
it ( 'fails with descriptive error message' , ( ) => {
61
72
function getFoo ( ) {
73
+ const fooSymbol : unique symbol = Symbol ( 'Foo' ) ;
62
74
class Foo {
63
75
get [ Symbol . toStringTag ] ( ) {
64
76
return 'Foo' ;
65
77
}
66
78
}
67
- return Foo ;
79
+ return { fooSymbol , Foo } ;
68
80
}
69
- const Foo1 = getFoo ( ) ;
70
- const Foo2 = getFoo ( ) ;
81
+ const { fooSymbol : foo1Symbol , Foo : Foo1 } = getFoo ( ) ;
82
+ const { fooSymbol : foo2Symbol , Foo : Foo2 } = getFoo ( ) ;
71
83
72
- expect ( ( ) => instanceOf ( new Foo1 ( ) , Foo2 ) ) . to . throw (
84
+ expect ( ( ) => instanceOf ( new Foo1 ( ) , foo2Symbol , Foo2 ) ) . to . throw (
73
85
/ ^ C a n n o t u s e F o o " { } " f r o m a n o t h e r m o d u l e o r r e a l m ./ m,
74
86
) ;
75
- expect ( ( ) => instanceOf ( new Foo2 ( ) , Foo1 ) ) . to . throw (
87
+ expect ( ( ) => instanceOf ( new Foo2 ( ) , foo1Symbol , Foo1 ) ) . to . throw (
76
88
/ ^ C a n n o t u s e F o o " { } " f r o m a n o t h e r m o d u l e o r r e a l m ./ m,
77
89
) ;
78
90
} ) ;
0 commit comments