tor-browser

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

testSymbol.cpp (2315B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #include "js/Symbol.h"
      6 #include "jsapi-tests/tests.h"
      7 
      8 BEGIN_TEST(testSymbol_New) {
      9  using namespace JS;
     10 
     11  RootedString desc(cx, nullptr);
     12  RootedSymbol sym1(cx);
     13  CHECK(sym1 = NewSymbol(cx, desc));
     14  CHECK_NULL(GetSymbolDescription(sym1));
     15  RootedValue v(cx, SymbolValue(sym1));
     16  CHECK_EQUAL(JS_TypeOfValue(cx, v), JSTYPE_SYMBOL);
     17 
     18  RootedSymbol sym2(cx);
     19  CHECK(sym2 = NewSymbol(cx, desc));
     20  CHECK(sym1 != sym2);
     21 
     22  CHECK(desc = JS_NewStringCopyZ(cx, "ponies"));
     23  CHECK(sym2 = NewSymbol(cx, desc));
     24  CHECK_SAME(StringValue(GetSymbolDescription(sym2)), StringValue(desc));
     25 
     26  return true;
     27 }
     28 END_TEST(testSymbol_New)
     29 
     30 BEGIN_TEST(testSymbol_GetSymbolFor) {
     31  using namespace JS;
     32 
     33  RootedString desc(cx, JS_NewStringCopyZ(cx, "ponies"));
     34  CHECK(desc);
     35  RootedSymbol sym1(cx);
     36  CHECK(sym1 = GetSymbolFor(cx, desc));
     37  CHECK_SAME(StringValue(GetSymbolDescription(sym1)), StringValue(desc));
     38 
     39  // Calling JS::GetSymbolFor again with the same arguments produces the
     40  // same Symbol.
     41  RootedSymbol sym2(cx);
     42  CHECK(sym2 = GetSymbolFor(cx, desc));
     43  CHECK_EQUAL(sym1, sym2);
     44 
     45  // Passing a new but equal string also produces the same Symbol.
     46  CHECK(desc = JS_NewStringCopyZ(cx, "ponies"));
     47  CHECK(sym2 = GetSymbolFor(cx, desc));
     48  CHECK_EQUAL(sym1, sym2);
     49 
     50  // But SymbolNew always produces a new distinct Symbol.
     51  CHECK(sym2 = NewSymbol(cx, desc));
     52  CHECK(sym2 != sym1);
     53 
     54  return true;
     55 }
     56 END_TEST(testSymbol_GetSymbolFor)
     57 
     58 BEGIN_TEST(testSymbol_GetWellKnownSymbol) {
     59  using namespace JS;
     60 
     61  Rooted<Symbol*> sym1(cx);
     62  CHECK(sym1 = GetWellKnownSymbol(cx, SymbolCode::iterator));
     63  RootedValue v(cx);
     64  EVAL("Symbol.iterator", &v);
     65  CHECK_SAME(v, SymbolValue(sym1));
     66 
     67  // The description of a well-known symbol is as specified.
     68  RootedString desc(cx);
     69  CHECK(desc = JS_NewStringCopyZ(cx, "Symbol.iterator"));
     70  CHECK_SAME(StringValue(GetSymbolDescription(sym1)), StringValue(desc));
     71 
     72  // GetSymbolFor never returns a well-known symbol.
     73  Rooted<Symbol*> sym2(cx);
     74  CHECK(sym2 = GetSymbolFor(cx, desc));
     75  CHECK(sym2 != sym1);
     76 
     77  return true;
     78 }
     79 END_TEST(testSymbol_GetWellKnownSymbol)