summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/WebCryptoAPI/getRandomValues.any.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--testing/web-platform/tests/WebCryptoAPI/getRandomValues.any.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/testing/web-platform/tests/WebCryptoAPI/getRandomValues.any.js b/testing/web-platform/tests/WebCryptoAPI/getRandomValues.any.js
new file mode 100644
index 0000000000..1a3370ea13
--- /dev/null
+++ b/testing/web-platform/tests/WebCryptoAPI/getRandomValues.any.js
@@ -0,0 +1,60 @@
+// Step 1.
+test(function() {
+ assert_throws_dom("TypeMismatchError", function() {
+ self.crypto.getRandomValues(new Float32Array(6))
+ }, "Float32Array")
+ assert_throws_dom("TypeMismatchError", function() {
+ self.crypto.getRandomValues(new Float64Array(6))
+ }, "Float64Array")
+
+ assert_throws_dom("TypeMismatchError", function() {
+ const len = 65536 / Float32Array.BYTES_PER_ELEMENT + 1;
+ self.crypto.getRandomValues(new Float32Array(len));
+ }, "Float32Array (too long)")
+ assert_throws_dom("TypeMismatchError", function() {
+ const len = 65536 / Float64Array.BYTES_PER_ELEMENT + 1;
+ self.crypto.getRandomValues(new Float64Array(len))
+ }, "Float64Array (too long)")
+}, "Float arrays");
+
+test(function() {
+ assert_throws_dom("TypeMismatchError", function() {
+ self.crypto.getRandomValues(new DataView(new ArrayBuffer(6)))
+ }, "DataView")
+
+ assert_throws_dom("TypeMismatchError", function() {
+ self.crypto.getRandomValues(new DataView(new ArrayBuffer(65536 + 1)))
+ }, "DataView (too long)")
+}, "DataView");
+
+const arrays = [
+ 'Int8Array',
+ 'Int16Array',
+ 'Int32Array',
+ 'BigInt64Array',
+ 'Uint8Array',
+ 'Uint8ClampedArray',
+ 'Uint16Array',
+ 'Uint32Array',
+ 'BigUint64Array',
+];
+
+for (const array of arrays) {
+ const ctor = globalThis[array];
+
+ test(function() {
+ assert_equals(self.crypto.getRandomValues(new ctor(8)).constructor,
+ ctor, "crypto.getRandomValues(new " + array + "(8))")
+ }, "Integer array: " + array);
+
+ test(function() {
+ const maxlength = 65536 / ctor.BYTES_PER_ELEMENT;
+ assert_throws_dom("QuotaExceededError", function() {
+ self.crypto.getRandomValues(new ctor(maxlength + 1))
+ }, "crypto.getRandomValues length over 65536")
+ }, "Large length: " + array);
+
+ test(function() {
+ assert_true(self.crypto.getRandomValues(new ctor(0)).length == 0)
+ }, "Null arrays: " + array);
+}