1
- /*
2
- * Copyright 2019 Google LLC
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the 'License');
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an 'AS IS' BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- import { renderHook } from '@testing-library/react-hooks' ;
18
-
19
- const mediaDecodingConfig = {
20
- type : 'file' ,
21
- audio : {
22
- contentType : 'audio/mp3' ,
23
- channels : 2 ,
24
- bitrate : 132700 ,
25
- samplerate : 5200
26
- }
27
- } ;
28
-
29
- const mediaCapabilitiesMapper = {
30
- 'audio/mp3' : {
31
- powerEfficient : true ,
32
- smooth : true ,
33
- supported : true
34
- }
35
- } ;
36
-
37
- describe ( 'useMediaCapabilitiesDecodingInfo' , ( ) => {
38
- test ( 'should return supported flag on unsupported platforms' , ( ) => {
39
- jest . isolateModules ( ( ) => {
40
- const { useMediaCapabilitiesDecodingInfo } = require ( '.' ) ;
41
- const { result } = renderHook ( ( ) => useMediaCapabilitiesDecodingInfo ( mediaDecodingConfig ) ) ;
42
-
43
- expect ( result . current . supported ) . toEqual ( false ) ;
44
- } )
45
- } ) ;
46
-
47
- test ( 'should return supported flag on unsupported platforms and no config given' , ( ) => {
48
- jest . isolateModules ( ( ) => {
49
- const { useMediaCapabilitiesDecodingInfo } = require ( '.' ) ;
50
- const { result } = renderHook ( ( ) => useMediaCapabilitiesDecodingInfo ( ) ) ;
51
-
52
- expect ( result . current . supported ) . toEqual ( false ) ;
53
- } )
54
- } ) ;
55
-
56
- test ( 'should return initialMediaCapabilitiesInfo for unsupported' , ( ) => {
57
- jest . isolateModules ( ( ) => {
58
- const initialMediaCapabilitiesInfo = {
59
- supported : true ,
60
- smooth : false ,
61
- powerEfficient : true
62
- } ;
63
-
64
- const { useMediaCapabilitiesDecodingInfo } = require ( '.' ) ;
65
- const { result } = renderHook ( ( ) => useMediaCapabilitiesDecodingInfo ( mediaDecodingConfig , initialMediaCapabilitiesInfo ) ) ;
66
-
67
- expect ( result . current . mediaCapabilitiesInfo . supported ) . toBe ( true ) ;
68
- expect ( result . current . mediaCapabilitiesInfo . smooth ) . toEqual ( false ) ;
69
- expect ( result . current . mediaCapabilitiesInfo . powerEfficient ) . toEqual ( true ) ;
70
- } ) ;
71
- } ) ;
72
-
73
- test ( 'should return supported flag when no config given' , ( done ) => {
74
- jest . isolateModules ( ( ) => {
75
- global . navigator . mediaCapabilities = {
76
- decodingInfo : ( ) => new Promise ( resolve => resolve ( true ) )
77
- } ;
78
-
79
- const { useMediaCapabilitiesDecodingInfo } = require ( '.' ) ;
80
- const { result, waitForNextUpdate } = renderHook ( ( ) => useMediaCapabilitiesDecodingInfo ( ) ) ;
81
-
82
- waitForNextUpdate ( )
83
- . then ( ( ) => {
84
- expect ( result . current . supported ) . toEqual ( true ) ;
85
-
86
- done ( ) ;
87
- } )
88
- . catch ( err => done ( err ) ) ;
89
- } ) ;
90
- } ) ;
91
-
92
- test ( 'should return mediaCapabilitiesInfo for given media configuration' , ( done ) => {
93
- jest . isolateModules ( ( ) => {
94
- global . navigator . mediaCapabilities = {
95
- decodingInfo : ( ) => new Promise ( resolve => resolve ( mediaCapabilitiesMapper [ mediaDecodingConfig . audio . contentType ] ) )
96
- } ;
97
-
98
- const { useMediaCapabilitiesDecodingInfo } = require ( '.' ) ;
99
- const { result, waitForNextUpdate } = renderHook ( ( ) => useMediaCapabilitiesDecodingInfo ( mediaDecodingConfig ) ) ;
100
-
101
- waitForNextUpdate ( )
102
- . then ( ( ) => {
103
- expect ( result . current . mediaCapabilitiesInfo . powerEfficient ) . toEqual ( true ) ;
104
- expect ( result . current . mediaCapabilitiesInfo . smooth ) . toEqual ( true ) ;
105
- expect ( result . current . mediaCapabilitiesInfo . supported ) . toEqual ( true ) ;
106
-
107
- done ( ) ;
108
- } )
109
- . catch ( err => done ( err ) ) ;
110
- } ) ;
111
- } ) ;
112
- } ) ;
1
+ /*
2
+ * Copyright 2019 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the 'License');
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an 'AS IS' BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import 'babel-polyfill' ;
18
+ import { renderHook } from '@testing-library/react-hooks' ;
19
+
20
+ const mediaDecodingConfig = {
21
+ type : 'file' ,
22
+ audio : {
23
+ contentType : 'audio/mp3' ,
24
+ channels : 2 ,
25
+ bitrate : 132700 ,
26
+ samplerate : 5200
27
+ }
28
+ } ;
29
+
30
+ const mediaCapabilitiesMapper = {
31
+ 'audio/mp3' : {
32
+ powerEfficient : true ,
33
+ smooth : true ,
34
+ supported : true
35
+ }
36
+ } ;
37
+
38
+ describe ( 'useMediaCapabilitiesDecodingInfo' , ( ) => {
39
+ test ( 'should return supported flag on unsupported platforms' , ( ) => {
40
+ const { useMediaCapabilitiesDecodingInfo } = require ( './' ) ;
41
+ const { result } = renderHook ( ( ) => useMediaCapabilitiesDecodingInfo ( mediaDecodingConfig ) ) ;
42
+
43
+ expect ( result . current . supported ) . toEqual ( false ) ;
44
+ } ) ;
45
+
46
+ test ( 'should return supported flag on unsupported platforms and no config given' , ( ) => {
47
+ const { useMediaCapabilitiesDecodingInfo } = require ( './' ) ;
48
+ const { result } = renderHook ( ( ) => useMediaCapabilitiesDecodingInfo ( ) ) ;
49
+
50
+ expect ( result . current . supported ) . toEqual ( false ) ;
51
+ } ) ;
52
+
53
+ test ( 'should return initialMediaCapabilitiesInfo for unsupported' , ( ) => {
54
+ const initialMediaCapabilitiesInfo = {
55
+ supported : true ,
56
+ smooth : false ,
57
+ powerEfficient : true
58
+ } ;
59
+
60
+ const { useMediaCapabilitiesDecodingInfo } = require ( './' ) ;
61
+ const { result } = renderHook ( ( ) => useMediaCapabilitiesDecodingInfo ( mediaDecodingConfig , initialMediaCapabilitiesInfo ) ) ;
62
+
63
+ expect ( result . current . mediaCapabilitiesInfo . supported ) . toBe ( true ) ;
64
+ expect ( result . current . mediaCapabilitiesInfo . smooth ) . toEqual ( false ) ;
65
+ expect ( result . current . mediaCapabilitiesInfo . powerEfficient ) . toEqual ( true ) ;
66
+ } ) ;
67
+
68
+ test ( 'should return supported flag when no config given' , async ( ) => {
69
+ const originalError = console . error ;
70
+ console . error = jest . fn ( ) ;
71
+
72
+ const mockDecodingInfo = jest . fn ( ) . mockImplementation ( ( ) => Promise . resolve ( {
73
+ supported : true
74
+ } ) ) ;
75
+
76
+ global . navigator . mediaCapabilities = {
77
+ decodingInfo : mockDecodingInfo
78
+ } ;
79
+
80
+ const { useMediaCapabilitiesDecodingInfo } = require ( './' ) ;
81
+
82
+ try {
83
+ const { result, waitForNextUpdate } = renderHook ( ( ) => useMediaCapabilitiesDecodingInfo ( ) ) ;
84
+ await waitForNextUpdate ( ) ;
85
+
86
+ expect ( result . current . supported ) . toEqual ( true ) ;
87
+ } finally {
88
+ console . error = originalError ;
89
+ }
90
+ } ) ;
91
+
92
+ test ( 'should return mediaCapabilitiesInfo for given media configuration' , async ( ) => {
93
+ const originalError = console . error ;
94
+ console . error = jest . fn ( ) ;
95
+
96
+ const mockDecodingInfo = jest . fn ( ) . mockImplementation ( ( ) => Promise . resolve ( {
97
+ ...mediaCapabilitiesMapper [ mediaDecodingConfig . audio . contentType ]
98
+ } ) ) ;
99
+
100
+ global . navigator . mediaCapabilities = {
101
+ decodingInfo : mockDecodingInfo
102
+ } ;
103
+
104
+ const { useMediaCapabilitiesDecodingInfo } = require ( './' ) ;
105
+
106
+ try {
107
+ const { result, waitForNextUpdate } = renderHook ( ( ) => useMediaCapabilitiesDecodingInfo ( mediaDecodingConfig ) ) ;
108
+ await waitForNextUpdate ( ) ;
109
+
110
+ expect ( result . current . mediaCapabilitiesInfo . powerEfficient ) . toEqual ( true ) ;
111
+ expect ( result . current . mediaCapabilitiesInfo . smooth ) . toEqual ( true ) ;
112
+ expect ( result . current . mediaCapabilitiesInfo . supported ) . toEqual ( true ) ;
113
+ } finally {
114
+ console . error = originalError ;
115
+ }
116
+ } ) ;
117
+ } ) ;
0 commit comments