Html程序  |  186行  |  5.77 KB

<html>
<head>
<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
<script src="../../fast/js/resources/js-test-pre.js"></script>
<script src="../../fast/js/resources/js-test-post-function.js"></script>
<script src="resources/shared.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>

description("Test IndexedDB's KeyRange.");
if (window.layoutTestController)
    layoutTestController.waitUntilDone();

function checkSingleKeyRange(value)
{
    keyRange = evalAndLog("webkitIDBKeyRange.only(" + value + ")");
    shouldBe("keyRange.lower", "" + value);
    shouldBe("keyRange.upper", "" + value);
    shouldBeFalse("keyRange.lowerOpen");
    shouldBeFalse("keyRange.upperOpen");
}

function checkLowerBoundKeyRange(value, open)
{
    keyRange = evalAndLog("webkitIDBKeyRange.lowerBound(" + value + "," + open + ")");
    shouldBe("keyRange.lower", "" + value);
    if (open === undefined)
        open = false;
    shouldBe("keyRange.lowerOpen", "" + open);
    shouldBeNull("keyRange.upper");
    shouldBeFalse("keyRange.upperOpen");
}

function checkUpperBoundKeyRange(value, open)
{
    keyRange = evalAndLog("webkitIDBKeyRange.upperBound(" + value + "," + open + ")");
    shouldBe("keyRange.upper", "" + value);
    if (open === undefined)
        open = false;
    shouldBe("keyRange.upperOpen", "" + open);
    shouldBeNull("keyRange.lower");
    shouldBeFalse("keyRange.lowerOpen");
}

function checkBoundKeyRange(lower, upper, lowerOpen, upperOpen)
{
    keyRange = evalAndLog("webkitIDBKeyRange.bound(" + lower + "," + upper + ", " + lowerOpen + ", " + upperOpen + ")");
    shouldBe("keyRange.lower", "" + lower);
    shouldBe("keyRange.upper", "" + upper);
    if (lowerOpen === undefined)
        lowerOpen = false;
    if (upperOpen === undefined)
        upperOpen = false;
    shouldBe("keyRange.lowerOpen", "" + lowerOpen);
    shouldBe("keyRange.upperOpen", "" + upperOpen);
}

function test()
{
    shouldBeFalse("'lower' in webkitIDBKeyRange");
    shouldBeFalse("'upper' in webkitIDBKeyRange");
    shouldBeFalse("'lowerOpen' in webkitIDBKeyRange");
    shouldBeFalse("'upperOpen' in webkitIDBKeyRange");
    shouldBeTrue("'only' in webkitIDBKeyRange");
    shouldBeTrue("'lowerBound' in webkitIDBKeyRange");
    shouldBeTrue("'upperBound' in webkitIDBKeyRange");
    shouldBeTrue("'bound' in webkitIDBKeyRange");

    debug("");

    var instance = evalAndLog("instance = webkitIDBKeyRange.only(1)");
    shouldBeTrue("'lower' in instance");
    shouldBeTrue("'upper' in instance");
    shouldBeTrue("'lowerOpen' in instance");
    shouldBeTrue("'upperOpen' in instance");
    shouldBeFalse("'only' in instance");
    shouldBeFalse("'lowerBound' in instance");
    shouldBeFalse("'upperBound' in instance");
    shouldBeFalse("'bound' in instance");

    debug("");

    checkSingleKeyRange(1);
    checkSingleKeyRange(3.14);
    checkSingleKeyRange("'a'");

    checkLowerBoundKeyRange(10, true);
    checkLowerBoundKeyRange(11, false);
    checkLowerBoundKeyRange(12);
    checkLowerBoundKeyRange(10.1, true);
    checkLowerBoundKeyRange(11.2, false);
    checkLowerBoundKeyRange(12.3);
    checkLowerBoundKeyRange("'aa'", true);
    checkLowerBoundKeyRange("'ab'", false);
    checkLowerBoundKeyRange("'ac'");

    checkUpperBoundKeyRange(20, true);
    checkUpperBoundKeyRange(21, false);
    checkUpperBoundKeyRange(22);
    checkUpperBoundKeyRange(20.2, true);
    checkUpperBoundKeyRange(21.3, false);
    checkUpperBoundKeyRange(22.4);
    checkUpperBoundKeyRange("'ba'", true);
    checkUpperBoundKeyRange("'bb'", false);
    checkUpperBoundKeyRange("'bc'");

    checkBoundKeyRange(30, 40);
    checkBoundKeyRange(31, 41, false, false);
    checkBoundKeyRange(32, 42, false, true);
    checkBoundKeyRange(33, 43, true, false);
    checkBoundKeyRange(34, 44, true, true);

    checkBoundKeyRange(30.1, 40.2);
    checkBoundKeyRange(31.3, 41.4, false, false);
    checkBoundKeyRange(32.5, 42.6, false, true);
    checkBoundKeyRange(33.7, 43.8, true, false);
    checkBoundKeyRange(34.9, 44.0, true, true);

    checkBoundKeyRange("'aaa'", "'aba'", false, false);
    checkBoundKeyRange("'aab'", "'abb'");
    checkBoundKeyRange("'aac'", "'abc'", false, false);
    checkBoundKeyRange("'aad'", "'abd'", false, true);
    checkBoundKeyRange("'aae'", "'abe'", true, false);
    checkBoundKeyRange("'aaf'", "'abf'", true, true);

    try {
        debug("Passing an invalid key into only([])");
        webkitIDBKeyRange.only([]);
        testFailed("No exception thrown");
    } catch (e) {
        testPassed("Caught exception: " + e.toString());
    }

    try {
        debug("Passing an invalid key into upperBound([])");
        webkitIDBKeyRange.upperBound([]);
        testFailed("No exception thrown");
    } catch (e) {
        testPassed("Caught exception: " + e.toString());
    }
 
    try {
        debug("Passing an invalid key into lowerBound([])");
        webkitIDBKeyRange.lowerBound([]);
        testFailed("No exception thrown");
    } catch (e) {
        testPassed("Caught exception: " + e.toString());
    }

    try {
        debug("Passing an invalid key into bound(null, [])");
        webkitIDBKeyRange.bound(null, []);
        testFailed("No exception thrown");
    } catch (e) {
        testPassed("Caught exception: " + e.toString());
    }

    try {
        debug("Passing an invalid key into bound([],null)");
        webkitIDBKeyRange.bound([], null);
        testFailed("No exception thrown");
    } catch (e) {
        testPassed("Caught exception: " + e.toString());
    }

    try {
        debug("Passing an invalid key into bound([], [])");
        webkitIDBKeyRange.bound([], []);
        testFailed("No exception thrown");
    } catch (e) {
        testPassed("Caught exception: " + e.toString());
    }
}

test();

var successfullyParsed = true;
done();

</script>
</body>
</html>