1// Step 1. 2test(function() { 3 assert_throws_dom("TypeMismatchError", function() { 4 self.crypto.getRandomValues(new Float32Array(6)) 5 }, "Float32Array") 6 assert_throws_dom("TypeMismatchError", function() { 7 self.crypto.getRandomValues(new Float64Array(6)) 8 }, "Float64Array") 9 10 assert_throws_dom("TypeMismatchError", function() { 11 const len = 65536 / Float32Array.BYTES_PER_ELEMENT + 1; 12 self.crypto.getRandomValues(new Float32Array(len)); 13 }, "Float32Array (too long)") 14 assert_throws_dom("TypeMismatchError", function() { 15 const len = 65536 / Float64Array.BYTES_PER_ELEMENT + 1; 16 self.crypto.getRandomValues(new Float64Array(len)) 17 }, "Float64Array (too long)") 18}, "Float arrays"); 19 20test(function() { 21 assert_throws_dom("TypeMismatchError", function() { 22 self.crypto.getRandomValues(new DataView(new ArrayBuffer(6))) 23 }, "DataView") 24 25 assert_throws_dom("TypeMismatchError", function() { 26 self.crypto.getRandomValues(new DataView(new ArrayBuffer(65536 + 1))) 27 }, "DataView (too long)") 28}, "DataView"); 29 30const arrays = [ 31 'Int8Array', 32 'Int16Array', 33 'Int32Array', 34 'BigInt64Array', 35 'Uint8Array', 36 'Uint8ClampedArray', 37 'Uint16Array', 38 'Uint32Array', 39 'BigUint64Array', 40]; 41 42for (const array of arrays) { 43 const ctor = globalThis[array]; 44 45 test(function() { 46 assert_equals(self.crypto.getRandomValues(new ctor(8)).constructor, 47 ctor, "crypto.getRandomValues(new " + array + "(8))") 48 }, "Integer array: " + array); 49 50 test(function() { 51 const maxlength = 65536 / ctor.BYTES_PER_ELEMENT; 52 assert_throws_dom("QuotaExceededError", function() { 53 self.crypto.getRandomValues(new ctor(maxlength + 1)) 54 }, "crypto.getRandomValues length over 65536") 55 }, "Large length: " + array); 56 57 test(function() { 58 assert_true(self.crypto.getRandomValues(new ctor(0)).length == 0) 59 }, "Null arrays: " + array); 60} 61