MediaStreamTrack-applyConstraints-reject.https.html (3306B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="/resources/testdriver.js"></script> 5 <script src="/resources/testdriver-vendor.js"></script> 6 <script src="/mediacapture-image/resources/imagecapture-helpers.js"></script> 7 <script> 8 9 // This test verifies that MediaStreamTrack.applyConstraints() rejects if any 10 // passed constraint is unsupported or outside its allowed range. 11 var makePromiseTest = function(getConstraint) { 12 image_capture_test(async (t, imageCaptureTest) => { 13 await test_driver.set_permission({name: 'camera', panTiltZoom: true}, 14 'granted'); 15 16 imageCaptureTest.mockImageCapture().state().supportsTorch = false; 17 18 let stream = await navigator.mediaDevices.getUserMedia({video: true}); 19 let videoTrack = stream.getVideoTracks()[0]; 20 21 const constraint = getConstraint(imageCaptureTest.mockImageCapture().state()); 22 try { 23 await videoTrack.applyConstraints(constraint); 24 assert_unreached('expected applyConstraints to reject'); 25 } catch (error) { 26 assert_equals(error.name, 'OverconstrainedError'); 27 assert_equals(error.constraint, Object.keys(constraint)[0]); 28 } 29 }); 30 }; 31 32 const constraintGenerators = [ 33 capabilities => ({ whiteBalanceMode: { exact: 'manual' } }), 34 capabilities => ({ exposureMode: { exact: 'none' } }), 35 capabilities => ({ focusMode: { exact: 'continuous' } }), 36 capabilities => ({ 37 exposureCompensation: { exact: capabilities.exposureCompensation.max + 1 } 38 }), 39 capabilities => ({ 40 exposureCompensation: { exact: capabilities.exposureCompensation.min - 1 } 41 }), 42 capabilities => ({ 43 colorTemperature: { exact: capabilities.colorTemperature.max + 1 } 44 }), 45 capabilities => ({ 46 colorTemperature: { exact: capabilities.colorTemperature.min - 1 } 47 }), 48 capabilities => ({ iso: { exact: capabilities.iso.max + 1 } }), 49 capabilities => ({ iso: { exact: capabilities.iso.min - 1 } }), 50 capabilities => ({ brightness: { exact: capabilities.brightness.max + 1 } }), 51 capabilities => ({ brightness: { exact: capabilities.brightness.min - 1 } }), 52 capabilities => ({ contrast: { exact: capabilities.contrast.max + 1 } }), 53 capabilities => ({ contrast: { exact: capabilities.contrast.min - 1 } }), 54 capabilities => ({ saturation: { exact: capabilities.saturation.max + 1 } }), 55 capabilities => ({ saturation: { exact: capabilities.saturation.min - 1 } }), 56 capabilities => ({ sharpness: { exact: capabilities.sharpness.max + 1 } }), 57 capabilities => ({ sharpness: { exact: capabilities.sharpness.min - 1 } }), 58 capabilities => ({ pan: { exact: capabilities.pan.max + 1 } }), 59 capabilities => ({ pan: { exact: capabilities.pan.min - 1 } }), 60 capabilities => ({ tilt: { exact: capabilities.tilt.max + 1 } }), 61 capabilities => ({ tilt: { exact: capabilities.tilt.min - 1 } }), 62 capabilities => ({ zoom: { exact: capabilities.zoom.max + 1 } }), 63 capabilities => ({ zoom: { exact: capabilities.zoom.min - 1 } }), 64 capabilities => ({ torch: { exact: true } }), 65 ]; 66 67 for (key in constraintGenerators) { 68 generate_tests( 69 makePromiseTest, [[ 70 'MediaStreamTrack.applyConstraints(constraints) rejects with bad' + 71 ' constraints, #' + key, 72 constraintGenerators[key] 73 ]]); 74 } 75 76 </script>