1
- import { html , fixture , expect } from '@open-wc/testing' ;
1
+ import { html , fixture , expect , oneEvent } from '@open-wc/testing' ;
2
2
import { UUIFileDropzoneElement } from './uui-file-dropzone.element' ;
3
3
import { UUIFileDropzoneEvent } from './UUIFileDropzoneEvent' ;
4
4
@@ -39,59 +39,84 @@ describe('UUIFileDropzoneElement', () => {
39
39
await expect ( element ) . shadowDom . to . be . accessible ( ) ;
40
40
} ) ;
41
41
42
- describe ( 'drop files' , ( ) => {
43
- it ( 'supports dropping a single file' , done => {
44
- const file1 = new File ( [ '' ] , 'file1.txt' , { type : 'text/plain' } ) ;
45
- const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
42
+ describe ( 'drop files' , async ( ) => {
43
+ it ( 'supports dropping a single file' , ( ) => {
46
44
const dataTransfer = new DataTransfer ( ) ;
47
- dataTransfer . items . add ( file1 ) ;
48
- dataTransfer . items . add ( file2 ) ;
49
-
50
- expectFileChangeEvent ( element , 1 , 0 , done ) ;
51
-
52
- element . dispatchEvent ( new DragEvent ( 'drop' , { dataTransfer } ) ) ;
45
+ // Skip if browser does not support DataTransfer.items
46
+ if ( 'items' in dataTransfer ) {
47
+ const file1 = new File ( [ '' ] , 'file1.txt' , { type : 'text/plain' } ) ;
48
+ const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
49
+ dataTransfer . items . add ( file1 ) ;
50
+ dataTransfer . items . add ( file2 ) ;
51
+
52
+ const listener = oneEvent ( element , UUIFileDropzoneEvent . CHANGE , false ) ;
53
+ element . dispatchEvent ( new DragEvent ( 'drop' , { dataTransfer } ) ) ;
54
+
55
+ listener . then ( event => {
56
+ const { files } = event . detail ;
57
+ expect ( files . length ) . to . equal ( 1 ) ;
58
+ } ) ;
59
+ }
53
60
} ) ;
54
61
55
- it ( 'can drop multiple files' , done => {
56
- const file1 = new File ( [ '' ] , 'file1.txt' , { type : 'text/plain' } ) ;
57
- const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
62
+ it ( 'can drop multiple files' , ( ) => {
58
63
const dataTransfer = new DataTransfer ( ) ;
59
- dataTransfer . items . add ( file1 ) ;
60
- dataTransfer . items . add ( file2 ) ;
61
-
62
- element . multiple = true ;
63
-
64
- expectFileChangeEvent ( element , 2 , 0 , done ) ;
65
-
66
- element . dispatchEvent ( new DragEvent ( 'drop' , { dataTransfer } ) ) ;
64
+ if ( 'items' in dataTransfer ) {
65
+ const file1 = new File ( [ '' ] , 'file1.txt' , { type : 'text/plain' } ) ;
66
+ const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
67
+ dataTransfer . items . add ( file1 ) ;
68
+ dataTransfer . items . add ( file2 ) ;
69
+
70
+ element . multiple = true ;
71
+
72
+ const listener = oneEvent ( element , UUIFileDropzoneEvent . CHANGE , false ) ;
73
+ element . dispatchEvent ( new DragEvent ( 'drop' , { dataTransfer } ) ) ;
74
+
75
+ listener . then ( event => {
76
+ const { files } = event . detail ;
77
+ expect ( files . length ) . to . equal ( 1 ) ;
78
+ } ) ;
79
+ }
67
80
} ) ;
68
81
69
- it ( 'can set the accept attribute with a mimetype' , done => {
70
- const file1 = new File ( [ '' ] , 'file1.jpg' , { type : 'image/jpeg' } ) ;
71
- const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
82
+ it ( 'can set the accept attribute with a mimetype' , ( ) => {
72
83
const dataTransfer = new DataTransfer ( ) ;
73
- dataTransfer . items . add ( file1 ) ;
74
- dataTransfer . items . add ( file2 ) ;
75
-
76
- element . accept = 'image/*' ;
77
-
78
- expectFileChangeEvent ( element , 1 , 0 , done ) ;
79
-
80
- element . dispatchEvent ( new DragEvent ( 'drop' , { dataTransfer } ) ) ;
84
+ if ( 'items' in dataTransfer ) {
85
+ const file1 = new File ( [ '' ] , 'file1.jpg' , { type : 'image/jpeg' } ) ;
86
+ const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
87
+ dataTransfer . items . add ( file1 ) ;
88
+ dataTransfer . items . add ( file2 ) ;
89
+
90
+ element . accept = 'image/*' ;
91
+
92
+ const listener = oneEvent ( element , UUIFileDropzoneEvent . CHANGE , false ) ;
93
+ element . dispatchEvent ( new DragEvent ( 'drop' , { dataTransfer } ) ) ;
94
+
95
+ listener . then ( event => {
96
+ const { files } = event . detail ;
97
+ expect ( files . length ) . to . equal ( 1 ) ;
98
+ } ) ;
99
+ }
81
100
} ) ;
82
101
83
- it ( 'can set the accept attribute with a file extension' , done => {
84
- const file1 = new File ( [ '' ] , 'file1.jpg' , { type : 'image/jpeg' } ) ;
85
- const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
102
+ it ( 'can set the accept attribute with a file extension' , ( ) => {
86
103
const dataTransfer = new DataTransfer ( ) ;
87
- dataTransfer . items . add ( file1 ) ;
88
- dataTransfer . items . add ( file2 ) ;
89
-
90
- element . accept = '.jpg' ;
91
-
92
- expectFileChangeEvent ( element , 1 , 0 , done ) ;
93
-
94
- element . dispatchEvent ( new DragEvent ( 'drop' , { dataTransfer } ) ) ;
104
+ if ( 'items' in dataTransfer ) {
105
+ const file1 = new File ( [ '' ] , 'file1.jpg' , { type : 'image/jpeg' } ) ;
106
+ const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
107
+ dataTransfer . items . add ( file1 ) ;
108
+ dataTransfer . items . add ( file2 ) ;
109
+
110
+ element . accept = '.jpg' ;
111
+
112
+ const listener = oneEvent ( element , UUIFileDropzoneEvent . CHANGE , false ) ;
113
+ element . dispatchEvent ( new DragEvent ( 'drop' , { dataTransfer } ) ) ;
114
+
115
+ listener . then ( event => {
116
+ const { files } = event . detail ;
117
+ expect ( files . length ) . to . equal ( 1 ) ;
118
+ } ) ;
119
+ }
95
120
} ) ;
96
121
} ) ;
97
122
@@ -103,31 +128,39 @@ describe('UUIFileDropzoneElement', () => {
103
128
} ) ;
104
129
105
130
it ( 'supports selecting a single file' , done => {
106
- const file1 = new File ( [ '' ] , 'file1.txt' , { type : 'text/plain' } ) ;
107
- const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
108
131
const dt = new DataTransfer ( ) ;
109
- dt . items . add ( file1 ) ;
110
- dt . items . add ( file2 ) ;
111
-
112
- expectFileChangeEvent ( element , 1 , 0 , done ) ;
113
-
114
- innerElement . files = dt . files ;
115
- innerElement . dispatchEvent ( new Event ( 'change' ) ) ;
132
+ if ( 'items' in dt ) {
133
+ const file1 = new File ( [ '' ] , 'file1.txt' , { type : 'text/plain' } ) ;
134
+ const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
135
+ dt . items . add ( file1 ) ;
136
+ dt . items . add ( file2 ) ;
137
+
138
+ expectFileChangeEvent ( element , 1 , 0 , done ) ;
139
+
140
+ innerElement . files = dt . files ;
141
+ innerElement . dispatchEvent ( new Event ( 'change' ) ) ;
142
+ } else {
143
+ done ( ) ;
144
+ }
116
145
} ) ;
117
146
118
147
it ( 'can select multiple files' , done => {
119
- const file1 = new File ( [ '' ] , 'file1.txt' , { type : 'text/plain' } ) ;
120
- const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
121
148
const dt = new DataTransfer ( ) ;
122
- dt . items . add ( file1 ) ;
123
- dt . items . add ( file2 ) ;
149
+ if ( 'items' in dt ) {
150
+ const file1 = new File ( [ '' ] , 'file1.txt' , { type : 'text/plain' } ) ;
151
+ const file2 = new File ( [ '' ] , 'file2.txt' , { type : 'text/plain' } ) ;
152
+ dt . items . add ( file1 ) ;
153
+ dt . items . add ( file2 ) ;
124
154
125
- element . multiple = true ;
155
+ element . multiple = true ;
126
156
127
- expectFileChangeEvent ( element , 2 , 0 , done ) ;
157
+ expectFileChangeEvent ( element , 2 , 0 , done ) ;
128
158
129
- innerElement . files = dt . files ;
130
- innerElement . dispatchEvent ( new Event ( 'change' ) ) ;
159
+ innerElement . files = dt . files ;
160
+ innerElement . dispatchEvent ( new Event ( 'change' ) ) ;
161
+ } else {
162
+ done ( ) ;
163
+ }
131
164
} ) ;
132
165
} ) ;
133
166
} ) ;
0 commit comments