зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1507403
- Add more tests for clone before key evaluation; r=asuth
This commit is contained in:
Родитель
f0bd5e236c
Коммит
dd758d694a
|
@ -28,6 +28,7 @@ support-files =
|
|||
unit/test_blob_file_backed.js
|
||||
unit/test_blocked_order.js
|
||||
unit/test_clear.js
|
||||
unit/test_clone_before_key_evaluation.js
|
||||
unit/test_complex_keyPaths.js
|
||||
unit/test_constraint_error_messages.js
|
||||
unit/test_count.js
|
||||
|
@ -138,6 +139,7 @@ skip-if = e10s && os == 'win' && os_version == '6.1' # Bug 1342415
|
|||
[test_blocked_order.html]
|
||||
[test_bug937006.html]
|
||||
[test_clear.html]
|
||||
[test_clone_before_key_evaluation.html]
|
||||
[test_complex_keyPaths.html]
|
||||
[test_constraint_error_messages.html]
|
||||
[test_count.html]
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>Indexed Database Test</title>
|
||||
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
|
||||
<script type="text/javascript" src="unit/test_clone_before_key_evaluation.js"></script>
|
||||
<script type="text/javascript" src="helpers.js"></script>
|
||||
</head>
|
||||
|
||||
<body onload="runTest();"></body>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,131 @@
|
|||
/**
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
|
||||
var testGenerator = testSteps();
|
||||
|
||||
function* testSteps()
|
||||
{
|
||||
const name = this.window ? window.location.pathname
|
||||
: "test_clone_before_key_evaluation.js";
|
||||
const objectStoreInfo = {
|
||||
name: "customers",
|
||||
options: { keyPath: "ssn" },
|
||||
};
|
||||
const indexInfo = {
|
||||
name: "customerIndex",
|
||||
keyPath: ["id", "email", "name"],
|
||||
options: { unique: false },
|
||||
};
|
||||
|
||||
for (let test of [1, 2]) {
|
||||
info("Opening database");
|
||||
|
||||
let request = indexedDB.open(name);
|
||||
request.onerror = errorHandler;
|
||||
request.onupgradeneeded = continueToNextStepSync;
|
||||
request.onsuccess = unexpectedSuccessHandler;
|
||||
yield undefined;
|
||||
|
||||
// upgradeneeded
|
||||
|
||||
request.onupgradeneeded = unexpectedSuccessHandler;
|
||||
request.onsuccess = continueToNextStepSync;
|
||||
|
||||
let db = request.result;
|
||||
db.onerror = errorHandler;
|
||||
|
||||
info("Creating objectStore");
|
||||
|
||||
let objectStore = db.createObjectStore(objectStoreInfo.name,
|
||||
objectStoreInfo.options);
|
||||
|
||||
info("Creating index");
|
||||
|
||||
objectStore.createIndex(indexInfo.name,
|
||||
indexInfo.keyPath,
|
||||
indexInfo.options);
|
||||
|
||||
switch (test) {
|
||||
case 1: {
|
||||
info("Adding data with a getter");
|
||||
|
||||
let idCount = 0;
|
||||
|
||||
const customerData = {
|
||||
ssn: "444-44-4444", name: "Bill", age: 25, email: "bill@company.com",
|
||||
get id()
|
||||
{
|
||||
idCount++;
|
||||
objectStore.deleteIndex(indexInfo.name);
|
||||
return "ID_001";
|
||||
},
|
||||
};
|
||||
|
||||
objectStore.add(customerData);
|
||||
|
||||
ok(idCount == 1, "Getter was called only once");
|
||||
|
||||
ok(objectStore.indexNames.length == 0, "Index was removed");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 2: {
|
||||
info("Adding data with a prototype getter");
|
||||
|
||||
let idCount = 0;
|
||||
|
||||
const customerData = {
|
||||
ssn: "555-55-5555", name: "Joe", age: 52, email: "joe@company.com",
|
||||
};
|
||||
|
||||
Object.defineProperty(Object.prototype, "id", {
|
||||
get() {
|
||||
idCount++;
|
||||
objectStore.deleteIndex(indexInfo.name);
|
||||
return "ID_002";
|
||||
},
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
||||
|
||||
objectStore.add(customerData);
|
||||
|
||||
ok(idCount == 0, "Prototype getter was not called");
|
||||
|
||||
// Paranoid checks, just to be sure that the protype getter is called
|
||||
// in standard JS.
|
||||
|
||||
let id = customerData.id;
|
||||
|
||||
ok(id == "ID_002", "Prototype getter returned correct value");
|
||||
ok(idCount == 1, "Prototype getter was called only once");
|
||||
|
||||
delete Object.prototype.id;
|
||||
|
||||
id = customerData.id;
|
||||
|
||||
ok(id == undefined, "Prototype getter was removed");
|
||||
|
||||
ok(objectStore.indexNames.length == 0, "Index was removed");
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
yield undefined;
|
||||
|
||||
// success
|
||||
|
||||
db.close();
|
||||
|
||||
request = indexedDB.deleteDatabase(name);
|
||||
request.onerror = errorHandler;
|
||||
request.onsuccess = continueToNextStepSync;
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
finishTest();
|
||||
}
|
|
@ -11,6 +11,7 @@
|
|||
[test_autoIncrement_indexes.js]
|
||||
[test_blocked_order.js]
|
||||
[test_clear.js]
|
||||
[test_clone_before_key_evaluation.js]
|
||||
[test_complex_keyPaths.js]
|
||||
[test_count.js]
|
||||
[test_create_index.js]
|
||||
|
|
Загрузка…
Ссылка в новой задаче