1
- // Copyright 2014, 2015, 2016, 2017 Simon Lydell
1
+ // Copyright 2014, 2015, 2016, 2017, 2019 Simon Lydell
2
+ // Copyright 2019 ZHAO Jinxiang
2
3
// X11 (“MIT”) Licensed. (See LICENSE.)
3
4
4
5
var test = require ( "tape" )
@@ -61,6 +62,12 @@ var map = {
61
62
sources : [ ] ,
62
63
names : [ ]
63
64
} ,
65
+ utf8 : {
66
+ mappings : "AAAA" ,
67
+ sources : [ "foo.js" ] ,
68
+ sourcesContent : [ "中文😊" ] ,
69
+ names : [ ]
70
+ } ,
64
71
empty : { }
65
72
}
66
73
map . simpleString = JSON . stringify ( map . simple )
@@ -75,7 +82,8 @@ var code = {
75
82
"%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
76
83
"foo.js%22%5D%2C%22names%22%3A%5B%5D%7D" ) ,
77
84
base64 : u ( "data:application/json;base64," +
78
- "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W119" ) ,
85
+ "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyLkuK3mlofwn5iKIl0sIm5hbWVzIjpbXX0=" ) , // jshint ignore:line
86
+ base64InvalidUtf8 : u ( "data:application/json;base64,abc" ) ,
79
87
dataUriText : u ( "data:text/json," +
80
88
"%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
81
89
"foo.js%22%5D%2C%22names%22%3A%5B%5D%7D" ) ,
@@ -85,6 +93,7 @@ var code = {
85
93
dataUriNoMime : u ( "data:,foo" ) ,
86
94
dataUriInvalidMime : u ( "data:text/html,foo" ) ,
87
95
dataUriInvalidJSON : u ( "data:application/json,foo" ) ,
96
+ dataUriInvalidCode : u ( "data:application/json,%" ) ,
88
97
dataUriXSSIsafe : u ( "data:application/json," + ")%5D%7D%27" +
89
98
"%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
90
99
"foo.js%22%5D%2C%22names%22%3A%5B%5D%7D" ) ,
@@ -99,7 +108,7 @@ function testResolveSourceMap(method, sync) {
99
108
100
109
var codeUrl = "http://example.com/a/b/c/foo.js"
101
110
102
- t . plan ( 1 + 12 * 3 + 6 * 4 )
111
+ t . plan ( 1 + 12 * 3 + 8 * 4 )
103
112
104
113
t . equal ( typeof method , "function" , "is a function" )
105
114
@@ -171,14 +180,27 @@ function testResolveSourceMap(method, sync) {
171
180
t . error ( error )
172
181
t . deepEqual ( result , {
173
182
sourceMappingURL : "data:application/json;base64," +
174
- "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W119" ,
183
+ "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyLkuK3mlofwn5iKIl0sIm5hbWVzIjpbXX0=" , // jshint ignore:line
175
184
url : null ,
176
185
sourcesRelativeTo : codeUrl ,
177
- map : map . simple
186
+ map : map . utf8
178
187
} , "base64" )
179
188
isAsync ( )
180
189
} )
181
190
191
+ method ( code . base64InvalidUtf8 , codeUrl , wrap ( Throws ) , function ( error , result ) {
192
+ t . deepEqual ( error . sourceMapData , {
193
+ sourceMappingURL : "data:application/json;base64,abc" ,
194
+ url : null ,
195
+ sourcesRelativeTo : codeUrl ,
196
+ map : "abc"
197
+ } , "base64InvalidUtf8 .sourceMapData" )
198
+ t . ok ( error instanceof TypeError && error . message !== "data:application/json;base64,abc" ,
199
+ "base64InvalidUtf8" )
200
+ t . notOk ( result )
201
+ isAsync ( )
202
+ } )
203
+
182
204
method ( code . dataUriText , codeUrl , wrap ( Throws ) , function ( error , result ) {
183
205
t . error ( error )
184
206
t . deepEqual ( result , {
@@ -242,6 +264,19 @@ function testResolveSourceMap(method, sync) {
242
264
isAsync ( )
243
265
} )
244
266
267
+ method ( code . dataUriInvalidCode , codeUrl , wrap ( Throws ) , function ( error , result ) {
268
+ t . deepEqual ( error . sourceMapData , {
269
+ sourceMappingURL : "data:application/json,%" ,
270
+ url : null ,
271
+ sourcesRelativeTo : codeUrl ,
272
+ map : "%"
273
+ } , "dataUriInvalidCode .sourceMapData" )
274
+ t . ok ( error instanceof URIError && error . message !== "data:application/json,%" ,
275
+ "dataUriInvalidCode" )
276
+ t . notOk ( result )
277
+ isAsync ( )
278
+ } )
279
+
245
280
method ( code . dataUriXSSIsafe , codeUrl , wrap ( Throws ) , function ( error , result ) {
246
281
t . error ( error )
247
282
t . deepEqual ( result , {
@@ -599,7 +634,7 @@ function testResolve(method, sync) {
599
634
600
635
var codeUrl = "http://example.com/a/b/c/foo.js"
601
636
602
- t . plan ( 1 + 15 * 3 + 21 * 4 + 4 )
637
+ t . plan ( 1 + 15 * 3 + 23 * 4 + 4 )
603
638
604
639
t . equal ( typeof method , "function" , "is a function" )
605
640
@@ -683,16 +718,29 @@ function testResolve(method, sync) {
683
718
t . error ( error )
684
719
t . deepEqual ( result , {
685
720
sourceMappingURL : "data:application/json;base64," +
686
- "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W119" ,
721
+ "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyLkuK3mlofwn5iKIl0sIm5hbWVzIjpbXX0=" , // jshint ignore:line
687
722
url : null ,
688
723
sourcesRelativeTo : codeUrl ,
689
- map : map . simple ,
724
+ map : map . utf8 ,
690
725
sourcesResolved : [ "http://example.com/a/b/c/foo.js" ] ,
691
- sourcesContent : [ "http://example.com/a/b/c/foo.js " ]
726
+ sourcesContent : [ "中文😊 " ]
692
727
} , "base64" )
693
728
isAsync ( )
694
729
} )
695
730
731
+ method ( code . base64InvalidUtf8 , codeUrl , wrap ( Throws ) , function ( error , result ) {
732
+ t . deepEqual ( error . sourceMapData , {
733
+ sourceMappingURL : "data:application/json;base64,abc" ,
734
+ url : null ,
735
+ sourcesRelativeTo : codeUrl ,
736
+ map : "abc"
737
+ } , "base64InvalidUtf8 .sourceMapData" )
738
+ t . ok ( error instanceof TypeError && error . message !== "data:application/json;base64,abc" ,
739
+ "base64InvalidUtf8" )
740
+ t . notOk ( result )
741
+ isAsync ( )
742
+ } )
743
+
696
744
method ( code . dataUriText , codeUrl , wrapMap ( Throws , identity ) , function ( error , result ) {
697
745
t . error ( error )
698
746
t . deepEqual ( result , {
@@ -760,6 +808,19 @@ function testResolve(method, sync) {
760
808
isAsync ( )
761
809
} )
762
810
811
+ method ( code . dataUriInvalidCode , codeUrl , wrap ( Throws ) , function ( error , result ) {
812
+ t . deepEqual ( error . sourceMapData , {
813
+ sourceMappingURL : "data:application/json,%" ,
814
+ url : null ,
815
+ sourcesRelativeTo : codeUrl ,
816
+ map : "%"
817
+ } , "dataUriInvalidCode .sourceMapData" )
818
+ t . ok ( error instanceof URIError && error . message !== "data:application/json,%" ,
819
+ "dataUriInvalidCode" )
820
+ t . notOk ( result )
821
+ isAsync ( )
822
+ } )
823
+
763
824
method ( code . dataUriXSSIsafe , codeUrl , wrapMap ( Throws , identity ) , function ( error , result ) {
764
825
t . error ( error )
765
826
t . deepEqual ( result , {
0 commit comments