getRandomValues.any.js (2584B)
1 // Step 1. 2 test(function() { 3 assert_throws_dom("TypeMismatchError", function() { 4 self.crypto.getRandomValues(new Float16Array(6)) 5 }, "Float16Array") 6 7 assert_throws_dom("TypeMismatchError", function() { 8 const len = 65536 / Float16Array.BYTES_PER_ELEMENT + 1; 9 self.crypto.getRandomValues(new Float16Array(len)); 10 }, "Float16Array (too long)") 11 }, "Float16 arrays"); 12 13 test(function() { 14 assert_throws_dom("TypeMismatchError", function() { 15 self.crypto.getRandomValues(new Float32Array(6)) 16 }, "Float32Array") 17 assert_throws_dom("TypeMismatchError", function() { 18 self.crypto.getRandomValues(new Float64Array(6)) 19 }, "Float64Array") 20 21 assert_throws_dom("TypeMismatchError", function() { 22 const len = 65536 / Float32Array.BYTES_PER_ELEMENT + 1; 23 self.crypto.getRandomValues(new Float32Array(len)); 24 }, "Float32Array (too long)") 25 assert_throws_dom("TypeMismatchError", function() { 26 const len = 65536 / Float64Array.BYTES_PER_ELEMENT + 1; 27 self.crypto.getRandomValues(new Float64Array(len)) 28 }, "Float64Array (too long)") 29 }, "Float arrays"); 30 31 test(function() { 32 assert_throws_dom("TypeMismatchError", function() { 33 self.crypto.getRandomValues(new DataView(new ArrayBuffer(6))) 34 }, "DataView") 35 36 assert_throws_dom("TypeMismatchError", function() { 37 self.crypto.getRandomValues(new DataView(new ArrayBuffer(65536 + 1))) 38 }, "DataView (too long)") 39 }, "DataView"); 40 41 const arrays = [ 42 'Int8Array', 43 'Int16Array', 44 'Int32Array', 45 'BigInt64Array', 46 'Uint8Array', 47 'Uint8ClampedArray', 48 'Uint16Array', 49 'Uint32Array', 50 'BigUint64Array', 51 ]; 52 53 for (const array of arrays) { 54 const ctor = globalThis[array]; 55 56 test(function() { 57 assert_equals(self.crypto.getRandomValues(new ctor(8)).constructor, 58 ctor, "crypto.getRandomValues(new " + array + "(8))") 59 }, "Integer array: " + array); 60 61 test(function() { 62 const maxlength = 65536 / ctor.BYTES_PER_ELEMENT; 63 assert_throws_quotaexceedederror(() => { 64 self.crypto.getRandomValues(new ctor(maxlength + 1)); 65 }, null, null, "crypto.getRandomValues length over 65536"); 66 }, "Large length: " + array); 67 68 test(function() { 69 assert_true(self.crypto.getRandomValues(new ctor(0)).length == 0) 70 }, "Null arrays: " + array); 71 72 test(function() { 73 class Buffer extends ctor {} 74 // Must not throw for the test to pass 75 self.crypto.getRandomValues(new Buffer(256)); 76 }, "Subclass of " + array); 77 }