@@ -11,16 +11,16 @@ it("scaleOrdinal() has the expected defaults", () => {
11
11
} ) ;
12
12
13
13
it ( "ordinal(x) maps a unique name x in the domain to the corresponding value y in the range" , ( ) => {
14
- const s = scaleOrdinal ( ) . domain ( [ 0 , 1 ] ) . range ( [ "foo" , "bar" ] ) ;
14
+ const s = scaleOrdinal ( ) . domain ( [ 0 , 1 ] ) . range ( [ "foo" , "bar" ] ) . unknown ( undefined ) ;
15
15
assert . strictEqual ( s ( 0 ) , "foo" ) ;
16
16
assert . strictEqual ( s ( 1 ) , "bar" ) ;
17
17
s . range ( [ "a" , "b" , "c" ] ) ;
18
18
assert . strictEqual ( s ( 0 ) , "a" ) ;
19
- assert . strictEqual ( s ( "0" ) , "a" ) ;
20
- assert . strictEqual ( s ( [ 0 ] ) , "a" ) ;
19
+ assert . strictEqual ( s ( "0" ) , undefined ) ;
20
+ assert . strictEqual ( s ( [ 0 ] ) , undefined ) ;
21
21
assert . strictEqual ( s ( 1 ) , "b" ) ;
22
- assert . strictEqual ( s ( 2.0 ) , "c " ) ;
23
- assert . strictEqual ( s ( new Number ( 2 ) ) , "c" ) ;
22
+ assert . strictEqual ( s ( new Number ( 1 ) ) , "b " ) ;
23
+ assert . strictEqual ( s ( 2 ) , undefined ) ;
24
24
} ) ;
25
25
26
26
it ( "ordinal(x) implicitly extends the domain when a range is explicitly specified" , ( ) => {
@@ -59,16 +59,16 @@ it("ordinal.domain() replaces previous domain values", () => {
59
59
assert . strictEqual ( s ( 0 ) , "bar" ) ;
60
60
assert . deepStrictEqual ( s . domain ( ) , [ 1 , 0 ] ) ;
61
61
s . domain ( [ "0" , "1" ] ) ;
62
- assert . strictEqual ( s ( 0 ) , "foo" ) ; // it changed!
63
- assert . strictEqual ( s ( 1 ) , "bar" ) ;
62
+ assert . strictEqual ( s ( "0" ) , "foo" ) ; // it changed!
63
+ assert . strictEqual ( s ( "1" ) , "bar" ) ;
64
64
assert . deepStrictEqual ( s . domain ( ) , [ "0" , "1" ] ) ;
65
65
} ) ;
66
66
67
- it ( "ordinal.domain() uniqueness is based on string coercion" , ( ) => {
67
+ it ( "ordinal.domain() uniqueness is based on primitive coercion" , ( ) => {
68
68
const s = scaleOrdinal ( ) . domain ( [ "foo" ] ) . range ( [ 42 , 43 , 44 ] ) ;
69
69
assert . strictEqual ( s ( new String ( "foo" ) ) , 42 ) ;
70
- assert . strictEqual ( s ( { toString : function ( ) { return "foo" ; } } ) , 42 ) ;
71
- assert . strictEqual ( s ( { toString : function ( ) { return "bar" ; } } ) , 43 ) ;
70
+ assert . strictEqual ( s ( { valueOf : function ( ) { return "foo" ; } } ) , 42 ) ;
71
+ assert . strictEqual ( s ( { valueOf : function ( ) { return "bar" ; } } ) , 43 ) ;
72
72
} ) ;
73
73
74
74
it ( "ordinal.domain() does not coerce domain values to strings" , ( ) => {
@@ -85,6 +85,34 @@ it("ordinal.domain() does not barf on object built-ins", () => {
85
85
assert . deepStrictEqual ( s . domain ( ) , [ "__proto__" , "hasOwnProperty" ] ) ;
86
86
} ) ;
87
87
88
+ it ( "ordinal() accepts dates" , ( ) => {
89
+ const s = scaleOrdinal ( ) ;
90
+ s ( new Date ( 1970 , 2 , 1 ) ) ;
91
+ s ( new Date ( 2001 , 4 , 13 ) ) ;
92
+ s ( new Date ( 1970 , 2 , 1 ) ) ;
93
+ s ( new Date ( 2001 , 4 , 13 ) ) ;
94
+ assert . deepStrictEqual ( s . domain ( ) , [ new Date ( 1970 , 2 , 1 ) , new Date ( 2001 , 4 , 13 ) ] ) ;
95
+ } ) ;
96
+
97
+ it ( "ordinal.domain() accepts dates" , ( ) => {
98
+ const s = scaleOrdinal ( ) . domain ( [
99
+ new Date ( 1970 , 2 , 1 ) ,
100
+ new Date ( 2001 , 4 , 13 ) ,
101
+ new Date ( 1970 , 2 , 1 ) ,
102
+ new Date ( 2001 , 4 , 13 )
103
+ ] ) ;
104
+ s ( new Date ( 1970 , 2 , 1 ) ) ;
105
+ s ( new Date ( 1999 , 11 , 31 ) ) ;
106
+ assert . deepStrictEqual ( s . domain ( ) , [ new Date ( 1970 , 2 , 1 ) , new Date ( 2001 , 4 , 13 ) , new Date ( 1999 , 11 , 31 ) ] ) ;
107
+ } ) ;
108
+
109
+ it ( "ordinal.domain() does not barf on object built-ins" , ( ) => {
110
+ const s = scaleOrdinal ( ) . domain ( [ "__proto__" , "hasOwnProperty" ] ) . range ( [ 42 , 43 ] ) ;
111
+ assert . strictEqual ( s ( "__proto__" ) , 42 ) ;
112
+ assert . strictEqual ( s ( "hasOwnProperty" ) , 43 ) ;
113
+ assert . deepStrictEqual ( s . domain ( ) , [ "__proto__" , "hasOwnProperty" ] ) ;
114
+ } ) ;
115
+
88
116
it ( "ordinal.domain() is ordered by appearance" , ( ) => {
89
117
const s = scaleOrdinal ( ) ;
90
118
s ( "foo" ) ;
0 commit comments