@@ -5,79 +5,129 @@ import { join } from 'path'
5
5
6
6
const getImage = ( filepath ) => readFile ( join ( __dirname , filepath ) )
7
7
8
- describe ( 'detectContentType' , ( ) => {
9
- it ( 'should return jpg' , async ( ) => {
10
- const buffer = await getImage ( './images/test.jpg' )
11
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/jpeg' )
12
- } )
13
- it ( 'should return png' , async ( ) => {
14
- const buffer = await getImage ( './images/test.png' )
15
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/png' )
16
- } )
17
- it ( 'should return webp' , async ( ) => {
18
- const buffer = await getImage ( './images/animated.webp' )
19
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/webp' )
20
- } )
21
- it ( 'should return svg' , async ( ) => {
22
- const buffer = await getImage ( './images/test.svg' )
23
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/svg+xml' )
24
- } )
25
- it ( 'should return svg for inline svg' , async ( ) => {
26
- const buffer = await getImage ( './images/test-inline.svg' )
27
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/svg+xml' )
28
- } )
29
- it ( 'should return svg when starts with space' , async ( ) => {
30
- const buffer = Buffer . from (
31
- ' <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1"></svg>'
32
- )
33
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/svg+xml' )
34
- } )
35
- it ( 'should return svg when starts with newline' , async ( ) => {
36
- const buffer = Buffer . from (
37
- '\n<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1"></svg>'
38
- )
39
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/svg+xml' )
40
- } )
41
- it ( 'should return svg when starts with tab' , async ( ) => {
42
- const buffer = Buffer . from (
43
- '\t<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1"></svg>'
44
- )
45
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/svg+xml' )
46
- } )
47
- it ( 'should return avif' , async ( ) => {
48
- const buffer = await getImage ( './images/test.avif' )
49
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/avif' )
50
- } )
51
- it ( 'should return icon' , async ( ) => {
52
- const buffer = await getImage ( './images/test.ico' )
53
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/x-icon' )
54
- } )
55
- it ( 'should return icns' , async ( ) => {
56
- const buffer = await getImage ( './images/test.icns' )
57
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/x-icns' )
58
- } )
59
- it ( 'should return jxl' , async ( ) => {
60
- const buffer = await getImage ( './images/test.jxl' )
61
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/jxl' )
62
- } )
63
- it ( 'should return jp2' , async ( ) => {
64
- const buffer = await getImage ( './images/test.jp2' )
65
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/jp2' )
66
- } )
67
- it ( 'should return heic' , async ( ) => {
68
- const buffer = await getImage ( './images/test.heic' )
69
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/heic' )
70
- } )
71
- it ( 'should return pdf' , async ( ) => {
72
- const buffer = await getImage ( './images/test.pdf' )
73
- expect ( await detectContentType ( buffer ) ) . toBe ( 'application/pdf' )
74
- } )
75
- it ( 'should return tiff' , async ( ) => {
76
- const buffer = await getImage ( './images/test.tiff' )
77
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/tiff' )
78
- } )
79
- it ( 'should return bmp' , async ( ) => {
80
- const buffer = await getImage ( './images/test.bmp' )
81
- expect ( await detectContentType ( buffer ) ) . toBe ( 'image/bmp' )
82
- } )
83
- } )
8
+ describe . each ( [ false , true ] ) (
9
+ 'detectContentType with imgOptSkipMetadata: %s' ,
10
+ ( imgOptSkipMetadata ) => {
11
+ it ( 'should return null for empty buffer' , async ( ) => {
12
+ expect ( await detectContentType ( Buffer . alloc ( 0 ) , imgOptSkipMetadata ) ) . toBe (
13
+ null
14
+ )
15
+ } )
16
+ it ( 'should return null for unrecognized buffer' , async ( ) => {
17
+ expect (
18
+ await detectContentType (
19
+ Buffer . from ( [ 0xa , 0xb , 0xc ] ) ,
20
+ imgOptSkipMetadata
21
+ )
22
+ ) . toBe ( null )
23
+ } )
24
+ it ( 'should return jpg' , async ( ) => {
25
+ const buffer = await getImage ( './images/test.jpg' )
26
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
27
+ 'image/jpeg'
28
+ )
29
+ } )
30
+ it ( 'should return png' , async ( ) => {
31
+ const buffer = await getImage ( './images/test.png' )
32
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
33
+ 'image/png'
34
+ )
35
+ } )
36
+ it ( 'should return webp' , async ( ) => {
37
+ const buffer = await getImage ( './images/animated.webp' )
38
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
39
+ 'image/webp'
40
+ )
41
+ } )
42
+ it ( 'should return svg' , async ( ) => {
43
+ const buffer = await getImage ( './images/test.svg' )
44
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
45
+ 'image/svg+xml'
46
+ )
47
+ } )
48
+ it ( 'should return svg for inline svg' , async ( ) => {
49
+ const buffer = await getImage ( './images/test-inline.svg' )
50
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
51
+ 'image/svg+xml'
52
+ )
53
+ } )
54
+ it ( 'should return svg when starts with space' , async ( ) => {
55
+ const buffer = Buffer . from (
56
+ ' <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1"></svg>'
57
+ )
58
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
59
+ 'image/svg+xml'
60
+ )
61
+ } )
62
+ it ( 'should return svg when starts with newline' , async ( ) => {
63
+ const buffer = Buffer . from (
64
+ '\n<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1"></svg>'
65
+ )
66
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
67
+ 'image/svg+xml'
68
+ )
69
+ } )
70
+ it ( 'should return svg when starts with tab' , async ( ) => {
71
+ const buffer = Buffer . from (
72
+ '\t<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1"></svg>'
73
+ )
74
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
75
+ 'image/svg+xml'
76
+ )
77
+ } )
78
+ it ( 'should return avif' , async ( ) => {
79
+ const buffer = await getImage ( './images/test.avif' )
80
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
81
+ 'image/avif'
82
+ )
83
+ } )
84
+ it ( 'should return icon' , async ( ) => {
85
+ const buffer = await getImage ( './images/test.ico' )
86
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
87
+ 'image/x-icon'
88
+ )
89
+ } )
90
+ it ( 'should return icns' , async ( ) => {
91
+ const buffer = await getImage ( './images/test.icns' )
92
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
93
+ 'image/x-icns'
94
+ )
95
+ } )
96
+ it ( 'should return jxl' , async ( ) => {
97
+ const buffer = await getImage ( './images/test.jxl' )
98
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
99
+ 'image/jxl'
100
+ )
101
+ } )
102
+ it ( 'should return jp2' , async ( ) => {
103
+ const buffer = await getImage ( './images/test.jp2' )
104
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
105
+ 'image/jp2'
106
+ )
107
+ } )
108
+ it ( 'should return heic' , async ( ) => {
109
+ const buffer = await getImage ( './images/test.heic' )
110
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
111
+ 'image/heic'
112
+ )
113
+ } )
114
+ it ( 'should return pdf' , async ( ) => {
115
+ const buffer = await getImage ( './images/test.pdf' )
116
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
117
+ 'application/pdf'
118
+ )
119
+ } )
120
+ it ( 'should return tiff' , async ( ) => {
121
+ const buffer = await getImage ( './images/test.tiff' )
122
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
123
+ 'image/tiff'
124
+ )
125
+ } )
126
+ it ( 'should return bmp' , async ( ) => {
127
+ const buffer = await getImage ( './images/test.bmp' )
128
+ expect ( await detectContentType ( buffer , imgOptSkipMetadata ) ) . toBe (
129
+ 'image/bmp'
130
+ )
131
+ } )
132
+ }
133
+ )
0 commit comments