tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

option-coercion.js (1848B)


      1 // |reftest| skip-if(!Uint8Array.fromBase64) -- uint8array-base64 is not enabled unconditionally
      2 // Copyright (C) 2024 Kevin Gibbons. All rights reserved.
      3 // This code is governed by the BSD license found in the LICENSE file.
      4 /*---
      5 esid: sec-uint8array.frombase64
      6 description: Uint8Array.fromBase64 triggers effects of the "alphabet" and "lastChunkHandling" getters, but does not perform toString on the results
      7 includes: [compareArray.js]
      8 features: [uint8array-base64, TypedArray]
      9 ---*/
     10 
     11 assert.throws(TypeError, function() {
     12  Uint8Array.fromBase64("Zg==", { alphabet: Object("base64") });
     13 });
     14 
     15 assert.throws(TypeError, function() {
     16  Uint8Array.fromBase64("Zg==", { lastChunkHandling: Object("loose") });
     17 });
     18 
     19 
     20 var toStringCalls = 0;
     21 var throwyToString = {
     22  toString: function() {
     23    toStringCalls += 1;
     24    throw new Test262Error("toString called");
     25  }
     26 };
     27 assert.throws(TypeError, function() {
     28  Uint8Array.fromBase64("Zg==", { alphabet: throwyToString });
     29 });
     30 assert.sameValue(toStringCalls, 0);
     31 
     32 assert.throws(TypeError, function() {
     33  Uint8Array.fromBase64("Zg==", { lastChunkHandling: throwyToString });
     34 });
     35 assert.sameValue(toStringCalls, 0);
     36 
     37 
     38 var alphabetAccesses = 0;
     39 var base64UrlOptions = {};
     40 Object.defineProperty(base64UrlOptions, "alphabet", {
     41  get: function() {
     42    alphabetAccesses += 1;
     43    return "base64url";
     44  }
     45 });
     46 var arr = Uint8Array.fromBase64("x-_y", base64UrlOptions);
     47 assert.compareArray(arr, [199, 239, 242]);
     48 assert.sameValue(alphabetAccesses, 1);
     49 
     50 var lastChunkHandlingAccesses = 0;
     51 var strictOptions = {};
     52 Object.defineProperty(strictOptions, "lastChunkHandling", {
     53  get: function() {
     54    lastChunkHandlingAccesses += 1;
     55    return "strict";
     56  }
     57 });
     58 var arr = Uint8Array.fromBase64("Zg==", strictOptions);
     59 assert.compareArray(arr, [102]);
     60 assert.sameValue(lastChunkHandlingAccesses, 1);
     61 
     62 reportCompare(0, 0);