Revision 9e22798642f4ea03f1872ab1c85c0179b72c5c95 authored by Robert Ma on 21 March 2018, 17:35:46 UTC, committed by Robert Ma on 22 March 2018, 19:02:24 UTC
1. Check the HTTP port of wptserve instead of HTTPS to avoid the
   unnecessary complexities of setting up SSL context (which may fail in
   some environments).
2. Use exponential backoff when waiting for wptserve and specify a
   maximum retry to avoid indefinite hang.
3. Use `terminate` instead of `kill` to give wptserve a chance to clean
   up, which is especially useful when running locally.

WPTServe.url still returns a HTTPS URL to make sure tests that require
secure context (e.g. service workers) still work.
1 parent dbb38a6
Raw File
key_valid.html
<!DOCTYPE html>
<!-- Submitted from TestTWF Paris -->
<meta charset=utf-8">
<meta name="timeout" content="long">
<title>Valid key</title>
<link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#key-construct">
<link rel=assert title="A value is said to be a valid key if it is one of the following types: Array JavaScript objects [ECMA-262], DOMString [WEBIDL], Date [ECMA-262] or float [WEBIDL]. However Arrays are only valid keys if every item in the array is defined and is a valid key (i.e. sparse arrays can not be valid keys) and if the Array doesn't directly or indirectly contain itself. Any non-numeric properties are ignored, and thus does not affect whether the Array is a valid key. Additionally, if the value is of type float, it is only a valid key if it is not NaN, and if the value is of type Date it is only a valid key if its [[PrimitiveValue]] internal property, as defined by [ECMA-262], is not NaN. Conforming user agents must support all valid keys as keys.">
<link rel=author href="mailto:batifon@yahoo.fr" title="Baptiste Fontaine">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=support.js></script>

<script>
    function valid_key(desc, key) {
        var db;
        var t = async_test(document.title + " - " + desc);
        var open_rq = createdb(t);

        open_rq.onupgradeneeded = function(e) {
            db = e.target.result;

            store = db.createObjectStore("store");
            assert_true(store.add('value', key) instanceof IDBRequest);

            store2 = db.createObjectStore("store2", { keyPath: ["x", "keypath"] });
            assert_true(store2.add({ x: 'v', keypath: key }) instanceof IDBRequest);
        };
        open_rq.onsuccess = function(e) {
            var rq = db.transaction("store")
                       .objectStore("store")
                       .get(key)
            rq.onsuccess = t.step_func(function(e) {
                assert_equals(e.target.result, 'value')
                var rq = db.transaction("store2")
                           .objectStore("store2")
                           .get(['v', key])
                rq.onsuccess = t.step_func(function(e) {
                    assert_equals(e.target.result.x, 'v');
                    assert_key_equals(e.target.result.keypath, key);
                    t.done()
                })
            })
        }
    }

    // Date
    valid_key( 'new Date()'    , new Date() );
    valid_key( 'new Date(0)'   , new Date(0) );

    // Array
    valid_key( '[]'            , [] );
    valid_key( 'new Array()'   , new Array() );

    valid_key( '["undefined"]' , ['undefined'] );

    // Float
    valid_key( 'Infinity'      , Infinity );
    valid_key( '-Infinity'     , -Infinity );
    valid_key( '0'             , 0 );
    valid_key( '1.5'           , 1.5 );
    valid_key( '3e38'          , 3e38 );
    valid_key( '3e-38'         , 3e38 );

    // String
    valid_key( '"foo"'         , "foo" );
    valid_key( '"\\n"'         , "\n" );
    valid_key( '""'            , "" );
    valid_key( '"\\""'         , "\"" );
    valid_key( '"\\u1234"'     , "\u1234" );
    valid_key( '"\\u0000"'     , "\u0000" );
    valid_key( '"NaN"'         , "NaN" );

</script>

<div id=log></div>
back to top