Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  value.any.js   Sprache: JAVA

 

// META: global=window,worker
// META: title=IndexedDB: keys and values
// META: script=resources/support.js
// @author Odin Hørthe Omdal <mailto:odinho@opera.com>
'use strict';


function setOnUpgradeNeeded(t, predicate, _instanceof, value) {
  createdb(t).onupgradeneeded = t.step_func(e => {
    const db = e.target.result;
    const store = db.createObjectStore("store");
    store.add(value, 1);

    e.target.onsuccess = t.step_func(e => {
      const transaction = db.transaction("store", "readonly");
      const objectStore = transaction.objectStore("store");
      objectStore.get(1).onsuccess = t.step_func(e => {
        if (predicate) {
          assert_true(predicate(e.target.result),
            "Predicate should return true for the deserialized result.");
        } else if (_instanceof) {
          assert_true(e.target.result instanceof _instanceof, "instanceof");
        }
        t.done();
      });
    });
  });
}

// BigInt and BigInt objects are supported in serialization, per
// https://github.com/whatwg/html/pull/3480
// This support allows them to be used as IndexedDB values.

function value_test(value, predicate, name) {
  async_test(t => {
    t.step(function () {
      assert_true(predicate(value),
        "Predicate should return true for the initial value.");
    });

    setOnUpgradeNeeded(t, predicate, null, value);
  }, "BigInts as values in IndexedDB - " + name);
}

value_test(1n,
  x => x === 1n,
  "primitive BigInt");
value_test(Object(1n),
  x => typeof x === 'object' &&
    x instanceof BigInt &&
    x.valueOf() === 1n,
  "BigInt object");
value_test({ val: 1n },
  x => x.val === 1n,
  "primitive BigInt inside object");
value_test({ val: Object(1n) },
  x => x.val.valueOf() === 1n &&
    x.val instanceof BigInt &&
    x.val.valueOf() === 1n,
  "BigInt object inside object");

// However, BigInt is not supported as an IndexedDB key; support
// has been proposed in the following PR, but that change has not
// landed at the time this patch was written
// https://github.com/w3c/IndexedDB/pull/231

function invalidKey(key, name) {
  test(t => {
    assert_throws_dom("DataError", () => indexedDB.cmp(0, key));
  }, "BigInts as keys in IndexedDB - " + name);
}

invalidKey(1n, "primitive BigInt");
// Still an error even if the IndexedDB patch lands
invalidKey(Object(1n), "BigInt object");

function value(value, _instanceof) {
  async_test(t => {
    t.step(function () {
      assert_true(value instanceof _instanceof, "TEST ERROR, instanceof");
    });

    setOnUpgradeNeeded(t, null, _instanceof, value);
  }, "Values - " + _instanceof.name);
}

value(new Date(), Date);
value(new Array(), Array);

Messung
CHZG
849910094

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet am  2026-11-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

Aktuelles
Motto des Tages

Open Source Software


Jenseits des Üblichen

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1102655
#Domains=556646